Function: mergeModelMetadata()
Makaio Framework / services-core / mergeModelMetadata
Function: mergeModelMetadata()
Section titled “Function: mergeModelMetadata()”mergeModelMetadata(
baseMetadata,overlayMetadata): {capabilities?: {parallelToolCalls?:boolean;pdfUpload?:boolean;speechToText?: {modes: ("batch"|"streaming")[];vocabularyBiasing?:boolean; };structuredOutput?:boolean;textToSpeech?: {modes: ("streaming"|"buffered")[];outputFormats?:string[];voiceInstructions?:boolean;voiceSelection?:boolean; };toolCalling?:boolean;vision?:boolean; };description?:string;includedInSubscription?:boolean;maxOutputTokens?:number;pricing?: {request?: {multiplier:number; };token?: {cacheWritePerMillion?:number;inputCachedPerMillion?:number;inputPerMillion:number;outputPerMillion:number; }; }; } |undefined
Defined in: ../../../packages/services/core/src/model-registry/merge-utils.ts:81
Merge model metadata with block-level replacement and defensive clone semantics.
Top-level metadata fields merge field-by-field. When an overlay supplies
capabilities or pricing, that whole block replaces the base block.
Returned metadata is structurally independent from both inputs.
Parameters
Section titled “Parameters”baseMetadata
Section titled “baseMetadata”{ capabilities?: { parallelToolCalls?: boolean; pdfUpload?: boolean; speechToText?: { modes: ("batch" | "streaming")[]; vocabularyBiasing?: boolean; }; structuredOutput?: boolean; textToSpeech?: { modes: ("streaming" | "buffered")[]; outputFormats?: string[]; voiceInstructions?: boolean; voiceSelection?: boolean; }; toolCalling?: boolean; vision?: boolean; }; description?: string; includedInSubscription?: boolean; maxOutputTokens?: number; pricing?: { request?: { multiplier: number; }; token?: { cacheWritePerMillion?: number; inputCachedPerMillion?: number; inputPerMillion: number; outputPerMillion: number; }; }; } | undefined
Metadata supplied by the base model.
Type Literal
Section titled “Type Literal”{ capabilities?: { parallelToolCalls?: boolean; pdfUpload?: boolean; speechToText?: { modes: ("batch" | "streaming")[]; vocabularyBiasing?: boolean; }; structuredOutput?: boolean; textToSpeech?: { modes: ("streaming" | "buffered")[]; outputFormats?: string[]; voiceInstructions?: boolean; voiceSelection?: boolean; }; toolCalling?: boolean; vision?: boolean; }; description?: string; includedInSubscription?: boolean; maxOutputTokens?: number; pricing?: { request?: { multiplier: number; }; token?: { cacheWritePerMillion?: number; inputCachedPerMillion?: number; inputPerMillion: number; outputPerMillion: number; }; }; }
Metadata supplied by the base model.
capabilities?
Section titled “capabilities?”{ parallelToolCalls?: boolean; pdfUpload?: boolean; speechToText?: { modes: ("batch" | "streaming")[]; vocabularyBiasing?: boolean; }; structuredOutput?: boolean; textToSpeech?: { modes: ("streaming" | "buffered")[]; outputFormats?: string[]; voiceInstructions?: boolean; voiceSelection?: boolean; }; toolCalling?: boolean; vision?: boolean; } = ...
Provider-scoped capabilities for this model offering.
capabilities.parallelToolCalls?
Section titled “capabilities.parallelToolCalls?”boolean = ...
Whether multiple tool calls can be issued in a single turn.
capabilities.pdfUpload?
Section titled “capabilities.pdfUpload?”boolean = ...
Whether the provider accepts PDF file uploads.
capabilities.speechToText?
Section titled “capabilities.speechToText?”{ modes: ("batch" | "streaming")[]; vocabularyBiasing?: boolean; } = ...
Speech-to-text capability descriptor.
capabilities.speechToText.modes
Section titled “capabilities.speechToText.modes”("batch" | "streaming")[] = ...
Supported transcription modes.
capabilities.speechToText.vocabularyBiasing?
Section titled “capabilities.speechToText.vocabularyBiasing?”boolean = ...
Whether the model supports vocabulary/terminology biasing. Optional by design because model metadata can be partial, unlike provider runtime capabilities.
capabilities.structuredOutput?
Section titled “capabilities.structuredOutput?”boolean = ...
Whether the provider supports structured (JSON schema) output.
capabilities.textToSpeech?
Section titled “capabilities.textToSpeech?”{ modes: ("streaming" | "buffered")[]; outputFormats?: string[]; voiceInstructions?: boolean; voiceSelection?: boolean; } = ...
Text-to-speech capability descriptor.
capabilities.textToSpeech.modes
Section titled “capabilities.textToSpeech.modes”("streaming" | "buffered")[] = ...
Supported synthesis modes.
capabilities.textToSpeech.outputFormats?
Section titled “capabilities.textToSpeech.outputFormats?”string[] = ...
Supported output audio formats. Optional because metadata may omit it.
capabilities.textToSpeech.voiceInstructions?
Section titled “capabilities.textToSpeech.voiceInstructions?”boolean = ...
Whether the model supports style/tone instructions (e.g., gpt-4o-mini-tts). Optional because metadata may omit it.
capabilities.textToSpeech.voiceSelection?
Section titled “capabilities.textToSpeech.voiceSelection?”boolean = ...
Whether the user can select a voice preset. Optional because model metadata may omit it.
capabilities.toolCalling?
Section titled “capabilities.toolCalling?”boolean = ...
Whether the provider’s API supports tool/function calling.
capabilities.vision?
Section titled “capabilities.vision?”boolean = ...
Whether the model accepts image inputs.
description?
Section titled “description?”string = ...
Optional description of the model *
includedInSubscription?
Section titled “includedInSubscription?”boolean = ...
Whether this model is included in the provider’s subscription plan.
maxOutputTokens?
Section titled “maxOutputTokens?”number = ...
Maximum output tokens the provider allows for this model.
pricing?
Section titled “pricing?”{ request?: { multiplier: number; }; token?: { cacheWritePerMillion?: number; inputCachedPerMillion?: number; inputPerMillion: number; outputPerMillion: number; }; } = ...
Token pricing for this model offering.
pricing.request?
Section titled “pricing.request?”{ multiplier: number; } = ...
Per-request pricing (GitHub Copilot premium requests, etc.).
pricing.request.multiplier
Section titled “pricing.request.multiplier”number = ...
Cost per request in provider billing units (0 = free).
pricing.token?
Section titled “pricing.token?”{ cacheWritePerMillion?: number; inputCachedPerMillion?: number; inputPerMillion: number; outputPerMillion: number; } = ...
Per-token pricing (Anthropic direct, OpenAI direct, etc.).
pricing.token.cacheWritePerMillion?
Section titled “pricing.token.cacheWritePerMillion?”number = ...
Cost per million cache-write input tokens (USD).
pricing.token.inputCachedPerMillion?
Section titled “pricing.token.inputCachedPerMillion?”number = ...
Cost per million cache-read input tokens (USD).
pricing.token.inputPerMillion
Section titled “pricing.token.inputPerMillion”number = ...
Cost per million input tokens (USD).
pricing.token.outputPerMillion
Section titled “pricing.token.outputPerMillion”number = ...
Cost per million output tokens (USD).
undefined
overlayMetadata
Section titled “overlayMetadata”{ capabilities?: { parallelToolCalls?: boolean; pdfUpload?: boolean; speechToText?: { modes: ("batch" | "streaming")[]; vocabularyBiasing?: boolean; }; structuredOutput?: boolean; textToSpeech?: { modes: ("streaming" | "buffered")[]; outputFormats?: string[]; voiceInstructions?: boolean; voiceSelection?: boolean; }; toolCalling?: boolean; vision?: boolean; }; description?: string; includedInSubscription?: boolean; maxOutputTokens?: number; pricing?: { request?: { multiplier: number; }; token?: { cacheWritePerMillion?: number; inputCachedPerMillion?: number; inputPerMillion: number; outputPerMillion: number; }; }; } | undefined
Metadata supplied by the overlay model.
Type Literal
Section titled “Type Literal”{ capabilities?: { parallelToolCalls?: boolean; pdfUpload?: boolean; speechToText?: { modes: ("batch" | "streaming")[]; vocabularyBiasing?: boolean; }; structuredOutput?: boolean; textToSpeech?: { modes: ("streaming" | "buffered")[]; outputFormats?: string[]; voiceInstructions?: boolean; voiceSelection?: boolean; }; toolCalling?: boolean; vision?: boolean; }; description?: string; includedInSubscription?: boolean; maxOutputTokens?: number; pricing?: { request?: { multiplier: number; }; token?: { cacheWritePerMillion?: number; inputCachedPerMillion?: number; inputPerMillion: number; outputPerMillion: number; }; }; }
Metadata supplied by the overlay model.
capabilities?
Section titled “capabilities?”{ parallelToolCalls?: boolean; pdfUpload?: boolean; speechToText?: { modes: ("batch" | "streaming")[]; vocabularyBiasing?: boolean; }; structuredOutput?: boolean; textToSpeech?: { modes: ("streaming" | "buffered")[]; outputFormats?: string[]; voiceInstructions?: boolean; voiceSelection?: boolean; }; toolCalling?: boolean; vision?: boolean; } = ...
Provider-scoped capabilities for this model offering.
capabilities.parallelToolCalls?
Section titled “capabilities.parallelToolCalls?”boolean = ...
Whether multiple tool calls can be issued in a single turn.
capabilities.pdfUpload?
Section titled “capabilities.pdfUpload?”boolean = ...
Whether the provider accepts PDF file uploads.
capabilities.speechToText?
Section titled “capabilities.speechToText?”{ modes: ("batch" | "streaming")[]; vocabularyBiasing?: boolean; } = ...
Speech-to-text capability descriptor.
capabilities.speechToText.modes
Section titled “capabilities.speechToText.modes”("batch" | "streaming")[] = ...
Supported transcription modes.
capabilities.speechToText.vocabularyBiasing?
Section titled “capabilities.speechToText.vocabularyBiasing?”boolean = ...
Whether the model supports vocabulary/terminology biasing. Optional by design because model metadata can be partial, unlike provider runtime capabilities.
capabilities.structuredOutput?
Section titled “capabilities.structuredOutput?”boolean = ...
Whether the provider supports structured (JSON schema) output.
capabilities.textToSpeech?
Section titled “capabilities.textToSpeech?”{ modes: ("streaming" | "buffered")[]; outputFormats?: string[]; voiceInstructions?: boolean; voiceSelection?: boolean; } = ...
Text-to-speech capability descriptor.
capabilities.textToSpeech.modes
Section titled “capabilities.textToSpeech.modes”("streaming" | "buffered")[] = ...
Supported synthesis modes.
capabilities.textToSpeech.outputFormats?
Section titled “capabilities.textToSpeech.outputFormats?”string[] = ...
Supported output audio formats. Optional because metadata may omit it.
capabilities.textToSpeech.voiceInstructions?
Section titled “capabilities.textToSpeech.voiceInstructions?”boolean = ...
Whether the model supports style/tone instructions (e.g., gpt-4o-mini-tts). Optional because metadata may omit it.
capabilities.textToSpeech.voiceSelection?
Section titled “capabilities.textToSpeech.voiceSelection?”boolean = ...
Whether the user can select a voice preset. Optional because model metadata may omit it.
capabilities.toolCalling?
Section titled “capabilities.toolCalling?”boolean = ...
Whether the provider’s API supports tool/function calling.
capabilities.vision?
Section titled “capabilities.vision?”boolean = ...
Whether the model accepts image inputs.
description?
Section titled “description?”string = ...
Optional description of the model *
includedInSubscription?
Section titled “includedInSubscription?”boolean = ...
Whether this model is included in the provider’s subscription plan.
maxOutputTokens?
Section titled “maxOutputTokens?”number = ...
Maximum output tokens the provider allows for this model.
pricing?
Section titled “pricing?”{ request?: { multiplier: number; }; token?: { cacheWritePerMillion?: number; inputCachedPerMillion?: number; inputPerMillion: number; outputPerMillion: number; }; } = ...
Token pricing for this model offering.
pricing.request?
Section titled “pricing.request?”{ multiplier: number; } = ...
Per-request pricing (GitHub Copilot premium requests, etc.).
pricing.request.multiplier
Section titled “pricing.request.multiplier”number = ...
Cost per request in provider billing units (0 = free).
pricing.token?
Section titled “pricing.token?”{ cacheWritePerMillion?: number; inputCachedPerMillion?: number; inputPerMillion: number; outputPerMillion: number; } = ...
Per-token pricing (Anthropic direct, OpenAI direct, etc.).
pricing.token.cacheWritePerMillion?
Section titled “pricing.token.cacheWritePerMillion?”number = ...
Cost per million cache-write input tokens (USD).
pricing.token.inputCachedPerMillion?
Section titled “pricing.token.inputCachedPerMillion?”number = ...
Cost per million cache-read input tokens (USD).
pricing.token.inputPerMillion
Section titled “pricing.token.inputPerMillion”number = ...
Cost per million input tokens (USD).
pricing.token.outputPerMillion
Section titled “pricing.token.outputPerMillion”number = ...
Cost per million output tokens (USD).
undefined
Returns
Section titled “Returns”Merged metadata, or undefined when neither side supplies metadata.
Type Literal
Section titled “Type Literal”{ capabilities?: { parallelToolCalls?: boolean; pdfUpload?: boolean; speechToText?: { modes: ("batch" | "streaming")[]; vocabularyBiasing?: boolean; }; structuredOutput?: boolean; textToSpeech?: { modes: ("streaming" | "buffered")[]; outputFormats?: string[]; voiceInstructions?: boolean; voiceSelection?: boolean; }; toolCalling?: boolean; vision?: boolean; }; description?: string; includedInSubscription?: boolean; maxOutputTokens?: number; pricing?: { request?: { multiplier: number; }; token?: { cacheWritePerMillion?: number; inputCachedPerMillion?: number; inputPerMillion: number; outputPerMillion: number; }; }; }
capabilities?
Section titled “capabilities?”
optionalcapabilities?:object
Provider-scoped capabilities for this model offering.
capabilities.parallelToolCalls?
Section titled “capabilities.parallelToolCalls?”
optionalparallelToolCalls?:boolean
Whether multiple tool calls can be issued in a single turn.
capabilities.pdfUpload?
Section titled “capabilities.pdfUpload?”
optionalpdfUpload?:boolean
Whether the provider accepts PDF file uploads.
capabilities.speechToText?
Section titled “capabilities.speechToText?”
optionalspeechToText?:object
Speech-to-text capability descriptor.
capabilities.speechToText.modes
Section titled “capabilities.speechToText.modes”modes: (
"batch"|"streaming")[]
Supported transcription modes.
capabilities.speechToText.vocabularyBiasing?
Section titled “capabilities.speechToText.vocabularyBiasing?”
optionalvocabularyBiasing?:boolean
Whether the model supports vocabulary/terminology biasing. Optional by design because model metadata can be partial, unlike provider runtime capabilities.
capabilities.structuredOutput?
Section titled “capabilities.structuredOutput?”
optionalstructuredOutput?:boolean
Whether the provider supports structured (JSON schema) output.
capabilities.textToSpeech?
Section titled “capabilities.textToSpeech?”
optionaltextToSpeech?:object
Text-to-speech capability descriptor.
capabilities.textToSpeech.modes
Section titled “capabilities.textToSpeech.modes”modes: (
"streaming"|"buffered")[]
Supported synthesis modes.
capabilities.textToSpeech.outputFormats?
Section titled “capabilities.textToSpeech.outputFormats?”
optionaloutputFormats?:string[]
Supported output audio formats. Optional because metadata may omit it.
capabilities.textToSpeech.voiceInstructions?
Section titled “capabilities.textToSpeech.voiceInstructions?”
optionalvoiceInstructions?:boolean
Whether the model supports style/tone instructions (e.g., gpt-4o-mini-tts). Optional because metadata may omit it.
capabilities.textToSpeech.voiceSelection?
Section titled “capabilities.textToSpeech.voiceSelection?”
optionalvoiceSelection?:boolean
Whether the user can select a voice preset. Optional because model metadata may omit it.
capabilities.toolCalling?
Section titled “capabilities.toolCalling?”
optionaltoolCalling?:boolean
Whether the provider’s API supports tool/function calling.
capabilities.vision?
Section titled “capabilities.vision?”
optionalvision?:boolean
Whether the model accepts image inputs.
description?
Section titled “description?”
optionaldescription?:string
Optional description of the model *
includedInSubscription?
Section titled “includedInSubscription?”
optionalincludedInSubscription?:boolean
Whether this model is included in the provider’s subscription plan.
maxOutputTokens?
Section titled “maxOutputTokens?”
optionalmaxOutputTokens?:number
Maximum output tokens the provider allows for this model.
pricing?
Section titled “pricing?”
optionalpricing?:object
Token pricing for this model offering.
pricing.request?
Section titled “pricing.request?”
optionalrequest?:object
Per-request pricing (GitHub Copilot premium requests, etc.).
pricing.request.multiplier
Section titled “pricing.request.multiplier”multiplier:
number
Cost per request in provider billing units (0 = free).
pricing.token?
Section titled “pricing.token?”
optionaltoken?:object
Per-token pricing (Anthropic direct, OpenAI direct, etc.).
pricing.token.cacheWritePerMillion?
Section titled “pricing.token.cacheWritePerMillion?”
optionalcacheWritePerMillion?:number
Cost per million cache-write input tokens (USD).
pricing.token.inputCachedPerMillion?
Section titled “pricing.token.inputCachedPerMillion?”
optionalinputCachedPerMillion?:number
Cost per million cache-read input tokens (USD).
pricing.token.inputPerMillion
Section titled “pricing.token.inputPerMillion”inputPerMillion:
number
Cost per million input tokens (USD).
pricing.token.outputPerMillion
Section titled “pricing.token.outputPerMillion”outputPerMillion:
number
Cost per million output tokens (USD).
undefined