@llmgateway/ai-sdk-provider 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +187 -0
- package/dist/index.cjs +1398 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +263 -0
- package/dist/index.d.ts +263 -0
- package/dist/index.js +1390 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/index.cjs +1298 -0
- package/dist/internal/index.cjs.map +1 -0
- package/dist/internal/index.d.cts +184 -0
- package/dist/internal/index.d.ts +184 -0
- package/dist/internal/index.js +1291 -0
- package/dist/internal/index.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/internal/index.ts","../../src/schemas/reasoning-details.ts","../../src/llmgateway-chat-language-model.ts","../../src/convert-to-llmgateway-chat-messages.ts","../../src/map-llmgateway-chat-logprobs.ts","../../src/map-llmgateway-finish-reason.ts","../../src/llmgateway-error.ts","../../src/llmgateway-completion-language-model.ts","../../src/convert-to-llmgateway-completion-prompt.ts","../../src/map-llmgateway-completion-logprobs.ts"],"sourcesContent":["export * from '../llmgateway-chat-language-model';\nexport * from '../types/llmgateway-chat-settings';\nexport * from '../llmgateway-completion-language-model';\nexport * from '../llmgateway-completion-settings';\nexport * from '../types';\n","import { z } from 'zod';\n\nexport enum ReasoningDetailType {\n Summary = 'reasoning.summary',\n Encrypted = 'reasoning.encrypted',\n Text = 'reasoning.text',\n}\n\nexport const ReasoningDetailSummarySchema = z.object({\n type: z.literal(ReasoningDetailType.Summary),\n summary: z.string(),\n});\nexport type ReasoningDetailSummary = z.infer<\n typeof ReasoningDetailSummarySchema\n>;\n\nexport const ReasoningDetailEncryptedSchema = z.object({\n type: z.literal(ReasoningDetailType.Encrypted),\n data: z.string(),\n});\nexport type ReasoningDetailEncrypted = z.infer<\n typeof ReasoningDetailEncryptedSchema\n>;\n\nexport const ReasoningDetailTextSchema = z.object({\n type: z.literal(ReasoningDetailType.Text),\n text: z.string().nullish(),\n signature: z.string().nullish(),\n});\n\nexport type ReasoningDetailText = z.infer<typeof ReasoningDetailTextSchema>;\n\nexport const ReasoningDetailUnionSchema = z.union([\n ReasoningDetailSummarySchema,\n ReasoningDetailEncryptedSchema,\n ReasoningDetailTextSchema,\n]);\n\nconst ReasoningDetailsWithUnknownSchema = z.union([\n ReasoningDetailUnionSchema,\n z.unknown().transform(() => null),\n]);\n\nexport type ReasoningDetailUnion = z.infer<typeof ReasoningDetailUnionSchema>;\n\nexport const ReasoningDetailArraySchema = z\n .array(ReasoningDetailsWithUnknownSchema)\n .transform((d) => d.filter((d): d is ReasoningDetailUnion => !!d));\n","import type { ReasoningDetailUnion } from '@/src/schemas/reasoning-details';\nimport type { LLMGatewayUsageAccounting } from '@/src/types/index';\nimport type {\n LanguageModelV1,\n LanguageModelV1FinishReason,\n LanguageModelV1FunctionTool,\n LanguageModelV1LogProbs,\n LanguageModelV1ProviderDefinedTool,\n LanguageModelV1StreamPart,\n} from '@ai-sdk/provider';\nimport type { ParseResult } from '@ai-sdk/provider-utils';\nimport type {\n LLMGatewayChatModelId,\n LLMGatewayChatSettings,\n} from './types/llmgateway-chat-settings';\n\nimport {\n ReasoningDetailArraySchema,\n ReasoningDetailType,\n} from '@/src/schemas/reasoning-details';\nimport {\n InvalidResponseDataError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nimport { convertToLLMGatewayChatMessages } from './convert-to-llmgateway-chat-messages';\nimport { mapLLMGatewayChatLogProbsOutput } from './map-llmgateway-chat-logprobs';\nimport { mapLLMGatewayFinishReason } from './map-llmgateway-finish-reason';\nimport {\n LLMGatewayErrorResponseSchema,\n llmgatewayFailedResponseHandler,\n} from './llmgateway-error';\n\nfunction isFunctionTool(\n tool: LanguageModelV1FunctionTool | LanguageModelV1ProviderDefinedTool,\n): tool is LanguageModelV1FunctionTool {\n return 'parameters' in tool;\n}\n\ntype LLMGatewayChatConfig = {\n provider: string;\n compatibility: 'strict' | 'compatible';\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: typeof fetch;\n extraBody?: Record<string, unknown>;\n};\n\ntype DoGenerateOutput = Awaited<ReturnType<LanguageModelV1['doGenerate']>>;\n\ntype LanguageModelV1ReasoningPartUnion = Extract<\n DoGenerateOutput['reasoning'],\n unknown[]\n>[number];\n\ntype DoStreamOutput = Awaited<ReturnType<LanguageModelV1['doStream']>>;\n\nexport class LLMGatewayChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = 'tool';\n\n readonly modelId: LLMGatewayChatModelId;\n readonly settings: LLMGatewayChatSettings;\n\n private readonly config: LLMGatewayChatConfig;\n\n constructor(\n modelId: LLMGatewayChatModelId,\n settings: LLMGatewayChatSettings,\n config: LLMGatewayChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n seed,\n stopSequences,\n responseFormat,\n topK,\n providerMetadata,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n const extraCallingBody = providerMetadata?.llmgateway ?? {};\n\n const baseArgs = {\n // model id:\n model: this.modelId,\n models: this.settings.models,\n\n // model specific settings:\n logit_bias: this.settings.logitBias,\n logprobs:\n this.settings.logprobs === true ||\n typeof this.settings.logprobs === 'number'\n ? true\n : undefined,\n top_logprobs:\n typeof this.settings.logprobs === 'number'\n ? this.settings.logprobs\n : typeof this.settings.logprobs === 'boolean'\n ? this.settings.logprobs\n ? 0\n : undefined\n : undefined,\n user: this.settings.user,\n parallel_tool_calls: this.settings.parallelToolCalls,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n seed,\n\n stop: stopSequences,\n response_format: responseFormat,\n top_k: topK,\n\n // messages:\n messages: convertToLLMGatewayChatMessages(prompt),\n\n // LLMGateway specific settings:\n include_reasoning: this.settings.includeReasoning,\n reasoning: this.settings.reasoning,\n usage: this.settings.usage,\n\n // extra body:\n ...this.config.extraBody,\n ...this.settings.extraBody,\n ...extraCallingBody,\n };\n\n switch (type) {\n case 'regular': {\n return { ...baseArgs, ...prepareToolsAndToolChoice(mode) };\n }\n\n case 'object-json': {\n return {\n ...baseArgs,\n response_format: { type: 'json_object' },\n };\n }\n\n case 'object-tool': {\n return {\n ...baseArgs,\n tool_choice: { type: 'function', function: { name: mode.tool.name } },\n tools: [\n {\n type: 'function',\n function: {\n name: mode.tool.name,\n description: mode.tool.description,\n parameters: mode.tool.parameters,\n },\n },\n ],\n };\n }\n\n // Handle all non-text types with a single default case\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `${_exhaustiveCheck} mode`,\n });\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<DoGenerateOutput> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: llmgatewayFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n LLMGatewayNonStreamChatCompletionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n const choice = response.choices[0];\n\n if (!choice) {\n throw new Error('No choice in response');\n }\n\n // Extract detailed usage information\n const usageInfo = response.usage\n ? {\n promptTokens: response.usage.prompt_tokens ?? 0,\n completionTokens: response.usage.completion_tokens ?? 0,\n }\n : {\n promptTokens: 0,\n completionTokens: 0,\n };\n\n // Collect provider-specific metadata\n const providerMetadata: {\n llmgateway?: Partial<{\n usage: LLMGatewayUsageAccounting;\n }>;\n } = {};\n\n // Add LLMGateway usage accounting details if available AND usage accounting was requested\n if (response.usage && this.settings.usage?.include) {\n providerMetadata.llmgateway = {\n usage: {\n promptTokens: response.usage.prompt_tokens,\n promptTokensDetails: response.usage.prompt_tokens_details\n ? {\n cachedTokens:\n response.usage.prompt_tokens_details.cached_tokens ?? 0,\n }\n : undefined,\n completionTokens: response.usage.completion_tokens,\n completionTokensDetails: response.usage.completion_tokens_details\n ? {\n reasoningTokens:\n response.usage.completion_tokens_details.reasoning_tokens ??\n 0,\n }\n : undefined,\n cost: response.usage.cost,\n totalTokens: response.usage.total_tokens ?? 0,\n },\n };\n }\n\n // Prepare the final result\n const hasProviderMetadata = Object.keys(providerMetadata).length > 0;\n\n const reasoningDetails = (choice.message.reasoning_details ??\n []) as ReasoningDetailUnion[];\n\n const reasoning: LanguageModelV1ReasoningPartUnion[] =\n reasoningDetails.length > 0\n ? reasoningDetails\n .map((detail) => {\n switch (detail.type) {\n case ReasoningDetailType.Text: {\n if (detail.text) {\n return {\n type: 'text' as const,\n text: detail.text,\n signature: detail.signature ?? undefined,\n } satisfies LanguageModelV1ReasoningPartUnion;\n }\n break;\n }\n case ReasoningDetailType.Summary: {\n if (detail.summary) {\n return {\n type: 'text' as const,\n text: detail.summary,\n } satisfies LanguageModelV1ReasoningPartUnion;\n }\n break;\n }\n case ReasoningDetailType.Encrypted: {\n if (detail.data) {\n return {\n type: 'redacted' as const,\n data: detail.data,\n } satisfies LanguageModelV1ReasoningPartUnion;\n }\n break;\n }\n default: {\n detail satisfies never;\n }\n }\n return null;\n })\n .filter((p) => p !== null)\n : choice.message.reasoning\n ? [\n {\n type: 'text' as const,\n text: choice.message.reasoning,\n } satisfies LanguageModelV1ReasoningPartUnion,\n ]\n : [];\n\n return {\n response: {\n id: response.id,\n modelId: response.model,\n },\n text: choice.message.content ?? undefined,\n reasoning,\n toolCalls: choice.message.tool_calls?.map((toolCall) => ({\n toolCallType: 'function',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n })),\n finishReason: mapLLMGatewayFinishReason(choice.finish_reason),\n usage: usageInfo,\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n logprobs: mapLLMGatewayChatLogProbsOutput(choice.logprobs),\n ...(hasProviderMetadata ? { providerMetadata } : {}),\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<DoStreamOutput> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...args,\n stream: true,\n\n // only include stream_options when in strict compatibility mode:\n stream_options:\n this.config.compatibility === 'strict'\n ? {\n include_usage: true,\n // If user has requested usage accounting, make sure we get it in the stream\n ...(this.settings.usage?.include\n ? { include_usage: true }\n : {}),\n }\n : undefined,\n },\n failedResponseHandler: llmgatewayFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n LLMGatewayStreamChatCompletionChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n\n sent: boolean;\n }> = [];\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n let logprobs: LanguageModelV1LogProbs;\n\n // Track provider-specific usage information\n const llmgatewayUsage: Partial<LLMGatewayUsageAccounting> = {};\n\n // Store usage accounting setting for reference in the transformer\n const shouldIncludeUsageAccounting = !!this.settings.usage?.include;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<\n z.infer<typeof LLMGatewayStreamChatCompletionChunkSchema>\n >,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // handle error chunks:\n if ('error' in value) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: value.error });\n return;\n }\n\n if (value.id) {\n controller.enqueue({\n type: 'response-metadata',\n id: value.id,\n });\n }\n\n if (value.model) {\n controller.enqueue({\n type: 'response-metadata',\n modelId: value.model,\n });\n }\n\n if (value.usage != null) {\n usage = {\n promptTokens: value.usage.prompt_tokens,\n completionTokens: value.usage.completion_tokens,\n };\n\n // Collect LLMGateway specific usage information\n llmgatewayUsage.promptTokens = value.usage.prompt_tokens;\n if (value.usage.prompt_tokens_details) {\n llmgatewayUsage.promptTokensDetails = {\n cachedTokens:\n value.usage.prompt_tokens_details.cached_tokens ?? 0,\n };\n }\n\n llmgatewayUsage.completionTokens = value.usage.completion_tokens;\n if (value.usage.completion_tokens_details) {\n llmgatewayUsage.completionTokensDetails = {\n reasoningTokens:\n value.usage.completion_tokens_details.reasoning_tokens ?? 0,\n };\n }\n\n llmgatewayUsage.cost = value.usage.cost;\n llmgatewayUsage.totalTokens = value.usage.total_tokens;\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = mapLLMGatewayFinishReason(choice.finish_reason);\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.content != null) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: delta.content,\n });\n }\n\n if (delta.reasoning != null) {\n controller.enqueue({\n type: 'reasoning',\n textDelta: delta.reasoning,\n });\n }\n\n if (delta.reasoning_details && delta.reasoning_details.length > 0) {\n for (const detail of delta.reasoning_details) {\n switch (detail.type) {\n case ReasoningDetailType.Text: {\n if (detail.text) {\n controller.enqueue({\n type: 'reasoning',\n textDelta: detail.text,\n });\n }\n if (detail.signature) {\n controller.enqueue({\n type: 'reasoning-signature',\n signature: detail.signature,\n });\n }\n break;\n }\n case ReasoningDetailType.Encrypted: {\n if (detail.data) {\n controller.enqueue({\n type: 'redacted-reasoning',\n data: detail.data,\n });\n }\n break;\n }\n case ReasoningDetailType.Summary: {\n if (detail.summary) {\n controller.enqueue({\n type: 'reasoning',\n textDelta: detail.summary,\n });\n }\n break;\n }\n default: {\n detail satisfies never;\n break;\n }\n }\n }\n }\n const mappedLogprobs = mapLLMGatewayChatLogProbsOutput(\n choice?.logprobs,\n );\n if (mappedLogprobs?.length) {\n if (logprobs === undefined) {\n logprobs = [];\n }\n logprobs.push(...mappedLogprobs);\n }\n\n if (delta.tool_calls != null) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n // Tool call start. LLMGateway returns all information except the arguments in the first chunk.\n if (toolCalls[index] == null) {\n if (toolCallDelta.type !== 'function') {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n sent: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (toolCall == null) {\n throw new Error('Tool call is missing');\n }\n\n // check if tool call is complete (some providers send the full tool call in one chunk)\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n // send delta\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCall.function.arguments,\n });\n\n // send tool call\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n\n toolCall.sent = true;\n }\n\n continue;\n }\n\n // existing tool call, merge\n const toolCall = toolCalls[index];\n\n if (toolCall == null) {\n throw new Error('Tool call is missing');\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCallDelta.function.arguments ?? '',\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n\n toolCall.sent = true;\n }\n }\n }\n },\n\n flush(controller) {\n // Forward any unsent tool calls if finish reason is 'tool-calls'\n if (finishReason === 'tool-calls') {\n for (const toolCall of toolCalls) {\n if (!toolCall.sent) {\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n // Coerce invalid arguments to an empty JSON object\n args: isParsableJson(toolCall.function.arguments)\n ? toolCall.function.arguments\n : '{}',\n });\n toolCall.sent = true;\n }\n }\n }\n\n // Prepare provider metadata with LLMGateway usage accounting information\n const providerMetadata: {\n llmgateway?: {\n usage: Partial<LLMGatewayUsageAccounting>;\n };\n } = {};\n\n // Only add LLMGateway metadata if we have usage information AND usage accounting was requested\n if (\n shouldIncludeUsageAccounting &&\n (llmgatewayUsage.totalTokens !== undefined ||\n llmgatewayUsage.cost !== undefined ||\n llmgatewayUsage.promptTokensDetails !== undefined ||\n llmgatewayUsage.completionTokensDetails !== undefined)\n ) {\n providerMetadata.llmgateway = {\n usage: llmgatewayUsage,\n };\n }\n\n // Only add providerMetadata if we have LLMGateway metadata and it is explicitly requested\n // This is to maintain backward compatibility with existing tests and clients\n const hasProviderMetadata =\n Object.keys(providerMetadata).length > 0 &&\n shouldIncludeUsageAccounting;\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n logprobs,\n usage,\n ...(hasProviderMetadata ? { providerMetadata } : {}),\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n };\n }\n}\n\nconst LLMGatewayChatCompletionBaseResponseSchema = z.object({\n id: z.string().optional(),\n model: z.string().optional(),\n usage: z\n .object({\n prompt_tokens: z.number(),\n prompt_tokens_details: z\n .object({\n cached_tokens: z.number(),\n })\n .nullish(),\n completion_tokens: z.number(),\n completion_tokens_details: z\n .object({\n reasoning_tokens: z.number(),\n })\n .nullish(),\n total_tokens: z.number(),\n cost: z.number().optional(),\n })\n .nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst LLMGatewayNonStreamChatCompletionResponseSchema =\n LLMGatewayChatCompletionBaseResponseSchema.extend({\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant'),\n content: z.string().nullable().optional(),\n reasoning: z.string().nullable().optional(),\n reasoning_details: ReasoningDetailArraySchema.nullish(),\n\n tool_calls: z\n .array(\n z.object({\n id: z.string().optional().nullable(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n }),\n index: z.number(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n }),\n ),\n }),\n )\n .nullable(),\n })\n .nullable()\n .optional(),\n finish_reason: z.string().optional().nullable(),\n }),\n ),\n });\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst LLMGatewayStreamChatCompletionChunkSchema = z.union([\n LLMGatewayChatCompletionBaseResponseSchema.extend({\n choices: z.array(\n z.object({\n delta: z\n .object({\n role: z.enum(['assistant']).optional(),\n content: z.string().nullish(),\n reasoning: z.string().nullish().optional(),\n reasoning_details: ReasoningDetailArraySchema.nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z.literal('function').optional(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n }),\n ),\n }),\n )\n .nullable(),\n })\n .nullish(),\n finish_reason: z.string().nullable().optional(),\n index: z.number(),\n }),\n ),\n }),\n LLMGatewayErrorResponseSchema,\n]);\n\nfunction prepareToolsAndToolChoice(\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n },\n) {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n\n if (tools == null) {\n return { tools: undefined, tool_choice: undefined };\n }\n\n const mappedTools = tools.map((tool) => {\n if (isFunctionTool(tool)) {\n return {\n type: 'function' as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n };\n }\n\n return {\n type: 'function' as const,\n function: {\n name: tool.name,\n },\n };\n });\n\n const toolChoice = mode.toolChoice;\n\n if (toolChoice == null) {\n return { tools: mappedTools, tool_choice: undefined };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: mappedTools, tool_choice: type };\n case 'tool':\n return {\n tools: mappedTools,\n tool_choice: {\n type: 'function',\n function: {\n name: toolChoice.toolName,\n },\n },\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);\n }\n }\n}\n","import type { ReasoningDetailUnion } from '@/src/schemas/reasoning-details';\nimport type {\n LanguageModelV1Prompt,\n LanguageModelV1ProviderMetadata,\n} from '@ai-sdk/provider';\nimport type {\n ChatCompletionContentPart,\n LLMGatewayChatCompletionsInput,\n} from './types/llmgateway-chat-completions-input';\n\nimport { ReasoningDetailType } from '@/src/schemas/reasoning-details';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\n\n// Type for LLMGateway Cache Control following Anthropic's pattern\nexport type LLMGatewayCacheControl = { type: 'ephemeral' };\n\nfunction getCacheControl(\n providerMetadata: LanguageModelV1ProviderMetadata | undefined,\n): LLMGatewayCacheControl | undefined {\n const anthropic = providerMetadata?.anthropic;\n const llmgateway = providerMetadata?.llmgateway;\n\n // Allow both cacheControl and cache_control:\n return (llmgateway?.cacheControl ??\n llmgateway?.cache_control ??\n anthropic?.cacheControl ??\n anthropic?.cache_control) as LLMGatewayCacheControl | undefined;\n}\n\nexport function convertToLLMGatewayChatMessages(\n prompt: LanguageModelV1Prompt,\n): LLMGatewayChatCompletionsInput {\n const messages: LLMGatewayChatCompletionsInput = [];\n for (const { role, content, providerMetadata } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({\n role: 'system',\n content,\n cache_control: getCacheControl(providerMetadata),\n });\n break;\n }\n\n case 'user': {\n if (content.length === 1 && content[0]?.type === 'text') {\n messages.push({\n role: 'user',\n content: content[0].text,\n cache_control:\n getCacheControl(providerMetadata) ??\n getCacheControl(content[0].providerMetadata),\n });\n break;\n }\n\n // Get message level cache control\n const messageCacheControl = getCacheControl(providerMetadata);\n const contentParts: ChatCompletionContentPart[] = content.map(\n (part) => {\n const cacheControl =\n getCacheControl(part.providerMetadata) ?? messageCacheControl;\n\n switch (part.type) {\n case 'text':\n return {\n type: 'text' as const,\n text: part.text,\n // For text parts, only use part-specific cache control\n cache_control: cacheControl,\n };\n case 'image':\n return {\n type: 'image_url' as const,\n image_url: {\n url:\n part.image instanceof URL\n ? part.image.toString()\n : `data:${part.mimeType ?? 'image/jpeg'};base64,${convertUint8ArrayToBase64(\n part.image,\n )}`,\n },\n // For image parts, use part-specific or message-level cache control\n cache_control: cacheControl,\n };\n case 'file':\n return {\n type: 'file' as const,\n file: {\n filename: String(\n part.providerMetadata?.llmgateway?.filename,\n ),\n file_data:\n part.data instanceof Uint8Array\n ? `data:${part.mimeType};base64,${convertUint8ArrayToBase64(part.data)}`\n : `data:${part.mimeType};base64,${part.data}`,\n },\n cache_control: cacheControl,\n };\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(\n `Unsupported content part type: ${_exhaustiveCheck}`,\n );\n }\n }\n },\n );\n\n // For multi-part messages, don't add cache_control at the root level\n messages.push({\n role: 'user',\n content: contentParts,\n });\n\n break;\n }\n\n case 'assistant': {\n let text = '';\n let reasoning = '';\n const reasoningDetails: ReasoningDetailUnion[] = [];\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.args),\n },\n });\n break;\n }\n case 'reasoning': {\n reasoning += part.text;\n reasoningDetails.push({\n type: ReasoningDetailType.Text,\n text: part.text,\n signature: part.signature,\n });\n\n break;\n }\n case 'redacted-reasoning': {\n reasoningDetails.push({\n type: ReasoningDetailType.Encrypted,\n data: part.data,\n });\n break;\n }\n case 'file':\n break;\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(`Unsupported part: ${_exhaustiveCheck}`);\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: text,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n reasoning: reasoning || undefined,\n reasoning_details:\n reasoningDetails.length > 0 ? reasoningDetails : undefined,\n cache_control: getCacheControl(providerMetadata),\n });\n\n break;\n }\n\n case 'tool': {\n for (const toolResponse of content) {\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: JSON.stringify(toolResponse.result),\n cache_control:\n getCacheControl(providerMetadata) ??\n getCacheControl(toolResponse.providerMetadata),\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type { LanguageModelV1LogProbs } from '@ai-sdk/provider';\n\ntype LLMGatewayChatLogProbs = {\n content:\n | {\n token: string;\n logprob: number;\n top_logprobs:\n | {\n token: string;\n logprob: number;\n }[]\n | null;\n }[]\n | null;\n};\n\nexport function mapLLMGatewayChatLogProbsOutput(\n logprobs: LLMGatewayChatLogProbs | null | undefined,\n): LanguageModelV1LogProbs | undefined {\n return (\n logprobs?.content?.map(({ token, logprob, top_logprobs }) => ({\n token,\n logprob,\n topLogprobs: top_logprobs\n ? top_logprobs.map(({ token, logprob }) => ({\n token,\n logprob,\n }))\n : [],\n })) ?? undefined\n );\n}\n","import type { LanguageModelV1FinishReason } from '@ai-sdk/provider';\n\nexport function mapLLMGatewayFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n case 'function_call':\n case 'tool_calls':\n return 'tool-calls';\n default:\n return 'unknown';\n }\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const LLMGatewayErrorResponseSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullable(),\n code: z.string().nullable(),\n }),\n});\n\nexport type LLMGatewayErrorData = z.infer<typeof LLMGatewayErrorResponseSchema>;\n\nexport const llmgatewayFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: LLMGatewayErrorResponseSchema,\n errorToMessage: (data) => data.error.message,\n});\n","import type {\n LanguageModelV1,\n LanguageModelV1FinishReason,\n LanguageModelV1LogProbs,\n LanguageModelV1StreamPart,\n} from '@ai-sdk/provider';\nimport type { ParseResult } from '@ai-sdk/provider-utils';\nimport type {\n LLMGatewayCompletionModelId,\n LLMGatewayCompletionSettings,\n} from './llmgateway-completion-settings';\n\nimport { ReasoningDetailArraySchema } from '@/src/schemas/reasoning-details';\nimport { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nimport { convertToLLMGatewayCompletionPrompt } from './convert-to-llmgateway-completion-prompt';\nimport { mapLLMGatewayCompletionLogprobs } from './map-llmgateway-completion-logprobs';\nimport { mapLLMGatewayFinishReason } from './map-llmgateway-finish-reason';\nimport {\n LLMGatewayErrorResponseSchema,\n llmgatewayFailedResponseHandler,\n} from './llmgateway-error';\n\ntype LLMGatewayCompletionConfig = {\n provider: string;\n compatibility: 'strict' | 'compatible';\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: typeof fetch;\n extraBody?: Record<string, unknown>;\n};\n\nexport class LLMGatewayCompletionLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = undefined;\n\n readonly modelId: LLMGatewayCompletionModelId;\n readonly settings: LLMGatewayCompletionSettings;\n\n private readonly config: LLMGatewayCompletionConfig;\n\n constructor(\n modelId: LLMGatewayCompletionModelId,\n settings: LLMGatewayCompletionSettings,\n config: LLMGatewayCompletionConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n mode,\n inputFormat,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n seed,\n responseFormat,\n topK,\n stopSequences,\n providerMetadata,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n\n const extraCallingBody = providerMetadata?.llmgateway ?? {};\n\n const { prompt: completionPrompt } = convertToLLMGatewayCompletionPrompt({\n prompt,\n inputFormat,\n });\n\n const baseArgs = {\n // model id:\n model: this.modelId,\n models: this.settings.models,\n\n // model specific settings:\n logit_bias: this.settings.logitBias,\n logprobs:\n typeof this.settings.logprobs === 'number'\n ? this.settings.logprobs\n : typeof this.settings.logprobs === 'boolean'\n ? this.settings.logprobs\n ? 0\n : undefined\n : undefined,\n suffix: this.settings.suffix,\n user: this.settings.user,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n seed,\n\n stop: stopSequences,\n response_format: responseFormat,\n top_k: topK,\n\n // prompt:\n prompt: completionPrompt,\n\n // LLMGateway specific settings:\n\n // extra body:\n ...this.config.extraBody,\n ...this.settings.extraBody,\n ...extraCallingBody,\n };\n\n switch (type) {\n case 'regular': {\n if (mode.tools?.length) {\n throw new UnsupportedFunctionalityError({\n functionality: 'tools',\n });\n }\n\n if (mode.toolChoice) {\n throw new UnsupportedFunctionalityError({\n functionality: 'toolChoice',\n });\n }\n\n return baseArgs;\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-json mode',\n });\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool mode',\n });\n }\n\n // Handle all non-text types with a single default case\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `${_exhaustiveCheck} mode`,\n });\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: llmgatewayFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n LLMGatewayCompletionChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { prompt: rawPrompt, ...rawSettings } = args;\n if ('error' in response) {\n throw new Error(`${response.error.message}`);\n }\n\n const choice = response.choices[0];\n\n if (!choice) {\n throw new Error('No choice in LLMGateway completion response');\n }\n\n return {\n response: {\n id: response.id,\n modelId: response.model,\n },\n text: choice.text ?? '',\n reasoning: choice.reasoning || undefined,\n usage: {\n promptTokens: response.usage?.prompt_tokens ?? 0,\n completionTokens: response.usage?.completion_tokens ?? 0,\n },\n finishReason: mapLLMGatewayFinishReason(choice.finish_reason),\n logprobs: mapLLMGatewayCompletionLogprobs(choice.logprobs),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...this.getArgs(options),\n stream: true,\n\n // only include stream_options when in strict compatibility mode:\n stream_options:\n this.config.compatibility === 'strict'\n ? { include_usage: true }\n : undefined,\n },\n failedResponseHandler: llmgatewayFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n LLMGatewayCompletionChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { prompt: rawPrompt, ...rawSettings } = args;\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n let logprobs: LanguageModelV1LogProbs;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof LLMGatewayCompletionChunkSchema>>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // handle error chunks:\n if ('error' in value) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: value.error });\n return;\n }\n\n if (value.usage != null) {\n usage = {\n promptTokens: value.usage.prompt_tokens,\n completionTokens: value.usage.completion_tokens,\n };\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = mapLLMGatewayFinishReason(choice.finish_reason);\n }\n\n if (choice?.text != null) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: choice.text,\n });\n }\n\n const mappedLogprobs = mapLLMGatewayCompletionLogprobs(\n choice?.logprobs,\n );\n if (mappedLogprobs?.length) {\n if (logprobs === undefined) {\n logprobs = [];\n }\n logprobs.push(...mappedLogprobs);\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n logprobs,\n usage,\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n };\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst LLMGatewayCompletionChunkSchema = z.union([\n z.object({\n id: z.string().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n text: z.string(),\n reasoning: z.string().nullish().optional(),\n reasoning_details: ReasoningDetailArraySchema.nullish(),\n\n finish_reason: z.string().nullish(),\n index: z.number(),\n logprobs: z\n .object({\n tokens: z.array(z.string()),\n token_logprobs: z.array(z.number()),\n top_logprobs: z.array(z.record(z.string(), z.number())).nullable(),\n })\n .nullable()\n .optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n })\n .optional()\n .nullable(),\n }),\n LLMGatewayErrorResponseSchema,\n]);\n","import type { LanguageModelV1Prompt } from '@ai-sdk/provider';\n\nimport {\n InvalidPromptError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function convertToLLMGatewayCompletionPrompt({\n prompt,\n inputFormat,\n user = 'user',\n assistant = 'assistant',\n}: {\n prompt: LanguageModelV1Prompt;\n inputFormat: 'prompt' | 'messages';\n user?: string;\n assistant?: string;\n}): {\n prompt: string;\n} {\n // When the user supplied a prompt input, we don't transform it:\n if (\n inputFormat === 'prompt' &&\n prompt.length === 1 &&\n prompt[0] &&\n prompt[0].role === 'user' &&\n prompt[0].content.length === 1 &&\n prompt[0].content[0] &&\n prompt[0].content[0].type === 'text'\n ) {\n return { prompt: prompt[0].content[0].text };\n }\n\n // otherwise transform to a chat message format:\n let text = '';\n\n // if first message is a system message, add it to the text:\n if (prompt[0] && prompt[0].role === 'system') {\n text += `${prompt[0].content}\\n\\n`;\n prompt = prompt.slice(1);\n }\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n throw new InvalidPromptError({\n message: 'Unexpected system message in prompt: ${content}',\n prompt,\n });\n }\n\n case 'user': {\n const userMessage = content\n .map((part) => {\n switch (part.type) {\n case 'text': {\n return part.text;\n }\n case 'image': {\n throw new UnsupportedFunctionalityError({\n functionality: 'images',\n });\n }\n case 'file': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file attachments',\n });\n }\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(\n `Unsupported content type: ${_exhaustiveCheck}`,\n );\n }\n }\n })\n .join('');\n\n text += `${user}:\\n${userMessage}\\n\\n`;\n break;\n }\n\n case 'assistant': {\n const assistantMessage = content\n .map((part) => {\n switch (part.type) {\n case 'text': {\n return part.text;\n }\n case 'tool-call': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool-call messages',\n });\n }\n case 'reasoning': {\n throw new UnsupportedFunctionalityError({\n functionality: 'reasoning messages',\n });\n }\n\n case 'redacted-reasoning': {\n throw new UnsupportedFunctionalityError({\n functionality: 'redacted reasoning messages',\n });\n }\n case 'file': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file attachments',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(\n `Unsupported content type: ${_exhaustiveCheck}`,\n );\n }\n }\n })\n .join('');\n\n text += `${assistant}:\\n${assistantMessage}\\n\\n`;\n break;\n }\n\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool messages',\n });\n }\n\n default: {\n // noinspection UnnecessaryLocalVariableJS\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n // Assistant message prefix:\n text += `${assistant}:\\n`;\n\n return {\n prompt: text,\n };\n}\n","type LLMGatewayCompletionLogProps = {\n tokens: string[];\n token_logprobs: number[];\n top_logprobs: Record<string, number>[] | null;\n};\n\nexport function mapLLMGatewayCompletionLogprobs(\n logprobs: LLMGatewayCompletionLogProps | null | undefined,\n) {\n return logprobs?.tokens.map((token, index) => ({\n token,\n logprob: logprobs.token_logprobs[index] ?? 0,\n topLogprobs: logprobs.top_logprobs\n ? Object.entries(logprobs.top_logprobs[index] ?? {}).map(\n ([token, logprob]) => ({\n token,\n logprob,\n }),\n )\n : [],\n }));\n}\n"],"mappings":"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","names":["d","import_provider_utils","import_zod","_a","_b","_c","token","logprob","import_provider_utils","import_zod","_a","_b","_c","toolCall","import_provider","import_provider_utils","import_zod","import_provider","token"]}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { LanguageModelV1 } from '@ai-sdk/provider';
|
|
2
|
+
export { LanguageModelV1 } from '@ai-sdk/provider';
|
|
3
|
+
|
|
4
|
+
type LLMGatewayLanguageModel = LanguageModelV1;
|
|
5
|
+
type LLMGatewayProviderOptions = {
|
|
6
|
+
models?: string[];
|
|
7
|
+
/**
|
|
8
|
+
* https://llmgateway.io/docs/use-cases/reasoning-tokens
|
|
9
|
+
* One of `max_tokens` or `effort` is required.
|
|
10
|
+
* If `exclude` is true, reasoning will be removed from the response. Default is false.
|
|
11
|
+
*/
|
|
12
|
+
reasoning?: {
|
|
13
|
+
exclude?: boolean;
|
|
14
|
+
} & ({
|
|
15
|
+
max_tokens: number;
|
|
16
|
+
} | {
|
|
17
|
+
effort: 'high' | 'medium' | 'low';
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* A unique identifier representing your end-user, which can
|
|
21
|
+
* help LLMGateway to monitor and detect abuse.
|
|
22
|
+
*/
|
|
23
|
+
user?: string;
|
|
24
|
+
};
|
|
25
|
+
type LLMGatewaySharedSettings = LLMGatewayProviderOptions & {
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated use `reasoning` instead
|
|
28
|
+
*/
|
|
29
|
+
includeReasoning?: boolean;
|
|
30
|
+
extraBody?: Record<string, unknown>;
|
|
31
|
+
/**
|
|
32
|
+
* Enable usage accounting to get detailed token usage information.
|
|
33
|
+
* https://llmgateway.io/docs/use-cases/usage-accounting
|
|
34
|
+
*/
|
|
35
|
+
usage?: {
|
|
36
|
+
/**
|
|
37
|
+
* When true, includes token usage information in the response.
|
|
38
|
+
*/
|
|
39
|
+
include: boolean;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Usage accounting response
|
|
44
|
+
* @see https://llmgateway.io/docs/use-cases/usage-accounting
|
|
45
|
+
*/
|
|
46
|
+
type LLMGatewayUsageAccounting = {
|
|
47
|
+
promptTokens: number;
|
|
48
|
+
promptTokensDetails?: {
|
|
49
|
+
cachedTokens: number;
|
|
50
|
+
};
|
|
51
|
+
completionTokens: number;
|
|
52
|
+
completionTokensDetails?: {
|
|
53
|
+
reasoningTokens: number;
|
|
54
|
+
};
|
|
55
|
+
totalTokens: number;
|
|
56
|
+
cost?: number;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
type LLMGatewayCompletionModelId = string;
|
|
60
|
+
type LLMGatewayCompletionSettings = {
|
|
61
|
+
/**
|
|
62
|
+
Modify the likelihood of specified tokens appearing in the completion.
|
|
63
|
+
|
|
64
|
+
Accepts a JSON object that maps tokens (specified by their token ID in
|
|
65
|
+
the GPT tokenizer) to an associated bias value from -100 to 100. You
|
|
66
|
+
can use this tokenizer tool to convert text to token IDs. Mathematically,
|
|
67
|
+
the bias is added to the logits generated by the model prior to sampling.
|
|
68
|
+
The exact effect will vary per model, but values between -1 and 1 should
|
|
69
|
+
decrease or increase likelihood of selection; values like -100 or 100
|
|
70
|
+
should result in a ban or exclusive selection of the relevant token.
|
|
71
|
+
|
|
72
|
+
As an example, you can pass {"50256": -100} to prevent the <|endoftext|>
|
|
73
|
+
token from being generated.
|
|
74
|
+
*/
|
|
75
|
+
logitBias?: Record<number, number>;
|
|
76
|
+
/**
|
|
77
|
+
Return the log probabilities of the tokens. Including logprobs will increase
|
|
78
|
+
the response size and can slow down response times. However, it can
|
|
79
|
+
be useful to better understand how the model is behaving.
|
|
80
|
+
|
|
81
|
+
Setting to true will return the log probabilities of the tokens that
|
|
82
|
+
were generated.
|
|
83
|
+
|
|
84
|
+
Setting to a number will return the log probabilities of the top n
|
|
85
|
+
tokens that were generated.
|
|
86
|
+
*/
|
|
87
|
+
logprobs?: boolean | number;
|
|
88
|
+
/**
|
|
89
|
+
The suffix that comes after a completion of inserted text.
|
|
90
|
+
*/
|
|
91
|
+
suffix?: string;
|
|
92
|
+
} & LLMGatewaySharedSettings;
|
|
93
|
+
|
|
94
|
+
type LLMGatewayCompletionConfig = {
|
|
95
|
+
provider: string;
|
|
96
|
+
compatibility: 'strict' | 'compatible';
|
|
97
|
+
headers: () => Record<string, string | undefined>;
|
|
98
|
+
url: (options: {
|
|
99
|
+
modelId: string;
|
|
100
|
+
path: string;
|
|
101
|
+
}) => string;
|
|
102
|
+
fetch?: typeof fetch;
|
|
103
|
+
extraBody?: Record<string, unknown>;
|
|
104
|
+
};
|
|
105
|
+
declare class LLMGatewayCompletionLanguageModel implements LanguageModelV1 {
|
|
106
|
+
readonly specificationVersion = "v1";
|
|
107
|
+
readonly defaultObjectGenerationMode: undefined;
|
|
108
|
+
readonly modelId: LLMGatewayCompletionModelId;
|
|
109
|
+
readonly settings: LLMGatewayCompletionSettings;
|
|
110
|
+
private readonly config;
|
|
111
|
+
constructor(modelId: LLMGatewayCompletionModelId, settings: LLMGatewayCompletionSettings, config: LLMGatewayCompletionConfig);
|
|
112
|
+
get provider(): string;
|
|
113
|
+
private getArgs;
|
|
114
|
+
doGenerate(options: Parameters<LanguageModelV1['doGenerate']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>>;
|
|
115
|
+
doStream(options: Parameters<LanguageModelV1['doStream']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>>;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
type LLMGatewayChatModelId = string;
|
|
119
|
+
type LLMGatewayChatSettings = {
|
|
120
|
+
/**
|
|
121
|
+
Modify the likelihood of specified tokens appearing in the completion.
|
|
122
|
+
|
|
123
|
+
Accepts a JSON object that maps tokens (specified by their token ID in
|
|
124
|
+
the GPT tokenizer) to an associated bias value from -100 to 100. You
|
|
125
|
+
can use this tokenizer tool to convert text to token IDs. Mathematically,
|
|
126
|
+
the bias is added to the logits generated by the model prior to sampling.
|
|
127
|
+
The exact effect will vary per model, but values between -1 and 1 should
|
|
128
|
+
decrease or increase likelihood of selection; values like -100 or 100
|
|
129
|
+
should result in a ban or exclusive selection of the relevant token.
|
|
130
|
+
|
|
131
|
+
As an example, you can pass {"50256": -100} to prevent the <|endoftext|>
|
|
132
|
+
token from being generated.
|
|
133
|
+
*/
|
|
134
|
+
logitBias?: Record<number, number>;
|
|
135
|
+
/**
|
|
136
|
+
Return the log probabilities of the tokens. Including logprobs will increase
|
|
137
|
+
the response size and can slow down response times. However, it can
|
|
138
|
+
be useful to better understand how the model is behaving.
|
|
139
|
+
|
|
140
|
+
Setting to true will return the log probabilities of the tokens that
|
|
141
|
+
were generated.
|
|
142
|
+
|
|
143
|
+
Setting to a number will return the log probabilities of the top n
|
|
144
|
+
tokens that were generated.
|
|
145
|
+
*/
|
|
146
|
+
logprobs?: boolean | number;
|
|
147
|
+
/**
|
|
148
|
+
Whether to enable parallel function calling during tool use. Default to true.
|
|
149
|
+
*/
|
|
150
|
+
parallelToolCalls?: boolean;
|
|
151
|
+
/**
|
|
152
|
+
A unique identifier representing your end-user, which can help LLMGateway to
|
|
153
|
+
monitor and detect abuse. Learn more.
|
|
154
|
+
*/
|
|
155
|
+
user?: string;
|
|
156
|
+
} & LLMGatewaySharedSettings;
|
|
157
|
+
|
|
158
|
+
type LLMGatewayChatConfig = {
|
|
159
|
+
provider: string;
|
|
160
|
+
compatibility: 'strict' | 'compatible';
|
|
161
|
+
headers: () => Record<string, string | undefined>;
|
|
162
|
+
url: (options: {
|
|
163
|
+
modelId: string;
|
|
164
|
+
path: string;
|
|
165
|
+
}) => string;
|
|
166
|
+
fetch?: typeof fetch;
|
|
167
|
+
extraBody?: Record<string, unknown>;
|
|
168
|
+
};
|
|
169
|
+
type DoGenerateOutput = Awaited<ReturnType<LanguageModelV1['doGenerate']>>;
|
|
170
|
+
type DoStreamOutput = Awaited<ReturnType<LanguageModelV1['doStream']>>;
|
|
171
|
+
declare class LLMGatewayChatLanguageModel implements LanguageModelV1 {
|
|
172
|
+
readonly specificationVersion = "v1";
|
|
173
|
+
readonly defaultObjectGenerationMode = "tool";
|
|
174
|
+
readonly modelId: LLMGatewayChatModelId;
|
|
175
|
+
readonly settings: LLMGatewayChatSettings;
|
|
176
|
+
private readonly config;
|
|
177
|
+
constructor(modelId: LLMGatewayChatModelId, settings: LLMGatewayChatSettings, config: LLMGatewayChatConfig);
|
|
178
|
+
get provider(): string;
|
|
179
|
+
private getArgs;
|
|
180
|
+
doGenerate(options: Parameters<LanguageModelV1['doGenerate']>[0]): Promise<DoGenerateOutput>;
|
|
181
|
+
doStream(options: Parameters<LanguageModelV1['doStream']>[0]): Promise<DoStreamOutput>;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export { LLMGatewayChatLanguageModel, type LLMGatewayChatModelId, type LLMGatewayChatSettings, LLMGatewayCompletionLanguageModel, type LLMGatewayCompletionModelId, type LLMGatewayCompletionSettings, type LLMGatewayLanguageModel, type LLMGatewayProviderOptions, type LLMGatewaySharedSettings, type LLMGatewayUsageAccounting };
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { LanguageModelV1 } from '@ai-sdk/provider';
|
|
2
|
+
export { LanguageModelV1 } from '@ai-sdk/provider';
|
|
3
|
+
|
|
4
|
+
type LLMGatewayLanguageModel = LanguageModelV1;
|
|
5
|
+
type LLMGatewayProviderOptions = {
|
|
6
|
+
models?: string[];
|
|
7
|
+
/**
|
|
8
|
+
* https://llmgateway.io/docs/use-cases/reasoning-tokens
|
|
9
|
+
* One of `max_tokens` or `effort` is required.
|
|
10
|
+
* If `exclude` is true, reasoning will be removed from the response. Default is false.
|
|
11
|
+
*/
|
|
12
|
+
reasoning?: {
|
|
13
|
+
exclude?: boolean;
|
|
14
|
+
} & ({
|
|
15
|
+
max_tokens: number;
|
|
16
|
+
} | {
|
|
17
|
+
effort: 'high' | 'medium' | 'low';
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* A unique identifier representing your end-user, which can
|
|
21
|
+
* help LLMGateway to monitor and detect abuse.
|
|
22
|
+
*/
|
|
23
|
+
user?: string;
|
|
24
|
+
};
|
|
25
|
+
type LLMGatewaySharedSettings = LLMGatewayProviderOptions & {
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated use `reasoning` instead
|
|
28
|
+
*/
|
|
29
|
+
includeReasoning?: boolean;
|
|
30
|
+
extraBody?: Record<string, unknown>;
|
|
31
|
+
/**
|
|
32
|
+
* Enable usage accounting to get detailed token usage information.
|
|
33
|
+
* https://llmgateway.io/docs/use-cases/usage-accounting
|
|
34
|
+
*/
|
|
35
|
+
usage?: {
|
|
36
|
+
/**
|
|
37
|
+
* When true, includes token usage information in the response.
|
|
38
|
+
*/
|
|
39
|
+
include: boolean;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Usage accounting response
|
|
44
|
+
* @see https://llmgateway.io/docs/use-cases/usage-accounting
|
|
45
|
+
*/
|
|
46
|
+
type LLMGatewayUsageAccounting = {
|
|
47
|
+
promptTokens: number;
|
|
48
|
+
promptTokensDetails?: {
|
|
49
|
+
cachedTokens: number;
|
|
50
|
+
};
|
|
51
|
+
completionTokens: number;
|
|
52
|
+
completionTokensDetails?: {
|
|
53
|
+
reasoningTokens: number;
|
|
54
|
+
};
|
|
55
|
+
totalTokens: number;
|
|
56
|
+
cost?: number;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
type LLMGatewayCompletionModelId = string;
|
|
60
|
+
type LLMGatewayCompletionSettings = {
|
|
61
|
+
/**
|
|
62
|
+
Modify the likelihood of specified tokens appearing in the completion.
|
|
63
|
+
|
|
64
|
+
Accepts a JSON object that maps tokens (specified by their token ID in
|
|
65
|
+
the GPT tokenizer) to an associated bias value from -100 to 100. You
|
|
66
|
+
can use this tokenizer tool to convert text to token IDs. Mathematically,
|
|
67
|
+
the bias is added to the logits generated by the model prior to sampling.
|
|
68
|
+
The exact effect will vary per model, but values between -1 and 1 should
|
|
69
|
+
decrease or increase likelihood of selection; values like -100 or 100
|
|
70
|
+
should result in a ban or exclusive selection of the relevant token.
|
|
71
|
+
|
|
72
|
+
As an example, you can pass {"50256": -100} to prevent the <|endoftext|>
|
|
73
|
+
token from being generated.
|
|
74
|
+
*/
|
|
75
|
+
logitBias?: Record<number, number>;
|
|
76
|
+
/**
|
|
77
|
+
Return the log probabilities of the tokens. Including logprobs will increase
|
|
78
|
+
the response size and can slow down response times. However, it can
|
|
79
|
+
be useful to better understand how the model is behaving.
|
|
80
|
+
|
|
81
|
+
Setting to true will return the log probabilities of the tokens that
|
|
82
|
+
were generated.
|
|
83
|
+
|
|
84
|
+
Setting to a number will return the log probabilities of the top n
|
|
85
|
+
tokens that were generated.
|
|
86
|
+
*/
|
|
87
|
+
logprobs?: boolean | number;
|
|
88
|
+
/**
|
|
89
|
+
The suffix that comes after a completion of inserted text.
|
|
90
|
+
*/
|
|
91
|
+
suffix?: string;
|
|
92
|
+
} & LLMGatewaySharedSettings;
|
|
93
|
+
|
|
94
|
+
type LLMGatewayCompletionConfig = {
|
|
95
|
+
provider: string;
|
|
96
|
+
compatibility: 'strict' | 'compatible';
|
|
97
|
+
headers: () => Record<string, string | undefined>;
|
|
98
|
+
url: (options: {
|
|
99
|
+
modelId: string;
|
|
100
|
+
path: string;
|
|
101
|
+
}) => string;
|
|
102
|
+
fetch?: typeof fetch;
|
|
103
|
+
extraBody?: Record<string, unknown>;
|
|
104
|
+
};
|
|
105
|
+
declare class LLMGatewayCompletionLanguageModel implements LanguageModelV1 {
|
|
106
|
+
readonly specificationVersion = "v1";
|
|
107
|
+
readonly defaultObjectGenerationMode: undefined;
|
|
108
|
+
readonly modelId: LLMGatewayCompletionModelId;
|
|
109
|
+
readonly settings: LLMGatewayCompletionSettings;
|
|
110
|
+
private readonly config;
|
|
111
|
+
constructor(modelId: LLMGatewayCompletionModelId, settings: LLMGatewayCompletionSettings, config: LLMGatewayCompletionConfig);
|
|
112
|
+
get provider(): string;
|
|
113
|
+
private getArgs;
|
|
114
|
+
doGenerate(options: Parameters<LanguageModelV1['doGenerate']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>>;
|
|
115
|
+
doStream(options: Parameters<LanguageModelV1['doStream']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>>;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
type LLMGatewayChatModelId = string;
|
|
119
|
+
type LLMGatewayChatSettings = {
|
|
120
|
+
/**
|
|
121
|
+
Modify the likelihood of specified tokens appearing in the completion.
|
|
122
|
+
|
|
123
|
+
Accepts a JSON object that maps tokens (specified by their token ID in
|
|
124
|
+
the GPT tokenizer) to an associated bias value from -100 to 100. You
|
|
125
|
+
can use this tokenizer tool to convert text to token IDs. Mathematically,
|
|
126
|
+
the bias is added to the logits generated by the model prior to sampling.
|
|
127
|
+
The exact effect will vary per model, but values between -1 and 1 should
|
|
128
|
+
decrease or increase likelihood of selection; values like -100 or 100
|
|
129
|
+
should result in a ban or exclusive selection of the relevant token.
|
|
130
|
+
|
|
131
|
+
As an example, you can pass {"50256": -100} to prevent the <|endoftext|>
|
|
132
|
+
token from being generated.
|
|
133
|
+
*/
|
|
134
|
+
logitBias?: Record<number, number>;
|
|
135
|
+
/**
|
|
136
|
+
Return the log probabilities of the tokens. Including logprobs will increase
|
|
137
|
+
the response size and can slow down response times. However, it can
|
|
138
|
+
be useful to better understand how the model is behaving.
|
|
139
|
+
|
|
140
|
+
Setting to true will return the log probabilities of the tokens that
|
|
141
|
+
were generated.
|
|
142
|
+
|
|
143
|
+
Setting to a number will return the log probabilities of the top n
|
|
144
|
+
tokens that were generated.
|
|
145
|
+
*/
|
|
146
|
+
logprobs?: boolean | number;
|
|
147
|
+
/**
|
|
148
|
+
Whether to enable parallel function calling during tool use. Default to true.
|
|
149
|
+
*/
|
|
150
|
+
parallelToolCalls?: boolean;
|
|
151
|
+
/**
|
|
152
|
+
A unique identifier representing your end-user, which can help LLMGateway to
|
|
153
|
+
monitor and detect abuse. Learn more.
|
|
154
|
+
*/
|
|
155
|
+
user?: string;
|
|
156
|
+
} & LLMGatewaySharedSettings;
|
|
157
|
+
|
|
158
|
+
type LLMGatewayChatConfig = {
|
|
159
|
+
provider: string;
|
|
160
|
+
compatibility: 'strict' | 'compatible';
|
|
161
|
+
headers: () => Record<string, string | undefined>;
|
|
162
|
+
url: (options: {
|
|
163
|
+
modelId: string;
|
|
164
|
+
path: string;
|
|
165
|
+
}) => string;
|
|
166
|
+
fetch?: typeof fetch;
|
|
167
|
+
extraBody?: Record<string, unknown>;
|
|
168
|
+
};
|
|
169
|
+
type DoGenerateOutput = Awaited<ReturnType<LanguageModelV1['doGenerate']>>;
|
|
170
|
+
type DoStreamOutput = Awaited<ReturnType<LanguageModelV1['doStream']>>;
|
|
171
|
+
declare class LLMGatewayChatLanguageModel implements LanguageModelV1 {
|
|
172
|
+
readonly specificationVersion = "v1";
|
|
173
|
+
readonly defaultObjectGenerationMode = "tool";
|
|
174
|
+
readonly modelId: LLMGatewayChatModelId;
|
|
175
|
+
readonly settings: LLMGatewayChatSettings;
|
|
176
|
+
private readonly config;
|
|
177
|
+
constructor(modelId: LLMGatewayChatModelId, settings: LLMGatewayChatSettings, config: LLMGatewayChatConfig);
|
|
178
|
+
get provider(): string;
|
|
179
|
+
private getArgs;
|
|
180
|
+
doGenerate(options: Parameters<LanguageModelV1['doGenerate']>[0]): Promise<DoGenerateOutput>;
|
|
181
|
+
doStream(options: Parameters<LanguageModelV1['doStream']>[0]): Promise<DoStreamOutput>;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export { LLMGatewayChatLanguageModel, type LLMGatewayChatModelId, type LLMGatewayChatSettings, LLMGatewayCompletionLanguageModel, type LLMGatewayCompletionModelId, type LLMGatewayCompletionSettings, type LLMGatewayLanguageModel, type LLMGatewayProviderOptions, type LLMGatewaySharedSettings, type LLMGatewayUsageAccounting };
|