llm-stream-assemble 1.5.7 → 1.6.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 +7 -7
- 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 +60 -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 +60 -5
- package/dist/adapters/openai-chat.js.map +1 -1
- package/dist/adapters/openai-compatible.cjs +62 -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 +62 -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 +12 -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 +12 -0
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +207 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +23 -3
- package/dist/index.d.ts +23 -3
- package/dist/index.js +205 -17
- package/dist/index.js.map +1 -1
- package/dist/{types-CskRfrmD.d.cts → types-CSHQ-Alb.d.cts} +42 -0
- package/dist/{types-CskRfrmD.d.ts → types-CSHQ-Alb.d.ts} +42 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
# llm-stream-assemble
|
|
2
2
|
|
|
3
|
-

|
|
4
4
|

|
|
5
5
|

|
|
6
|
-

|
|
7
7
|
[](https://github.com/01laky/llm-stream-assemble/actions/workflows/ci.yml)
|
|
8
|
-

|
|
9
9
|
|
|
10
|
-
**One typed event model for every LLM stream** — text, tool calls, reasoning, JSON, usage, refusals, errors, and non-streaming responses.
|
|
10
|
+
**One typed event model for every LLM stream** — text, tool calls, reasoning, JSON, usage, refusals, citations, grounding, errors, and non-streaming responses.
|
|
11
11
|
|
|
12
12
|
> A composable TypeScript layer between raw LLM provider bytes and your app: seven built-in adapters, thirteen host presets, and a single StreamEvent model for text, tools, reasoning, JSON, and lifecycle — from Ollama to Azure to Vertex AI to Bedrock to Cohere to Cloudflare Workers AI.
|
|
13
13
|
|
|
14
14
|
Turn provider SSE fragments into typed events — **not another `+=` loop**.
|
|
15
15
|
|
|
16
|
-
**Status:** Stable `1.
|
|
16
|
+
**Status:** Stable `1.6.0`. Seven built-in adapters (Gemini covers **Google AI** and **Vertex AI** via `apiSurface`), thirteen OpenAI-compatible host presets (including **Azure OpenAI** and **Cloudflare Workers AI**), transforms, replay helpers, and examples are production-ready. Pin semver ranges as usual and review [CHANGELOG.md](./CHANGELOG.md) before major upgrades.
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
@@ -410,7 +410,7 @@ Provider presets:
|
|
|
410
410
|
| `lmstudio` | LM Studio local server | Local host, metadata/usage may be sparse |
|
|
411
411
|
| `together` | Together AI | OpenAI-like; `reasoning` / `reasoning_delta` aliases |
|
|
412
412
|
| `fireworks` | Fireworks AI | OpenAI-like, usage/details may vary |
|
|
413
|
-
| `perplexity` | Perplexity API | Search-grounded answers; citations
|
|
413
|
+
| `perplexity` | Perplexity API | Search-grounded answers; root `citations` / `search_results` → typed `citation` events |
|
|
414
414
|
| `xai` | xAI Grok API | OpenAI-compatible; `reasoning_content` mapped when present |
|
|
415
415
|
| `azure` | Azure OpenAI Chat Completions | Stricter preset; deployment URL + `api-key` auth; content filter metadata in `metadata.raw` |
|
|
416
416
|
| `cloudflare` | Cloudflare Workers AI REST | OpenAI-compatible `/v1/chat/completions`; Bearer + account id; loose preset like Groq |
|
|
@@ -687,7 +687,7 @@ for await (const event of assembleStream(response.body!, cohereAdapter())) {
|
|
|
687
687
|
}
|
|
688
688
|
```
|
|
689
689
|
|
|
690
|
-
Use `cohereAdapter({ jsonMode: true })` when structured JSON output should map to `json.*` instead of `text.*`. **`tool-plan-delta`** events map to `reasoning.*` with `variant: "detail"`. **`citation-start`**
|
|
690
|
+
Use `cohereAdapter({ jsonMode: true })` when structured JSON output should map to `json.*` instead of `text.*`. **`tool-plan-delta`** events map to `reasoning.*` with `variant: "detail"`. **`citation-start`** maps to typed **`citation`** events (span, sources, index). Set `emitLegacyCitationMetadata: true` on any citation-capable adapter to dual-emit legacy `metadata.raw` blobs during migration. Legacy Cohere v1 endpoints are out of scope.
|
|
691
691
|
|
|
692
692
|
Subpath import: `import { cohereAdapter } from "llm-stream-assemble/adapters/cohere"`.
|
|
693
693
|
|
package/dist/adapters/cohere.cjs
CHANGED
|
@@ -72,6 +72,43 @@ function incrementalJsonStringDelta(state, nextInput) {
|
|
|
72
72
|
return delta.length > 0 ? delta : void 0;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
// src/adapters/shared/citation-grounding.ts
|
|
76
|
+
function cohereCitationFromStartPayload(citations, index, options = {}) {
|
|
77
|
+
const chunks = [];
|
|
78
|
+
const citation = citationChunkFromCohere(citations, index);
|
|
79
|
+
if (citation) chunks.push(citation);
|
|
80
|
+
if (options.emitLegacyCitationMetadata && citations !== void 0) {
|
|
81
|
+
chunks.push(
|
|
82
|
+
optionalRawChunk({
|
|
83
|
+
kind: "metadata",
|
|
84
|
+
raw: { citation: citations, index }
|
|
85
|
+
})
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
return chunks;
|
|
89
|
+
}
|
|
90
|
+
function citationChunkFromCohere(citations, index) {
|
|
91
|
+
if (citations === void 0) return void 0;
|
|
92
|
+
const chunk = { kind: "citation", raw: { citation: citations, index } };
|
|
93
|
+
const numericIndex = asNumber(index);
|
|
94
|
+
if (numericIndex !== void 0) chunk.index = numericIndex;
|
|
95
|
+
if (isRecord(citations)) {
|
|
96
|
+
const start = asNumber(citations.start);
|
|
97
|
+
const end = asNumber(citations.end);
|
|
98
|
+
const text = asString(citations.text);
|
|
99
|
+
if (start !== void 0 && end !== void 0) {
|
|
100
|
+
chunk.span = { start, end, ...text ? { text } : {} };
|
|
101
|
+
} else if (text) {
|
|
102
|
+
chunk.span = { start: 0, end: text.length, text };
|
|
103
|
+
}
|
|
104
|
+
const sources = citations.sources;
|
|
105
|
+
if (Array.isArray(sources) && sources.length > 0) {
|
|
106
|
+
chunk.sources = sources;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return optionalRawChunk(chunk);
|
|
110
|
+
}
|
|
111
|
+
|
|
75
112
|
// src/adapters/shared/parse-payload.ts
|
|
76
113
|
function parseAdapterObjectPayload(raw, scope, options = {}) {
|
|
77
114
|
const { trim = true, allowDone = true } = options;
|
|
@@ -345,12 +382,9 @@ var CohereStreamParser = class {
|
|
|
345
382
|
const delta = isRecord(payload.delta) ? payload.delta : void 0;
|
|
346
383
|
const message = delta && isRecord(delta.message) ? delta.message : void 0;
|
|
347
384
|
const citations = message?.citations;
|
|
348
|
-
return
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
raw: { citation: citations, index: payload.index }
|
|
352
|
-
})
|
|
353
|
-
];
|
|
385
|
+
return cohereCitationFromStartPayload(citations, asNumber(payload.index), {
|
|
386
|
+
emitLegacyCitationMetadata: this.options.emitLegacyCitationMetadata ?? false
|
|
387
|
+
});
|
|
354
388
|
}
|
|
355
389
|
messageEndChunks(payload) {
|
|
356
390
|
const delta = isRecord(payload.delta) ? payload.delta : void 0;
|
|
@@ -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.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 { 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":";;;AACO,SAAS,eAAkD,GAAA,EAAW;AAC5E,EAAA,OAAO,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAS,CAAC,CAAA;AACzF;;;ACEO,SAAS,SAAS,KAAA,EAAkD;AAC1E,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC3E;AAEO,SAAS,SAAS,KAAA,EAAoC;AAC5D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA;AAC5C;AAEO,SAAS,SAAS,KAAA,EAAoC;AAC5D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,IAAI,KAAA,GAAQ,MAAA;AACtE;AAEO,SAAS,iBAAiB,KAAA,EAA0C;AAC1E,EAAA,OAAO,eAAe,KAAK,CAAA;AAC5B;AAEO,SAAS,oBAAA,CAAqB,SAAiB,OAAA,EAAwB;AAC7E,EAAA,OAAO,kBAAA,CAAmB,SAAS,OAAO,CAAA;AAC3C;AAEO,SAAS,oBAA8B,MAAA,EAI5B;AACjB,EAAA,OAAO;AAAA,IACN,WAAW,GAAA,EAAK;AACf,MAAA,OAAO,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,cAAc,IAAA,EAAM;AACnB,MAAA,OAAO,MAAA,CAAO,aAAA,CAAc,IAAA,EAAM,MAAA,CAAO,OAAO,CAAA;AAAA,IACjD;AAAA,GACD;AACD;AAEO,SAAS,gBAAA,CAAiB,KAAa,OAAA,EAA0B;AACvE,EAAA,IAAI;AACH,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACtB,SAAS,KAAA,EAAO;AACf,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,oBAAA,CAAqB,SAAS,OAAO,CAAA;AAAA,EAC5C;AACD;;;AC3CO,SAAS,aAAa,OAAA,EAAwB;AACpD,EAAA,OAAO,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAE,CAAA;AACnD;AAEO,SAAS,kBAAA,CAAmB,OAAe,OAAA,EAAwB;AACzE,EAAA,OAAO,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAC7D;AAEO,SAAS,mBAAA,CAAoB,KAAA,EAAc,WAAA,GAAc,KAAA,EAAmB;AAClF,EAAA,OAAO;AAAA,IACN,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,WAAA,EAAY;AAAA,IAC7C,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,OAAA;AAAQ,GACnC;AACD;AAMO,SAAS,8BAAA,CACf,YAAA,EACA,KAAA,EACA,WAAA,EACA,eAAA,EACa;AACb,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,YAAA,CAAa,OAAO,CAAA,IAAK,eAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,KAAA,EAAO,OAAO,CAAA;AAC/C,EAAA,MAAA,CAAO,cAAA,CAAe,OAAO,KAAA,EAAO;AAAA,IACnC,KAAA,EAAO,YAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACZ,CAAA;AACD,EAAA,OAAO,mBAAA,CAAoB,OAAO,WAAW,CAAA;AAC9C;;;AC9BO,SAAS,0BAAA,CACf,OACA,SAAA,EACqB;AACrB,EAAA,MAAM,OAAO,KAAA,CAAM,YAAA;AACnB,EAAA,IAAI,SAAA,KAAc,MAAM,OAAO,MAAA;AAC/B,EAAA,MAAM,KAAA,GACL,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,SAAA,CAAU,UAAA,CAAW,IAAI,CAAA,GAAI,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,SAAA;AAChF,EAAA,KAAA,CAAM,YAAA,GAAe,SAAA;AACrB,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,MAAA;AACnC;;;ACNO,SAAS,8BAAA,CACf,SAAA,EACA,KAAA,EACA,OAAA,GAAoC,EAAC,EACxB;AACb,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,SAAA,EAAW,KAAK,CAAA;AACzD,EAAA,IAAI,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA;AAClC,EAAA,IAAI,OAAA,CAAQ,0BAAA,IAA8B,SAAA,KAAc,MAAA,EAAW;AAClE,IAAA,MAAA,CAAO,IAAA;AAAA,MACN,gBAAA,CAAiB;AAAA,QAChB,IAAA,EAAM,UAAA;AAAA,QACN,GAAA,EAAK,EAAE,QAAA,EAAU,SAAA,EAAW,KAAA;AAAM,OAClC;AAAA,KACF;AAAA,EACD;AACA,EAAA,OAAO,MAAA;AACR;AAEA,SAAS,uBAAA,CAAwB,WAAoB,KAAA,EAAsC;AAC1F,EAAA,IAAI,SAAA,KAAc,QAAW,OAAO,MAAA;AAEpC,EAAA,MAAM,KAAA,GAAuB,EAAE,IAAA,EAAM,UAAA,EAAY,KAAK,EAAE,QAAA,EAAU,SAAA,EAAW,KAAA,EAAM,EAAE;AACrF,EAAA,MAAM,YAAA,GAAe,SAAS,KAAK,CAAA;AACnC,EAAA,IAAI,YAAA,KAAiB,MAAA,EAAW,KAAA,CAAM,KAAA,GAAQ,YAAA;AAE9C,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACxB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,SAAA,CAAU,KAAK,CAAA;AACtC,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,SAAA,CAAU,GAAG,CAAA;AAClC,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,SAAA,CAAU,IAAI,CAAA;AACpC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,GAAA,KAAQ,MAAA,EAAW;AAC7C,MAAA,KAAA,CAAM,IAAA,GAAO,EAAE,KAAA,EAAO,GAAA,EAAK,GAAI,OAAO,EAAE,IAAA,EAAK,GAAI,EAAC,EAAG;AAAA,IACtD,WAAW,IAAA,EAAM;AAChB,MAAA,KAAA,CAAM,OAAO,EAAE,KAAA,EAAO,GAAG,GAAA,EAAK,IAAA,CAAK,QAAQ,IAAA,EAAK;AAAA,IACjD;AACA,IAAA,MAAM,UAAU,SAAA,CAAU,OAAA;AAC1B,IAAA,IAAI,MAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,SAAS,CAAA,EAAG;AACjD,MAAA,KAAA,CAAM,OAAA,GAAU,OAAA;AAAA,IACjB;AAAA,EACD;AAEA,EAAA,OAAO,iBAAiB,KAAK,CAAA;AAC9B;;;ACxCO,SAAS,yBAAA,CACf,GAAA,EACA,KAAA,EACA,OAAA,GAAqC,EAAC,EACL;AACjC,EAAA,MAAM,EAAE,IAAA,GAAO,IAAA,EAAM,SAAA,GAAY,MAAK,GAAI,OAAA;AAC1C,EAAA,MAAM,KAAA,GAAQ,IAAA,GAAO,GAAA,CAAI,IAAA,EAAK,GAAI,GAAA;AAClC,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,IAAM,SAAA,IAAa,KAAA,KAAU,UAAW,OAAO,IAAA;AAEpE,EAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,KAAA,EAAO,KAAK,CAAA;AAC7C,EAAA,IAAI,CAAC,QAAA,CAAS,OAAO,CAAA,EAAG;AACvB,IAAA,MAAM,kBAAA,CAAmB,OAAO,wBAAwB,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,OAAA;AACR;;;ACnBO,SAAS,eAAA,CACf,MACA,OAAA,EACuB;AACvB,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAC9B,EAAA,IAAI,QAAQ,QAAA,EAAU,OAAO,EAAE,IAAA,EAAM,YAAA,EAAc,OAAO,IAAA,EAAK;AAC/D,EAAA,IAAI,OAAA,CAAQ,gBAAgB,MAAA,EAAW;AACtC,IAAA,OAAO,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,WAAA,EAAa,QAAQ,WAAA,EAAY;AAAA,EACrE;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAK;AACnC;;;ACPA,IAAM,eAAA,GAAqC;AAAA,EAC1C,OAAO,CAAC,aAAA,EAAe,cAAA,EAAgB,cAAA,EAAgB,oBAAoB,iBAAiB,CAAA;AAAA,EAC5F,MAAA,EAAQ;AAAA,IACP,cAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,sBAAA;AAAA,IACA;AAAA,GACD;AAAA,EACA,SAAA,EAAW,CAAC,iBAAA,EAAmB,kBAAA,EAAoB,oBAAoB,CAAA;AAAA,EACvE,KAAA,EAAO,CAAC,aAAA,EAAe,iBAAA,EAAmB,cAAc;AACzD,CAAA;AAEA,SAAS,WAAA,CACR,OACA,MAAA,EACqB;AACrB,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC3B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,KAAK,CAAC,CAAA;AACpC,IAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AAAA,EAClC;AACA,EAAA,OAAO,MAAA;AACR;AAEO,SAAS,eAAA,CACf,KAAA,EACA,OAAA,GAA6B,eAAA,EAC7B,OAAA,EACuB;AACvB,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,MAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,KAAA,EAAO,OAAA,CAAQ,KAAK,CAAA;AACpD,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,KAAA,EAAO,OAAA,CAAQ,MAAM,CAAA;AACtD,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,KAAA,EAAO,OAAA,CAAQ,SAAS,CAAA;AAC5D,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,KAAA,EAAO,OAAA,CAAQ,KAAK,CAAA;AACpD,EAAA,IACC,gBAAgB,MAAA,IAChB,YAAA,KAAiB,UACjB,eAAA,KAAoB,MAAA,IACpB,gBAAgB,MAAA,EACf;AACD,IAAA,OAAO,MAAA;AAAA,EACR;AACA,EAAA,MAAM,GAAA,GACiF,KAAA;AACvF,EAAA,OAAO,gBAAA,CAAiB;AAAA,IACvB,IAAA,EAAM,OAAA;AAAA,IACN,WAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACA,CAAA;AACF;;;ACpCA,IAAM,oBAAA,GAA0C;AAAA,EAC/C,KAAA,EAAO,CAAC,cAAA,EAAgB,aAAa,CAAA;AAAA,EACrC,MAAA,EAAQ,CAAC,eAAA,EAAiB,cAAc,CAAA;AAAA,EACxC,KAAA,EAAO,CAAC,cAAA,EAAgB,aAAa;AACtC,CAAA;AAEO,SAAS,aAAA,CAAc,OAAA,GAAgC,EAAC,EAAkB;AAChF,EAAA,MAAM,MAAA,GAAS,IAAI,kBAAA,CAAmB,OAAO,CAAA;AAC7C,EAAA,OAAO,mBAAA,CAAoB;AAAA,IAC1B,MAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACA,CAAA;AACF;AAEA,IAAM,qBAAN,MAAyB;AAAA,EAMxB,YAA6B,OAAA,EAA+B;AAA/B,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAAgC;AAAA,EAAhC,OAAA;AAAA,EALrB,cAAA,GAAiB,KAAA;AAAA,EACjB,eAAA,GAAkB,KAAA;AAAA,EACT,UAAA,uBAAiB,GAAA,EAAuB;AAAA,EACxC,UAAA,uBAAiB,GAAA,EAAoB;AAAA,EAItD,WAAW,GAAA,EAAyB;AACnC,IAAA,MAAM,OAAA,GAAU,yBAAA,CAA0B,GAAA,EAAK,0BAA0B,CAAA;AACzE,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAC;AAEtB,IAAA,IAAI,QAAA,CAAS,QAAQ,IAAI,CAAA,KAAM,WAAW,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,EAAG;AAClE,MAAA,MAAM,YAAY,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,KAAA,GAAQ,OAAA;AAC5D,MAAA,OAAO,8BAAA;AAAA,QACN,SAAA;AAAA,QACA,0BAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACD;AAAA,IACD;AAEA,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACvC,IAAA,IAAI,CAAC,SAAA,EAAW,OAAO,mBAAA,CAAoB,OAAO,CAAA;AAElD,IAAA,QAAQ,SAAA;AAAW,MAClB,KAAK,eAAA;AACJ,QAAA,OAAO,IAAA,CAAK,mBAAmB,OAAO,CAAA;AAAA,MACvC,KAAK,eAAA;AAAA,MACL,KAAK,aAAA;AACJ,QAAA,OAAO,EAAC;AAAA,MACT,KAAK,eAAA;AACJ,QAAA,OAAO,IAAA,CAAK,mBAAmB,OAAO,CAAA;AAAA,MACvC,KAAK,iBAAA;AACJ,QAAA,OAAO,IAAA,CAAK,oBAAoB,OAAO,CAAA;AAAA,MACxC,KAAK,iBAAA;AACJ,QAAA,OAAO,IAAA,CAAK,oBAAoB,OAAO,CAAA;AAAA,MACxC,KAAK,iBAAA;AACJ,QAAA,OAAO,IAAA,CAAK,oBAAoB,OAAO,CAAA;AAAA,MACxC,KAAK,eAAA;AACJ,QAAA,OAAO,IAAA,CAAK,kBAAkB,OAAO,CAAA;AAAA,MACtC,KAAK,gBAAA;AACJ,QAAA,OAAO,IAAA,CAAK,oBAAoB,OAAO,CAAA;AAAA,MACxC,KAAK,cAAA;AACJ,QAAA,OAAO,EAAC;AAAA,MACT,KAAK,aAAA;AACJ,QAAA,OAAO,IAAA,CAAK,iBAAiB,OAAO,CAAA;AAAA,MACrC;AACC,QAAA,OAAO,oBAAoB,OAAO,CAAA;AAAA;AACpC,EACD;AAAA,EAEQ,mBAAmB,OAAA,EAAwC;AAClE,IAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,OAAO,EAAC;AACjC,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAEtB,IAAA,MAAM,MAAA,GAAqB,CAAC,EAAE,IAAA,EAAM,iBAAiB,CAAA;AACrD,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAA;AACrC,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,KAAA,GAAQ,MAAA;AACxD,IAAA,MAAM,UAAU,KAAA,IAAS,QAAA,CAAS,MAAM,OAAO,CAAA,GAAI,MAAM,OAAA,GAAU,MAAA;AACnE,IAAA,MAAM,IAAA,GAAO,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,GAAI,MAAA;AAEhD,IAAA,IAAI,aAAa,IAAA,EAAM;AACtB,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,MAAA,MAAA,CAAO,IAAA;AAAA,QACN,gBAAA,CAAiB;AAAA,UAChB,IAAA,EAAM,UAAA;AAAA,UACN,UAAA,EAAY,SAAA;AAAA,UACZ,GAAA,EAAK,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA;AAAK,SAC3B;AAAA,OACF;AAAA,IACD;AAEA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA,EAEQ,mBAAmB,OAAA,EAAwC;AAClE,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,KAAA,GAAQ,MAAA;AACxD,IAAA,MAAM,UAAU,KAAA,IAAS,QAAA,CAAS,MAAM,OAAO,CAAA,GAAI,MAAM,OAAA,GAAU,MAAA;AACnE,IAAA,MAAM,UAAU,OAAA,IAAW,QAAA,CAAS,QAAQ,OAAO,CAAA,GAAI,QAAQ,OAAA,GAAU,MAAA;AACzE,IAAA,MAAM,IAAA,GAAO,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,GAAI,MAAA;AAChD,IAAA,IAAI,SAAS,MAAA,IAAa,IAAA,CAAK,MAAA,KAAW,CAAA,SAAU,EAAC;AAErD,IAAA,MAAM,SAAA,GAAY,gBAAgB,IAAA,EAAM;AAAA,MACvC,QAAA,EAAU,KAAK,OAAA,CAAQ,QAAA;AAAA,MACvB,WAAA,EAAa,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,IAAK;AAAA,KACxC,CAAA;AACD,IAAA,OAAO,SAAA,GAAY,CAAC,SAAS,CAAA,GAAI,EAAC;AAAA,EACnC;AAAA,EAEQ,oBAAoB,OAAA,EAAwC;AACnE,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,KAAA,GAAQ,MAAA;AACxD,IAAA,MAAM,UAAU,KAAA,IAAS,QAAA,CAAS,MAAM,OAAO,CAAA,GAAI,MAAM,OAAA,GAAU,MAAA;AACnE,IAAA,MAAM,QAAA,GAAW,UAAU,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAA,GAAI,QAAA,CAAS,OAAO,SAAS,CAAA;AAClF,IAAA,IAAI,aAAa,MAAA,IAAa,QAAA,CAAS,MAAA,KAAW,CAAA,SAAU,EAAC;AAC7D,IAAA,OAAO,CAAC,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAM,QAAA,EAAU,OAAA,EAAS,UAAU,CAAA;AAAA,EACvE;AAAA,EAEQ,oBAAoB,OAAA,EAAwC;AACnE,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,IAAK,CAAA;AAC7C,IAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,OAAA,CAAQ,KAAK,CAAA;AAClD,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAEpC,IAAA,MAAM,SAAqB,EAAC;AAC5B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC7C,MAAA,MAAM,QAAA,GAAW,UAAU,CAAC,CAAA;AAC5B,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,CAAS,KAAK,KAAK,SAAA,GAAY,CAAA;AACtD,MAAA,MAAM,KAAK,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA,IAAK,eAAe,KAAK,CAAA,CAAA;AACxD,MAAA,MAAM,KAAK,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAAI,SAAS,QAAA,GAAW,MAAA;AAC7D,MAAA,MAAM,OAAO,EAAA,GAAM,QAAA,CAAS,EAAA,CAAG,IAAI,KAAK,SAAA,GAAa,SAAA;AACrD,MAAA,MAAM,MAAM,gBAAA,CAAiB,IAAA,CAAK,YAAY,IAAA,CAAK,UAAA,EAAY,OAAO,EAAE,CAAA;AACxE,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA;AACxC,MAAA,IAAI,QAAA,EAAU,IAAA,IAAQ,QAAA,CAAS,EAAA,KAAO,EAAA,EAAI;AAE1C,MAAA,MAAM,KAAA,GAAmB;AAAA,QACxB,EAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,IAAA,EAAM,IAAA;AAAA,QACN,YAAA,EAAc,QAAA,CAAS,EAAA,EAAI,SAAS,CAAA,IAAK;AAAA,OAC1C;AACA,MAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAC9B,MAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAA,EAAO,GAAG,CAAA;AAC9B,MAAA,IAAI,OAAO,GAAA,EAAK,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,KAAK,CAAA;AAE7C,MAAA,MAAA,CAAO,IAAA;AAAA,QACN,gBAAA,CAAiB;AAAA,UAChB,IAAA,EAAM,YAAA;AAAA,UACN,EAAA;AAAA,UACA,IAAA;AAAA,UACA,KAAA;AAAA,UACA,WAAA,EAAa;AAAA,SACb;AAAA,OACF;AAAA,IACD;AACA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA,EAEQ,oBAAoB,OAAA,EAAwC;AACnE,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,IAAK,CAAA;AACzC,IAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,OAAA,CAAQ,KAAK,CAAA;AAClD,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAEpC,IAAA,MAAM,SAAqB,EAAC;AAC5B,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AACjC,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA;AACnC,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,MAAM,CAAA;AAC7C,MAAA,IAAI,QAAQ,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA,GAAI,MAAA;AAC7C,MAAA,IAAI,CAAC,KAAA,EAAO;AACX,QAAA,MAAMA,MAAK,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAAI,SAAS,QAAA,GAAW,MAAA;AAC7D,QAAA,MAAM,OAAOA,GAAAA,GAAM,QAAA,CAASA,GAAAA,CAAG,IAAI,KAAK,SAAA,GAAa,SAAA;AACrD,QAAA,MAAM,EAAA,GAAK,MAAA,IAAU,CAAA,YAAA,EAAe,KAAK,CAAA,CAAA;AACzC,QAAA,KAAA,GAAQ,EAAE,EAAA,EAAI,IAAA,EAAM,OAAO,IAAA,EAAM,IAAA,EAAM,cAAc,EAAA,EAAG;AACxD,QAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,EAAA,EAAI,KAAK,CAAA;AAC7B,QAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA;AAC7B,QAAA,MAAA,CAAO,IAAA;AAAA,UACN,gBAAA,CAAiB;AAAA,YAChB,IAAA,EAAM,YAAA;AAAA,YACN,EAAA;AAAA,YACA,IAAA;AAAA,YACA,KAAA;AAAA,YACA,WAAA,EAAa;AAAA,WACb;AAAA,SACF;AAAA,MACD,CAAA,MAAA,IAAW,MAAA,IAAU,KAAA,CAAM,EAAA,KAAO,MAAA,EAAQ;AACzC,QAAA,IAAA,CAAK,eAAA,CAAgB,KAAA,EAAO,MAAA,EAAQ,KAAK,CAAA;AAAA,MAC1C;AAEA,MAAA,MAAM,KAAK,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAAI,SAAS,QAAA,GAAW,MAAA;AAC7D,MAAA,MAAM,QAAA,GAAW,EAAA,GAAK,QAAA,CAAS,EAAA,CAAG,SAAS,CAAA,GAAI,MAAA;AAC/C,MAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,CAAS,MAAA,GAAS,KAAK,KAAA,EAAO;AAC3D,QAAA,MAAM,KAAA,GAAQ,0BAAA,CAA2B,KAAA,EAAO,QAAQ,CAAA;AACxD,QAAA,IAAI,KAAA,EAAO;AACV,UAAA,MAAA,CAAO,IAAA;AAAA,YACN,gBAAA,CAAiB;AAAA,cAChB,IAAA,EAAM,iBAAA;AAAA,cACN,IAAI,KAAA,CAAM,EAAA;AAAA,cACV,KAAA;AAAA,cACA,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,WAAA,EAAa;AAAA,aACb;AAAA,WACF;AAAA,QACD;AAAA,MACD;AAAA,IACD;AACA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA,EAEQ,kBAAkB,OAAA,EAAwC;AACjE,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,IAAK,CAAA;AACzC,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,KAAA,GAAQ,MAAA;AACxD,IAAA,MAAM,UAAU,KAAA,IAAS,QAAA,CAAS,MAAM,OAAO,CAAA,GAAI,MAAM,OAAA,GAAU,MAAA;AACnE,IAAA,MAAM,YAAY,OAAA,GAAU,mBAAA,CAAoB,OAAA,CAAQ,UAAU,IAAI,EAAC;AACvE,IAAA,MAAM,MAAA,GAAS,UAAU,CAAC,CAAA,GAAI,SAAS,SAAA,CAAU,CAAC,CAAA,CAAE,EAAE,CAAA,GAAI,MAAA;AAE1D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,MAAM,CAAA;AAC7C,IAAA,MAAM,QAAQ,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA,GAAI,MAAA;AAC/C,IAAA,IAAI,CAAC,KAAA,EAAO,IAAA,EAAM,OAAO,EAAC;AAE1B,IAAA,IAAI,MAAA,IAAU,KAAA,CAAM,EAAA,KAAO,MAAA,EAAQ;AAClC,MAAA,IAAA,CAAK,eAAA,CAAgB,KAAA,EAAO,MAAA,EAAQ,KAAK,CAAA;AAAA,IAC1C;AAEA,IAAA,KAAA,CAAM,IAAA,GAAO,KAAA;AACb,IAAA,OAAO;AAAA,MACN,gBAAA,CAAiB;AAAA,QAChB,IAAA,EAAM,WAAA;AAAA,QACN,IAAI,KAAA,CAAM,EAAA;AAAA,QACV,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,WAAA,EAAa;AAAA,OACb;AAAA,KACF;AAAA,EACD;AAAA,EAEQ,oBAAoB,OAAA,EAAwC;AACnE,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,KAAA,GAAQ,MAAA;AACxD,IAAA,MAAM,UAAU,KAAA,IAAS,QAAA,CAAS,MAAM,OAAO,CAAA,GAAI,MAAM,OAAA,GAAU,MAAA;AACnE,IAAA,MAAM,YAAY,OAAA,EAAS,SAAA;AAC3B,IAAA,OAAO,8BAAA,CAA+B,SAAA,EAAW,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,EAAG;AAAA,MACzE,0BAAA,EAA4B,IAAA,CAAK,OAAA,CAAQ,0BAAA,IAA8B;AAAA,KACvE,CAAA;AAAA,EACF;AAAA,EAEQ,iBAAiB,OAAA,EAAwC;AAChE,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,KAAA,GAAQ,MAAA;AACxD,IAAA,MAAM,SAAqB,EAAC;AAE5B,IAAA,MAAM,cACL,KAAA,IAAS,QAAA,CAAS,KAAA,CAAM,KAAK,IAC1B,oBAAA,CAAqB,KAAA,CAAM,KAAK,CAAA,GAChC,SAAS,QAAA,CAAS,KAAA,CAAM,YAAY,CAAA,GACnC,MAAM,YAAA,GACN,MAAA;AACL,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,WAAA,EAAa,oBAAoB,CAAA;AAC/D,IAAA,IAAI,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAE5B,IAAA,MAAM,YAAA,GAAe,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,aAAa,CAAA,GAAI,MAAA;AAC7D,IAAA,IAAI,YAAA,EAAc;AACjB,MAAA,MAAA,CAAO,IAAA;AAAA,QACN,gBAAA,CAAiB;AAAA,UAChB,IAAA,EAAM,UAAA;AAAA,UACN,GAAA,EAAK,EAAE,aAAA,EAAe,YAAA;AAAa,SACnC;AAAA,OACF;AACA,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,sBAAsB,YAAY,CAAA;AAAA,QAC1C,WAAA,EAAa;AAAA,OACb,CAAA;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA,EAEQ,cAAA,CAAe,OAAe,EAAA,EAA4C;AACjF,IAAA,IAAI,MAAM,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,EAAE,GAAG,OAAO,EAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AACzC,IAAA,IAAI,SAAS,OAAO,OAAA;AACpB,IAAA,IAAI,IAAI,OAAO,EAAA;AACf,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AAAA,EACjC;AAAA,EAEQ,eAAA,CAAgB,KAAA,EAAkB,MAAA,EAAgB,KAAA,EAAqB;AAC9E,IAAA,MAAM,SAAS,KAAA,CAAM,EAAA;AACrB,IAAA,KAAA,CAAM,EAAA,GAAK,MAAA;AACX,IAAA,IAAA,CAAK,UAAA,CAAW,OAAO,MAAM,CAAA;AAC7B,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAA,EAAQ,KAAK,CAAA;AACjC,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA;AAAA,EAClC;AACD,CAAA;AAEA,SAAS,aAAA,CAAc,MAAe,OAAA,EAA2C;AAChF,EAAA,IAAI,CAAC,QAAA,CAAS,IAAI,CAAA,EAAG;AACpB,IAAA,MAAM,aAAa,uEAAuE,CAAA;AAAA,EAC3F;AAEA,EAAA,IAAI,QAAA,CAAS,KAAK,IAAI,CAAA,KAAM,WAAW,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA,EAAG;AAC5D,IAAA,MAAM,YAAY,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA,GAAI,KAAK,KAAA,GAAQ,IAAA;AACtD,IAAA,OAAO,8BAAA;AAAA,MACN,SAAA;AAAA,MACA,6BAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACD;AAAA,EACD;AAEA,EAAA,MAAM,UAAU,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA,GAAI,KAAK,OAAA,GAAU,MAAA;AACxD,EAAA,IAAI,CAAC,OAAA,EAAS;AACb,IAAA,MAAMC,UAAqB,EAAC;AAC5B,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,IAAA,CAAK,KAAA,EAAO,oBAAoB,CAAA;AAC9D,IAAA,IAAI,KAAA,EAAOA,OAAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC5B,IAAA,MAAMC,aAAAA,GAAe,QAAA,CAAS,IAAA,CAAK,aAAa,CAAA;AAChD,IAAA,IAAIA,aAAAA,EAAc;AACjB,MAAAD,QAAO,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,sBAAsBC,aAAY,CAAA;AAAA,QAC1C,WAAA,EAAa;AAAA,OACb,CAAA;AAAA,IACF,CAAA,MAAO;AACN,MAAAD,OAAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAU,MAAA,EAAQ,MAAA,EAAQ,WAAA,EAAa,CAAA,EAAG,CAAA;AAAA,IAC/D;AACA,IAAA,OAAOA,OAAAA;AAAA,EACR;AAEA,EAAA,MAAM,MAAA,GAAS,IAAI,kBAAA,CAAmB,OAAO,CAAA;AAC7C,EAAA,MAAM,eAAA,GAAkB,6BAA6B,IAAI,CAAA;AACzD,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,SAAS,eAAA,EAAiB;AACpC,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,UAAA,CAAW,KAAK,SAAA,CAAU,KAAK,CAAC,CAAC,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,CAAK,aAAa,CAAA;AAChD,EAAA,IAAI,YAAA,IAAgB,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,QAAQ,CAAA,EAAG;AACrE,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,MAAA,EAAQ,sBAAsB,YAAY,CAAA;AAAA,MAC1C,WAAA,EAAa;AAAA,KACb,CAAA;AAAA,EACF,CAAA,MAAA,IAAW,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,QAAQ,CAAA,EAAG;AAC5D,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,QAAQ,MAAA,EAAQ,WAAA,EAAa,GAAG,CAAA;AAAA,EAC/D;AAEA,EAAA,OAAO,MAAA;AACR;AAEA,SAAS,6BAA6B,IAAA,EAA0C;AAC/E,EAAA,MAAM,SAAoB,EAAC;AAC3B,EAAA,MAAM,UAAU,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA,GAAI,KAAK,OAAA,GAAU,MAAA;AACxD,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAErB,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA;AAClC,EAAA,MAAA,CAAO,IAAA,CAAK;AAAA,IACX,IAAA,EAAM,eAAA;AAAA,IACN,GAAI,SAAA,GAAY,EAAE,EAAA,EAAI,SAAA,KAAc,EAAC;AAAA,IACrC,KAAA,EAAO,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,SAAS,OAAA,CAAQ,IAAI,CAAA,IAAK,WAAA,EAAY;AAAE,GAClE,CAAA;AAED,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAA;AAC3C,EAAA,IAAI,QAAA,EAAU;AACb,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACX,IAAA,EAAM,iBAAA;AAAA,MACN,OAAO,EAAE,OAAA,EAAS,EAAE,SAAA,EAAW,UAAS;AAAE,KAC1C,CAAA;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA,CAAQ,UAAU,EAAC;AACpE,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC5B,IAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;AACtB,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAChC,IAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC1C,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,eAAA;AAAA,QACN,KAAA,EAAO,CAAA;AAAA,QACP,KAAA,EAAO,EAAE,OAAA,EAAS,EAAE,SAAS,EAAE,IAAA,IAAO;AAAE,OACxC,CAAA;AAAA,IACF;AAAA,EACD;AAEA,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC7B,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AACjC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,gBAAA;AAAA,QACN,KAAA,EAAO,CAAA;AAAA,QACP,OAAO,EAAE,OAAA,EAAS,EAAE,SAAA,EAAW,UAAS;AAAE,OAC1C,CAAA;AAAA,IACF;AAAA,EACD;AAEA,EAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,OAAA,CAAQ,UAAU,CAAA;AACxD,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AACjC,IAAA,MAAM,KAAK,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA,IAAK,eAAe,SAAS,CAAA,CAAA;AAC5D,IAAA,MAAM,KAAK,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAAI,SAAS,QAAA,GAAW,MAAA;AAC7D,IAAA,MAAM,OAAO,EAAA,GAAM,QAAA,CAAS,EAAA,CAAG,IAAI,KAAK,SAAA,GAAa,SAAA;AACrD,IAAA,MAAM,IAAA,GAAO,EAAA,GAAK,QAAA,CAAS,EAAA,CAAG,SAAS,CAAA,GAAI,MAAA;AAC3C,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACX,IAAA,EAAM,iBAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO;AAAA,QACN,OAAA,EAAS;AAAA,UACR,UAAA,EAAY;AAAA,YACX,EAAA;AAAA,YACA,IAAA,EAAM,UAAA;AAAA,YACN,QAAA,EAAU,EAAE,IAAA,EAAM,SAAA,EAAW,QAAQ,EAAA;AAAG;AACzC;AACD;AACD,KACA,CAAA;AACD,IAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC1C,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,iBAAA;AAAA,QACN,KAAA,EAAO,SAAA;AAAA,QACP,KAAA,EAAO;AAAA,UACN,OAAA,EAAS;AAAA,YACR,UAAA,EAAY;AAAA,cACX,EAAA;AAAA,cACA,QAAA,EAAU,EAAE,SAAA,EAAW,IAAA;AAAK;AAC7B;AACD;AACD,OACA,CAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAO,WAAW,CAAA;AACvD,IAAA,SAAA,IAAa,CAAA;AAAA,EACd;AAEA,EAAA,IAAI,IAAA,CAAK,KAAA,KAAU,MAAA,IAAa,IAAA,CAAK,kBAAkB,MAAA,EAAW;AACjE,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACX,IAAA,EAAM,aAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACN,GAAI,KAAK,aAAA,KAAkB,MAAA,GAAY,EAAE,aAAA,EAAe,IAAA,CAAK,aAAA,EAAc,GAAI,EAAC;AAAA,QAChF,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI;AAAC;AACzD,KACA,CAAA;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACR;AAEA,SAAS,mBAAmB,KAAA,EAA2C;AACtE,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,SAAU,EAAC;AAC9B,EAAA,MAAM,UAAU,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA,GAAI,MAAM,OAAA,GAAU,MAAA;AAC1D,EAAA,OAAO,mBAAA,CAAoB,SAAS,UAAU,CAAA;AAC/C;AAEA,SAAS,oBAAoB,KAAA,EAA2C;AACvE,EAAA,IAAI,KAAA,KAAU,MAAA,EAAW,OAAO,EAAC;AACjC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,MAAM,MAAA,CAAO,CAAC,IAAA,KAA0C,QAAA,CAAS,IAAI,CAAC,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,CAAC,KAAK,CAAA;AAClC,EAAA,OAAO,EAAC;AACT;AAEA,SAAS,qBAAqB,KAAA,EAAqE;AAClG,EAAA,MAAM,SAAS,QAAA,CAAS,KAAA,CAAM,YAAY,CAAA,GAAI,MAAM,YAAA,GAAe,MAAA;AACnE,EAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,EAAA,MAAM,SAAS,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,GAAI,MAAM,MAAA,GAAS,MAAA;AACvD,EAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,EAAA,OAAO,KAAA;AACR;AAEA,SAAS,gBAAA,CACR,UAAA,EACA,UAAA,EACA,KAAA,EACA,EAAA,EACS;AACT,EAAA,MAAM,gBAAA,GAAmB,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AAC7C,EAAA,IAAI,gBAAA,IAAoB,UAAA,CAAW,GAAA,CAAI,gBAAgB,CAAA,EAAG;AACzD,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,CAAI,gBAAgB,CAAA;AAC7C,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,EAAA,CAAG,UAAA,CAAW,cAAc,KAAK,CAAC,EAAA,CAAG,UAAA,CAAW,cAAc,CAAA,EAAG;AACnF,MAAA,UAAA,CAAW,OAAO,gBAAgB,CAAA;AAClC,MAAA,KAAA,CAAM,EAAA,GAAK,EAAA;AACX,MAAA,UAAA,CAAW,GAAA,CAAI,IAAI,KAAK,CAAA;AACxB,MAAA,UAAA,CAAW,GAAA,CAAI,OAAO,EAAE,CAAA;AACxB,MAAA,OAAO,EAAA;AAAA,IACR;AACA,IAAA,OAAO,gBAAA;AAAA,EACR;AACA,EAAA,OAAO,EAAA;AACR;AAEA,SAAS,sBAAsB,KAAA,EAA6B;AAC3D,EAAA,MAAM,UAAA,GAAa,MAAM,WAAA,EAAY;AACrC,EAAA,QAAQ,UAAA;AAAY,IACnB,KAAK,UAAA;AAAA,IACL,KAAK,eAAA;AACJ,MAAA,OAAO,MAAA;AAAA,IACR,KAAK,YAAA;AACJ,MAAA,OAAO,QAAA;AAAA,IACR,KAAK,WAAA;AACJ,MAAA,OAAO,YAAA;AAAA,IACR,KAAK,OAAA;AAAA,IACL,KAAK,SAAA;AACJ,MAAA,OAAO,OAAA;AAAA,IACR;AACC,MAAA,IAAI,WAAW,QAAA,CAAS,QAAQ,KAAK,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA,EAAG;AACnE,QAAA,OAAO,gBAAA;AAAA,MACR;AACA,MAAA,OAAO,MAAA;AAAA;AAEV;AAEA,SAAS,oBAAoB,OAAA,EAA8C;AAC1E,EAAA,IAAI,OAAO,IAAA,CAAK,OAAO,EAAE,MAAA,KAAW,CAAA,SAAU,EAAC;AAC/C,EAAA,OAAO;AAAA,IACN,gBAAA,CAAiB;AAAA,MAChB,IAAA,EAAM,UAAA;AAAA,MACN,GAAA,EAAK;AAAA,KACL;AAAA,GACF;AACD","file":"cohere.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 { 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"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { S as StreamAdapter } from '../types-
|
|
1
|
+
import { S as StreamAdapter } from '../types-CSHQ-Alb.cjs';
|
|
2
2
|
|
|
3
3
|
interface CohereAdapterOptions {
|
|
4
4
|
/** Map content-delta text to json-delta instead of text-delta. */
|
|
5
5
|
jsonMode?: boolean;
|
|
6
|
+
/** @deprecated Dual-emit legacy metadata.raw citation blobs alongside typed events. */
|
|
7
|
+
emitLegacyCitationMetadata?: boolean;
|
|
6
8
|
}
|
|
7
9
|
declare function cohereAdapter(options?: CohereAdapterOptions): StreamAdapter;
|
|
8
10
|
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { S as StreamAdapter } from '../types-
|
|
1
|
+
import { S as StreamAdapter } from '../types-CSHQ-Alb.js';
|
|
2
2
|
|
|
3
3
|
interface CohereAdapterOptions {
|
|
4
4
|
/** Map content-delta text to json-delta instead of text-delta. */
|
|
5
5
|
jsonMode?: boolean;
|
|
6
|
+
/** @deprecated Dual-emit legacy metadata.raw citation blobs alongside typed events. */
|
|
7
|
+
emitLegacyCitationMetadata?: boolean;
|
|
6
8
|
}
|
|
7
9
|
declare function cohereAdapter(options?: CohereAdapterOptions): StreamAdapter;
|
|
8
10
|
|
package/dist/adapters/cohere.js
CHANGED
|
@@ -70,6 +70,43 @@ function incrementalJsonStringDelta(state, nextInput) {
|
|
|
70
70
|
return delta.length > 0 ? delta : void 0;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
// src/adapters/shared/citation-grounding.ts
|
|
74
|
+
function cohereCitationFromStartPayload(citations, index, options = {}) {
|
|
75
|
+
const chunks = [];
|
|
76
|
+
const citation = citationChunkFromCohere(citations, index);
|
|
77
|
+
if (citation) chunks.push(citation);
|
|
78
|
+
if (options.emitLegacyCitationMetadata && citations !== void 0) {
|
|
79
|
+
chunks.push(
|
|
80
|
+
optionalRawChunk({
|
|
81
|
+
kind: "metadata",
|
|
82
|
+
raw: { citation: citations, index }
|
|
83
|
+
})
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
return chunks;
|
|
87
|
+
}
|
|
88
|
+
function citationChunkFromCohere(citations, index) {
|
|
89
|
+
if (citations === void 0) return void 0;
|
|
90
|
+
const chunk = { kind: "citation", raw: { citation: citations, index } };
|
|
91
|
+
const numericIndex = asNumber(index);
|
|
92
|
+
if (numericIndex !== void 0) chunk.index = numericIndex;
|
|
93
|
+
if (isRecord(citations)) {
|
|
94
|
+
const start = asNumber(citations.start);
|
|
95
|
+
const end = asNumber(citations.end);
|
|
96
|
+
const text = asString(citations.text);
|
|
97
|
+
if (start !== void 0 && end !== void 0) {
|
|
98
|
+
chunk.span = { start, end, ...text ? { text } : {} };
|
|
99
|
+
} else if (text) {
|
|
100
|
+
chunk.span = { start: 0, end: text.length, text };
|
|
101
|
+
}
|
|
102
|
+
const sources = citations.sources;
|
|
103
|
+
if (Array.isArray(sources) && sources.length > 0) {
|
|
104
|
+
chunk.sources = sources;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return optionalRawChunk(chunk);
|
|
108
|
+
}
|
|
109
|
+
|
|
73
110
|
// src/adapters/shared/parse-payload.ts
|
|
74
111
|
function parseAdapterObjectPayload(raw, scope, options = {}) {
|
|
75
112
|
const { trim = true, allowDone = true } = options;
|
|
@@ -343,12 +380,9 @@ var CohereStreamParser = class {
|
|
|
343
380
|
const delta = isRecord(payload.delta) ? payload.delta : void 0;
|
|
344
381
|
const message = delta && isRecord(delta.message) ? delta.message : void 0;
|
|
345
382
|
const citations = message?.citations;
|
|
346
|
-
return
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
raw: { citation: citations, index: payload.index }
|
|
350
|
-
})
|
|
351
|
-
];
|
|
383
|
+
return cohereCitationFromStartPayload(citations, asNumber(payload.index), {
|
|
384
|
+
emitLegacyCitationMetadata: this.options.emitLegacyCitationMetadata ?? false
|
|
385
|
+
});
|
|
352
386
|
}
|
|
353
387
|
messageEndChunks(payload) {
|
|
354
388
|
const delta = isRecord(payload.delta) ? payload.delta : void 0;
|