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.
Files changed (46) hide show
  1. package/README.md +10 -8
  2. package/dist/adapters/anthropic.d.cts +1 -1
  3. package/dist/adapters/anthropic.d.ts +1 -1
  4. package/dist/adapters/bedrock.d.cts +1 -1
  5. package/dist/adapters/bedrock.d.ts +1 -1
  6. package/dist/adapters/cohere.cjs +40 -6
  7. package/dist/adapters/cohere.cjs.map +1 -1
  8. package/dist/adapters/cohere.d.cts +3 -1
  9. package/dist/adapters/cohere.d.ts +3 -1
  10. package/dist/adapters/cohere.js +40 -6
  11. package/dist/adapters/cohere.js.map +1 -1
  12. package/dist/adapters/gemini.cjs +50 -3
  13. package/dist/adapters/gemini.cjs.map +1 -1
  14. package/dist/adapters/gemini.d.cts +3 -1
  15. package/dist/adapters/gemini.d.ts +3 -1
  16. package/dist/adapters/gemini.js +50 -3
  17. package/dist/adapters/gemini.js.map +1 -1
  18. package/dist/adapters/openai-chat.cjs +141 -5
  19. package/dist/adapters/openai-chat.cjs.map +1 -1
  20. package/dist/adapters/openai-chat.d.cts +1 -1
  21. package/dist/adapters/openai-chat.d.ts +1 -1
  22. package/dist/adapters/openai-chat.js +141 -5
  23. package/dist/adapters/openai-chat.js.map +1 -1
  24. package/dist/adapters/openai-compatible.cjs +143 -6
  25. package/dist/adapters/openai-compatible.cjs.map +1 -1
  26. package/dist/adapters/openai-compatible.d.cts +3 -1
  27. package/dist/adapters/openai-compatible.d.ts +3 -1
  28. package/dist/adapters/openai-compatible.js +143 -6
  29. package/dist/adapters/openai-compatible.js.map +1 -1
  30. package/dist/adapters/openai-responses.d.cts +1 -1
  31. package/dist/adapters/openai-responses.d.ts +1 -1
  32. package/dist/core/index.cjs +18 -0
  33. package/dist/core/index.cjs.map +1 -1
  34. package/dist/core/index.d.cts +2 -2
  35. package/dist/core/index.d.ts +2 -2
  36. package/dist/core/index.js +18 -0
  37. package/dist/core/index.js.map +1 -1
  38. package/dist/index.cjs +352 -16
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.d.cts +64 -3
  41. package/dist/index.d.ts +64 -3
  42. package/dist/index.js +347 -17
  43. package/dist/index.js.map +1 -1
  44. package/dist/{types-CskRfrmD.d.cts → types-JvwK2_FV.d.cts} +73 -0
  45. package/dist/{types-CskRfrmD.d.ts → types-JvwK2_FV.d.ts} +73 -0
  46. package/package.json +2 -1
package/README.md CHANGED
@@ -1,19 +1,19 @@
1
1
  # llm-stream-assemble
2
2
 
3
- ![core](https://img.shields.io/badge/core-1.5.7-blue)
3
+ ![core](https://img.shields.io/badge/core-1.7.0-blue)
4
4
  ![node](https://img.shields.io/badge/node-%3E%3D18-339933)
5
5
  ![runtime deps](https://img.shields.io/badge/runtime_deps-0-brightgreen)
6
- ![tests](https://img.shields.io/badge/tests-1637_passing-brightgreen)
6
+ ![tests](https://img.shields.io/badge/tests-1966_passing-brightgreen)
7
7
  [![ci](https://github.com/01laky/llm-stream-assemble/actions/workflows/ci.yml/badge.svg)](https://github.com/01laky/llm-stream-assemble/actions/workflows/ci.yml)
8
- ![status](https://img.shields.io/badge/status-stable_1.5.7-brightgreen)
8
+ ![status](https://img.shields.io/badge/status-stable_1.7.0-brightgreen)
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, logprobs, 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.5.7`. 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.
16
+ **Status:** Stable `1.7.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
 
@@ -119,6 +119,8 @@ Every adapter maps provider-specific fragments into the same **`StreamEvent`** u
119
119
 
120
120
  ![StreamEvent mindmap](https://raw.githubusercontent.com/01laky/llm-stream-assemble/main/docs/img/stream-event.svg)
121
121
 
122
+ **Provenance events** include **`citation`**, **`grounding`**, and **`logprob`** (OpenAI Chat / compatible when `logprobs: true` on the request). Logprob events are atomic per token — use **`logprobConfidence()`** for probability/margin and **`alignLogprobsWithText()`** to map tokens onto assembled assistant text.
123
+
122
124
  **Design constraints:** adapters never accumulate cross-chunk state beyond id/index reconciliation; assembly, buffering, and `.done` emission live in core. No HTTP client, no tool execution, no UI — just the stream layer.
123
125
 
124
126
  ### Lifecycle & concurrency
@@ -410,7 +412,7 @@ Provider presets:
410
412
  | `lmstudio` | LM Studio local server | Local host, metadata/usage may be sparse |
411
413
  | `together` | Together AI | OpenAI-like; `reasoning` / `reasoning_delta` aliases |
412
414
  | `fireworks` | Fireworks AI | OpenAI-like, usage/details may vary |
413
- | `perplexity` | Perplexity API | Search-grounded answers; citations in `metadata.raw` |
415
+ | `perplexity` | Perplexity API | Search-grounded answers; root `citations` / `search_results` → typed `citation` events |
414
416
  | `xai` | xAI Grok API | OpenAI-compatible; `reasoning_content` mapped when present |
415
417
  | `azure` | Azure OpenAI Chat Completions | Stricter preset; deployment URL + `api-key` auth; content filter metadata in `metadata.raw` |
416
418
  | `cloudflare` | Cloudflare Workers AI REST | OpenAI-compatible `/v1/chat/completions`; Bearer + account id; loose preset like Groq |
@@ -687,7 +689,7 @@ for await (const event of assembleStream(response.body!, cohereAdapter())) {
687
689
  }
688
690
  ```
689
691
 
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`** payloads are preserved in `metadata.raw` there are no dedicated `citation.*` unified events in 1.x. Legacy Cohere v1 endpoints are out of scope.
692
+ 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
693
 
692
694
  Subpath import: `import { cohereAdapter } from "llm-stream-assemble/adapters/cohere"`.
693
695
 
@@ -701,7 +703,7 @@ Live smoke: `pnpm smoke:cohere` — see [`docs/live-smoke.md`](./docs/live-smoke
701
703
 
702
704
  ### Collecting a Stream
703
705
 
704
- `collectStream()` materializes a full event stream into text, reasoning, refusals, JSON, tool calls, latest usage, and finish reason. It buffers full output in memory and aggregates multi-choice text in event order; it is not a per-choice collector and does not currently collect metadata.
706
+ `collectStream()` materializes a full event stream into text, reasoning, refusals, JSON, tool calls, citations, grounding, logprobs, latest usage, and finish reason. It buffers full output in memory and aggregates multi-choice text in event order; it is not a per-choice collector and does not currently collect metadata.
705
707
 
706
708
  ```ts
707
709
  import { collectStream } from "llm-stream-assemble";
@@ -1,4 +1,4 @@
1
- import { S as StreamAdapter } from '../types-CskRfrmD.cjs';
1
+ import { S as StreamAdapter } from '../types-JvwK2_FV.cjs';
2
2
 
3
3
  interface AnthropicAdapterOptions {
4
4
  /** Map `json` content blocks to json-delta instead of text-delta. */
@@ -1,4 +1,4 @@
1
- import { S as StreamAdapter } from '../types-CskRfrmD.js';
1
+ import { S as StreamAdapter } from '../types-JvwK2_FV.js';
2
2
 
3
3
  interface AnthropicAdapterOptions {
4
4
  /** Map `json` content blocks to json-delta instead of text-delta. */
@@ -1,4 +1,4 @@
1
- import { S as StreamAdapter } from '../types-CskRfrmD.cjs';
1
+ import { S as StreamAdapter } from '../types-JvwK2_FV.cjs';
2
2
 
3
3
  type BedrockModelFamily = "anthropic" | "openai-like" | "nova" | "auto";
4
4
  interface BedrockAdapterOptions {
@@ -1,4 +1,4 @@
1
- import { S as StreamAdapter } from '../types-CskRfrmD.js';
1
+ import { S as StreamAdapter } from '../types-JvwK2_FV.js';
2
2
 
3
3
  type BedrockModelFamily = "anthropic" | "openai-like" | "nova" | "auto";
4
4
  interface BedrockAdapterOptions {
@@ -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
- optionalRawChunk({
350
- kind: "metadata",
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":"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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 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-CskRfrmD.cjs';
1
+ import { S as StreamAdapter } from '../types-JvwK2_FV.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-CskRfrmD.js';
1
+ import { S as StreamAdapter } from '../types-JvwK2_FV.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
 
@@ -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
- optionalRawChunk({
348
- kind: "metadata",
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;