llm-stream-assemble 1.5.7 → 1.7.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/README.md +10 -8
- package/dist/adapters/anthropic.d.cts +1 -1
- package/dist/adapters/anthropic.d.ts +1 -1
- package/dist/adapters/bedrock.d.cts +1 -1
- package/dist/adapters/bedrock.d.ts +1 -1
- package/dist/adapters/cohere.cjs +40 -6
- package/dist/adapters/cohere.cjs.map +1 -1
- package/dist/adapters/cohere.d.cts +3 -1
- package/dist/adapters/cohere.d.ts +3 -1
- package/dist/adapters/cohere.js +40 -6
- package/dist/adapters/cohere.js.map +1 -1
- package/dist/adapters/gemini.cjs +50 -3
- package/dist/adapters/gemini.cjs.map +1 -1
- package/dist/adapters/gemini.d.cts +3 -1
- package/dist/adapters/gemini.d.ts +3 -1
- package/dist/adapters/gemini.js +50 -3
- package/dist/adapters/gemini.js.map +1 -1
- package/dist/adapters/openai-chat.cjs +141 -5
- package/dist/adapters/openai-chat.cjs.map +1 -1
- package/dist/adapters/openai-chat.d.cts +1 -1
- package/dist/adapters/openai-chat.d.ts +1 -1
- package/dist/adapters/openai-chat.js +141 -5
- package/dist/adapters/openai-chat.js.map +1 -1
- package/dist/adapters/openai-compatible.cjs +143 -6
- package/dist/adapters/openai-compatible.cjs.map +1 -1
- package/dist/adapters/openai-compatible.d.cts +3 -1
- package/dist/adapters/openai-compatible.d.ts +3 -1
- package/dist/adapters/openai-compatible.js +143 -6
- package/dist/adapters/openai-compatible.js.map +1 -1
- package/dist/adapters/openai-responses.d.cts +1 -1
- package/dist/adapters/openai-responses.d.ts +1 -1
- package/dist/core/index.cjs +18 -0
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +2 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +18 -0
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +352 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +64 -3
- package/dist/index.d.ts +64 -3
- package/dist/index.js +347 -17
- package/dist/index.js.map +1 -1
- package/dist/{types-CskRfrmD.d.cts → types-JvwK2_FV.d.cts} +73 -0
- package/dist/{types-CskRfrmD.d.ts → types-JvwK2_FV.d.ts} +73 -0
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/utils/object.ts","../../src/adapters/utils.ts","../../src/adapters/errors.ts","../../src/adapters/shared/incremental-json.ts","../../src/adapters/shared/parse-payload.ts","../../src/adapters/shared/text-delta.ts","../../src/adapters/shared/usage.ts","../../src/adapters/cohere.ts"],"names":["fn","chunks","finishReason"],"mappings":"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","file":"cohere.js","sourcesContent":["/** Strip undefined own properties; preserve explicit null. */\nexport function stripUndefined<T extends Record<string, unknown>>(obj: T): T {\n\treturn Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== undefined)) as T;\n}\n","/** Internal adapter utilities. Not part of the public API. */\nimport type { RawChunk, StreamAdapter } from \"../core/types\";\nimport { stripUndefined } from \"../core/utils/object\";\nimport { adapterScopedError } from \"./errors\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nexport function asNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function optionalRawChunk(input: Record<string, unknown>): RawChunk {\n\treturn stripUndefined(input) as RawChunk;\n}\n\nexport function prefixedAdapterError(feature: string, message: string): Error {\n\treturn adapterScopedError(feature, message);\n}\n\nexport function createStreamAdapter<TOptions>(config: {\n\tparser: { parseChunk(raw: string): RawChunk[] };\n\tparseResponse: (body: unknown, options: TOptions) => RawChunk[];\n\toptions: TOptions;\n}): StreamAdapter {\n\treturn {\n\t\tparseChunk(raw) {\n\t\t\treturn config.parser.parseChunk(raw);\n\t\t},\n\t\tparseResponse(body) {\n\t\t\treturn config.parseResponse(body, config.options);\n\t\t},\n\t};\n}\n\nexport function parseAdapterJSON(raw: string, feature: string): unknown {\n\ttry {\n\t\treturn JSON.parse(raw) as unknown;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow prefixedAdapterError(feature, message);\n\t}\n}\n","/** Internal adapter error helpers. Not part of the public API. */\nimport type { RawChunk } from \"../core/types\";\nimport { asString } from \"./utils\";\n\nexport function libraryError(message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${message}`);\n}\n\nexport function adapterScopedError(scope: string, message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${scope}: ${message}`);\n}\n\nexport function providerErrorChunks(error: Error, recoverable = false): RawChunk[] {\n\treturn [\n\t\t{ kind: \"provider-error\", error, recoverable },\n\t\t{ kind: \"finish\", reason: \"error\" },\n\t];\n}\n\nexport function providerErrorChunksFromMessage(message: string, recoverable = false): RawChunk[] {\n\treturn providerErrorChunks(libraryError(message), recoverable);\n}\n\nexport function providerErrorChunksFromPayload(\n\terrorPayload: Record<string, unknown>,\n\tscope: string,\n\trecoverable: boolean,\n\tfallbackMessage: string,\n): RawChunk[] {\n\tconst message = asString(errorPayload.message) ?? fallbackMessage;\n\tconst error = adapterScopedError(scope, message);\n\tObject.defineProperty(error, \"raw\", {\n\t\tvalue: errorPayload,\n\t\tenumerable: false,\n\t});\n\treturn providerErrorChunks(error, recoverable);\n}\n","/** Tracks last serialized JSON for prefix-diff tool arg deltas. */\nexport interface IncrementalJsonState {\n\tlastArgsJson: string;\n}\n\n/** Emit only the new suffix when `nextInput` extends `prev`, else full replace. */\nexport function incrementalJsonStringDelta(\n\tstate: IncrementalJsonState,\n\tnextInput: string,\n): string | undefined {\n\tconst prev = state.lastArgsJson;\n\tif (nextInput === prev) return undefined;\n\tconst delta =\n\t\tprev.length > 0 && nextInput.startsWith(prev) ? nextInput.slice(prev.length) : nextInput;\n\tstate.lastArgsJson = nextInput;\n\treturn delta.length > 0 ? delta : undefined;\n}\n","import { adapterScopedError } from \"../errors\";\nimport { isRecord, parseAdapterJSON } from \"../utils\";\n\nexport interface ParseAdapterObjectOptions {\n\ttrim?: boolean;\n\tallowDone?: boolean;\n}\n\n/**\n * Parse a single adapter payload string into a JSON object.\n * Returns null for empty / [DONE] lines when configured.\n */\nexport function parseAdapterObjectPayload(\n\traw: string,\n\tscope: string,\n\toptions: ParseAdapterObjectOptions = {},\n): Record<string, unknown> | null {\n\tconst { trim = true, allowDone = true } = options;\n\tconst input = trim ? raw.trim() : raw;\n\tif (input.length === 0 || (allowDone && input === \"[DONE]\")) return null;\n\n\tconst payload = parseAdapterJSON(input, scope);\n\tif (!isRecord(payload)) {\n\t\tthrow adapterScopedError(scope, \"expected a JSON object\");\n\t}\n\treturn payload;\n}\n","import type { RawChunk } from \"../../core/types\";\n\nexport interface TextOrJsonDeltaOptions {\n\tjsonMode?: boolean | undefined;\n\tchoiceIndex?: number | undefined;\n}\n\nexport function textOrJsonDelta(\n\ttext: string,\n\toptions: TextOrJsonDeltaOptions,\n): RawChunk | undefined {\n\tif (text.length === 0) return undefined;\n\tif (options.jsonMode) return { kind: \"json-delta\", delta: text };\n\tif (options.choiceIndex !== undefined) {\n\t\treturn { kind: \"text-delta\", text, choiceIndex: options.choiceIndex };\n\t}\n\treturn { kind: \"text-delta\", text };\n}\n","import type { RawChunk } from \"../../core/types\";\nimport { asNumber, isRecord, optionalRawChunk } from \"../utils\";\n\nexport interface UsageFieldAliases {\n\tinput?: string[];\n\toutput?: string[];\n\treasoning?: string[];\n\ttotal?: string[];\n}\n\nconst DEFAULT_ALIASES: UsageFieldAliases = {\n\tinput: [\"inputTokens\", \"input_tokens\", \"promptTokens\", \"promptTokenCount\", \"inputTokenCount\"],\n\toutput: [\n\t\t\"outputTokens\",\n\t\t\"output_tokens\",\n\t\t\"completionTokens\",\n\t\t\"candidatesTokenCount\",\n\t\t\"outputTokenCount\",\n\t],\n\treasoning: [\"reasoningTokens\", \"reasoning_tokens\", \"thoughtsTokenCount\"],\n\ttotal: [\"totalTokens\", \"totalTokenCount\", \"total_tokens\"],\n};\n\nfunction firstNumber(\n\tvalue: Record<string, unknown>,\n\tfields: string[] | undefined,\n): number | undefined {\n\tif (!fields) return undefined;\n\tfor (const field of fields) {\n\t\tconst number = asNumber(value[field]);\n\t\tif (number !== undefined) return number;\n\t}\n\treturn undefined;\n}\n\nexport function buildUsageChunk(\n\tvalue: unknown,\n\taliases: UsageFieldAliases = DEFAULT_ALIASES,\n\toptions?: { mirrorTotalTokens?: boolean },\n): RawChunk | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst inputTokens = firstNumber(value, aliases.input);\n\tconst outputTokens = firstNumber(value, aliases.output);\n\tconst reasoningTokens = firstNumber(value, aliases.reasoning);\n\tconst totalTokens = firstNumber(value, aliases.total);\n\tif (\n\t\tinputTokens === undefined &&\n\t\toutputTokens === undefined &&\n\t\treasoningTokens === undefined &&\n\t\ttotalTokens === undefined\n\t) {\n\t\treturn undefined;\n\t}\n\tconst raw =\n\t\toptions?.mirrorTotalTokens && totalTokens !== undefined ? { ...value, totalTokens } : value;\n\treturn optionalRawChunk({\n\t\tkind: \"usage\",\n\t\tinputTokens,\n\t\toutputTokens,\n\t\treasoningTokens,\n\t\traw,\n\t});\n}\n","import type { FinishReason, RawChunk, StreamAdapter } from \"../core/types\";\nimport { libraryError, providerErrorChunksFromPayload } from \"./errors\";\nimport { incrementalJsonStringDelta } from \"./shared/incremental-json\";\nimport { parseAdapterObjectPayload } from \"./shared/parse-payload\";\nimport { textOrJsonDelta } from \"./shared/text-delta\";\nimport { buildUsageChunk, type UsageFieldAliases } from \"./shared/usage\";\nimport { asNumber, asString, createStreamAdapter, isRecord, optionalRawChunk } from \"./utils\";\n\nexport interface CohereAdapterOptions {\n\t/** Map content-delta text to json-delta instead of text-delta. */\n\tjsonMode?: boolean;\n}\n\ninterface ToolState {\n\tid: string;\n\tname: string;\n\tindex: number;\n\topen: boolean;\n\tlastArgsJson: string;\n}\n\ntype CohereStreamEvent = Record<string, unknown> & { type?: string };\n\nconst COHERE_USAGE_ALIASES: UsageFieldAliases = {\n\tinput: [\"input_tokens\", \"inputTokens\"],\n\toutput: [\"output_tokens\", \"outputTokens\"],\n\ttotal: [\"total_tokens\", \"totalTokens\"],\n};\n\nexport function cohereAdapter(options: CohereAdapterOptions = {}): StreamAdapter {\n\tconst parser = new CohereStreamParser(options);\n\treturn createStreamAdapter({\n\t\tparser,\n\t\tparseResponse,\n\t\toptions,\n\t});\n}\n\nclass CohereStreamParser {\n\tprivate messageStarted = false;\n\tprivate metadataEmitted = false;\n\tprivate readonly toolsByKey = new Map<string, ToolState>();\n\tprivate readonly indexToKey = new Map<number, string>();\n\n\tconstructor(private readonly options: CohereAdapterOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tconst payload = parseAdapterObjectPayload(raw, \"cohereAdapter.parseChunk\");\n\t\tif (!payload) return [];\n\n\t\tif (asString(payload.type) === \"error\" || isRecord(payload.error)) {\n\t\t\tconst errorBody = isRecord(payload.error) ? payload.error : payload;\n\t\t\treturn providerErrorChunksFromPayload(\n\t\t\t\terrorBody,\n\t\t\t\t\"cohereAdapter.parseChunk\",\n\t\t\t\tfalse,\n\t\t\t\t\"Cohere provider error\",\n\t\t\t);\n\t\t}\n\n\t\tconst eventType = asString(payload.type);\n\t\tif (!eventType) return optionalMetadataRaw(payload);\n\n\t\tswitch (eventType) {\n\t\t\tcase \"message-start\":\n\t\t\t\treturn this.messageStartChunks(payload);\n\t\t\tcase \"content-start\":\n\t\t\tcase \"content-end\":\n\t\t\t\treturn [];\n\t\t\tcase \"content-delta\":\n\t\t\t\treturn this.contentDeltaChunks(payload);\n\t\t\tcase \"tool-plan-delta\":\n\t\t\t\treturn this.toolPlanDeltaChunks(payload);\n\t\t\tcase \"tool-call-start\":\n\t\t\t\treturn this.toolCallStartChunks(payload);\n\t\t\tcase \"tool-call-delta\":\n\t\t\t\treturn this.toolCallDeltaChunks(payload);\n\t\t\tcase \"tool-call-end\":\n\t\t\t\treturn this.toolCallEndChunks(payload);\n\t\t\tcase \"citation-start\":\n\t\t\t\treturn this.citationStartChunks(payload);\n\t\t\tcase \"citation-end\":\n\t\t\t\treturn [];\n\t\t\tcase \"message-end\":\n\t\t\t\treturn this.messageEndChunks(payload);\n\t\t\tdefault:\n\t\t\t\treturn optionalMetadataRaw(payload);\n\t\t}\n\t}\n\n\tprivate messageStartChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tif (this.messageStarted) return [];\n\t\tthis.messageStarted = true;\n\n\t\tconst chunks: RawChunk[] = [{ kind: \"message-start\" }];\n\t\tconst messageId = asString(payload.id);\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst message = delta && isRecord(delta.message) ? delta.message : undefined;\n\t\tconst role = message ? asString(message.role) : undefined;\n\n\t\tif (messageId || role) {\n\t\t\tthis.metadataEmitted = true;\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"metadata\",\n\t\t\t\t\tresponseId: messageId,\n\t\t\t\t\traw: { id: messageId, role },\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate contentDeltaChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst message = delta && isRecord(delta.message) ? delta.message : undefined;\n\t\tconst content = message && isRecord(message.content) ? message.content : undefined;\n\t\tconst text = content ? asString(content.text) : undefined;\n\t\tif (text === undefined || text.length === 0) return [];\n\n\t\tconst textChunk = textOrJsonDelta(text, {\n\t\t\tjsonMode: this.options.jsonMode,\n\t\t\tchoiceIndex: asNumber(payload.index) ?? 0,\n\t\t});\n\t\treturn textChunk ? [textChunk] : [];\n\t}\n\n\tprivate toolPlanDeltaChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst message = delta && isRecord(delta.message) ? delta.message : undefined;\n\t\tconst toolPlan = message ? asString(message.tool_plan) : asString(delta?.tool_plan);\n\t\tif (toolPlan === undefined || toolPlan.length === 0) return [];\n\t\treturn [{ kind: \"reasoning-delta\", text: toolPlan, variant: \"detail\" }];\n\t}\n\n\tprivate toolCallStartChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst baseIndex = asNumber(payload.index) ?? 0;\n\t\tconst toolCalls = toolCallsFromDelta(payload.delta);\n\t\tif (toolCalls.length === 0) return [];\n\n\t\tconst chunks: RawChunk[] = [];\n\t\tfor (let i = 0; i < toolCalls.length; i += 1) {\n\t\t\tconst toolCall = toolCalls[i]!;\n\t\t\tconst index = asNumber(toolCall.index) ?? baseIndex + i;\n\t\t\tconst id = asString(toolCall.id) ?? `cohere:tool:${index}`;\n\t\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\t\tconst name = fn ? (asString(fn.name) ?? \"unknown\") : \"unknown\";\n\t\t\tconst key = reconcileToolKey(this.toolsByKey, this.indexToKey, index, id);\n\t\t\tconst existing = this.toolsByKey.get(key);\n\t\t\tif (existing?.open && existing.id === id) continue;\n\n\t\t\tconst state: ToolState = {\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\tindex,\n\t\t\t\topen: true,\n\t\t\t\tlastArgsJson: asString(fn?.arguments) ?? \"\",\n\t\t\t};\n\t\t\tthis.toolsByKey.set(key, state);\n\t\t\tthis.indexToKey.set(index, key);\n\t\t\tif (id !== key) this.toolsByKey.set(id, state);\n\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"tool-start\",\n\t\t\t\t\tid,\n\t\t\t\t\tname,\n\t\t\t\t\tindex,\n\t\t\t\t\tchoiceIndex: 0,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\treturn chunks;\n\t}\n\n\tprivate toolCallDeltaChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst index = asNumber(payload.index) ?? 0;\n\t\tconst toolCalls = toolCallsFromDelta(payload.delta);\n\t\tif (toolCalls.length === 0) return [];\n\n\t\tconst chunks: RawChunk[] = [];\n\t\tfor (const toolCall of toolCalls) {\n\t\t\tconst lateId = asString(toolCall.id);\n\t\t\tconst key = this.resolveToolKey(index, lateId);\n\t\t\tlet state = key ? this.toolsByKey.get(key) : undefined;\n\t\t\tif (!state) {\n\t\t\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\t\t\tconst name = fn ? (asString(fn.name) ?? \"unknown\") : \"unknown\";\n\t\t\t\tconst id = lateId ?? `cohere:tool:${index}`;\n\t\t\t\tstate = { id, name, index, open: true, lastArgsJson: \"\" };\n\t\t\t\tthis.toolsByKey.set(id, state);\n\t\t\t\tthis.indexToKey.set(index, id);\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-start\",\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t\tchoiceIndex: 0,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} else if (lateId && state.id !== lateId) {\n\t\t\t\tthis.reconcileLateId(state, lateId, index);\n\t\t\t}\n\n\t\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\t\tconst argsText = fn ? asString(fn.arguments) : undefined;\n\t\t\tif (argsText !== undefined && argsText.length > 0 && state) {\n\t\t\t\tconst delta = incrementalJsonStringDelta(state, argsText);\n\t\t\t\tif (delta) {\n\t\t\t\t\tchunks.push(\n\t\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\t\t\t\tid: state.id,\n\t\t\t\t\t\t\tdelta,\n\t\t\t\t\t\t\tindex: state.index,\n\t\t\t\t\t\t\tchoiceIndex: 0,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chunks;\n\t}\n\n\tprivate toolCallEndChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst index = asNumber(payload.index) ?? 0;\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst message = delta && isRecord(delta.message) ? delta.message : undefined;\n\t\tconst toolCalls = message ? toolCallsFromRecord(message.tool_calls) : [];\n\t\tconst lateId = toolCalls[0] ? asString(toolCalls[0].id) : undefined;\n\n\t\tconst key = this.resolveToolKey(index, lateId);\n\t\tconst state = key ? this.toolsByKey.get(key) : undefined;\n\t\tif (!state?.open) return [];\n\n\t\tif (lateId && state.id !== lateId) {\n\t\t\tthis.reconcileLateId(state, lateId, index);\n\t\t}\n\n\t\tstate.open = false;\n\t\treturn [\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"tool-done\",\n\t\t\t\tid: state.id,\n\t\t\t\tindex: state.index,\n\t\t\t\tchoiceIndex: 0,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate citationStartChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst message = delta && isRecord(delta.message) ? delta.message : undefined;\n\t\tconst citations = message?.citations;\n\t\treturn [\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"metadata\",\n\t\t\t\traw: { citation: citations, index: payload.index },\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate messageEndChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst chunks: RawChunk[] = [];\n\n\t\tconst usageSource =\n\t\t\tdelta && isRecord(delta.usage)\n\t\t\t\t? usageFromCohereUsage(delta.usage)\n\t\t\t\t: delta && isRecord(delta.billed_units)\n\t\t\t\t\t? delta.billed_units\n\t\t\t\t\t: undefined;\n\t\tconst usage = buildUsageChunk(usageSource, COHERE_USAGE_ALIASES);\n\t\tif (usage) chunks.push(usage);\n\n\t\tconst finishReason = delta ? asString(delta.finish_reason) : undefined;\n\t\tif (finishReason) {\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"metadata\",\n\t\t\t\t\traw: { finish_reason: finishReason },\n\t\t\t\t}),\n\t\t\t);\n\t\t\tchunks.push({\n\t\t\t\tkind: \"finish\",\n\t\t\t\treason: mapCohereFinishReason(finishReason),\n\t\t\t\tchoiceIndex: 0,\n\t\t\t});\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate resolveToolKey(index: number, id: string | undefined): string | undefined {\n\t\tif (id && this.toolsByKey.has(id)) return id;\n\t\tconst byIndex = this.indexToKey.get(index);\n\t\tif (byIndex) return byIndex;\n\t\tif (id) return id;\n\t\treturn this.indexToKey.get(index);\n\t}\n\n\tprivate reconcileLateId(state: ToolState, lateId: string, index: number): void {\n\t\tconst oldKey = state.id;\n\t\tstate.id = lateId;\n\t\tthis.toolsByKey.delete(oldKey);\n\t\tthis.toolsByKey.set(lateId, state);\n\t\tthis.indexToKey.set(index, lateId);\n\t}\n}\n\nfunction parseResponse(body: unknown, options: CohereAdapterOptions): RawChunk[] {\n\tif (!isRecord(body)) {\n\t\tthrow libraryError(\"cohereAdapter.parseResponse expected a Cohere Chat v2 response object\");\n\t}\n\n\tif (asString(body.type) === \"error\" || isRecord(body.error)) {\n\t\tconst errorBody = isRecord(body.error) ? body.error : body;\n\t\treturn providerErrorChunksFromPayload(\n\t\t\terrorBody,\n\t\t\t\"cohereAdapter.parseResponse\",\n\t\t\tfalse,\n\t\t\t\"Cohere provider error\",\n\t\t);\n\t}\n\n\tconst message = isRecord(body.message) ? body.message : undefined;\n\tif (!message) {\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst usage = buildUsageChunk(body.usage, COHERE_USAGE_ALIASES);\n\t\tif (usage) chunks.push(usage);\n\t\tconst finishReason = asString(body.finish_reason);\n\t\tif (finishReason) {\n\t\t\tchunks.push({\n\t\t\t\tkind: \"finish\",\n\t\t\t\treason: mapCohereFinishReason(finishReason),\n\t\t\t\tchoiceIndex: 0,\n\t\t\t});\n\t\t} else {\n\t\t\tchunks.push({ kind: \"finish\", reason: \"stop\", choiceIndex: 0 });\n\t\t}\n\t\treturn chunks;\n\t}\n\n\tconst parser = new CohereStreamParser(options);\n\tconst syntheticEvents = synthesizeCohereStreamEvents(body);\n\tconst chunks: RawChunk[] = [];\n\tfor (const event of syntheticEvents) {\n\t\tchunks.push(...parser.parseChunk(JSON.stringify(event)));\n\t}\n\n\tconst finishReason = asString(body.finish_reason);\n\tif (finishReason && !chunks.some((chunk) => chunk.kind === \"finish\")) {\n\t\tchunks.push({\n\t\t\tkind: \"finish\",\n\t\t\treason: mapCohereFinishReason(finishReason),\n\t\t\tchoiceIndex: 0,\n\t\t});\n\t} else if (!chunks.some((chunk) => chunk.kind === \"finish\")) {\n\t\tchunks.push({ kind: \"finish\", reason: \"stop\", choiceIndex: 0 });\n\t}\n\n\treturn chunks;\n}\n\nfunction synthesizeCohereStreamEvents(body: Record<string, unknown>): unknown[] {\n\tconst events: unknown[] = [];\n\tconst message = isRecord(body.message) ? body.message : undefined;\n\tif (!message) return events;\n\n\tconst messageId = asString(body.id);\n\tevents.push({\n\t\ttype: \"message-start\",\n\t\t...(messageId ? { id: messageId } : {}),\n\t\tdelta: { message: { role: asString(message.role) ?? \"assistant\" } },\n\t});\n\n\tconst toolPlan = asString(message.tool_plan);\n\tif (toolPlan) {\n\t\tevents.push({\n\t\t\ttype: \"tool-plan-delta\",\n\t\t\tdelta: { message: { tool_plan: toolPlan } },\n\t\t});\n\t}\n\n\tconst content = Array.isArray(message.content) ? message.content : [];\n\tfor (const block of content) {\n\t\tif (!isRecord(block)) continue;\n\t\tconst text = asString(block.text);\n\t\tif (text !== undefined && text.length > 0) {\n\t\t\tevents.push({\n\t\t\t\ttype: \"content-delta\",\n\t\t\t\tindex: 0,\n\t\t\t\tdelta: { message: { content: { text } } },\n\t\t\t});\n\t\t}\n\t}\n\n\tconst citations = message.citations;\n\tif (Array.isArray(citations)) {\n\t\tfor (const citation of citations) {\n\t\t\tevents.push({\n\t\t\t\ttype: \"citation-start\",\n\t\t\t\tindex: 0,\n\t\t\t\tdelta: { message: { citations: citation } },\n\t\t\t});\n\t\t}\n\t}\n\n\tconst toolCalls = toolCallsFromRecord(message.tool_calls);\n\tlet toolIndex = 0;\n\tfor (const toolCall of toolCalls) {\n\t\tconst id = asString(toolCall.id) ?? `cohere:tool:${toolIndex}`;\n\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\tconst name = fn ? (asString(fn.name) ?? \"unknown\") : \"unknown\";\n\t\tconst args = fn ? asString(fn.arguments) : undefined;\n\t\tevents.push({\n\t\t\ttype: \"tool-call-start\",\n\t\t\tindex: toolIndex,\n\t\t\tdelta: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttool_calls: {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype: \"function\",\n\t\t\t\t\t\tfunction: { name, arguments: args ?? \"\" },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\tif (args !== undefined && args.length > 0) {\n\t\t\tevents.push({\n\t\t\t\ttype: \"tool-call-delta\",\n\t\t\t\tindex: toolIndex,\n\t\t\t\tdelta: {\n\t\t\t\t\tmessage: {\n\t\t\t\t\t\ttool_calls: {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tfunction: { arguments: args },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\tevents.push({ type: \"tool-call-end\", index: toolIndex });\n\t\ttoolIndex += 1;\n\t}\n\n\tif (body.usage !== undefined || body.finish_reason !== undefined) {\n\t\tevents.push({\n\t\t\ttype: \"message-end\",\n\t\t\tdelta: {\n\t\t\t\t...(body.finish_reason !== undefined ? { finish_reason: body.finish_reason } : {}),\n\t\t\t\t...(body.usage !== undefined ? { usage: body.usage } : {}),\n\t\t\t},\n\t\t});\n\t}\n\n\treturn events;\n}\n\nfunction toolCallsFromDelta(delta: unknown): Record<string, unknown>[] {\n\tif (!isRecord(delta)) return [];\n\tconst message = isRecord(delta.message) ? delta.message : undefined;\n\treturn toolCallsFromRecord(message?.tool_calls);\n}\n\nfunction toolCallsFromRecord(value: unknown): Record<string, unknown>[] {\n\tif (value === undefined) return [];\n\tif (Array.isArray(value)) {\n\t\treturn value.filter((item): item is Record<string, unknown> => isRecord(item));\n\t}\n\tif (isRecord(value)) return [value];\n\treturn [];\n}\n\nfunction usageFromCohereUsage(usage: Record<string, unknown>): Record<string, unknown> | undefined {\n\tconst billed = isRecord(usage.billed_units) ? usage.billed_units : undefined;\n\tif (billed) return billed;\n\tconst tokens = isRecord(usage.tokens) ? usage.tokens : undefined;\n\tif (tokens) return tokens;\n\treturn usage;\n}\n\nfunction reconcileToolKey(\n\ttoolsByKey: Map<string, ToolState>,\n\tindexToKey: Map<number, string>,\n\tindex: number,\n\tid: string,\n): string {\n\tconst existingIndexKey = indexToKey.get(index);\n\tif (existingIndexKey && toolsByKey.has(existingIndexKey)) {\n\t\tconst state = toolsByKey.get(existingIndexKey);\n\t\tif (state && state.id.startsWith(\"cohere:tool:\") && !id.startsWith(\"cohere:tool:\")) {\n\t\t\ttoolsByKey.delete(existingIndexKey);\n\t\t\tstate.id = id;\n\t\t\ttoolsByKey.set(id, state);\n\t\t\tindexToKey.set(index, id);\n\t\t\treturn id;\n\t\t}\n\t\treturn existingIndexKey;\n\t}\n\treturn id;\n}\n\nfunction mapCohereFinishReason(value: string): FinishReason {\n\tconst normalized = value.toUpperCase();\n\tswitch (normalized) {\n\t\tcase \"COMPLETE\":\n\t\tcase \"STOP_SEQUENCE\":\n\t\t\treturn \"stop\";\n\t\tcase \"MAX_TOKENS\":\n\t\t\treturn \"length\";\n\t\tcase \"TOOL_CALL\":\n\t\t\treturn \"tool_calls\";\n\t\tcase \"ERROR\":\n\t\tcase \"TIMEOUT\":\n\t\t\treturn \"error\";\n\t\tdefault:\n\t\t\tif (normalized.includes(\"FILTER\") || normalized.includes(\"SAFETY\")) {\n\t\t\t\treturn \"content_filter\";\n\t\t\t}\n\t\t\treturn \"stop\";\n\t}\n}\n\nfunction optionalMetadataRaw(payload: Record<string, unknown>): RawChunk[] {\n\tif (Object.keys(payload).length === 0) return [];\n\treturn [\n\t\toptionalRawChunk({\n\t\t\tkind: \"metadata\",\n\t\t\traw: payload,\n\t\t}),\n\t];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/utils/object.ts","../../src/adapters/utils.ts","../../src/adapters/errors.ts","../../src/adapters/shared/incremental-json.ts","../../src/adapters/shared/citation-grounding.ts","../../src/adapters/shared/parse-payload.ts","../../src/adapters/shared/text-delta.ts","../../src/adapters/shared/usage.ts","../../src/adapters/cohere.ts"],"names":["fn","chunks","finishReason"],"mappings":"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","file":"cohere.js","sourcesContent":["/** Strip undefined own properties; preserve explicit null. */\nexport function stripUndefined<T extends Record<string, unknown>>(obj: T): T {\n\treturn Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== undefined)) as T;\n}\n","/** Internal adapter utilities. Not part of the public API. */\nimport type { RawChunk, StreamAdapter } from \"../core/types\";\nimport { stripUndefined } from \"../core/utils/object\";\nimport { adapterScopedError } from \"./errors\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nexport function asNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function optionalRawChunk(input: Record<string, unknown>): RawChunk {\n\treturn stripUndefined(input) as RawChunk;\n}\n\nexport function prefixedAdapterError(feature: string, message: string): Error {\n\treturn adapterScopedError(feature, message);\n}\n\nexport function createStreamAdapter<TOptions>(config: {\n\tparser: { parseChunk(raw: string): RawChunk[] };\n\tparseResponse: (body: unknown, options: TOptions) => RawChunk[];\n\toptions: TOptions;\n}): StreamAdapter {\n\treturn {\n\t\tparseChunk(raw) {\n\t\t\treturn config.parser.parseChunk(raw);\n\t\t},\n\t\tparseResponse(body) {\n\t\t\treturn config.parseResponse(body, config.options);\n\t\t},\n\t};\n}\n\nexport function parseAdapterJSON(raw: string, feature: string): unknown {\n\ttry {\n\t\treturn JSON.parse(raw) as unknown;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow prefixedAdapterError(feature, message);\n\t}\n}\n","/** Internal adapter error helpers. Not part of the public API. */\nimport type { RawChunk } from \"../core/types\";\nimport { asString } from \"./utils\";\n\nexport function libraryError(message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${message}`);\n}\n\nexport function adapterScopedError(scope: string, message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${scope}: ${message}`);\n}\n\nexport function providerErrorChunks(error: Error, recoverable = false): RawChunk[] {\n\treturn [\n\t\t{ kind: \"provider-error\", error, recoverable },\n\t\t{ kind: \"finish\", reason: \"error\" },\n\t];\n}\n\nexport function providerErrorChunksFromMessage(message: string, recoverable = false): RawChunk[] {\n\treturn providerErrorChunks(libraryError(message), recoverable);\n}\n\nexport function providerErrorChunksFromPayload(\n\terrorPayload: Record<string, unknown>,\n\tscope: string,\n\trecoverable: boolean,\n\tfallbackMessage: string,\n): RawChunk[] {\n\tconst message = asString(errorPayload.message) ?? fallbackMessage;\n\tconst error = adapterScopedError(scope, message);\n\tObject.defineProperty(error, \"raw\", {\n\t\tvalue: errorPayload,\n\t\tenumerable: false,\n\t});\n\treturn providerErrorChunks(error, recoverable);\n}\n","/** Tracks last serialized JSON for prefix-diff tool arg deltas. */\nexport interface IncrementalJsonState {\n\tlastArgsJson: string;\n}\n\n/** Emit only the new suffix when `nextInput` extends `prev`, else full replace. */\nexport function incrementalJsonStringDelta(\n\tstate: IncrementalJsonState,\n\tnextInput: string,\n): string | undefined {\n\tconst prev = state.lastArgsJson;\n\tif (nextInput === prev) return undefined;\n\tconst delta =\n\t\tprev.length > 0 && nextInput.startsWith(prev) ? nextInput.slice(prev.length) : nextInput;\n\tstate.lastArgsJson = nextInput;\n\treturn delta.length > 0 ? delta : undefined;\n}\n","import type { RawChunk } from \"../../core/types\";\nimport { asNumber, asString, isRecord, optionalRawChunk } from \"../utils\";\n\nexport interface CitationGroundingOptions {\n\temitLegacyCitationMetadata?: boolean;\n}\n\ntype CitationChunk = Extract<RawChunk, { kind: \"citation\" }>;\ntype GroundingChunk = Extract<RawChunk, { kind: \"grounding\" }>;\n\nexport function cohereCitationFromStartPayload(\n\tcitations: unknown,\n\tindex?: number,\n\toptions: CitationGroundingOptions = {},\n): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tconst citation = citationChunkFromCohere(citations, index);\n\tif (citation) chunks.push(citation);\n\tif (options.emitLegacyCitationMetadata && citations !== undefined) {\n\t\tchunks.push(\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"metadata\",\n\t\t\t\traw: { citation: citations, index },\n\t\t\t}),\n\t\t);\n\t}\n\treturn chunks;\n}\n\nfunction citationChunkFromCohere(citations: unknown, index?: number): RawChunk | undefined {\n\tif (citations === undefined) return undefined;\n\n\tconst chunk: CitationChunk = { kind: \"citation\", raw: { citation: citations, index } };\n\tconst numericIndex = asNumber(index);\n\tif (numericIndex !== undefined) chunk.index = numericIndex;\n\n\tif (isRecord(citations)) {\n\t\tconst start = asNumber(citations.start);\n\t\tconst end = asNumber(citations.end);\n\t\tconst text = asString(citations.text);\n\t\tif (start !== undefined && end !== undefined) {\n\t\t\tchunk.span = { start, end, ...(text ? { text } : {}) };\n\t\t} else if (text) {\n\t\t\tchunk.span = { start: 0, end: text.length, text };\n\t\t}\n\t\tconst sources = citations.sources;\n\t\tif (Array.isArray(sources) && sources.length > 0) {\n\t\t\tchunk.sources = sources;\n\t\t}\n\t}\n\n\treturn optionalRawChunk(chunk);\n}\n\nexport function perplexityCitationFromPayload(\n\tpayload: Record<string, unknown>,\n\toptions: CitationGroundingOptions = {},\n): RawChunk[] {\n\tconst citations = payload.citations;\n\tconst searchResults = payload.search_results;\n\tconst hasCitations = Array.isArray(citations) && citations.length > 0;\n\tconst hasSearchResults = Array.isArray(searchResults) && searchResults.length > 0;\n\tif (!hasCitations && !hasSearchResults) return [];\n\n\tconst urls = hasCitations\n\t\t? citations.filter((item): item is string => typeof item === \"string\")\n\t\t: undefined;\n\n\tconst chunk: CitationChunk = {\n\t\tkind: \"citation\",\n\t\traw: {\n\t\t\t...(hasCitations ? { citations } : {}),\n\t\t\t...(hasSearchResults ? { search_results: searchResults } : {}),\n\t\t},\n\t};\n\tif (urls && urls.length > 0) chunk.urls = urls;\n\tif (hasSearchResults) chunk.searchResults = searchResults as unknown[];\n\n\tconst chunks: RawChunk[] = [optionalRawChunk(chunk)!];\n\tif (options.emitLegacyCitationMetadata) {\n\t\tchunks.push(\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"metadata\",\n\t\t\t\traw: {\n\t\t\t\t\t...(hasCitations ? { citations } : {}),\n\t\t\t\t\t...(hasSearchResults ? { search_results: searchResults } : {}),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n\treturn chunks;\n}\n\nexport function geminiCitationGroundingFromCandidate(\n\tcandidate: Record<string, unknown>,\n\toptions: CitationGroundingOptions = {},\n): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tconst citationMetadata = candidate.citationMetadata;\n\tconst groundingMetadata = candidate.groundingMetadata;\n\n\tif (citationMetadata !== undefined) {\n\t\tconst citation = citationChunkFromGemini(citationMetadata);\n\t\tif (citation) chunks.push(citation);\n\t}\n\tif (groundingMetadata !== undefined) {\n\t\tconst grounding = groundingChunkFromGemini(groundingMetadata);\n\t\tif (grounding) chunks.push(grounding);\n\t}\n\n\tif (\n\t\toptions.emitLegacyCitationMetadata &&\n\t\t(citationMetadata !== undefined || groundingMetadata !== undefined)\n\t) {\n\t\tchunks.push(\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"metadata\",\n\t\t\t\traw: { citationMetadata, groundingMetadata },\n\t\t\t}),\n\t\t);\n\t}\n\n\treturn chunks;\n}\n\nfunction citationChunkFromGemini(citationMetadata: unknown): RawChunk | undefined {\n\tif (citationMetadata === undefined) return undefined;\n\tconst chunk: CitationChunk = { kind: \"citation\", raw: citationMetadata };\n\tif (isRecord(citationMetadata) && Array.isArray(citationMetadata.citations)) {\n\t\tchunk.sources = citationMetadata.citations as unknown[];\n\t}\n\treturn optionalRawChunk(chunk);\n}\n\nfunction groundingChunkFromGemini(groundingMetadata: unknown): RawChunk | undefined {\n\tif (groundingMetadata === undefined) return undefined;\n\tconst chunk: GroundingChunk = { kind: \"grounding\", raw: groundingMetadata };\n\tif (isRecord(groundingMetadata)) {\n\t\tif (Array.isArray(groundingMetadata.webSearchQueries)) {\n\t\t\tchunk.queries = groundingMetadata.webSearchQueries as string[];\n\t\t}\n\t\tif (Array.isArray(groundingMetadata.groundingChunks)) {\n\t\t\tchunk.chunks = groundingMetadata.groundingChunks as unknown[];\n\t\t}\n\t\tif (Array.isArray(groundingMetadata.groundingSupports)) {\n\t\t\tchunk.supports = groundingMetadata.groundingSupports as unknown[];\n\t\t}\n\t}\n\treturn optionalRawChunk(chunk);\n}\n\nexport function payloadWithoutCitationRootFields(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst next = { ...payload };\n\tdelete next.citations;\n\tdelete next.search_results;\n\treturn next;\n}\n\nexport function metadataPayloadWithoutCitationFields(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\treturn payloadWithoutCitationRootFields(payload);\n}\n","import { adapterScopedError } from \"../errors\";\nimport { isRecord, parseAdapterJSON } from \"../utils\";\n\nexport interface ParseAdapterObjectOptions {\n\ttrim?: boolean;\n\tallowDone?: boolean;\n}\n\n/**\n * Parse a single adapter payload string into a JSON object.\n * Returns null for empty / [DONE] lines when configured.\n */\nexport function parseAdapterObjectPayload(\n\traw: string,\n\tscope: string,\n\toptions: ParseAdapterObjectOptions = {},\n): Record<string, unknown> | null {\n\tconst { trim = true, allowDone = true } = options;\n\tconst input = trim ? raw.trim() : raw;\n\tif (input.length === 0 || (allowDone && input === \"[DONE]\")) return null;\n\n\tconst payload = parseAdapterJSON(input, scope);\n\tif (!isRecord(payload)) {\n\t\tthrow adapterScopedError(scope, \"expected a JSON object\");\n\t}\n\treturn payload;\n}\n","import type { RawChunk } from \"../../core/types\";\n\nexport interface TextOrJsonDeltaOptions {\n\tjsonMode?: boolean | undefined;\n\tchoiceIndex?: number | undefined;\n}\n\nexport function textOrJsonDelta(\n\ttext: string,\n\toptions: TextOrJsonDeltaOptions,\n): RawChunk | undefined {\n\tif (text.length === 0) return undefined;\n\tif (options.jsonMode) return { kind: \"json-delta\", delta: text };\n\tif (options.choiceIndex !== undefined) {\n\t\treturn { kind: \"text-delta\", text, choiceIndex: options.choiceIndex };\n\t}\n\treturn { kind: \"text-delta\", text };\n}\n","import type { RawChunk } from \"../../core/types\";\nimport { asNumber, isRecord, optionalRawChunk } from \"../utils\";\n\nexport interface UsageFieldAliases {\n\tinput?: string[];\n\toutput?: string[];\n\treasoning?: string[];\n\ttotal?: string[];\n}\n\nconst DEFAULT_ALIASES: UsageFieldAliases = {\n\tinput: [\"inputTokens\", \"input_tokens\", \"promptTokens\", \"promptTokenCount\", \"inputTokenCount\"],\n\toutput: [\n\t\t\"outputTokens\",\n\t\t\"output_tokens\",\n\t\t\"completionTokens\",\n\t\t\"candidatesTokenCount\",\n\t\t\"outputTokenCount\",\n\t],\n\treasoning: [\"reasoningTokens\", \"reasoning_tokens\", \"thoughtsTokenCount\"],\n\ttotal: [\"totalTokens\", \"totalTokenCount\", \"total_tokens\"],\n};\n\nfunction firstNumber(\n\tvalue: Record<string, unknown>,\n\tfields: string[] | undefined,\n): number | undefined {\n\tif (!fields) return undefined;\n\tfor (const field of fields) {\n\t\tconst number = asNumber(value[field]);\n\t\tif (number !== undefined) return number;\n\t}\n\treturn undefined;\n}\n\nexport function buildUsageChunk(\n\tvalue: unknown,\n\taliases: UsageFieldAliases = DEFAULT_ALIASES,\n\toptions?: { mirrorTotalTokens?: boolean },\n): RawChunk | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst inputTokens = firstNumber(value, aliases.input);\n\tconst outputTokens = firstNumber(value, aliases.output);\n\tconst reasoningTokens = firstNumber(value, aliases.reasoning);\n\tconst totalTokens = firstNumber(value, aliases.total);\n\tif (\n\t\tinputTokens === undefined &&\n\t\toutputTokens === undefined &&\n\t\treasoningTokens === undefined &&\n\t\ttotalTokens === undefined\n\t) {\n\t\treturn undefined;\n\t}\n\tconst raw =\n\t\toptions?.mirrorTotalTokens && totalTokens !== undefined ? { ...value, totalTokens } : value;\n\treturn optionalRawChunk({\n\t\tkind: \"usage\",\n\t\tinputTokens,\n\t\toutputTokens,\n\t\treasoningTokens,\n\t\traw,\n\t});\n}\n","import type { FinishReason, RawChunk, StreamAdapter } from \"../core/types\";\nimport { libraryError, providerErrorChunksFromPayload } from \"./errors\";\nimport { incrementalJsonStringDelta } from \"./shared/incremental-json\";\nimport { cohereCitationFromStartPayload } from \"./shared/citation-grounding\";\nimport { parseAdapterObjectPayload } from \"./shared/parse-payload\";\nimport { textOrJsonDelta } from \"./shared/text-delta\";\nimport { buildUsageChunk, type UsageFieldAliases } from \"./shared/usage\";\nimport { asNumber, asString, createStreamAdapter, isRecord, optionalRawChunk } from \"./utils\";\n\nexport interface CohereAdapterOptions {\n\t/** Map content-delta text to json-delta instead of text-delta. */\n\tjsonMode?: boolean;\n\t/** @deprecated Dual-emit legacy metadata.raw citation blobs alongside typed events. */\n\temitLegacyCitationMetadata?: boolean;\n}\n\ninterface ToolState {\n\tid: string;\n\tname: string;\n\tindex: number;\n\topen: boolean;\n\tlastArgsJson: string;\n}\n\ntype CohereStreamEvent = Record<string, unknown> & { type?: string };\n\nconst COHERE_USAGE_ALIASES: UsageFieldAliases = {\n\tinput: [\"input_tokens\", \"inputTokens\"],\n\toutput: [\"output_tokens\", \"outputTokens\"],\n\ttotal: [\"total_tokens\", \"totalTokens\"],\n};\n\nexport function cohereAdapter(options: CohereAdapterOptions = {}): StreamAdapter {\n\tconst parser = new CohereStreamParser(options);\n\treturn createStreamAdapter({\n\t\tparser,\n\t\tparseResponse,\n\t\toptions,\n\t});\n}\n\nclass CohereStreamParser {\n\tprivate messageStarted = false;\n\tprivate metadataEmitted = false;\n\tprivate readonly toolsByKey = new Map<string, ToolState>();\n\tprivate readonly indexToKey = new Map<number, string>();\n\n\tconstructor(private readonly options: CohereAdapterOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tconst payload = parseAdapterObjectPayload(raw, \"cohereAdapter.parseChunk\");\n\t\tif (!payload) return [];\n\n\t\tif (asString(payload.type) === \"error\" || isRecord(payload.error)) {\n\t\t\tconst errorBody = isRecord(payload.error) ? payload.error : payload;\n\t\t\treturn providerErrorChunksFromPayload(\n\t\t\t\terrorBody,\n\t\t\t\t\"cohereAdapter.parseChunk\",\n\t\t\t\tfalse,\n\t\t\t\t\"Cohere provider error\",\n\t\t\t);\n\t\t}\n\n\t\tconst eventType = asString(payload.type);\n\t\tif (!eventType) return optionalMetadataRaw(payload);\n\n\t\tswitch (eventType) {\n\t\t\tcase \"message-start\":\n\t\t\t\treturn this.messageStartChunks(payload);\n\t\t\tcase \"content-start\":\n\t\t\tcase \"content-end\":\n\t\t\t\treturn [];\n\t\t\tcase \"content-delta\":\n\t\t\t\treturn this.contentDeltaChunks(payload);\n\t\t\tcase \"tool-plan-delta\":\n\t\t\t\treturn this.toolPlanDeltaChunks(payload);\n\t\t\tcase \"tool-call-start\":\n\t\t\t\treturn this.toolCallStartChunks(payload);\n\t\t\tcase \"tool-call-delta\":\n\t\t\t\treturn this.toolCallDeltaChunks(payload);\n\t\t\tcase \"tool-call-end\":\n\t\t\t\treturn this.toolCallEndChunks(payload);\n\t\t\tcase \"citation-start\":\n\t\t\t\treturn this.citationStartChunks(payload);\n\t\t\tcase \"citation-end\":\n\t\t\t\treturn [];\n\t\t\tcase \"message-end\":\n\t\t\t\treturn this.messageEndChunks(payload);\n\t\t\tdefault:\n\t\t\t\treturn optionalMetadataRaw(payload);\n\t\t}\n\t}\n\n\tprivate messageStartChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tif (this.messageStarted) return [];\n\t\tthis.messageStarted = true;\n\n\t\tconst chunks: RawChunk[] = [{ kind: \"message-start\" }];\n\t\tconst messageId = asString(payload.id);\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst message = delta && isRecord(delta.message) ? delta.message : undefined;\n\t\tconst role = message ? asString(message.role) : undefined;\n\n\t\tif (messageId || role) {\n\t\t\tthis.metadataEmitted = true;\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"metadata\",\n\t\t\t\t\tresponseId: messageId,\n\t\t\t\t\traw: { id: messageId, role },\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate contentDeltaChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst message = delta && isRecord(delta.message) ? delta.message : undefined;\n\t\tconst content = message && isRecord(message.content) ? message.content : undefined;\n\t\tconst text = content ? asString(content.text) : undefined;\n\t\tif (text === undefined || text.length === 0) return [];\n\n\t\tconst textChunk = textOrJsonDelta(text, {\n\t\t\tjsonMode: this.options.jsonMode,\n\t\t\tchoiceIndex: asNumber(payload.index) ?? 0,\n\t\t});\n\t\treturn textChunk ? [textChunk] : [];\n\t}\n\n\tprivate toolPlanDeltaChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst message = delta && isRecord(delta.message) ? delta.message : undefined;\n\t\tconst toolPlan = message ? asString(message.tool_plan) : asString(delta?.tool_plan);\n\t\tif (toolPlan === undefined || toolPlan.length === 0) return [];\n\t\treturn [{ kind: \"reasoning-delta\", text: toolPlan, variant: \"detail\" }];\n\t}\n\n\tprivate toolCallStartChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst baseIndex = asNumber(payload.index) ?? 0;\n\t\tconst toolCalls = toolCallsFromDelta(payload.delta);\n\t\tif (toolCalls.length === 0) return [];\n\n\t\tconst chunks: RawChunk[] = [];\n\t\tfor (let i = 0; i < toolCalls.length; i += 1) {\n\t\t\tconst toolCall = toolCalls[i]!;\n\t\t\tconst index = asNumber(toolCall.index) ?? baseIndex + i;\n\t\t\tconst id = asString(toolCall.id) ?? `cohere:tool:${index}`;\n\t\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\t\tconst name = fn ? (asString(fn.name) ?? \"unknown\") : \"unknown\";\n\t\t\tconst key = reconcileToolKey(this.toolsByKey, this.indexToKey, index, id);\n\t\t\tconst existing = this.toolsByKey.get(key);\n\t\t\tif (existing?.open && existing.id === id) continue;\n\n\t\t\tconst state: ToolState = {\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\tindex,\n\t\t\t\topen: true,\n\t\t\t\tlastArgsJson: asString(fn?.arguments) ?? \"\",\n\t\t\t};\n\t\t\tthis.toolsByKey.set(key, state);\n\t\t\tthis.indexToKey.set(index, key);\n\t\t\tif (id !== key) this.toolsByKey.set(id, state);\n\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"tool-start\",\n\t\t\t\t\tid,\n\t\t\t\t\tname,\n\t\t\t\t\tindex,\n\t\t\t\t\tchoiceIndex: 0,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\treturn chunks;\n\t}\n\n\tprivate toolCallDeltaChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst index = asNumber(payload.index) ?? 0;\n\t\tconst toolCalls = toolCallsFromDelta(payload.delta);\n\t\tif (toolCalls.length === 0) return [];\n\n\t\tconst chunks: RawChunk[] = [];\n\t\tfor (const toolCall of toolCalls) {\n\t\t\tconst lateId = asString(toolCall.id);\n\t\t\tconst key = this.resolveToolKey(index, lateId);\n\t\t\tlet state = key ? this.toolsByKey.get(key) : undefined;\n\t\t\tif (!state) {\n\t\t\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\t\t\tconst name = fn ? (asString(fn.name) ?? \"unknown\") : \"unknown\";\n\t\t\t\tconst id = lateId ?? `cohere:tool:${index}`;\n\t\t\t\tstate = { id, name, index, open: true, lastArgsJson: \"\" };\n\t\t\t\tthis.toolsByKey.set(id, state);\n\t\t\t\tthis.indexToKey.set(index, id);\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-start\",\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t\tchoiceIndex: 0,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} else if (lateId && state.id !== lateId) {\n\t\t\t\tthis.reconcileLateId(state, lateId, index);\n\t\t\t}\n\n\t\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\t\tconst argsText = fn ? asString(fn.arguments) : undefined;\n\t\t\tif (argsText !== undefined && argsText.length > 0 && state) {\n\t\t\t\tconst delta = incrementalJsonStringDelta(state, argsText);\n\t\t\t\tif (delta) {\n\t\t\t\t\tchunks.push(\n\t\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\t\t\t\tid: state.id,\n\t\t\t\t\t\t\tdelta,\n\t\t\t\t\t\t\tindex: state.index,\n\t\t\t\t\t\t\tchoiceIndex: 0,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chunks;\n\t}\n\n\tprivate toolCallEndChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst index = asNumber(payload.index) ?? 0;\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst message = delta && isRecord(delta.message) ? delta.message : undefined;\n\t\tconst toolCalls = message ? toolCallsFromRecord(message.tool_calls) : [];\n\t\tconst lateId = toolCalls[0] ? asString(toolCalls[0].id) : undefined;\n\n\t\tconst key = this.resolveToolKey(index, lateId);\n\t\tconst state = key ? this.toolsByKey.get(key) : undefined;\n\t\tif (!state?.open) return [];\n\n\t\tif (lateId && state.id !== lateId) {\n\t\t\tthis.reconcileLateId(state, lateId, index);\n\t\t}\n\n\t\tstate.open = false;\n\t\treturn [\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"tool-done\",\n\t\t\t\tid: state.id,\n\t\t\t\tindex: state.index,\n\t\t\t\tchoiceIndex: 0,\n\t\t\t}),\n\t\t];\n\t}\n\n\tprivate citationStartChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst message = delta && isRecord(delta.message) ? delta.message : undefined;\n\t\tconst citations = message?.citations;\n\t\treturn cohereCitationFromStartPayload(citations, asNumber(payload.index), {\n\t\t\temitLegacyCitationMetadata: this.options.emitLegacyCitationMetadata ?? false,\n\t\t});\n\t}\n\n\tprivate messageEndChunks(payload: CohereStreamEvent): RawChunk[] {\n\t\tconst delta = isRecord(payload.delta) ? payload.delta : undefined;\n\t\tconst chunks: RawChunk[] = [];\n\n\t\tconst usageSource =\n\t\t\tdelta && isRecord(delta.usage)\n\t\t\t\t? usageFromCohereUsage(delta.usage)\n\t\t\t\t: delta && isRecord(delta.billed_units)\n\t\t\t\t\t? delta.billed_units\n\t\t\t\t\t: undefined;\n\t\tconst usage = buildUsageChunk(usageSource, COHERE_USAGE_ALIASES);\n\t\tif (usage) chunks.push(usage);\n\n\t\tconst finishReason = delta ? asString(delta.finish_reason) : undefined;\n\t\tif (finishReason) {\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"metadata\",\n\t\t\t\t\traw: { finish_reason: finishReason },\n\t\t\t\t}),\n\t\t\t);\n\t\t\tchunks.push({\n\t\t\t\tkind: \"finish\",\n\t\t\t\treason: mapCohereFinishReason(finishReason),\n\t\t\t\tchoiceIndex: 0,\n\t\t\t});\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate resolveToolKey(index: number, id: string | undefined): string | undefined {\n\t\tif (id && this.toolsByKey.has(id)) return id;\n\t\tconst byIndex = this.indexToKey.get(index);\n\t\tif (byIndex) return byIndex;\n\t\tif (id) return id;\n\t\treturn this.indexToKey.get(index);\n\t}\n\n\tprivate reconcileLateId(state: ToolState, lateId: string, index: number): void {\n\t\tconst oldKey = state.id;\n\t\tstate.id = lateId;\n\t\tthis.toolsByKey.delete(oldKey);\n\t\tthis.toolsByKey.set(lateId, state);\n\t\tthis.indexToKey.set(index, lateId);\n\t}\n}\n\nfunction parseResponse(body: unknown, options: CohereAdapterOptions): RawChunk[] {\n\tif (!isRecord(body)) {\n\t\tthrow libraryError(\"cohereAdapter.parseResponse expected a Cohere Chat v2 response object\");\n\t}\n\n\tif (asString(body.type) === \"error\" || isRecord(body.error)) {\n\t\tconst errorBody = isRecord(body.error) ? body.error : body;\n\t\treturn providerErrorChunksFromPayload(\n\t\t\terrorBody,\n\t\t\t\"cohereAdapter.parseResponse\",\n\t\t\tfalse,\n\t\t\t\"Cohere provider error\",\n\t\t);\n\t}\n\n\tconst message = isRecord(body.message) ? body.message : undefined;\n\tif (!message) {\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst usage = buildUsageChunk(body.usage, COHERE_USAGE_ALIASES);\n\t\tif (usage) chunks.push(usage);\n\t\tconst finishReason = asString(body.finish_reason);\n\t\tif (finishReason) {\n\t\t\tchunks.push({\n\t\t\t\tkind: \"finish\",\n\t\t\t\treason: mapCohereFinishReason(finishReason),\n\t\t\t\tchoiceIndex: 0,\n\t\t\t});\n\t\t} else {\n\t\t\tchunks.push({ kind: \"finish\", reason: \"stop\", choiceIndex: 0 });\n\t\t}\n\t\treturn chunks;\n\t}\n\n\tconst parser = new CohereStreamParser(options);\n\tconst syntheticEvents = synthesizeCohereStreamEvents(body);\n\tconst chunks: RawChunk[] = [];\n\tfor (const event of syntheticEvents) {\n\t\tchunks.push(...parser.parseChunk(JSON.stringify(event)));\n\t}\n\n\tconst finishReason = asString(body.finish_reason);\n\tif (finishReason && !chunks.some((chunk) => chunk.kind === \"finish\")) {\n\t\tchunks.push({\n\t\t\tkind: \"finish\",\n\t\t\treason: mapCohereFinishReason(finishReason),\n\t\t\tchoiceIndex: 0,\n\t\t});\n\t} else if (!chunks.some((chunk) => chunk.kind === \"finish\")) {\n\t\tchunks.push({ kind: \"finish\", reason: \"stop\", choiceIndex: 0 });\n\t}\n\n\treturn chunks;\n}\n\nfunction synthesizeCohereStreamEvents(body: Record<string, unknown>): unknown[] {\n\tconst events: unknown[] = [];\n\tconst message = isRecord(body.message) ? body.message : undefined;\n\tif (!message) return events;\n\n\tconst messageId = asString(body.id);\n\tevents.push({\n\t\ttype: \"message-start\",\n\t\t...(messageId ? { id: messageId } : {}),\n\t\tdelta: { message: { role: asString(message.role) ?? \"assistant\" } },\n\t});\n\n\tconst toolPlan = asString(message.tool_plan);\n\tif (toolPlan) {\n\t\tevents.push({\n\t\t\ttype: \"tool-plan-delta\",\n\t\t\tdelta: { message: { tool_plan: toolPlan } },\n\t\t});\n\t}\n\n\tconst content = Array.isArray(message.content) ? message.content : [];\n\tfor (const block of content) {\n\t\tif (!isRecord(block)) continue;\n\t\tconst text = asString(block.text);\n\t\tif (text !== undefined && text.length > 0) {\n\t\t\tevents.push({\n\t\t\t\ttype: \"content-delta\",\n\t\t\t\tindex: 0,\n\t\t\t\tdelta: { message: { content: { text } } },\n\t\t\t});\n\t\t}\n\t}\n\n\tconst citations = message.citations;\n\tif (Array.isArray(citations)) {\n\t\tfor (const citation of citations) {\n\t\t\tevents.push({\n\t\t\t\ttype: \"citation-start\",\n\t\t\t\tindex: 0,\n\t\t\t\tdelta: { message: { citations: citation } },\n\t\t\t});\n\t\t}\n\t}\n\n\tconst toolCalls = toolCallsFromRecord(message.tool_calls);\n\tlet toolIndex = 0;\n\tfor (const toolCall of toolCalls) {\n\t\tconst id = asString(toolCall.id) ?? `cohere:tool:${toolIndex}`;\n\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\tconst name = fn ? (asString(fn.name) ?? \"unknown\") : \"unknown\";\n\t\tconst args = fn ? asString(fn.arguments) : undefined;\n\t\tevents.push({\n\t\t\ttype: \"tool-call-start\",\n\t\t\tindex: toolIndex,\n\t\t\tdelta: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttool_calls: {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype: \"function\",\n\t\t\t\t\t\tfunction: { name, arguments: args ?? \"\" },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\tif (args !== undefined && args.length > 0) {\n\t\t\tevents.push({\n\t\t\t\ttype: \"tool-call-delta\",\n\t\t\t\tindex: toolIndex,\n\t\t\t\tdelta: {\n\t\t\t\t\tmessage: {\n\t\t\t\t\t\ttool_calls: {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tfunction: { arguments: args },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\tevents.push({ type: \"tool-call-end\", index: toolIndex });\n\t\ttoolIndex += 1;\n\t}\n\n\tif (body.usage !== undefined || body.finish_reason !== undefined) {\n\t\tevents.push({\n\t\t\ttype: \"message-end\",\n\t\t\tdelta: {\n\t\t\t\t...(body.finish_reason !== undefined ? { finish_reason: body.finish_reason } : {}),\n\t\t\t\t...(body.usage !== undefined ? { usage: body.usage } : {}),\n\t\t\t},\n\t\t});\n\t}\n\n\treturn events;\n}\n\nfunction toolCallsFromDelta(delta: unknown): Record<string, unknown>[] {\n\tif (!isRecord(delta)) return [];\n\tconst message = isRecord(delta.message) ? delta.message : undefined;\n\treturn toolCallsFromRecord(message?.tool_calls);\n}\n\nfunction toolCallsFromRecord(value: unknown): Record<string, unknown>[] {\n\tif (value === undefined) return [];\n\tif (Array.isArray(value)) {\n\t\treturn value.filter((item): item is Record<string, unknown> => isRecord(item));\n\t}\n\tif (isRecord(value)) return [value];\n\treturn [];\n}\n\nfunction usageFromCohereUsage(usage: Record<string, unknown>): Record<string, unknown> | undefined {\n\tconst billed = isRecord(usage.billed_units) ? usage.billed_units : undefined;\n\tif (billed) return billed;\n\tconst tokens = isRecord(usage.tokens) ? usage.tokens : undefined;\n\tif (tokens) return tokens;\n\treturn usage;\n}\n\nfunction reconcileToolKey(\n\ttoolsByKey: Map<string, ToolState>,\n\tindexToKey: Map<number, string>,\n\tindex: number,\n\tid: string,\n): string {\n\tconst existingIndexKey = indexToKey.get(index);\n\tif (existingIndexKey && toolsByKey.has(existingIndexKey)) {\n\t\tconst state = toolsByKey.get(existingIndexKey);\n\t\tif (state && state.id.startsWith(\"cohere:tool:\") && !id.startsWith(\"cohere:tool:\")) {\n\t\t\ttoolsByKey.delete(existingIndexKey);\n\t\t\tstate.id = id;\n\t\t\ttoolsByKey.set(id, state);\n\t\t\tindexToKey.set(index, id);\n\t\t\treturn id;\n\t\t}\n\t\treturn existingIndexKey;\n\t}\n\treturn id;\n}\n\nfunction mapCohereFinishReason(value: string): FinishReason {\n\tconst normalized = value.toUpperCase();\n\tswitch (normalized) {\n\t\tcase \"COMPLETE\":\n\t\tcase \"STOP_SEQUENCE\":\n\t\t\treturn \"stop\";\n\t\tcase \"MAX_TOKENS\":\n\t\t\treturn \"length\";\n\t\tcase \"TOOL_CALL\":\n\t\t\treturn \"tool_calls\";\n\t\tcase \"ERROR\":\n\t\tcase \"TIMEOUT\":\n\t\t\treturn \"error\";\n\t\tdefault:\n\t\t\tif (normalized.includes(\"FILTER\") || normalized.includes(\"SAFETY\")) {\n\t\t\t\treturn \"content_filter\";\n\t\t\t}\n\t\t\treturn \"stop\";\n\t}\n}\n\nfunction optionalMetadataRaw(payload: Record<string, unknown>): RawChunk[] {\n\tif (Object.keys(payload).length === 0) return [];\n\treturn [\n\t\toptionalRawChunk({\n\t\t\tkind: \"metadata\",\n\t\t\traw: payload,\n\t\t}),\n\t];\n}\n"]}
|
package/dist/adapters/gemini.cjs
CHANGED
|
@@ -75,6 +75,54 @@ function incrementalJsonStringDelta(state, nextInput) {
|
|
|
75
75
|
return delta.length > 0 ? delta : void 0;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
// src/adapters/shared/citation-grounding.ts
|
|
79
|
+
function geminiCitationGroundingFromCandidate(candidate, options = {}) {
|
|
80
|
+
const chunks = [];
|
|
81
|
+
const citationMetadata = candidate.citationMetadata;
|
|
82
|
+
const groundingMetadata = candidate.groundingMetadata;
|
|
83
|
+
if (citationMetadata !== void 0) {
|
|
84
|
+
const citation = citationChunkFromGemini(citationMetadata);
|
|
85
|
+
if (citation) chunks.push(citation);
|
|
86
|
+
}
|
|
87
|
+
if (groundingMetadata !== void 0) {
|
|
88
|
+
const grounding = groundingChunkFromGemini(groundingMetadata);
|
|
89
|
+
if (grounding) chunks.push(grounding);
|
|
90
|
+
}
|
|
91
|
+
if (options.emitLegacyCitationMetadata && (citationMetadata !== void 0 || groundingMetadata !== void 0)) {
|
|
92
|
+
chunks.push(
|
|
93
|
+
optionalRawChunk({
|
|
94
|
+
kind: "metadata",
|
|
95
|
+
raw: { citationMetadata, groundingMetadata }
|
|
96
|
+
})
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
return chunks;
|
|
100
|
+
}
|
|
101
|
+
function citationChunkFromGemini(citationMetadata) {
|
|
102
|
+
if (citationMetadata === void 0) return void 0;
|
|
103
|
+
const chunk = { kind: "citation", raw: citationMetadata };
|
|
104
|
+
if (isRecord(citationMetadata) && Array.isArray(citationMetadata.citations)) {
|
|
105
|
+
chunk.sources = citationMetadata.citations;
|
|
106
|
+
}
|
|
107
|
+
return optionalRawChunk(chunk);
|
|
108
|
+
}
|
|
109
|
+
function groundingChunkFromGemini(groundingMetadata) {
|
|
110
|
+
if (groundingMetadata === void 0) return void 0;
|
|
111
|
+
const chunk = { kind: "grounding", raw: groundingMetadata };
|
|
112
|
+
if (isRecord(groundingMetadata)) {
|
|
113
|
+
if (Array.isArray(groundingMetadata.webSearchQueries)) {
|
|
114
|
+
chunk.queries = groundingMetadata.webSearchQueries;
|
|
115
|
+
}
|
|
116
|
+
if (Array.isArray(groundingMetadata.groundingChunks)) {
|
|
117
|
+
chunk.chunks = groundingMetadata.groundingChunks;
|
|
118
|
+
}
|
|
119
|
+
if (Array.isArray(groundingMetadata.groundingSupports)) {
|
|
120
|
+
chunk.supports = groundingMetadata.groundingSupports;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return optionalRawChunk(chunk);
|
|
124
|
+
}
|
|
125
|
+
|
|
78
126
|
// src/adapters/shared/parse-payload.ts
|
|
79
127
|
function parseAdapterObjectPayload(raw, scope, options = {}) {
|
|
80
128
|
const { trim = true, allowDone = true } = options;
|
|
@@ -220,9 +268,8 @@ var GeminiStreamParser = class {
|
|
|
220
268
|
const grounding = candidate.groundingMetadata;
|
|
221
269
|
if (citation !== void 0 || grounding !== void 0) {
|
|
222
270
|
chunks.push(
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
raw: { citationMetadata: citation, groundingMetadata: grounding }
|
|
271
|
+
...geminiCitationGroundingFromCandidate(candidate, {
|
|
272
|
+
emitLegacyCitationMetadata: this.options.emitLegacyCitationMetadata ?? false
|
|
226
273
|
})
|
|
227
274
|
);
|
|
228
275
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/utils/object.ts","../../src/adapters/utils.ts","../../src/adapters/errors.ts","../../src/adapters/shared/incremental-json.ts","../../src/adapters/shared/parse-payload.ts","../../src/adapters/shared/text-delta.ts","../../src/adapters/shared/usage.ts","../../src/adapters/gemini.ts"],"names":[],"mappings":"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","file":"gemini.cjs","sourcesContent":["/** Strip undefined own properties; preserve explicit null. */\nexport function stripUndefined<T extends Record<string, unknown>>(obj: T): T {\n\treturn Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== undefined)) as T;\n}\n","/** Internal adapter utilities. Not part of the public API. */\nimport type { RawChunk, StreamAdapter } from \"../core/types\";\nimport { stripUndefined } from \"../core/utils/object\";\nimport { adapterScopedError } from \"./errors\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nexport function asNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function optionalRawChunk(input: Record<string, unknown>): RawChunk {\n\treturn stripUndefined(input) as RawChunk;\n}\n\nexport function prefixedAdapterError(feature: string, message: string): Error {\n\treturn adapterScopedError(feature, message);\n}\n\nexport function createStreamAdapter<TOptions>(config: {\n\tparser: { parseChunk(raw: string): RawChunk[] };\n\tparseResponse: (body: unknown, options: TOptions) => RawChunk[];\n\toptions: TOptions;\n}): StreamAdapter {\n\treturn {\n\t\tparseChunk(raw) {\n\t\t\treturn config.parser.parseChunk(raw);\n\t\t},\n\t\tparseResponse(body) {\n\t\t\treturn config.parseResponse(body, config.options);\n\t\t},\n\t};\n}\n\nexport function parseAdapterJSON(raw: string, feature: string): unknown {\n\ttry {\n\t\treturn JSON.parse(raw) as unknown;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow prefixedAdapterError(feature, message);\n\t}\n}\n","/** Internal adapter error helpers. Not part of the public API. */\nimport type { RawChunk } from \"../core/types\";\nimport { asString } from \"./utils\";\n\nexport function libraryError(message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${message}`);\n}\n\nexport function adapterScopedError(scope: string, message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${scope}: ${message}`);\n}\n\nexport function providerErrorChunks(error: Error, recoverable = false): RawChunk[] {\n\treturn [\n\t\t{ kind: \"provider-error\", error, recoverable },\n\t\t{ kind: \"finish\", reason: \"error\" },\n\t];\n}\n\nexport function providerErrorChunksFromMessage(message: string, recoverable = false): RawChunk[] {\n\treturn providerErrorChunks(libraryError(message), recoverable);\n}\n\nexport function providerErrorChunksFromPayload(\n\terrorPayload: Record<string, unknown>,\n\tscope: string,\n\trecoverable: boolean,\n\tfallbackMessage: string,\n): RawChunk[] {\n\tconst message = asString(errorPayload.message) ?? fallbackMessage;\n\tconst error = adapterScopedError(scope, message);\n\tObject.defineProperty(error, \"raw\", {\n\t\tvalue: errorPayload,\n\t\tenumerable: false,\n\t});\n\treturn providerErrorChunks(error, recoverable);\n}\n","/** Tracks last serialized JSON for prefix-diff tool arg deltas. */\nexport interface IncrementalJsonState {\n\tlastArgsJson: string;\n}\n\n/** Emit only the new suffix when `nextInput` extends `prev`, else full replace. */\nexport function incrementalJsonStringDelta(\n\tstate: IncrementalJsonState,\n\tnextInput: string,\n): string | undefined {\n\tconst prev = state.lastArgsJson;\n\tif (nextInput === prev) return undefined;\n\tconst delta =\n\t\tprev.length > 0 && nextInput.startsWith(prev) ? nextInput.slice(prev.length) : nextInput;\n\tstate.lastArgsJson = nextInput;\n\treturn delta.length > 0 ? delta : undefined;\n}\n","import { adapterScopedError } from \"../errors\";\nimport { isRecord, parseAdapterJSON } from \"../utils\";\n\nexport interface ParseAdapterObjectOptions {\n\ttrim?: boolean;\n\tallowDone?: boolean;\n}\n\n/**\n * Parse a single adapter payload string into a JSON object.\n * Returns null for empty / [DONE] lines when configured.\n */\nexport function parseAdapterObjectPayload(\n\traw: string,\n\tscope: string,\n\toptions: ParseAdapterObjectOptions = {},\n): Record<string, unknown> | null {\n\tconst { trim = true, allowDone = true } = options;\n\tconst input = trim ? raw.trim() : raw;\n\tif (input.length === 0 || (allowDone && input === \"[DONE]\")) return null;\n\n\tconst payload = parseAdapterJSON(input, scope);\n\tif (!isRecord(payload)) {\n\t\tthrow adapterScopedError(scope, \"expected a JSON object\");\n\t}\n\treturn payload;\n}\n","import type { RawChunk } from \"../../core/types\";\n\nexport interface TextOrJsonDeltaOptions {\n\tjsonMode?: boolean | undefined;\n\tchoiceIndex?: number | undefined;\n}\n\nexport function textOrJsonDelta(\n\ttext: string,\n\toptions: TextOrJsonDeltaOptions,\n): RawChunk | undefined {\n\tif (text.length === 0) return undefined;\n\tif (options.jsonMode) return { kind: \"json-delta\", delta: text };\n\tif (options.choiceIndex !== undefined) {\n\t\treturn { kind: \"text-delta\", text, choiceIndex: options.choiceIndex };\n\t}\n\treturn { kind: \"text-delta\", text };\n}\n","import type { RawChunk } from \"../../core/types\";\nimport { asNumber, isRecord, optionalRawChunk } from \"../utils\";\n\nexport interface UsageFieldAliases {\n\tinput?: string[];\n\toutput?: string[];\n\treasoning?: string[];\n\ttotal?: string[];\n}\n\nconst DEFAULT_ALIASES: UsageFieldAliases = {\n\tinput: [\"inputTokens\", \"input_tokens\", \"promptTokens\", \"promptTokenCount\", \"inputTokenCount\"],\n\toutput: [\n\t\t\"outputTokens\",\n\t\t\"output_tokens\",\n\t\t\"completionTokens\",\n\t\t\"candidatesTokenCount\",\n\t\t\"outputTokenCount\",\n\t],\n\treasoning: [\"reasoningTokens\", \"reasoning_tokens\", \"thoughtsTokenCount\"],\n\ttotal: [\"totalTokens\", \"totalTokenCount\", \"total_tokens\"],\n};\n\nfunction firstNumber(\n\tvalue: Record<string, unknown>,\n\tfields: string[] | undefined,\n): number | undefined {\n\tif (!fields) return undefined;\n\tfor (const field of fields) {\n\t\tconst number = asNumber(value[field]);\n\t\tif (number !== undefined) return number;\n\t}\n\treturn undefined;\n}\n\nexport function buildUsageChunk(\n\tvalue: unknown,\n\taliases: UsageFieldAliases = DEFAULT_ALIASES,\n\toptions?: { mirrorTotalTokens?: boolean },\n): RawChunk | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst inputTokens = firstNumber(value, aliases.input);\n\tconst outputTokens = firstNumber(value, aliases.output);\n\tconst reasoningTokens = firstNumber(value, aliases.reasoning);\n\tconst totalTokens = firstNumber(value, aliases.total);\n\tif (\n\t\tinputTokens === undefined &&\n\t\toutputTokens === undefined &&\n\t\treasoningTokens === undefined &&\n\t\ttotalTokens === undefined\n\t) {\n\t\treturn undefined;\n\t}\n\tconst raw =\n\t\toptions?.mirrorTotalTokens && totalTokens !== undefined ? { ...value, totalTokens } : value;\n\treturn optionalRawChunk({\n\t\tkind: \"usage\",\n\t\tinputTokens,\n\t\toutputTokens,\n\t\treasoningTokens,\n\t\traw,\n\t});\n}\n","import type { FinishReason, RawChunk, StreamAdapter } from \"../core/types\";\nimport {\n\tlibraryError,\n\tproviderErrorChunksFromMessage,\n\tproviderErrorChunksFromPayload,\n} from \"./errors\";\nimport { incrementalJsonStringDelta } from \"./shared/incremental-json\";\nimport { parseAdapterObjectPayload } from \"./shared/parse-payload\";\nimport { textOrJsonDelta } from \"./shared/text-delta\";\nimport { buildUsageChunk } from \"./shared/usage\";\nimport { asNumber, asString, createStreamAdapter, isRecord, optionalRawChunk } from \"./utils\";\n\nexport type GeminiApiSurface = \"google-ai\" | \"vertex\";\n\nexport interface GeminiAdapterOptions {\n\t/** Map text parts to json-delta instead of text-delta. */\n\tjsonMode?: boolean;\n\t/**\n\t * Which Gemini HTTP API produced the chunk JSON.\n\t * @default \"google-ai\"\n\t */\n\tapiSurface?: GeminiApiSurface;\n}\n\ninterface ToolState {\n\tid: string;\n\tname: string;\n\tindex: number;\n\tchoiceIndex: number;\n\tlastArgsJson: string;\n\topen: boolean;\n}\n\nexport function geminiAdapter(options: GeminiAdapterOptions = {}): StreamAdapter {\n\tconst parser = new GeminiStreamParser(options);\n\treturn createStreamAdapter({\n\t\tparser,\n\t\tparseResponse,\n\t\toptions,\n\t});\n}\n\nclass GeminiStreamParser {\n\tprivate metadataEmitted = false;\n\tprivate readonly tools = new Map<string, ToolState>();\n\tprivate readonly openToolByChoice = new Map<number, string>();\n\tprivate toolCounter = 0;\n\n\tconstructor(private readonly options: GeminiAdapterOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tlet payload = parseAdapterObjectPayload(raw, \"geminiAdapter.parseChunk\");\n\t\tif (!payload) return [];\n\n\t\tif (this.options.apiSurface === \"vertex\") {\n\t\t\tconst normalized = normalizeVertexChunk(payload);\n\t\t\tif (!normalized) {\n\t\t\t\tif (Object.keys(payload).length === 0) return [];\n\t\t\t\treturn [\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"metadata\",\n\t\t\t\t\t\traw: payload,\n\t\t\t\t\t}),\n\t\t\t\t].filter((chunk): chunk is RawChunk => chunk !== undefined);\n\t\t\t}\n\t\t\tpayload = normalized;\n\t\t}\n\n\t\tif (isRecord(payload.error)) {\n\t\t\treturn providerErrorChunksFromPayload(\n\t\t\t\tpayload.error,\n\t\t\t\t\"geminiAdapter.parseChunk\",\n\t\t\t\tfalse,\n\t\t\t\t\"Gemini provider error\",\n\t\t\t);\n\t\t}\n\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst feedback = isRecord(payload.promptFeedback) ? payload.promptFeedback : undefined;\n\t\tconst blockReason = feedback ? asString(feedback.blockReason) : undefined;\n\t\tif (blockReason) {\n\t\t\treturn providerErrorChunksFromMessage(`Gemini prompt blocked: ${blockReason}`, false);\n\t\t}\n\n\t\tchunks.push(...this.metadataChunks(payload));\n\n\t\tconst usage = buildUsageChunk(payload.usageMetadata);\n\t\tif (usage) chunks.push(usage);\n\n\t\tconst candidates = Array.isArray(payload.candidates) ? payload.candidates : [];\n\t\tfor (const candidate of candidates) {\n\t\t\tif (!isRecord(candidate)) continue;\n\t\t\tchunks.push(...this.candidateChunks(candidate));\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate metadataChunks(payload: Record<string, unknown>): RawChunk[] {\n\t\tif (this.metadataEmitted) return [];\n\t\tconst responseId = asString(payload.responseId);\n\t\tconst model = asString(payload.modelVersion);\n\t\tif (!responseId && !model) return [];\n\n\t\tthis.metadataEmitted = true;\n\t\tconst chunks: RawChunk[] = [];\n\t\tif (responseId) chunks.push({ kind: \"message-start\", id: responseId });\n\t\tchunks.push(\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"metadata\",\n\t\t\t\tresponseId,\n\t\t\t\tmodel,\n\t\t\t\traw: { responseId, modelVersion: model },\n\t\t\t}),\n\t\t);\n\t\treturn chunks;\n\t}\n\n\tprivate candidateChunks(candidate: Record<string, unknown>): RawChunk[] {\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst choiceIndex = asNumber(candidate.index) ?? 0;\n\n\t\tconst citation = candidate.citationMetadata;\n\t\tconst grounding = candidate.groundingMetadata;\n\t\tif (citation !== undefined || grounding !== undefined) {\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"metadata\",\n\t\t\t\t\traw: { citationMetadata: citation, groundingMetadata: grounding },\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst content = isRecord(candidate.content) ? candidate.content : undefined;\n\t\tconst parts = content && Array.isArray(content.parts) ? content.parts : [];\n\t\tfor (let partIndex = 0; partIndex < parts.length; partIndex += 1) {\n\t\t\tconst part = parts[partIndex];\n\t\t\tif (!isRecord(part)) continue;\n\t\t\tchunks.push(...this.partChunks(part, partIndex, choiceIndex));\n\t\t}\n\n\t\tconst finishReason = asString(candidate.finishReason);\n\t\tif (finishReason) {\n\t\t\tconst mapped = mapFinishReason(finishReason);\n\t\t\tif (mapped === \"error\") {\n\t\t\t\tchunks.push(\n\t\t\t\t\t...providerErrorChunksFromMessage(`Gemini finishReason: ${finishReason}`, false),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tchunks.push({ kind: \"finish\", reason: mapped, choiceIndex });\n\t\t\t}\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate partChunks(\n\t\tpart: Record<string, unknown>,\n\t\tpartIndex: number,\n\t\tchoiceIndex: number,\n\t): RawChunk[] {\n\t\tif (isRecord(part.functionResponse)) return [];\n\t\tif (part.inlineData !== undefined || part.fileData !== undefined) return [];\n\t\tif (part.executableCode !== undefined || part.codeExecutionResult !== undefined) return [];\n\n\t\tconst thought = part.thought === true;\n\t\tconst text = asString(part.text);\n\t\tif (thought && text) {\n\t\t\treturn [{ kind: \"reasoning-delta\", text, variant: \"detail\" }];\n\t\t}\n\t\tif (thought && !text) return [];\n\n\t\tif (text !== undefined) {\n\t\t\tconst chunk = textOrJsonDelta(text, {\n\t\t\t\tjsonMode: this.options.jsonMode,\n\t\t\t\tchoiceIndex,\n\t\t\t});\n\t\t\treturn chunk ? [chunk] : [];\n\t\t}\n\n\t\tconst functionCall = isRecord(part.functionCall) ? part.functionCall : undefined;\n\t\tif (functionCall) return this.functionCallChunks(functionCall, partIndex, choiceIndex);\n\n\t\tif (Object.keys(part).length === 0) return [];\n\t\treturn [];\n\t}\n\n\tprivate functionCallChunks(\n\t\tfunctionCall: Record<string, unknown>,\n\t\tpartIndex: number,\n\t\tchoiceIndex: number,\n\t): RawChunk[] {\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst explicitId = asString(functionCall.id);\n\t\tconst name = asString(functionCall.name);\n\t\tlet toolKey = this.resolveToolKey(explicitId, partIndex, choiceIndex, name);\n\n\t\tif (name && !this.tools.has(toolKey)) {\n\t\t\ttoolKey = explicitId ?? `${choiceIndex}:${partIndex}`;\n\t\t\tconst id = explicitId ?? `gemini:${choiceIndex}:${this.toolCounter++}`;\n\t\t\tthis.tools.set(toolKey, {\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\tindex: partIndex,\n\t\t\t\tchoiceIndex,\n\t\t\t\tlastArgsJson: \"\",\n\t\t\t\topen: true,\n\t\t\t});\n\t\t\tthis.openToolByChoice.set(choiceIndex, toolKey);\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"tool-start\",\n\t\t\t\t\tid,\n\t\t\t\t\tname,\n\t\t\t\t\tindex: partIndex,\n\t\t\t\t\tchoiceIndex,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst current = this.tools.get(toolKey);\n\t\tif (!current) return chunks;\n\n\t\tconst partialArgs = Array.isArray(functionCall.partialArgs) ? functionCall.partialArgs : [];\n\t\tfor (const item of partialArgs) {\n\t\t\tif (!isRecord(item)) continue;\n\t\t\tconst delta = partialArgDelta(item);\n\t\t\tif (delta) {\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\t\t\tid: current.id,\n\t\t\t\t\t\tdelta,\n\t\t\t\t\t\tindex: current.index,\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (isRecord(functionCall.args)) {\n\t\t\tconst delta = incrementalJsonStringDelta(current, JSON.stringify(functionCall.args));\n\t\t\tif (delta) {\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\t\t\tid: current.id,\n\t\t\t\t\t\tdelta,\n\t\t\t\t\t\tindex: current.index,\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst willContinue = functionCall.willContinue === true;\n\t\tconst hasPartialArgs = partialArgs.length > 0;\n\t\tconst hasArgs = isRecord(functionCall.args) && Object.keys(functionCall.args).length > 0;\n\n\t\tif (!willContinue && !hasPartialArgs && (hasArgs || (name && isRecord(functionCall.args)))) {\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"tool-done\",\n\t\t\t\t\tid: current.id,\n\t\t\t\t\tindex: current.index,\n\t\t\t\t\tchoiceIndex,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tcurrent.open = false;\n\t\t} else if (\n\t\t\t!willContinue &&\n\t\t\thasPartialArgs &&\n\t\t\tpartialArgs.every((item) => isRecord(item) && item.willContinue !== true)\n\t\t) {\n\t\t\tif (current.open) {\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-done\",\n\t\t\t\t\t\tid: current.id,\n\t\t\t\t\t\tindex: current.index,\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tcurrent.open = false;\n\t\t\t}\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate resolveToolKey(\n\t\texplicitId: string | undefined,\n\t\tpartIndex: number,\n\t\tchoiceIndex: number,\n\t\tname: string | undefined,\n\t): string {\n\t\tif (explicitId) return explicitId;\n\t\tconst openKey = this.openToolByChoice.get(choiceIndex);\n\t\tif (openKey && this.tools.get(openKey)?.open) return openKey;\n\t\tif (name) {\n\t\t\tfor (const [key, state] of this.tools) {\n\t\t\t\tif (state.choiceIndex === choiceIndex && state.name === name && state.open) return key;\n\t\t\t}\n\t\t}\n\t\treturn `${choiceIndex}:${partIndex}`;\n\t}\n}\n\nfunction parseResponse(body: unknown, options: GeminiAdapterOptions): RawChunk[] {\n\tif (!isRecord(body)) {\n\t\tthrow libraryError(\"geminiAdapter.parseResponse expected a GenerateContentResponse object\");\n\t}\n\n\tlet record = body;\n\tif (options.apiSurface === \"vertex\") {\n\t\tconst normalized = normalizeVertexChunk(body);\n\t\tif (normalized) record = normalized;\n\t}\n\n\tconst parser = new GeminiStreamParser(options);\n\tconst chunks: RawChunk[] = [];\n\n\tif (isRecord(record.error)) {\n\t\treturn providerErrorChunksFromPayload(\n\t\t\trecord.error,\n\t\t\t\"geminiAdapter.parseResponse\",\n\t\t\tfalse,\n\t\t\t\"Gemini provider error\",\n\t\t);\n\t}\n\n\tconst feedback = isRecord(record.promptFeedback) ? record.promptFeedback : undefined;\n\tconst blockReason = feedback ? asString(feedback.blockReason) : undefined;\n\tif (blockReason) {\n\t\treturn providerErrorChunksFromMessage(`Gemini prompt blocked: ${blockReason}`, false);\n\t}\n\n\tchunks.push(...parser.parseChunk(JSON.stringify(record)));\n\n\tconst hasFinish = chunks.some((chunk) => chunk.kind === \"finish\");\n\tif (!hasFinish) {\n\t\tchunks.push({ kind: \"finish\", reason: \"stop\" });\n\t}\n\n\treturn chunks;\n}\n\nfunction partialArgDelta(arg: Record<string, unknown>): string | undefined {\n\tconst stringValue = asString(arg.stringValue);\n\tif (stringValue !== undefined) return stringValue;\n\n\tconst jsonPath = asString(arg.jsonPath) ?? \"$\";\n\tconst key = jsonPath.replace(/^\\$\\.?/, \"\").split(\".\")[0] ?? \"value\";\n\tif (arg.numberValue !== undefined) return JSON.stringify({ [key]: arg.numberValue });\n\tif (arg.boolValue !== undefined) return JSON.stringify({ [key]: arg.boolValue });\n\tif (arg.nullValue !== undefined) return JSON.stringify({ [key]: null });\n\treturn undefined;\n}\n\nfunction mapFinishReason(value: string): FinishReason {\n\tswitch (value) {\n\t\tcase \"STOP\":\n\t\tcase \"STOP_REASON_UNSPECIFIED\":\n\t\t\treturn \"stop\";\n\t\tcase \"MAX_TOKENS\":\n\t\t\treturn \"length\";\n\t\tcase \"SAFETY\":\n\t\tcase \"RECITATION\":\n\t\tcase \"BLOCKLIST\":\n\t\tcase \"PROHIBITED_CONTENT\":\n\t\tcase \"SPII\":\n\t\tcase \"LANGUAGE\":\n\t\t\treturn \"content_filter\";\n\t\tcase \"MALFORMED_FUNCTION_CALL\":\n\t\t\treturn \"error\";\n\t\tdefault:\n\t\t\treturn \"error\";\n\t}\n}\n\n/** Strip Vertex / gateway wrappers before mapping GenerateContentResponse fields. */\nexport function normalizeVertexChunk(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> | null {\n\tif (isRecord(payload.response)) {\n\t\treturn payload.response;\n\t}\n\tif (isRecord(payload.result)) {\n\t\treturn payload.result;\n\t}\n\tif (Array.isArray(payload.predictions)) {\n\t\tconst first = payload.predictions[0];\n\t\tif (isRecord(first)) return first;\n\t}\n\tif (\n\t\tpayload.candidates !== undefined ||\n\t\tpayload.usageMetadata !== undefined ||\n\t\tpayload.promptFeedback !== undefined ||\n\t\tpayload.responseId !== undefined ||\n\t\tisRecord(payload.error)\n\t) {\n\t\treturn payload;\n\t}\n\treturn null;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/utils/object.ts","../../src/adapters/utils.ts","../../src/adapters/errors.ts","../../src/adapters/shared/incremental-json.ts","../../src/adapters/shared/citation-grounding.ts","../../src/adapters/shared/parse-payload.ts","../../src/adapters/shared/text-delta.ts","../../src/adapters/shared/usage.ts","../../src/adapters/gemini.ts"],"names":[],"mappings":"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","file":"gemini.cjs","sourcesContent":["/** Strip undefined own properties; preserve explicit null. */\nexport function stripUndefined<T extends Record<string, unknown>>(obj: T): T {\n\treturn Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== undefined)) as T;\n}\n","/** Internal adapter utilities. Not part of the public API. */\nimport type { RawChunk, StreamAdapter } from \"../core/types\";\nimport { stripUndefined } from \"../core/utils/object\";\nimport { adapterScopedError } from \"./errors\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nexport function asNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function optionalRawChunk(input: Record<string, unknown>): RawChunk {\n\treturn stripUndefined(input) as RawChunk;\n}\n\nexport function prefixedAdapterError(feature: string, message: string): Error {\n\treturn adapterScopedError(feature, message);\n}\n\nexport function createStreamAdapter<TOptions>(config: {\n\tparser: { parseChunk(raw: string): RawChunk[] };\n\tparseResponse: (body: unknown, options: TOptions) => RawChunk[];\n\toptions: TOptions;\n}): StreamAdapter {\n\treturn {\n\t\tparseChunk(raw) {\n\t\t\treturn config.parser.parseChunk(raw);\n\t\t},\n\t\tparseResponse(body) {\n\t\t\treturn config.parseResponse(body, config.options);\n\t\t},\n\t};\n}\n\nexport function parseAdapterJSON(raw: string, feature: string): unknown {\n\ttry {\n\t\treturn JSON.parse(raw) as unknown;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow prefixedAdapterError(feature, message);\n\t}\n}\n","/** Internal adapter error helpers. Not part of the public API. */\nimport type { RawChunk } from \"../core/types\";\nimport { asString } from \"./utils\";\n\nexport function libraryError(message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${message}`);\n}\n\nexport function adapterScopedError(scope: string, message: string): Error {\n\treturn new Error(`llm-stream-assemble: ${scope}: ${message}`);\n}\n\nexport function providerErrorChunks(error: Error, recoverable = false): RawChunk[] {\n\treturn [\n\t\t{ kind: \"provider-error\", error, recoverable },\n\t\t{ kind: \"finish\", reason: \"error\" },\n\t];\n}\n\nexport function providerErrorChunksFromMessage(message: string, recoverable = false): RawChunk[] {\n\treturn providerErrorChunks(libraryError(message), recoverable);\n}\n\nexport function providerErrorChunksFromPayload(\n\terrorPayload: Record<string, unknown>,\n\tscope: string,\n\trecoverable: boolean,\n\tfallbackMessage: string,\n): RawChunk[] {\n\tconst message = asString(errorPayload.message) ?? fallbackMessage;\n\tconst error = adapterScopedError(scope, message);\n\tObject.defineProperty(error, \"raw\", {\n\t\tvalue: errorPayload,\n\t\tenumerable: false,\n\t});\n\treturn providerErrorChunks(error, recoverable);\n}\n","/** Tracks last serialized JSON for prefix-diff tool arg deltas. */\nexport interface IncrementalJsonState {\n\tlastArgsJson: string;\n}\n\n/** Emit only the new suffix when `nextInput` extends `prev`, else full replace. */\nexport function incrementalJsonStringDelta(\n\tstate: IncrementalJsonState,\n\tnextInput: string,\n): string | undefined {\n\tconst prev = state.lastArgsJson;\n\tif (nextInput === prev) return undefined;\n\tconst delta =\n\t\tprev.length > 0 && nextInput.startsWith(prev) ? nextInput.slice(prev.length) : nextInput;\n\tstate.lastArgsJson = nextInput;\n\treturn delta.length > 0 ? delta : undefined;\n}\n","import type { RawChunk } from \"../../core/types\";\nimport { asNumber, asString, isRecord, optionalRawChunk } from \"../utils\";\n\nexport interface CitationGroundingOptions {\n\temitLegacyCitationMetadata?: boolean;\n}\n\ntype CitationChunk = Extract<RawChunk, { kind: \"citation\" }>;\ntype GroundingChunk = Extract<RawChunk, { kind: \"grounding\" }>;\n\nexport function cohereCitationFromStartPayload(\n\tcitations: unknown,\n\tindex?: number,\n\toptions: CitationGroundingOptions = {},\n): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tconst citation = citationChunkFromCohere(citations, index);\n\tif (citation) chunks.push(citation);\n\tif (options.emitLegacyCitationMetadata && citations !== undefined) {\n\t\tchunks.push(\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"metadata\",\n\t\t\t\traw: { citation: citations, index },\n\t\t\t}),\n\t\t);\n\t}\n\treturn chunks;\n}\n\nfunction citationChunkFromCohere(citations: unknown, index?: number): RawChunk | undefined {\n\tif (citations === undefined) return undefined;\n\n\tconst chunk: CitationChunk = { kind: \"citation\", raw: { citation: citations, index } };\n\tconst numericIndex = asNumber(index);\n\tif (numericIndex !== undefined) chunk.index = numericIndex;\n\n\tif (isRecord(citations)) {\n\t\tconst start = asNumber(citations.start);\n\t\tconst end = asNumber(citations.end);\n\t\tconst text = asString(citations.text);\n\t\tif (start !== undefined && end !== undefined) {\n\t\t\tchunk.span = { start, end, ...(text ? { text } : {}) };\n\t\t} else if (text) {\n\t\t\tchunk.span = { start: 0, end: text.length, text };\n\t\t}\n\t\tconst sources = citations.sources;\n\t\tif (Array.isArray(sources) && sources.length > 0) {\n\t\t\tchunk.sources = sources;\n\t\t}\n\t}\n\n\treturn optionalRawChunk(chunk);\n}\n\nexport function perplexityCitationFromPayload(\n\tpayload: Record<string, unknown>,\n\toptions: CitationGroundingOptions = {},\n): RawChunk[] {\n\tconst citations = payload.citations;\n\tconst searchResults = payload.search_results;\n\tconst hasCitations = Array.isArray(citations) && citations.length > 0;\n\tconst hasSearchResults = Array.isArray(searchResults) && searchResults.length > 0;\n\tif (!hasCitations && !hasSearchResults) return [];\n\n\tconst urls = hasCitations\n\t\t? citations.filter((item): item is string => typeof item === \"string\")\n\t\t: undefined;\n\n\tconst chunk: CitationChunk = {\n\t\tkind: \"citation\",\n\t\traw: {\n\t\t\t...(hasCitations ? { citations } : {}),\n\t\t\t...(hasSearchResults ? { search_results: searchResults } : {}),\n\t\t},\n\t};\n\tif (urls && urls.length > 0) chunk.urls = urls;\n\tif (hasSearchResults) chunk.searchResults = searchResults as unknown[];\n\n\tconst chunks: RawChunk[] = [optionalRawChunk(chunk)!];\n\tif (options.emitLegacyCitationMetadata) {\n\t\tchunks.push(\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"metadata\",\n\t\t\t\traw: {\n\t\t\t\t\t...(hasCitations ? { citations } : {}),\n\t\t\t\t\t...(hasSearchResults ? { search_results: searchResults } : {}),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n\treturn chunks;\n}\n\nexport function geminiCitationGroundingFromCandidate(\n\tcandidate: Record<string, unknown>,\n\toptions: CitationGroundingOptions = {},\n): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tconst citationMetadata = candidate.citationMetadata;\n\tconst groundingMetadata = candidate.groundingMetadata;\n\n\tif (citationMetadata !== undefined) {\n\t\tconst citation = citationChunkFromGemini(citationMetadata);\n\t\tif (citation) chunks.push(citation);\n\t}\n\tif (groundingMetadata !== undefined) {\n\t\tconst grounding = groundingChunkFromGemini(groundingMetadata);\n\t\tif (grounding) chunks.push(grounding);\n\t}\n\n\tif (\n\t\toptions.emitLegacyCitationMetadata &&\n\t\t(citationMetadata !== undefined || groundingMetadata !== undefined)\n\t) {\n\t\tchunks.push(\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"metadata\",\n\t\t\t\traw: { citationMetadata, groundingMetadata },\n\t\t\t}),\n\t\t);\n\t}\n\n\treturn chunks;\n}\n\nfunction citationChunkFromGemini(citationMetadata: unknown): RawChunk | undefined {\n\tif (citationMetadata === undefined) return undefined;\n\tconst chunk: CitationChunk = { kind: \"citation\", raw: citationMetadata };\n\tif (isRecord(citationMetadata) && Array.isArray(citationMetadata.citations)) {\n\t\tchunk.sources = citationMetadata.citations as unknown[];\n\t}\n\treturn optionalRawChunk(chunk);\n}\n\nfunction groundingChunkFromGemini(groundingMetadata: unknown): RawChunk | undefined {\n\tif (groundingMetadata === undefined) return undefined;\n\tconst chunk: GroundingChunk = { kind: \"grounding\", raw: groundingMetadata };\n\tif (isRecord(groundingMetadata)) {\n\t\tif (Array.isArray(groundingMetadata.webSearchQueries)) {\n\t\t\tchunk.queries = groundingMetadata.webSearchQueries as string[];\n\t\t}\n\t\tif (Array.isArray(groundingMetadata.groundingChunks)) {\n\t\t\tchunk.chunks = groundingMetadata.groundingChunks as unknown[];\n\t\t}\n\t\tif (Array.isArray(groundingMetadata.groundingSupports)) {\n\t\t\tchunk.supports = groundingMetadata.groundingSupports as unknown[];\n\t\t}\n\t}\n\treturn optionalRawChunk(chunk);\n}\n\nexport function payloadWithoutCitationRootFields(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst next = { ...payload };\n\tdelete next.citations;\n\tdelete next.search_results;\n\treturn next;\n}\n\nexport function metadataPayloadWithoutCitationFields(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\treturn payloadWithoutCitationRootFields(payload);\n}\n","import { adapterScopedError } from \"../errors\";\nimport { isRecord, parseAdapterJSON } from \"../utils\";\n\nexport interface ParseAdapterObjectOptions {\n\ttrim?: boolean;\n\tallowDone?: boolean;\n}\n\n/**\n * Parse a single adapter payload string into a JSON object.\n * Returns null for empty / [DONE] lines when configured.\n */\nexport function parseAdapterObjectPayload(\n\traw: string,\n\tscope: string,\n\toptions: ParseAdapterObjectOptions = {},\n): Record<string, unknown> | null {\n\tconst { trim = true, allowDone = true } = options;\n\tconst input = trim ? raw.trim() : raw;\n\tif (input.length === 0 || (allowDone && input === \"[DONE]\")) return null;\n\n\tconst payload = parseAdapterJSON(input, scope);\n\tif (!isRecord(payload)) {\n\t\tthrow adapterScopedError(scope, \"expected a JSON object\");\n\t}\n\treturn payload;\n}\n","import type { RawChunk } from \"../../core/types\";\n\nexport interface TextOrJsonDeltaOptions {\n\tjsonMode?: boolean | undefined;\n\tchoiceIndex?: number | undefined;\n}\n\nexport function textOrJsonDelta(\n\ttext: string,\n\toptions: TextOrJsonDeltaOptions,\n): RawChunk | undefined {\n\tif (text.length === 0) return undefined;\n\tif (options.jsonMode) return { kind: \"json-delta\", delta: text };\n\tif (options.choiceIndex !== undefined) {\n\t\treturn { kind: \"text-delta\", text, choiceIndex: options.choiceIndex };\n\t}\n\treturn { kind: \"text-delta\", text };\n}\n","import type { RawChunk } from \"../../core/types\";\nimport { asNumber, isRecord, optionalRawChunk } from \"../utils\";\n\nexport interface UsageFieldAliases {\n\tinput?: string[];\n\toutput?: string[];\n\treasoning?: string[];\n\ttotal?: string[];\n}\n\nconst DEFAULT_ALIASES: UsageFieldAliases = {\n\tinput: [\"inputTokens\", \"input_tokens\", \"promptTokens\", \"promptTokenCount\", \"inputTokenCount\"],\n\toutput: [\n\t\t\"outputTokens\",\n\t\t\"output_tokens\",\n\t\t\"completionTokens\",\n\t\t\"candidatesTokenCount\",\n\t\t\"outputTokenCount\",\n\t],\n\treasoning: [\"reasoningTokens\", \"reasoning_tokens\", \"thoughtsTokenCount\"],\n\ttotal: [\"totalTokens\", \"totalTokenCount\", \"total_tokens\"],\n};\n\nfunction firstNumber(\n\tvalue: Record<string, unknown>,\n\tfields: string[] | undefined,\n): number | undefined {\n\tif (!fields) return undefined;\n\tfor (const field of fields) {\n\t\tconst number = asNumber(value[field]);\n\t\tif (number !== undefined) return number;\n\t}\n\treturn undefined;\n}\n\nexport function buildUsageChunk(\n\tvalue: unknown,\n\taliases: UsageFieldAliases = DEFAULT_ALIASES,\n\toptions?: { mirrorTotalTokens?: boolean },\n): RawChunk | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst inputTokens = firstNumber(value, aliases.input);\n\tconst outputTokens = firstNumber(value, aliases.output);\n\tconst reasoningTokens = firstNumber(value, aliases.reasoning);\n\tconst totalTokens = firstNumber(value, aliases.total);\n\tif (\n\t\tinputTokens === undefined &&\n\t\toutputTokens === undefined &&\n\t\treasoningTokens === undefined &&\n\t\ttotalTokens === undefined\n\t) {\n\t\treturn undefined;\n\t}\n\tconst raw =\n\t\toptions?.mirrorTotalTokens && totalTokens !== undefined ? { ...value, totalTokens } : value;\n\treturn optionalRawChunk({\n\t\tkind: \"usage\",\n\t\tinputTokens,\n\t\toutputTokens,\n\t\treasoningTokens,\n\t\traw,\n\t});\n}\n","import type { FinishReason, RawChunk, StreamAdapter } from \"../core/types\";\nimport {\n\tlibraryError,\n\tproviderErrorChunksFromMessage,\n\tproviderErrorChunksFromPayload,\n} from \"./errors\";\nimport { incrementalJsonStringDelta } from \"./shared/incremental-json\";\nimport { geminiCitationGroundingFromCandidate } from \"./shared/citation-grounding\";\nimport { parseAdapterObjectPayload } from \"./shared/parse-payload\";\nimport { textOrJsonDelta } from \"./shared/text-delta\";\nimport { buildUsageChunk } from \"./shared/usage\";\nimport { asNumber, asString, createStreamAdapter, isRecord, optionalRawChunk } from \"./utils\";\n\nexport type GeminiApiSurface = \"google-ai\" | \"vertex\";\n\nexport interface GeminiAdapterOptions {\n\t/** Map text parts to json-delta instead of text-delta. */\n\tjsonMode?: boolean;\n\t/**\n\t * Which Gemini HTTP API produced the chunk JSON.\n\t * @default \"google-ai\"\n\t */\n\tapiSurface?: GeminiApiSurface;\n\t/** @deprecated Dual-emit legacy metadata.raw citation blobs alongside typed events. */\n\temitLegacyCitationMetadata?: boolean;\n}\n\ninterface ToolState {\n\tid: string;\n\tname: string;\n\tindex: number;\n\tchoiceIndex: number;\n\tlastArgsJson: string;\n\topen: boolean;\n}\n\nexport function geminiAdapter(options: GeminiAdapterOptions = {}): StreamAdapter {\n\tconst parser = new GeminiStreamParser(options);\n\treturn createStreamAdapter({\n\t\tparser,\n\t\tparseResponse,\n\t\toptions,\n\t});\n}\n\nclass GeminiStreamParser {\n\tprivate metadataEmitted = false;\n\tprivate readonly tools = new Map<string, ToolState>();\n\tprivate readonly openToolByChoice = new Map<number, string>();\n\tprivate toolCounter = 0;\n\n\tconstructor(private readonly options: GeminiAdapterOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tlet payload = parseAdapterObjectPayload(raw, \"geminiAdapter.parseChunk\");\n\t\tif (!payload) return [];\n\n\t\tif (this.options.apiSurface === \"vertex\") {\n\t\t\tconst normalized = normalizeVertexChunk(payload);\n\t\t\tif (!normalized) {\n\t\t\t\tif (Object.keys(payload).length === 0) return [];\n\t\t\t\treturn [\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"metadata\",\n\t\t\t\t\t\traw: payload,\n\t\t\t\t\t}),\n\t\t\t\t].filter((chunk): chunk is RawChunk => chunk !== undefined);\n\t\t\t}\n\t\t\tpayload = normalized;\n\t\t}\n\n\t\tif (isRecord(payload.error)) {\n\t\t\treturn providerErrorChunksFromPayload(\n\t\t\t\tpayload.error,\n\t\t\t\t\"geminiAdapter.parseChunk\",\n\t\t\t\tfalse,\n\t\t\t\t\"Gemini provider error\",\n\t\t\t);\n\t\t}\n\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst feedback = isRecord(payload.promptFeedback) ? payload.promptFeedback : undefined;\n\t\tconst blockReason = feedback ? asString(feedback.blockReason) : undefined;\n\t\tif (blockReason) {\n\t\t\treturn providerErrorChunksFromMessage(`Gemini prompt blocked: ${blockReason}`, false);\n\t\t}\n\n\t\tchunks.push(...this.metadataChunks(payload));\n\n\t\tconst usage = buildUsageChunk(payload.usageMetadata);\n\t\tif (usage) chunks.push(usage);\n\n\t\tconst candidates = Array.isArray(payload.candidates) ? payload.candidates : [];\n\t\tfor (const candidate of candidates) {\n\t\t\tif (!isRecord(candidate)) continue;\n\t\t\tchunks.push(...this.candidateChunks(candidate));\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate metadataChunks(payload: Record<string, unknown>): RawChunk[] {\n\t\tif (this.metadataEmitted) return [];\n\t\tconst responseId = asString(payload.responseId);\n\t\tconst model = asString(payload.modelVersion);\n\t\tif (!responseId && !model) return [];\n\n\t\tthis.metadataEmitted = true;\n\t\tconst chunks: RawChunk[] = [];\n\t\tif (responseId) chunks.push({ kind: \"message-start\", id: responseId });\n\t\tchunks.push(\n\t\t\toptionalRawChunk({\n\t\t\t\tkind: \"metadata\",\n\t\t\t\tresponseId,\n\t\t\t\tmodel,\n\t\t\t\traw: { responseId, modelVersion: model },\n\t\t\t}),\n\t\t);\n\t\treturn chunks;\n\t}\n\n\tprivate candidateChunks(candidate: Record<string, unknown>): RawChunk[] {\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst choiceIndex = asNumber(candidate.index) ?? 0;\n\n\t\tconst citation = candidate.citationMetadata;\n\t\tconst grounding = candidate.groundingMetadata;\n\t\tif (citation !== undefined || grounding !== undefined) {\n\t\t\tchunks.push(\n\t\t\t\t...geminiCitationGroundingFromCandidate(candidate, {\n\t\t\t\t\temitLegacyCitationMetadata: this.options.emitLegacyCitationMetadata ?? false,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst content = isRecord(candidate.content) ? candidate.content : undefined;\n\t\tconst parts = content && Array.isArray(content.parts) ? content.parts : [];\n\t\tfor (let partIndex = 0; partIndex < parts.length; partIndex += 1) {\n\t\t\tconst part = parts[partIndex];\n\t\t\tif (!isRecord(part)) continue;\n\t\t\tchunks.push(...this.partChunks(part, partIndex, choiceIndex));\n\t\t}\n\n\t\tconst finishReason = asString(candidate.finishReason);\n\t\tif (finishReason) {\n\t\t\tconst mapped = mapFinishReason(finishReason);\n\t\t\tif (mapped === \"error\") {\n\t\t\t\tchunks.push(\n\t\t\t\t\t...providerErrorChunksFromMessage(`Gemini finishReason: ${finishReason}`, false),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tchunks.push({ kind: \"finish\", reason: mapped, choiceIndex });\n\t\t\t}\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate partChunks(\n\t\tpart: Record<string, unknown>,\n\t\tpartIndex: number,\n\t\tchoiceIndex: number,\n\t): RawChunk[] {\n\t\tif (isRecord(part.functionResponse)) return [];\n\t\tif (part.inlineData !== undefined || part.fileData !== undefined) return [];\n\t\tif (part.executableCode !== undefined || part.codeExecutionResult !== undefined) return [];\n\n\t\tconst thought = part.thought === true;\n\t\tconst text = asString(part.text);\n\t\tif (thought && text) {\n\t\t\treturn [{ kind: \"reasoning-delta\", text, variant: \"detail\" }];\n\t\t}\n\t\tif (thought && !text) return [];\n\n\t\tif (text !== undefined) {\n\t\t\tconst chunk = textOrJsonDelta(text, {\n\t\t\t\tjsonMode: this.options.jsonMode,\n\t\t\t\tchoiceIndex,\n\t\t\t});\n\t\t\treturn chunk ? [chunk] : [];\n\t\t}\n\n\t\tconst functionCall = isRecord(part.functionCall) ? part.functionCall : undefined;\n\t\tif (functionCall) return this.functionCallChunks(functionCall, partIndex, choiceIndex);\n\n\t\tif (Object.keys(part).length === 0) return [];\n\t\treturn [];\n\t}\n\n\tprivate functionCallChunks(\n\t\tfunctionCall: Record<string, unknown>,\n\t\tpartIndex: number,\n\t\tchoiceIndex: number,\n\t): RawChunk[] {\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst explicitId = asString(functionCall.id);\n\t\tconst name = asString(functionCall.name);\n\t\tlet toolKey = this.resolveToolKey(explicitId, partIndex, choiceIndex, name);\n\n\t\tif (name && !this.tools.has(toolKey)) {\n\t\t\ttoolKey = explicitId ?? `${choiceIndex}:${partIndex}`;\n\t\t\tconst id = explicitId ?? `gemini:${choiceIndex}:${this.toolCounter++}`;\n\t\t\tthis.tools.set(toolKey, {\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\tindex: partIndex,\n\t\t\t\tchoiceIndex,\n\t\t\t\tlastArgsJson: \"\",\n\t\t\t\topen: true,\n\t\t\t});\n\t\t\tthis.openToolByChoice.set(choiceIndex, toolKey);\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"tool-start\",\n\t\t\t\t\tid,\n\t\t\t\t\tname,\n\t\t\t\t\tindex: partIndex,\n\t\t\t\t\tchoiceIndex,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst current = this.tools.get(toolKey);\n\t\tif (!current) return chunks;\n\n\t\tconst partialArgs = Array.isArray(functionCall.partialArgs) ? functionCall.partialArgs : [];\n\t\tfor (const item of partialArgs) {\n\t\t\tif (!isRecord(item)) continue;\n\t\t\tconst delta = partialArgDelta(item);\n\t\t\tif (delta) {\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\t\t\tid: current.id,\n\t\t\t\t\t\tdelta,\n\t\t\t\t\t\tindex: current.index,\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (isRecord(functionCall.args)) {\n\t\t\tconst delta = incrementalJsonStringDelta(current, JSON.stringify(functionCall.args));\n\t\t\tif (delta) {\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-args-delta\",\n\t\t\t\t\t\tid: current.id,\n\t\t\t\t\t\tdelta,\n\t\t\t\t\t\tindex: current.index,\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst willContinue = functionCall.willContinue === true;\n\t\tconst hasPartialArgs = partialArgs.length > 0;\n\t\tconst hasArgs = isRecord(functionCall.args) && Object.keys(functionCall.args).length > 0;\n\n\t\tif (!willContinue && !hasPartialArgs && (hasArgs || (name && isRecord(functionCall.args)))) {\n\t\t\tchunks.push(\n\t\t\t\toptionalRawChunk({\n\t\t\t\t\tkind: \"tool-done\",\n\t\t\t\t\tid: current.id,\n\t\t\t\t\tindex: current.index,\n\t\t\t\t\tchoiceIndex,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tcurrent.open = false;\n\t\t} else if (\n\t\t\t!willContinue &&\n\t\t\thasPartialArgs &&\n\t\t\tpartialArgs.every((item) => isRecord(item) && item.willContinue !== true)\n\t\t) {\n\t\t\tif (current.open) {\n\t\t\t\tchunks.push(\n\t\t\t\t\toptionalRawChunk({\n\t\t\t\t\t\tkind: \"tool-done\",\n\t\t\t\t\t\tid: current.id,\n\t\t\t\t\t\tindex: current.index,\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tcurrent.open = false;\n\t\t\t}\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate resolveToolKey(\n\t\texplicitId: string | undefined,\n\t\tpartIndex: number,\n\t\tchoiceIndex: number,\n\t\tname: string | undefined,\n\t): string {\n\t\tif (explicitId) return explicitId;\n\t\tconst openKey = this.openToolByChoice.get(choiceIndex);\n\t\tif (openKey && this.tools.get(openKey)?.open) return openKey;\n\t\tif (name) {\n\t\t\tfor (const [key, state] of this.tools) {\n\t\t\t\tif (state.choiceIndex === choiceIndex && state.name === name && state.open) return key;\n\t\t\t}\n\t\t}\n\t\treturn `${choiceIndex}:${partIndex}`;\n\t}\n}\n\nfunction parseResponse(body: unknown, options: GeminiAdapterOptions): RawChunk[] {\n\tif (!isRecord(body)) {\n\t\tthrow libraryError(\"geminiAdapter.parseResponse expected a GenerateContentResponse object\");\n\t}\n\n\tlet record = body;\n\tif (options.apiSurface === \"vertex\") {\n\t\tconst normalized = normalizeVertexChunk(body);\n\t\tif (normalized) record = normalized;\n\t}\n\n\tconst parser = new GeminiStreamParser(options);\n\tconst chunks: RawChunk[] = [];\n\n\tif (isRecord(record.error)) {\n\t\treturn providerErrorChunksFromPayload(\n\t\t\trecord.error,\n\t\t\t\"geminiAdapter.parseResponse\",\n\t\t\tfalse,\n\t\t\t\"Gemini provider error\",\n\t\t);\n\t}\n\n\tconst feedback = isRecord(record.promptFeedback) ? record.promptFeedback : undefined;\n\tconst blockReason = feedback ? asString(feedback.blockReason) : undefined;\n\tif (blockReason) {\n\t\treturn providerErrorChunksFromMessage(`Gemini prompt blocked: ${blockReason}`, false);\n\t}\n\n\tchunks.push(...parser.parseChunk(JSON.stringify(record)));\n\n\tconst hasFinish = chunks.some((chunk) => chunk.kind === \"finish\");\n\tif (!hasFinish) {\n\t\tchunks.push({ kind: \"finish\", reason: \"stop\" });\n\t}\n\n\treturn chunks;\n}\n\nfunction partialArgDelta(arg: Record<string, unknown>): string | undefined {\n\tconst stringValue = asString(arg.stringValue);\n\tif (stringValue !== undefined) return stringValue;\n\n\tconst jsonPath = asString(arg.jsonPath) ?? \"$\";\n\tconst key = jsonPath.replace(/^\\$\\.?/, \"\").split(\".\")[0] ?? \"value\";\n\tif (arg.numberValue !== undefined) return JSON.stringify({ [key]: arg.numberValue });\n\tif (arg.boolValue !== undefined) return JSON.stringify({ [key]: arg.boolValue });\n\tif (arg.nullValue !== undefined) return JSON.stringify({ [key]: null });\n\treturn undefined;\n}\n\nfunction mapFinishReason(value: string): FinishReason {\n\tswitch (value) {\n\t\tcase \"STOP\":\n\t\tcase \"STOP_REASON_UNSPECIFIED\":\n\t\t\treturn \"stop\";\n\t\tcase \"MAX_TOKENS\":\n\t\t\treturn \"length\";\n\t\tcase \"SAFETY\":\n\t\tcase \"RECITATION\":\n\t\tcase \"BLOCKLIST\":\n\t\tcase \"PROHIBITED_CONTENT\":\n\t\tcase \"SPII\":\n\t\tcase \"LANGUAGE\":\n\t\t\treturn \"content_filter\";\n\t\tcase \"MALFORMED_FUNCTION_CALL\":\n\t\t\treturn \"error\";\n\t\tdefault:\n\t\t\treturn \"error\";\n\t}\n}\n\n/** Strip Vertex / gateway wrappers before mapping GenerateContentResponse fields. */\nexport function normalizeVertexChunk(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> | null {\n\tif (isRecord(payload.response)) {\n\t\treturn payload.response;\n\t}\n\tif (isRecord(payload.result)) {\n\t\treturn payload.result;\n\t}\n\tif (Array.isArray(payload.predictions)) {\n\t\tconst first = payload.predictions[0];\n\t\tif (isRecord(first)) return first;\n\t}\n\tif (\n\t\tpayload.candidates !== undefined ||\n\t\tpayload.usageMetadata !== undefined ||\n\t\tpayload.promptFeedback !== undefined ||\n\t\tpayload.responseId !== undefined ||\n\t\tisRecord(payload.error)\n\t) {\n\t\treturn payload;\n\t}\n\treturn null;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as StreamAdapter } from '../types-
|
|
1
|
+
import { S as StreamAdapter } from '../types-JvwK2_FV.cjs';
|
|
2
2
|
|
|
3
3
|
type GeminiApiSurface = "google-ai" | "vertex";
|
|
4
4
|
interface GeminiAdapterOptions {
|
|
@@ -9,6 +9,8 @@ interface GeminiAdapterOptions {
|
|
|
9
9
|
* @default "google-ai"
|
|
10
10
|
*/
|
|
11
11
|
apiSurface?: GeminiApiSurface;
|
|
12
|
+
/** @deprecated Dual-emit legacy metadata.raw citation blobs alongside typed events. */
|
|
13
|
+
emitLegacyCitationMetadata?: boolean;
|
|
12
14
|
}
|
|
13
15
|
declare function geminiAdapter(options?: GeminiAdapterOptions): StreamAdapter;
|
|
14
16
|
/** Strip Vertex / gateway wrappers before mapping GenerateContentResponse fields. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as StreamAdapter } from '../types-
|
|
1
|
+
import { S as StreamAdapter } from '../types-JvwK2_FV.js';
|
|
2
2
|
|
|
3
3
|
type GeminiApiSurface = "google-ai" | "vertex";
|
|
4
4
|
interface GeminiAdapterOptions {
|
|
@@ -9,6 +9,8 @@ interface GeminiAdapterOptions {
|
|
|
9
9
|
* @default "google-ai"
|
|
10
10
|
*/
|
|
11
11
|
apiSurface?: GeminiApiSurface;
|
|
12
|
+
/** @deprecated Dual-emit legacy metadata.raw citation blobs alongside typed events. */
|
|
13
|
+
emitLegacyCitationMetadata?: boolean;
|
|
12
14
|
}
|
|
13
15
|
declare function geminiAdapter(options?: GeminiAdapterOptions): StreamAdapter;
|
|
14
16
|
/** Strip Vertex / gateway wrappers before mapping GenerateContentResponse fields. */
|
package/dist/adapters/gemini.js
CHANGED
|
@@ -73,6 +73,54 @@ function incrementalJsonStringDelta(state, nextInput) {
|
|
|
73
73
|
return delta.length > 0 ? delta : void 0;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
// src/adapters/shared/citation-grounding.ts
|
|
77
|
+
function geminiCitationGroundingFromCandidate(candidate, options = {}) {
|
|
78
|
+
const chunks = [];
|
|
79
|
+
const citationMetadata = candidate.citationMetadata;
|
|
80
|
+
const groundingMetadata = candidate.groundingMetadata;
|
|
81
|
+
if (citationMetadata !== void 0) {
|
|
82
|
+
const citation = citationChunkFromGemini(citationMetadata);
|
|
83
|
+
if (citation) chunks.push(citation);
|
|
84
|
+
}
|
|
85
|
+
if (groundingMetadata !== void 0) {
|
|
86
|
+
const grounding = groundingChunkFromGemini(groundingMetadata);
|
|
87
|
+
if (grounding) chunks.push(grounding);
|
|
88
|
+
}
|
|
89
|
+
if (options.emitLegacyCitationMetadata && (citationMetadata !== void 0 || groundingMetadata !== void 0)) {
|
|
90
|
+
chunks.push(
|
|
91
|
+
optionalRawChunk({
|
|
92
|
+
kind: "metadata",
|
|
93
|
+
raw: { citationMetadata, groundingMetadata }
|
|
94
|
+
})
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
return chunks;
|
|
98
|
+
}
|
|
99
|
+
function citationChunkFromGemini(citationMetadata) {
|
|
100
|
+
if (citationMetadata === void 0) return void 0;
|
|
101
|
+
const chunk = { kind: "citation", raw: citationMetadata };
|
|
102
|
+
if (isRecord(citationMetadata) && Array.isArray(citationMetadata.citations)) {
|
|
103
|
+
chunk.sources = citationMetadata.citations;
|
|
104
|
+
}
|
|
105
|
+
return optionalRawChunk(chunk);
|
|
106
|
+
}
|
|
107
|
+
function groundingChunkFromGemini(groundingMetadata) {
|
|
108
|
+
if (groundingMetadata === void 0) return void 0;
|
|
109
|
+
const chunk = { kind: "grounding", raw: groundingMetadata };
|
|
110
|
+
if (isRecord(groundingMetadata)) {
|
|
111
|
+
if (Array.isArray(groundingMetadata.webSearchQueries)) {
|
|
112
|
+
chunk.queries = groundingMetadata.webSearchQueries;
|
|
113
|
+
}
|
|
114
|
+
if (Array.isArray(groundingMetadata.groundingChunks)) {
|
|
115
|
+
chunk.chunks = groundingMetadata.groundingChunks;
|
|
116
|
+
}
|
|
117
|
+
if (Array.isArray(groundingMetadata.groundingSupports)) {
|
|
118
|
+
chunk.supports = groundingMetadata.groundingSupports;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return optionalRawChunk(chunk);
|
|
122
|
+
}
|
|
123
|
+
|
|
76
124
|
// src/adapters/shared/parse-payload.ts
|
|
77
125
|
function parseAdapterObjectPayload(raw, scope, options = {}) {
|
|
78
126
|
const { trim = true, allowDone = true } = options;
|
|
@@ -218,9 +266,8 @@ var GeminiStreamParser = class {
|
|
|
218
266
|
const grounding = candidate.groundingMetadata;
|
|
219
267
|
if (citation !== void 0 || grounding !== void 0) {
|
|
220
268
|
chunks.push(
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
raw: { citationMetadata: citation, groundingMetadata: grounding }
|
|
269
|
+
...geminiCitationGroundingFromCandidate(candidate, {
|
|
270
|
+
emitLegacyCitationMetadata: this.options.emitLegacyCitationMetadata ?? false
|
|
224
271
|
})
|
|
225
272
|
);
|
|
226
273
|
}
|