llm-stream-assemble 1.7.0 → 1.8.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 +6 -6
- package/dist/adapters/openai-chat.cjs.map +1 -1
- package/dist/adapters/openai-chat.js.map +1 -1
- package/dist/adapters/openai-compatible.cjs.map +1 -1
- package/dist/adapters/openai-compatible.js.map +1 -1
- package/dist/adapters/openai-responses.cjs +138 -19
- package/dist/adapters/openai-responses.cjs.map +1 -1
- package/dist/adapters/openai-responses.js +138 -19
- package/dist/adapters/openai-responses.js.map +1 -1
- package/dist/index.cjs +84 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +84 -19
- package/dist/index.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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
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
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
Turn provider SSE fragments into typed events — **not another `+=` loop**.
|
|
15
15
|
|
|
16
|
-
**Status:** Stable `1.
|
|
16
|
+
**Status:** Stable `1.8.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,7 +119,7 @@ Every adapter maps provider-specific fragments into the same **`StreamEvent`** u
|
|
|
119
119
|
|
|
120
120
|

|
|
121
121
|
|
|
122
|
-
**Provenance events** include **`citation`**, **`grounding`**, and **`logprob
|
|
122
|
+
**Provenance events** include **`citation`**, **`grounding`**, and **`logprob`**. Chat / compatible: enable with `logprobs: true` on the request. Responses API: enable with `include: ["message.output_text.logprobs"]`. Logprob events are atomic per token — use **`logprobConfidence()`** for probability/margin and **`alignLogprobsWithText()`** to map tokens onto assembled assistant text.
|
|
123
123
|
|
|
124
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.
|
|
125
125
|
|
|
@@ -543,7 +543,7 @@ for await (const event of assembleStream(response.body!, openaiResponsesAdapter(
|
|
|
543
543
|
}
|
|
544
544
|
```
|
|
545
545
|
|
|
546
|
-
Use `openaiResponsesAdapter({ jsonMode: true })` to map output text to `json.*` events. Reasoning support is best-effort for string summary/detail fields. Create a new adapter instance per stream.
|
|
546
|
+
Use `openaiResponsesAdapter({ jsonMode: true })` to map output text to `json.*` events. Reasoning support is best-effort for string summary/detail fields. Typed **`logprob`** events when the request sets `include: ["message.output_text.logprobs"]` (optional `top_logprobs`) — same helpers as Chat Completions. Create a new adapter instance per stream.
|
|
547
547
|
|
|
548
548
|
### Gemini Usage
|
|
549
549
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/utils/object.ts","../../src/adapters/errors.ts","../../src/adapters/utils.ts","../../src/adapters/shared/parse-payload.ts","../../src/adapters/openai-chat/parser/errors.ts","../../src/adapters/shared/citation-grounding.ts","../../src/adapters/openai-chat/parser/chunks.ts","../../src/adapters/shared/logprobs.ts","../../src/adapters/openai-chat/parser/stream-parser.ts","../../src/adapters/openai-chat/parser/response.ts","../../src/adapters/openai-chat/parser/types.ts","../../src/adapters/openai-chat/parser/index.ts","../../src/adapters/openai-chat.ts"],"names":[],"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;;;ACKO,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;;;AC/BO,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;;;ACnCO,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;;;ACrBO,SAAS,oBAAA,CACf,SACA,OAAA,EACsC;AACtC,EAAA,IAAI,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,SAAU,OAAA,CAAQ,KAAA;AAC5C,EAAA,IAAI,CAAC,OAAA,CAAQ,eAAA,EAAiB,OAAO,MAAA;AAErC,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA;AAC1C,EAAA,IAAI,WAAA,EAAa,OAAO,EAAE,OAAA,EAAS,WAAA,EAAY;AAE/C,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA;AAC5C,EAAA,IAAI,YAAA,EAAc,OAAO,EAAE,OAAA,EAAS,YAAA,EAAa;AACjD,EAAA,IAAI,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,SAAU,OAAA,CAAQ,MAAA;AAE7C,EAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA;AAChD,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AAC1C,EAAA,IAAI,mBAAmB,YAAA,KAAiB,OAAA,EAAS,OAAO,EAAE,SAAS,eAAA,EAAgB;AAEnF,EAAA,OAAO,MAAA;AACR;AAEO,SAAS,yBAAA,CACf,YAAA,EACA,WAAA,EACA,OAAA,EACa;AACb,EAAA,OAAO,8BAAA;AAAA,IACN,YAAA;AAAA,IACA,OAAA,CAAQ,WAAA;AAAA,IACR,WAAA;AAAA,IACA;AAAA,GACD;AACD;AAEO,SAAS,uBAAA,CAAwB,KAAA,EAAe,OAAA,GAAU,wBAAA,EAAiC;AACjG,EAAA,MAAM,kBAAA,CAAmB,OAAO,OAAO,CAAA;AACxC;AAEO,SAAS,4BAA4B,OAAA,EAAqD;AAChG,EAAA,MAAM,kBAAA;AAAA,IACL,CAAA,EAAG,QAAQ,WAAW,CAAA,WAAA,CAAA;AAAA,IACtB;AAAA,GACD;AACD;AAEO,SAAS,+BACf,OAAA,EACQ;AACR,EAAA,MAAM,kBAAA;AAAA,IACL,CAAA,EAAG,QAAQ,WAAW,CAAA,cAAA,CAAA;AAAA,IACtB;AAAA,GACD;AACD;;;ACHO,SAAS,6BAAA,CACf,OAAA,EACA,OAAA,GAAoC,EAAC,EACxB;AACb,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,EAAA,MAAM,gBAAgB,OAAA,CAAQ,cAAA;AAC9B,EAAA,MAAM,eAAe,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,IAAK,UAAU,MAAA,GAAS,CAAA;AACpE,EAAA,MAAM,mBAAmB,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,IAAK,cAAc,MAAA,GAAS,CAAA;AAChF,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,gBAAA,SAAyB,EAAC;AAEhD,EAAA,MAAM,IAAA,GAAO,eACV,SAAA,CAAU,MAAA,CAAO,CAAC,IAAA,KAAyB,OAAO,IAAA,KAAS,QAAQ,CAAA,GACnE,MAAA;AAEH,EAAA,MAAM,KAAA,GAAuB;AAAA,IAC5B,IAAA,EAAM,UAAA;AAAA,IACN,GAAA,EAAK;AAAA,MACJ,GAAI,YAAA,GAAe,EAAE,SAAA,KAAc,EAAC;AAAA,MACpC,GAAI,gBAAA,GAAmB,EAAE,cAAA,EAAgB,aAAA,KAAkB;AAAC;AAC7D,GACD;AACA,EAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,QAAS,IAAA,GAAO,IAAA;AAC1C,EAAA,IAAI,gBAAA,QAAwB,aAAA,GAAgB,aAAA;AAE5C,EAAA,MAAM,MAAA,GAAqB,CAAC,gBAAA,CAAiB,KAAK,CAAE,CAAA;AACpD,EAAA,IAAI,QAAQ,0BAAA,EAA4B;AACvC,IAAA,MAAA,CAAO,IAAA;AAAA,MACN,gBAAA,CAAiB;AAAA,QAChB,IAAA,EAAM,UAAA;AAAA,QACN,GAAA,EAAK;AAAA,UACJ,GAAI,YAAA,GAAe,EAAE,SAAA,KAAc,EAAC;AAAA,UACpC,GAAI,gBAAA,GAAmB,EAAE,cAAA,EAAgB,aAAA,KAAkB;AAAC;AAC7D,OACA;AAAA,KACF;AAAA,EACD;AACA,EAAA,OAAO,MAAA;AACR;AA4DO,SAAS,iCACf,OAAA,EAC0B;AAC1B,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,OAAA,EAAQ;AAC1B,EAAA,OAAO,IAAA,CAAK,SAAA;AACZ,EAAA,OAAO,IAAA,CAAK,cAAA;AACZ,EAAA,OAAO,IAAA;AACR;AAEO,SAAS,qCACf,OAAA,EAC0B;AAC1B,EAAA,OAAO,iCAAiC,OAAO,CAAA;AAChD;;;AC1JO,SAAS,cAAA,CACf,OAAA,EACA,QAAA,GAAqC,EAAC,EACzB;AACb,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAA;AAC9B,EAAA,IAAI,IAAI,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAI,CAAA;AAEjD,EAAA,MAAM,eAAA,GAAkB,qCAAqC,OAAO,CAAA;AACpE,EAAA,MAAM,QAAA,GAAoD;AAAA,IACzD,IAAA,EAAM,UAAA;AAAA,IACN,GAAA,EAAK;AAAA,GACN;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA;AACpC,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA;AACxC,EAAA,IAAI,KAAA,WAAgB,KAAA,GAAQ,KAAA;AAC5B,EAAA,IAAI,EAAA,WAAa,UAAA,GAAa,EAAA;AAC9B,EAAA,IAAI,OAAA,KAAY,MAAA,EAAW,QAAA,CAAS,OAAA,GAAU,OAAA;AAC9C,EAAA,IAAI,SAAS,KAAA,IAAS,QAAA,CAAS,UAAA,IAAc,QAAA,CAAS,YAAY,MAAA,EAAW;AAC5E,IAAA,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,MAAA;AACR;AAEO,SAAS,6BAAA,CACf,OAAA,EACA,OAAA,GAAoC,EAAC,EACxB;AACb,EAAA,OAAO,6BAAA,CAA8B,SAAS,OAAO,CAAA;AACtD;AAWO,SAAS,YAAY,OAAA,EAA2C;AACtE,EAAA,OACC,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAA,KAAM,MAAA,IACzB,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,KAAM,MAAA,IAC5B,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA,KAAM,MAAA;AAEhC;AAEO,SAAS,uBAAuB,OAAA,EAA2C;AACjF,EAAA,OACC,WAAA,CAAY,OAAO,CAAA,IACnB,OAAO,QAAQ,MAAA,KAAW,QAAA,IAC1B,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,IAC7B,QAAA,CAAS,QAAQ,KAAK,CAAA;AAExB;AAEO,SAAS,eAAA,CACf,QACA,OAAA,EACa;AACb,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,MAAM,OAAA,uBAAc,GAAA,CAAI;AAAA,IACvB,WAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,GAAG,OAAA,CAAQ;AAAA,GACX,CAAA;AACD,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC5B,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AACnC,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACX,IAAA,EAAM,iBAAA;AAAA,MACN,IAAA;AAAA,MACA,OAAA,EAAS,KAAA,KAAU,mBAAA,GAAsB,SAAA,GAAY;AAAA,KACrD,CAAA;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACR;AAEO,SAAS,kBAAA,CACf,KAAA,EACA,WAAA,EACA,OAAA,EACa;AACb,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,SAAkB,EAAC;AACnD,EAAA,MAAM,YAAA,GAAe,sBAAsB,KAAK,CAAA;AAChD,EAAA,IAAI,YAAA,EAAc;AACjB,IAAA,OAAO,CAAC,gBAAgB,EAAE,IAAA,EAAM,UAAU,MAAA,EAAQ,YAAA,EAAa,EAAG,WAAW,CAAC,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO;AAAA,IACN;AAAA,MACC,IAAA,EAAM,gBAAA;AAAA,MACN,KAAA,EAAO,kBAAA;AAAA,QACN,OAAA,CAAQ,WAAA;AAAA,QACR,CAAA,yCAAA,EAA4C,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OAC1D;AAAA,MACA,WAAA,EAAa;AAAA,KACd;AAAA,IACA,gBAAgB,EAAE,IAAA,EAAM,UAAU,MAAA,EAAQ,OAAA,IAAW,WAAW;AAAA,GACjE;AACD;AAEO,SAAS,UAAA,CACf,OACA,OAAA,EACuB;AACvB,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,MAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,KAAA,EAAO,OAAA,CAAQ,qBAAqB,CAAA;AACpE,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,KAAA,EAAO,OAAA,CAAQ,sBAAsB,CAAA;AACtE,EAAA,MAAM,UAAU,QAAA,CAAS,KAAA,CAAM,yBAAyB,CAAA,GACrD,MAAM,yBAAA,GACN,MAAA;AACH,EAAA,MAAM,eAAA,GAAkB,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,gBAAgB,CAAA,GAAI,MAAA;AACvE,EAAA,IAAI,WAAA,KAAgB,MAAA,IAAa,YAAA,KAAiB,MAAA,IAAa,oBAAoB,MAAA,EAAW;AAC7F,IAAA,OAAO,MAAA;AAAA,EACR;AACA,EAAA,MAAM,KAAA,GAA8C,EAAE,IAAA,EAAM,OAAA,EAAS,KAAK,KAAA,EAAM;AAChF,EAAA,IAAI,WAAA,KAAgB,MAAA,EAAW,KAAA,CAAM,WAAA,GAAc,WAAA;AACnD,EAAA,IAAI,YAAA,KAAiB,MAAA,EAAW,KAAA,CAAM,YAAA,GAAe,YAAA;AACrD,EAAA,IAAI,eAAA,KAAoB,MAAA,EAAW,KAAA,CAAM,eAAA,GAAkB,eAAA;AAC3D,EAAA,OAAO,KAAA;AACR;AAEO,SAAS,cAAA,CACf,MAAA,EACA,QAAA,EACA,OAAA,EACqB;AACrB,EAAA,OAAO,SAAS,MAAA,CAAO,KAAK,CAAA,KAAM,OAAA,CAAQ,4BAA4B,QAAA,GAAW,MAAA,CAAA;AAClF;AAEO,SAAS,eAAe,KAAA,EAKlB;AACZ,EAAA,OAAO,gBAAA,CAAiB;AAAA,IACvB,IAAA,EAAM,YAAA;AAAA,IACN,IAAI,KAAA,CAAM,EAAA;AAAA,IACV,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,aAAa,KAAA,CAAM;AAAA,GACnB,CAAA;AACF;AAEO,SAAS,cAAc,KAAA,EAKjB;AACZ,EAAA,OAAO,gBAAA,CAAiB;AAAA,IACvB,IAAA,EAAM,iBAAA;AAAA,IACN,IAAI,KAAA,CAAM,EAAA;AAAA,IACV,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,aAAa,KAAA,CAAM;AAAA,GACnB,CAAA;AACF;AAEO,SAAS,cAAc,KAAA,EAIjB;AACZ,EAAA,OAAO,gBAAA,CAAiB;AAAA,IACvB,IAAA,EAAM,WAAA;AAAA,IACN,IAAI,KAAA,CAAM,EAAA;AAAA,IACV,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,aAAa,KAAA,CAAM;AAAA,GACnB,CAAA;AACF;AAEO,SAAS,eAAA,CAAoC,OAAU,WAAA,EAAoC;AACjG,EAAA,IAAI,WAAA,KAAgB,QAAW,OAAO,KAAA;AACtC,EAAA,OAAO,gBAAA,CAAiB,EAAE,GAAG,KAAA,EAAO,aAAa,CAAA;AAClD;AAEO,SAAS,OAAA,CACf,WAAA,EACA,cAAA,EACA,SAAA,EACS;AACT,EAAA,OAAO,GAAG,SAAA,CAAU,WAAA,EAAa,cAAc,CAAC,IAAI,SAAS,CAAA,CAAA;AAC9D;AAEO,SAAS,SAAA,CAAU,aAAiC,cAAA,EAAgC;AAC1F,EAAA,OAAO,gBAAgB,MAAA,GAAY,CAAA,eAAA,EAAkB,cAAc,CAAA,CAAA,GAAK,OAAO,WAAW,CAAA;AAC3F;AAEA,SAAS,sBAAsB,KAAA,EAA0C;AACxE,EAAA,IACC,UAAU,MAAA,IACV,KAAA,KAAU,YACV,KAAA,KAAU,gBAAA,IACV,UAAU,YAAA,EACT;AACD,IAAA,OAAO,KAAA;AAAA,EACR;AACA,EAAA,IAAI,KAAA,KAAU,iBAAiB,OAAO,YAAA;AACtC,EAAA,OAAO,MAAA;AACR;AAEA,SAAS,WAAA,CAAY,QAAiC,MAAA,EAAsC;AAC3F,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC3B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AACpC,IAAA,IAAI,KAAA,KAAU,QAAW,OAAO,KAAA;AAAA,EACjC;AACA,EAAA,OAAO,MAAA;AACR;;;ACpNO,SAAS,0BAAA,GAAmD;AAClE,EAAA,OAAO,EAAE,SAAA,kBAAW,IAAI,GAAA,EAAI,EAAE;AAC/B;AAEO,SAAS,kBAAA,CACf,aACA,OAAA,EACS;AACT,EAAA,OAAO,CAAA,EAAG,WAAA,IAAe,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AACtC;AAEO,SAAS,mBAAA,CACf,KAAA,EACA,WAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,WAAA,EAAa,OAAO,CAAA;AACnD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,IAAK,CAAA;AACzC,EAAA,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,GAAA,EAAK,IAAA,GAAO,CAAC,CAAA;AACjC,EAAA,OAAO,IAAA;AACR;AAEO,SAAS,qBACf,KAAA,EAC0E;AAC1E,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,KAAK,KAAK,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,MAAA;AACxD,EAAA,MAAM,SAAsE,EAAC;AAC7E,EAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AAC1B,IAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;AACtB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACtC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,OAAA,KAAY,MAAA,EAAW;AAClD,IAAA,MAAM,IAAA,GAA6D,EAAE,KAAA,EAAO,OAAA,EAAQ;AACpF,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,EAAG;AAC/B,MAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAyB,OAAO,SAAS,QAAQ,CAAA;AACnF,MAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,IACpC;AACA,IAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,MAAA;AACrC;AAEO,SAAS,wBAAA,CACf,KAAA,EACA,OAAA,EACA,WAAA,EACA,QAAA,EACuB;AACvB,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,MAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA;AAClC,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,MAAA;AACtD,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACtC,EAAA,IAAI,OAAA,KAAY,QAAW,OAAO,MAAA;AAElC,EAAA,MAAM,KAAA,GAAgD;AAAA,IACrD,IAAA,EAAM,SAAA;AAAA,IACN,OAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAA,EAAK;AAAA,GACN;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,EAAG;AAC/B,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAyB,OAAO,SAAS,QAAQ,CAAA;AACnF,IAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,KAAA,GAAQ,KAAA;AAAA,EACrC;AACA,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,KAAA,CAAM,YAAY,CAAA;AAC3D,EAAA,IAAI,WAAA,QAAmB,WAAA,GAAc,WAAA;AACrC,EAAA,IAAI,WAAA,KAAgB,MAAA,EAAW,KAAA,CAAM,WAAA,GAAc,WAAA;AACnD,EAAA,IAAI,QAAA,KAAa,MAAA,EAAW,KAAA,CAAM,QAAA,GAAW,QAAA;AAC7C,EAAA,OAAO,iBAAiB,KAAK,CAAA;AAC9B;AAEO,SAAS,+BAAA,CACf,QAAA,EACA,WAAA,EACA,aAAA,EACa;AACb,EAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,SAAkB,EAAC;AACzD,EAAA,IAAI,CAAC,QAAA,CAAS,QAAQ,CAAA,SAAU,EAAC;AAEjC,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,MAAM,UAAU,QAAA,CAAS,OAAA;AACzB,EAAA,MAAM,UAAU,QAAA,CAAS,OAAA;AAEzB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC3B,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA,EAAG;AACvD,MAAA,MAAM,WAAW,aAAA,GACd,mBAAA,CAAoB,aAAA,EAAe,WAAA,EAAa,SAAS,CAAA,GACzD,KAAA;AACH,MAAA,MAAM,QAAQ,wBAAA,CAAyB,OAAA,CAAQ,KAAK,CAAA,EAAG,SAAA,EAAW,aAAa,QAAQ,CAAA;AACvF,MAAA,IAAI,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,IAC7B;AAAA,EACD;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC3B,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA,EAAG;AACvD,MAAA,MAAM,WAAW,aAAA,GACd,mBAAA,CAAoB,aAAA,EAAe,WAAA,EAAa,SAAS,CAAA,GACzD,KAAA;AACH,MAAA,MAAM,QAAQ,wBAAA,CAAyB,OAAA,CAAQ,KAAK,CAAA,EAAG,SAAA,EAAW,aAAa,QAAQ,CAAA;AACvF,MAAA,IAAI,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,IAC7B;AAAA,EACD;AAEA,EAAA,OAAO,MAAA;AACR;;;ACrFO,IAAM,uBAAN,MAA2B;AAAA,EAMjC,YAA6B,OAAA,EAA8C;AAA9C,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAA+C;AAAA,EAA/C,OAAA;AAAA,EALrB,eAAA,GAAkB,KAAA;AAAA,EACT,KAAA,uBAAY,GAAA,EAAuB;AAAA,EACnC,aAAA,uBAAoB,GAAA,EAAY;AAAA,EAChC,mBAAyC,0BAAA,EAA2B;AAAA,EAIrF,WAAW,GAAA,EAAyB;AACnC,IAAA,MAAM,UAAU,yBAAA,CAA0B,GAAA,EAAK,GAAG,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA,WAAA,CAAa,CAAA;AACvF,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAC;AAEtB,IAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AAC7D,IAAA,IAAI,YAAY,OAAO,yBAAA,CAA0B,UAAA,EAAY,KAAA,EAAO,KAAK,OAAO,CAAA;AAEhF,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,eAAA,IAAmB,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,IAAK,CAAC,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzF,MAAA,OAAO,EAAC;AAAA,IACT;AAEA,IAAA,IAAI,KAAK,OAAA,CAAQ,0BAAA,IAA8B,CAAC,IAAA,CAAK,mBAAA,CAAoB,OAAO,CAAA,EAAG;AAClF,MAAA,2BAAA,CAA4B,KAAK,OAAO,CAAA;AAAA,IACzC;AAEA,IAAA,MAAM,SAAqB,EAAC;AAC5B,IAAA,MAAM,eAAA,GAAkB;AAAA,MACvB,0BAAA,EAA4B,KAAK,OAAA,CAAQ;AAAA,KAC1C;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,eAAA,IAAmB,WAAA,CAAY,OAAO,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,cAAA,CAAe,OAAA,EAAS,eAAe,CAAC,CAAA;AACvD,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACxB;AAEA,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,6BAAA,CAA8B,OAAA,EAAS,eAAe,CAAC,CAAA;AAEtE,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,OAAA,CAAQ,KAAA,EAAO,KAAK,OAAO,CAAA;AACpD,IAAA,IAAI,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAE5B,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA,CAAQ,UAAU,EAAC;AACpE,IAAA,KAAA,IAAS,WAAW,CAAA,EAAG,QAAA,GAAW,OAAA,CAAQ,MAAA,EAAQ,YAAY,CAAA,EAAG;AAChE,MAAA,MAAM,MAAA,GAAS,QAAQ,QAAQ,CAAA;AAC/B,MAAA,IAAI,CAAC,QAAA,CAAS,MAAM,CAAA,EAAG;AACvB,MAAA,MAAA,CAAO,KAAK,GAAG,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA,EAEQ,oBAAoB,OAAA,EAA2C;AACtE,IAAA,OACC,WAAA,CAAY,OAAO,CAAA,IACnB,OAAO,QAAQ,MAAA,KAAW,QAAA,IAC1B,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,IAC7B,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,EAExB;AAAA,EAEQ,YAAA,CAAa,QAAiC,QAAA,EAA8B;AACnF,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,EAAQ,QAAA,EAAU,KAAK,OAAO,CAAA;AACjE,IAAA,MAAM,SAAqB,EAAC;AAC5B,IAAA,MAAM,QAAQ,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA,GAAI,OAAO,KAAA,GAAQ,MAAA;AAEtD,IAAA,MAAA,CAAO,IAAA;AAAA,MACN,GAAG,+BAAA,CAAgC,MAAA,CAAO,QAAA,EAAU,WAAA,EAAa,KAAK,gBAAgB;AAAA,KACvF;AAEA,IAAA,IAAI,KAAA,EAAO;AACV,MAAA,MAAA,CAAO,KAAK,GAAG,IAAA,CAAK,YAAY,KAAA,EAAO,WAAA,EAAa,QAAQ,CAAC,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,kBAAA,CAAmB,MAAA,CAAO,eAAe,WAAA,EAAa,IAAA,CAAK,OAAO,CAAC,CAAA;AAClF,IAAA,OAAO,MAAA;AAAA,EACR;AAAA,EAEQ,WAAA,CACP,KAAA,EACA,WAAA,EACA,cAAA,EACa;AACb,IAAA,MAAM,SAAqB,EAAC;AAC5B,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACtC,IAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAClC,MAAA,MAAA,CAAO,IAAA;AAAA,QACN,KAAK,OAAA,CAAQ,QAAA,GACV,EAAE,IAAA,EAAM,cAAc,KAAA,EAAO,OAAA,EAAQ,GACrC,eAAA,CAAgB,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,OAAA,IAAW,WAAW;AAAA,OACtE;AAAA,IACD;AAEA,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACtC,IAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAClC,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,SAAS,CAAA;AAAA,IACrD;AAEA,IAAA,MAAA,CAAO,KAAK,GAAG,eAAA,CAAgB,KAAA,EAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AACnD,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,IAAA,CAAK,cAAA,CAAe,MAAM,UAAA,EAAY,WAAA,EAAa,cAAc,CAAC,CAAA;AACjF,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,IAAA,CAAK,oBAAA,CAAqB,MAAM,aAAA,EAAe,WAAA,EAAa,cAAc,CAAC,CAAA;AAC1F,IAAA,OAAO,MAAA;AAAA,EACR;AAAA,EAEQ,cAAA,CACP,KAAA,EACA,WAAA,EACA,cAAA,EACa;AACb,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,SAAU,EAAC;AACnC,IAAA,MAAM,SAAqB,EAAC;AAE5B,IAAA,KAAA,IAAS,WAAW,CAAA,EAAG,QAAA,GAAW,KAAA,CAAM,MAAA,EAAQ,YAAY,CAAA,EAAG;AAC9D,MAAA,MAAM,QAAA,GAAW,MAAM,QAAQ,CAAA;AAC/B,MAAA,IAAI,CAAC,QAAA,CAAS,QAAQ,CAAA,EAAG;AAEzB,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,IAAK,QAAA;AAC9C,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,WAAA,EAAa,cAAA,EAAgB,SAAS,CAAA;AAC1D,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA;AAChC,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA;AAC/B,MAAA,MAAM,KAAK,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAAI,SAAS,QAAA,GAAW,MAAA;AAC7D,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,EAAA,EAAI,IAAI,CAAA;AAC9B,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,EAAA,EAAI,SAAS,CAAA;AAEnC,MAAA,IAAI,EAAA,QAAU,EAAA,GAAK,EAAA;AACnB,MAAA,IAAI,IAAA,QAAY,IAAA,GAAO,IAAA;AAEvB,MAAA,IAAI,CAAC,MAAM,YAAA,KAAiB,EAAA,IAAM,QAAS,IAAA,IAAQ,IAAA,CAAK,SAAS,CAAA,CAAA,EAAK;AACrE,QAAA,MAAA,CAAO,IAAA;AAAA,UACN,cAAA,CAAe;AAAA,YACd,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,KAAA,EAAO,SAAA;AAAA,YACP;AAAA,WACA;AAAA,SACF;AACA,QAAA,KAAA,CAAM,YAAA,GAAe,IAAA;AAAA,MACtB;AAEA,MAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC5B,QAAA,KAAA,CAAM,YAAA,GAAe,IAAA;AACrB,QAAA,MAAA,CAAO,IAAA;AAAA,UACN,aAAA,CAAc;AAAA,YACb,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,KAAA,EAAO,IAAA;AAAA,YACP,KAAA,EAAO,SAAA;AAAA,YACP;AAAA,WACA;AAAA,SACF;AAAA,MACD;AAAA,IACD;AAEA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA,EAEQ,oBAAA,CACP,KAAA,EACA,WAAA,EACA,cAAA,EACa;AACb,IAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,SAAU,EAAC;AAC9B,IAAA,MAAM,SAAqB,EAAC;AAC5B,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAChC,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACrC,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,WAAA,EAAa,cAAc,CAAA;AACvD,IAAA,MAAM,KAAK,CAAA,EAAG,IAAA,CAAK,QAAQ,sBAAsB,CAAA,CAAA,EAAI,eAAe,cAAc,CAAA,CAAA;AAElF,IAAA,IAAI,QAAQ,CAAC,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,SAAS,CAAA,EAAG;AAC/C,MAAA,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,EAAE,IAAA,EAAM,YAAA,EAAc,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,CAAA,EAAE,EAAG,WAAW,CAAC,CAAA;AACpF,MAAA,IAAA,CAAK,aAAA,CAAc,IAAI,SAAS,CAAA;AAAA,IACjC;AAEA,IAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC5B,MAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,SAAS,CAAA,EAAG;AACvC,QAAA,MAAA,CAAO,IAAA;AAAA,UACN,eAAA;AAAA,YACC,EAAE,MAAM,YAAA,EAAc,EAAA,EAAI,MAAM,IAAA,IAAQ,SAAA,EAAW,OAAO,CAAA,EAAE;AAAA,YAC5D;AAAA;AACD,SACD;AACA,QAAA,IAAA,CAAK,aAAA,CAAc,IAAI,SAAS,CAAA;AAAA,MACjC;AACA,MAAA,MAAA,CAAO,IAAA;AAAA,QACN,eAAA,CAAgB,EAAE,IAAA,EAAM,iBAAA,EAAmB,EAAA,EAAI,OAAO,IAAA,EAAM,KAAA,EAAO,CAAA,EAAE,EAAG,WAAW;AAAA,OACpF;AAAA,IACD;AAEA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA,EAEQ,UAAU,GAAA,EAAwB;AACzC,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAC9B,IAAA,IAAI,CAAC,KAAA,EAAO;AACX,MAAA,KAAA,GAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,YAAA,EAAc,KAAA,EAAO,cAAc,KAAA,EAAM;AACpE,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,IAC1B;AACA,IAAA,OAAO,KAAA;AAAA,EACR;AACD,CAAA;;;ACtMO,SAAS,aAAA,CACf,MACA,OAAA,EACa;AACb,EAAA,IAAI,CAAC,QAAA,CAAS,IAAI,CAAA,EAAG;AACpB,IAAA,uBAAA;AAAA,MACC,CAAA,EAAG,QAAQ,WAAW,CAAA,cAAA,CAAA;AAAA,MACtB;AAAA,KACD;AAAA,EACD;AAEA,EAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,IAAA,EAAM,OAAO,CAAA;AACrD,EAAA,IAAI,UAAA,EAAY,OAAO,yBAAA,CAA0B,UAAA,EAAY,OAAO,OAAO,CAAA;AAE3E,EAAA,IAAI,OAAA,CAAQ,0BAAA,IAA8B,CAAC,sBAAA,CAAuB,IAAI,CAAA,EAAG;AACxE,IAAA,8BAAA,CAA+B,OAAO,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,MAAM,eAA2B,EAAC;AAClC,EAAA,MAAM,eAAA,GAAkB,EAAE,0BAAA,EAA4B,OAAA,CAAQ,0BAAA,EAA2B;AACzF,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,cAAA,CAAe,IAAA,EAAM,eAAe,CAAC,CAAA;AACpD,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,6BAAA,CAA8B,IAAA,EAAM,eAAe,CAAC,CAAA;AAEnE,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA,CAAK,UAAU,EAAC;AAC9D,EAAA,KAAA,IAAS,WAAW,CAAA,EAAG,QAAA,GAAW,OAAA,CAAQ,MAAA,EAAQ,YAAY,CAAA,EAAG;AAChE,IAAA,MAAM,MAAA,GAAS,QAAQ,QAAQ,CAAA;AAC/B,IAAA,IAAI,CAAC,QAAA,CAAS,MAAM,CAAA,EAAG;AACvB,IAAA,MAAA,CAAO,KAAK,GAAG,oBAAA,CAAqB,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,CAAA;AAC9D,IAAA,YAAA,CAAa,KAAK,GAAG,0BAAA,CAA2B,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,CAAA;AAAA,EAC3E;AAEA,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,KAAA,EAAO,OAAO,CAAA;AAC5C,EAAA,IAAI,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC5B,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,YAAY,CAAA;AAC3B,EAAA,OAAO,MAAA;AACR;AAEA,SAAS,oBAAA,CACR,MAAA,EACA,QAAA,EACA,OAAA,EACa;AACb,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AAC5D,EAAA,MAAM,UAAU,QAAA,CAAS,MAAA,CAAO,OAAO,CAAA,GAAI,OAAO,OAAA,GAAU,MAAA;AAC5D,EAAA,MAAM,SAAqB,EAAC;AAE5B,EAAA,MAAA,CAAO,KAAK,GAAG,+BAAA,CAAgC,MAAA,CAAO,QAAA,EAAU,WAAW,CAAC,CAAA;AAE5E,EAAA,IAAI,OAAA,EAAS;AACZ,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA;AACxC,IAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAClC,MAAA,MAAA,CAAO,IAAA;AAAA,QACN,OAAA,CAAQ,QAAA,GACL,EAAE,IAAA,EAAM,cAAc,KAAA,EAAO,OAAA,EAAQ,GACrC,eAAA,CAAgB,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,OAAA,IAAW,WAAW;AAAA,OACtE;AAAA,IACD;AAEA,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA;AACxC,IAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAClC,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,SAAS,CAAA;AAAA,IACrD;AAEA,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,eAAA,CAAgB,OAAA,EAAS,OAAO,CAAC,CAAA;AAChD,IAAA,MAAA,CAAO,KAAK,GAAG,sBAAA,CAAuB,OAAA,CAAQ,UAAA,EAAY,WAAW,CAAC,CAAA;AACtE,IAAA,MAAA,CAAO,IAAA;AAAA,MACN,GAAG,4BAAA,CAA6B,OAAA,CAAQ,aAAA,EAAe,WAAA,EAAa,UAAU,OAAO;AAAA,KACtF;AAAA,EACD;AAEA,EAAA,OAAO,MAAA;AACR;AAEA,SAAS,0BAAA,CACR,MAAA,EACA,QAAA,EACA,OAAA,EACa;AACb,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AAC5D,EAAA,OAAO,kBAAA,CAAmB,MAAA,CAAO,aAAA,EAAe,WAAA,EAAa,OAAO,CAAA;AACrE;AAEA,SAAS,sBAAA,CAAuB,OAAgB,WAAA,EAA6C;AAC5F,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,SAAU,EAAC;AACnC,EAAA,MAAM,SAAqB,EAAC;AAE5B,EAAA,KAAA,IAAS,WAAW,CAAA,EAAG,QAAA,GAAW,KAAA,CAAM,MAAA,EAAQ,YAAY,CAAA,EAAG;AAC9D,IAAA,MAAM,QAAA,GAAW,MAAM,QAAQ,CAAA;AAC/B,IAAA,IAAI,CAAC,QAAA,CAAS,QAAQ,CAAA,EAAG;AACzB,IAAA,MAAM,KAAK,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAAI,SAAS,QAAA,GAAW,MAAA;AAC7D,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA;AAC/B,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,EAAA,EAAI,IAAI,CAAA,IAAK,SAAA;AACnC,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,EAAA,EAAI,SAAS,CAAA,IAAK,EAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,IAAK,QAAA;AAE1C,IAAA,MAAA,CAAO,IAAA,CAAK,eAAe,EAAE,EAAA,EAAI,MAAM,KAAA,EAAO,WAAA,EAAa,CAAC,CAAA;AAC5D,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,aAAA,CAAc,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,WAAA,EAAa,CAAC,CAAA;AACvF,IAAA,MAAA,CAAO,KAAK,aAAA,CAAc,EAAE,IAAI,KAAA,EAAO,WAAA,EAAa,CAAC,CAAA;AAAA,EACtD;AAEA,EAAA,OAAO,MAAA;AACR;AAEA,SAAS,4BAAA,CACR,KAAA,EACA,WAAA,EACA,cAAA,EACA,OAAA,EACa;AACb,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,SAAU,EAAC;AAC9B,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,IAAK,SAAA;AACrC,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA,IAAK,EAAA;AAC1C,EAAA,MAAM,KAAK,CAAA,EAAG,OAAA,CAAQ,sBAAsB,CAAA,CAAA,EAAI,eAAe,cAAc,CAAA,CAAA;AAC7E,EAAA,MAAM,MAAA,GAAqB;AAAA,IAC1B,eAAA,CAAgB,EAAE,IAAA,EAAM,YAAA,EAAc,IAAI,IAAA,EAAM,KAAA,EAAO,CAAA,EAAE,EAAG,WAAW;AAAA,GACxE;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACpB,IAAA,MAAA,CAAO,IAAA;AAAA,MACN,eAAA,CAAgB,EAAE,IAAA,EAAM,iBAAA,EAAmB,EAAA,EAAI,OAAO,IAAA,EAAM,KAAA,EAAO,CAAA,EAAE,EAAG,WAAW;AAAA,KACpF;AAAA,EACD;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,EAAE,IAAA,EAAM,WAAA,EAAa,IAAI,KAAA,EAAO,CAAA,EAAE,EAAG,WAAW,CAAC,CAAA;AAC7E,EAAA,OAAO,MAAA;AACR;;;ACvHO,SAAS,iBACf,OAAA,EACsC;AACtC,EAAA,OAAO;AAAA,IACN,QAAA,EAAU,QAAQ,QAAA,IAAY,KAAA;AAAA,IAC9B,sBAAA,EAAwB,QAAQ,sBAAA,IAA0B,iBAAA;AAAA,IAC1D,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,eAAA,EAAiB,QAAQ,eAAA,IAAmB,KAAA;AAAA,IAC5C,oBAAA,EAAsB,QAAQ,oBAAA,IAAwB,KAAA;AAAA,IACtD,yBAAA,EAA2B,QAAQ,yBAAA,IAA6B,IAAA;AAAA,IAChE,qBAAA,EAAuB,OAAA,CAAQ,qBAAA,IAAyB,EAAC;AAAA,IACzD,qBAAA,EAAuB,OAAA,CAAQ,qBAAA,IAAyB,CAAC,eAAe,CAAA;AAAA,IACxE,sBAAA,EAAwB,OAAA,CAAQ,sBAAA,IAA0B,CAAC,mBAAmB,CAAA;AAAA,IAC9E,0BAAA,EAA4B,QAAQ,0BAAA,IAA8B,KAAA;AAAA,IAClE,0BAAA,EAA4B,QAAQ,0BAAA,IAA8B;AAAA,GACnE;AACD;;;ACrCO,SAAS,4BAA4B,OAAA,EAAqD;AAChG,EAAA,MAAM,UAAA,GAAa,iBAAiB,OAAO,CAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,IAAI,oBAAA,CAAqB,UAAU,CAAA;AAClD,EAAA,OAAO,mBAAA,CAAoB;AAAA,IAC1B,MAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACT,CAAA;AACF;;;ACRO,SAAS,iBAAA,CAAkB,OAAA,GAAoC,EAAC,EAAkB;AACxF,EAAA,OAAO,2BAAA,CAA4B;AAAA,IAClC,GAAG,OAAA;AAAA,IACH,WAAA,EAAa,mBAAA;AAAA,IACb,eAAA,EAAiB,KAAA;AAAA,IACjB,oBAAA,EAAsB,KAAA;AAAA,IACtB,yBAAA,EAA2B,IAAA;AAAA,IAC3B,qBAAA,EAAuB,CAAC,eAAe,CAAA;AAAA,IACvC,sBAAA,EAAwB,CAAC,mBAAmB;AAAA,GAC5C,CAAA;AACF","file":"openai-chat.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 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","/** 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","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\";\nimport { asString, isRecord } from \"../../utils\";\nimport { adapterScopedError, providerErrorChunksFromPayload } from \"../../errors\";\nimport type { RequiredOpenAIChatLikeParserOptions } from \"./types\";\n\nexport function providerErrorPayload(\n\tpayload: Record<string, unknown>,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): Record<string, unknown> | undefined {\n\tif (isRecord(payload.error)) return payload.error;\n\tif (!options.looseErrorShape) return undefined;\n\n\tconst errorString = asString(payload.error);\n\tif (errorString) return { message: errorString };\n\n\tconst detailString = asString(payload.detail);\n\tif (detailString) return { message: detailString };\n\tif (isRecord(payload.detail)) return payload.detail;\n\n\tconst topLevelMessage = asString(payload.message);\n\tconst topLevelType = asString(payload.type);\n\tif (topLevelMessage && topLevelType === \"error\") return { message: topLevelMessage };\n\n\treturn undefined;\n}\n\nexport function openAIProviderErrorChunks(\n\terrorPayload: Record<string, unknown>,\n\trecoverable: boolean,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\treturn providerErrorChunksFromPayload(\n\t\terrorPayload,\n\t\toptions.errorPrefix,\n\t\trecoverable,\n\t\t\"OpenAI-compatible provider error\",\n\t);\n}\n\nexport function throwAdapterObjectError(scope: string, message = \"expected a JSON object\"): never {\n\tthrow adapterScopedError(scope, message);\n}\n\nexport function throwUnrecognizedChunkError(options: RequiredOpenAIChatLikeParserOptions): never {\n\tthrow adapterScopedError(\n\t\t`${options.errorPrefix}.parseChunk`,\n\t\t\"expected an OpenAI-compatible chat completion chunk\",\n\t);\n}\n\nexport function throwUnrecognizedResponseError(\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): never {\n\tthrow adapterScopedError(\n\t\t`${options.errorPrefix}.parseResponse`,\n\t\t\"expected an OpenAI-compatible chat completion object\",\n\t);\n}\n\nexport { adapterScopedError };\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 type { FinishReason, RawChunk } from \"../../../core/types\";\nimport { asNumber, asString, isRecord, optionalRawChunk } from \"../../utils\";\nimport { adapterScopedError } from \"../../errors\";\nimport {\n\tmetadataPayloadWithoutCitationFields,\n\tperplexityCitationFromPayload,\n\ttype CitationGroundingOptions,\n} from \"../../shared/citation-grounding\";\nimport type { RequiredOpenAIChatLikeParserOptions } from \"./types\";\n\nexport function metadataChunks(\n\tpayload: Record<string, unknown>,\n\t_options: CitationGroundingOptions = {},\n): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tconst id = asString(payload.id);\n\tif (id) chunks.push({ kind: \"message-start\", id });\n\n\tconst metadataPayload = metadataPayloadWithoutCitationFields(payload);\n\tconst metadata: Extract<RawChunk, { kind: \"metadata\" }> = {\n\t\tkind: \"metadata\",\n\t\traw: metadataPayload,\n\t};\n\tconst model = asString(payload.model);\n\tconst created = asNumber(payload.created);\n\tif (model) metadata.model = model;\n\tif (id) metadata.responseId = id;\n\tif (created !== undefined) metadata.created = created;\n\tif (metadata.model || metadata.responseId || metadata.created !== undefined) {\n\t\tchunks.push(metadata);\n\t}\n\treturn chunks;\n}\n\nexport function citationChunksFromRootPayload(\n\tpayload: Record<string, unknown>,\n\toptions: CitationGroundingOptions = {},\n): RawChunk[] {\n\treturn perplexityCitationFromPayload(payload, options);\n}\n\nexport function hasRootCitationFields(payload: Record<string, unknown>): boolean {\n\tconst citations = payload.citations;\n\tconst searchResults = payload.search_results;\n\treturn (\n\t\t(Array.isArray(citations) && citations.length > 0) ||\n\t\t(Array.isArray(searchResults) && searchResults.length > 0)\n\t);\n}\n\nexport function hasMetadata(payload: Record<string, unknown>): boolean {\n\treturn (\n\t\tasString(payload.id) !== undefined ||\n\t\tasString(payload.model) !== undefined ||\n\t\tasNumber(payload.created) !== undefined\n\t);\n}\n\nexport function isRecognizableResponse(payload: Record<string, unknown>): boolean {\n\treturn (\n\t\thasMetadata(payload) ||\n\t\ttypeof payload.object === \"string\" ||\n\t\tArray.isArray(payload.choices) ||\n\t\tisRecord(payload.usage)\n\t);\n}\n\nexport function reasoningChunks(\n\tsource: Record<string, unknown>,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tconst aliases = new Set([\n\t\t\"reasoning\",\n\t\t\"reasoning_content\",\n\t\t\"reasoning_summary\",\n\t\t...options.reasoningFieldAliases,\n\t]);\n\tfor (const field of aliases) {\n\t\tconst text = asString(source[field]);\n\t\tif (!text) continue;\n\t\tchunks.push({\n\t\t\tkind: \"reasoning-delta\",\n\t\t\ttext,\n\t\t\tvariant: field === \"reasoning_summary\" ? \"summary\" : \"detail\",\n\t\t});\n\t}\n\treturn chunks;\n}\n\nexport function finishReasonChunks(\n\tvalue: unknown,\n\tchoiceIndex: number | undefined,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tif (value === null || value === undefined) return [];\n\tconst finishReason = normalizeFinishReason(value);\n\tif (finishReason) {\n\t\treturn [withChoiceIndex({ kind: \"finish\", reason: finishReason }, choiceIndex)];\n\t}\n\treturn [\n\t\t{\n\t\t\tkind: \"provider-error\",\n\t\t\terror: adapterScopedError(\n\t\t\t\toptions.errorPrefix,\n\t\t\t\t`unknown OpenAI-compatible finish_reason: ${String(value)}`,\n\t\t\t),\n\t\t\trecoverable: true,\n\t\t},\n\t\twithChoiceIndex({ kind: \"finish\", reason: \"error\" }, choiceIndex),\n\t];\n}\n\nexport function usageChunk(\n\tvalue: unknown,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst inputTokens = firstNumber(value, options.usageInputTokenFields);\n\tconst outputTokens = firstNumber(value, options.usageOutputTokenFields);\n\tconst details = isRecord(value.completion_tokens_details)\n\t\t? value.completion_tokens_details\n\t\t: undefined;\n\tconst reasoningTokens = details ? asNumber(details.reasoning_tokens) : undefined;\n\tif (inputTokens === undefined && outputTokens === undefined && reasoningTokens === undefined) {\n\t\treturn undefined;\n\t}\n\tconst chunk: Extract<RawChunk, { kind: \"usage\" }> = { kind: \"usage\", raw: value };\n\tif (inputTokens !== undefined) chunk.inputTokens = inputTokens;\n\tif (outputTokens !== undefined) chunk.outputTokens = outputTokens;\n\tif (reasoningTokens !== undefined) chunk.reasoningTokens = reasoningTokens;\n\treturn chunk;\n}\n\nexport function choiceIndexFor(\n\tchoice: Record<string, unknown>,\n\tposition: number,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): number | undefined {\n\treturn asNumber(choice.index) ?? (options.useChoicePositionFallback ? position : undefined);\n}\n\nexport function toolStartChunk(input: {\n\tid: string | undefined;\n\tname: string;\n\tindex: number;\n\tchoiceIndex: number | undefined;\n}): RawChunk {\n\treturn optionalRawChunk({\n\t\tkind: \"tool-start\",\n\t\tid: input.id,\n\t\tname: input.name,\n\t\tindex: input.index,\n\t\tchoiceIndex: input.choiceIndex,\n\t});\n}\n\nexport function toolArgsChunk(input: {\n\tid: string | undefined;\n\tdelta: string;\n\tindex: number;\n\tchoiceIndex: number | undefined;\n}): RawChunk {\n\treturn optionalRawChunk({\n\t\tkind: \"tool-args-delta\",\n\t\tid: input.id,\n\t\tdelta: input.delta,\n\t\tindex: input.index,\n\t\tchoiceIndex: input.choiceIndex,\n\t});\n}\n\nexport function toolDoneChunk(input: {\n\tid: string | undefined;\n\tindex: number;\n\tchoiceIndex: number | undefined;\n}): RawChunk {\n\treturn optionalRawChunk({\n\t\tkind: \"tool-done\",\n\t\tid: input.id,\n\t\tindex: input.index,\n\t\tchoiceIndex: input.choiceIndex,\n\t});\n}\n\nexport function withChoiceIndex<T extends RawChunk>(chunk: T, choiceIndex: number | undefined): T {\n\tif (choiceIndex === undefined) return chunk;\n\treturn optionalRawChunk({ ...chunk, choiceIndex }) as T;\n}\n\nexport function toolKey(\n\tchoiceIndex: number | undefined,\n\tchoicePosition: number,\n\ttoolIndex: number,\n): string {\n\treturn `${choiceKey(choiceIndex, choicePosition)}:${toolIndex}`;\n}\n\nexport function choiceKey(choiceIndex: number | undefined, choicePosition: number): string {\n\treturn choiceIndex === undefined ? `unknown-choice:${choicePosition}` : String(choiceIndex);\n}\n\nfunction normalizeFinishReason(value: unknown): FinishReason | undefined {\n\tif (\n\t\tvalue === \"stop\" ||\n\t\tvalue === \"length\" ||\n\t\tvalue === \"content_filter\" ||\n\t\tvalue === \"tool_calls\"\n\t) {\n\t\treturn value;\n\t}\n\tif (value === \"function_call\") return \"tool_calls\";\n\treturn undefined;\n}\n\nfunction firstNumber(source: Record<string, unknown>, fields: string[]): number | undefined {\n\tfor (const field of fields) {\n\t\tconst value = asNumber(source[field]);\n\t\tif (value !== undefined) return value;\n\t}\n\treturn undefined;\n}\n","import type { RawChunk } from \"../../core/types\";\nimport { asNumber, asString, isRecord, optionalRawChunk } from \"../utils\";\n\nexport type LogprobChannel = \"content\" | \"refusal\";\n\nexport interface LogprobPositionState {\n\treadonly positions: Map<string, number>;\n}\n\nexport function createLogprobPositionState(): LogprobPositionState {\n\treturn { positions: new Map() };\n}\n\nexport function logprobPositionKey(\n\tchoiceIndex: number | undefined,\n\tchannel: LogprobChannel,\n): string {\n\treturn `${choiceIndex ?? 0}:${channel}`;\n}\n\nexport function nextLogprobPosition(\n\tstate: LogprobPositionState,\n\tchoiceIndex: number | undefined,\n\tchannel: LogprobChannel,\n): number {\n\tconst key = logprobPositionKey(choiceIndex, channel);\n\tconst next = state.positions.get(key) ?? 0;\n\tstate.positions.set(key, next + 1);\n\treturn next;\n}\n\nexport function normalizeTopLogprobs(\n\tvalue: unknown,\n): Array<{ token: string; logprob: number; bytes?: number[] }> | undefined {\n\tif (!Array.isArray(value) || value.length === 0) return undefined;\n\tconst result: Array<{ token: string; logprob: number; bytes?: number[] }> = [];\n\tfor (const entry of value) {\n\t\tif (!isRecord(entry)) continue;\n\t\tconst token = asString(entry.token);\n\t\tconst logprob = asNumber(entry.logprob);\n\t\tif (token === undefined || logprob === undefined) continue;\n\t\tconst item: { token: string; logprob: number; bytes?: number[] } = { token, logprob };\n\t\tif (Array.isArray(entry.bytes)) {\n\t\t\tconst bytes = entry.bytes.filter((byte): byte is number => typeof byte === \"number\");\n\t\t\tif (bytes.length > 0) item.bytes = bytes;\n\t\t}\n\t\tresult.push(item);\n\t}\n\treturn result.length > 0 ? result : undefined;\n}\n\nexport function logprobEntryFromProvider(\n\tentry: unknown,\n\tchannel: LogprobChannel,\n\tchoiceIndex?: number,\n\tposition?: number,\n): RawChunk | undefined {\n\tif (!isRecord(entry)) return undefined;\n\tconst token = asString(entry.token);\n\tif (token === undefined || token.length === 0) return undefined;\n\tconst logprob = asNumber(entry.logprob);\n\tif (logprob === undefined) return undefined;\n\n\tconst chunk: Extract<RawChunk, { kind: \"logprob\" }> = {\n\t\tkind: \"logprob\",\n\t\tchannel,\n\t\ttoken,\n\t\tlogprob,\n\t\traw: entry,\n\t};\n\tif (Array.isArray(entry.bytes)) {\n\t\tconst bytes = entry.bytes.filter((byte): byte is number => typeof byte === \"number\");\n\t\tif (bytes.length > 0) chunk.bytes = bytes;\n\t}\n\tconst topLogprobs = normalizeTopLogprobs(entry.top_logprobs);\n\tif (topLogprobs) chunk.topLogprobs = topLogprobs;\n\tif (choiceIndex !== undefined) chunk.choiceIndex = choiceIndex;\n\tif (position !== undefined) chunk.position = position;\n\treturn optionalRawChunk(chunk);\n}\n\nexport function logprobChunksFromChoiceLogprobs(\n\tlogprobs: unknown,\n\tchoiceIndex?: number,\n\tpositionState?: LogprobPositionState,\n): RawChunk[] {\n\tif (logprobs === null || logprobs === undefined) return [];\n\tif (!isRecord(logprobs)) return [];\n\n\tconst chunks: RawChunk[] = [];\n\tconst content = logprobs.content;\n\tconst refusal = logprobs.refusal;\n\n\tif (Array.isArray(content)) {\n\t\tfor (let index = 0; index < content.length; index += 1) {\n\t\t\tconst position = positionState\n\t\t\t\t? nextLogprobPosition(positionState, choiceIndex, \"content\")\n\t\t\t\t: index;\n\t\t\tconst chunk = logprobEntryFromProvider(content[index], \"content\", choiceIndex, position);\n\t\t\tif (chunk) chunks.push(chunk);\n\t\t}\n\t}\n\n\tif (Array.isArray(refusal)) {\n\t\tfor (let index = 0; index < refusal.length; index += 1) {\n\t\t\tconst position = positionState\n\t\t\t\t? nextLogprobPosition(positionState, choiceIndex, \"refusal\")\n\t\t\t\t: index;\n\t\t\tconst chunk = logprobEntryFromProvider(refusal[index], \"refusal\", choiceIndex, position);\n\t\t\tif (chunk) chunks.push(chunk);\n\t\t}\n\t}\n\n\treturn chunks;\n}\n","import type { RawChunk } from \"../../../core/types\";\nimport { asNumber, asString, isRecord } from \"../../utils\";\nimport { parseAdapterObjectPayload } from \"../../shared/parse-payload\";\nimport {\n\topenAIProviderErrorChunks,\n\tproviderErrorPayload,\n\tthrowUnrecognizedChunkError,\n} from \"./errors\";\nimport {\n\tchoiceIndexFor,\n\tchoiceKey,\n\tcitationChunksFromRootPayload,\n\tfinishReasonChunks,\n\thasMetadata,\n\tmetadataChunks,\n\treasoningChunks,\n\ttoolArgsChunk,\n\ttoolKey,\n\ttoolStartChunk,\n\tusageChunk,\n\twithChoiceIndex,\n} from \"./chunks\";\nimport {\n\tcreateLogprobPositionState,\n\tlogprobChunksFromChoiceLogprobs,\n\ttype LogprobPositionState,\n} from \"../../shared/logprobs\";\nimport type { RequiredOpenAIChatLikeParserOptions, ToolState } from \"./types\";\n\nexport class OpenAIChatLikeParser {\n\tprivate metadataEmitted = false;\n\tprivate readonly tools = new Map<string, ToolState>();\n\tprivate readonly legacyStarted = new Set<string>();\n\tprivate readonly logprobPositions: LogprobPositionState = createLogprobPositionState();\n\n\tconstructor(private readonly options: RequiredOpenAIChatLikeParserOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tconst payload = parseAdapterObjectPayload(raw, `${this.options.errorPrefix}.parseChunk`);\n\t\tif (!payload) return [];\n\n\t\tconst looseError = providerErrorPayload(payload, this.options);\n\t\tif (looseError) return openAIProviderErrorChunks(looseError, false, this.options);\n\n\t\tif (!this.options.looseErrorShape && asString(payload.error) && !isRecord(payload.error)) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (this.options.rejectUnrecognizedPayloads && !this.isRecognizableChunk(payload)) {\n\t\t\tthrowUnrecognizedChunkError(this.options);\n\t\t}\n\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst citationOptions = {\n\t\t\temitLegacyCitationMetadata: this.options.emitLegacyCitationMetadata,\n\t\t};\n\t\tif (!this.metadataEmitted && hasMetadata(payload)) {\n\t\t\tchunks.push(...metadataChunks(payload, citationOptions));\n\t\t\tthis.metadataEmitted = true;\n\t\t}\n\n\t\tchunks.push(...citationChunksFromRootPayload(payload, citationOptions));\n\n\t\tconst usage = usageChunk(payload.usage, this.options);\n\t\tif (usage) chunks.push(usage);\n\n\t\tconst choices = Array.isArray(payload.choices) ? payload.choices : [];\n\t\tfor (let position = 0; position < choices.length; position += 1) {\n\t\t\tconst choice = choices[position];\n\t\t\tif (!isRecord(choice)) continue;\n\t\t\tchunks.push(...this.choiceChunks(choice, position));\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate isRecognizableChunk(payload: Record<string, unknown>): boolean {\n\t\treturn (\n\t\t\thasMetadata(payload) ||\n\t\t\ttypeof payload.object === \"string\" ||\n\t\t\tArray.isArray(payload.choices) ||\n\t\t\tisRecord(payload.usage)\n\t\t);\n\t}\n\n\tprivate choiceChunks(choice: Record<string, unknown>, position: number): RawChunk[] {\n\t\tconst choiceIndex = choiceIndexFor(choice, position, this.options);\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst delta = isRecord(choice.delta) ? choice.delta : undefined;\n\n\t\tchunks.push(\n\t\t\t...logprobChunksFromChoiceLogprobs(choice.logprobs, choiceIndex, this.logprobPositions),\n\t\t);\n\n\t\tif (delta) {\n\t\t\tchunks.push(...this.deltaChunks(delta, choiceIndex, position));\n\t\t}\n\n\t\tchunks.push(...finishReasonChunks(choice.finish_reason, choiceIndex, this.options));\n\t\treturn chunks;\n\t}\n\n\tprivate deltaChunks(\n\t\tdelta: Record<string, unknown>,\n\t\tchoiceIndex: number | undefined,\n\t\tchoicePosition: number,\n\t): RawChunk[] {\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst content = asString(delta.content);\n\t\tif (content && content.length > 0) {\n\t\t\tchunks.push(\n\t\t\t\tthis.options.jsonMode\n\t\t\t\t\t? { kind: \"json-delta\", delta: content }\n\t\t\t\t\t: withChoiceIndex({ kind: \"text-delta\", text: content }, choiceIndex),\n\t\t\t);\n\t\t}\n\n\t\tconst refusal = asString(delta.refusal);\n\t\tif (refusal && refusal.length > 0) {\n\t\t\tchunks.push({ kind: \"refusal-delta\", text: refusal });\n\t\t}\n\n\t\tchunks.push(...reasoningChunks(delta, this.options));\n\t\tchunks.push(...this.toolCallChunks(delta.tool_calls, choiceIndex, choicePosition));\n\t\tchunks.push(...this.legacyFunctionChunks(delta.function_call, choiceIndex, choicePosition));\n\t\treturn chunks;\n\t}\n\n\tprivate toolCallChunks(\n\t\tvalue: unknown,\n\t\tchoiceIndex: number | undefined,\n\t\tchoicePosition: number,\n\t): RawChunk[] {\n\t\tif (!Array.isArray(value)) return [];\n\t\tconst chunks: RawChunk[] = [];\n\n\t\tfor (let position = 0; position < value.length; position += 1) {\n\t\t\tconst toolCall = value[position];\n\t\t\tif (!isRecord(toolCall)) continue;\n\n\t\t\tconst toolIndex = asNumber(toolCall.index) ?? position;\n\t\t\tconst key = toolKey(choiceIndex, choicePosition, toolIndex);\n\t\t\tconst state = this.toolState(key);\n\t\t\tconst id = asString(toolCall.id);\n\t\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\t\tconst name = asString(fn?.name);\n\t\t\tconst args = asString(fn?.arguments);\n\n\t\t\tif (id) state.id = id;\n\t\t\tif (name) state.name = name;\n\n\t\t\tif (!state.startEmitted && (id || name || (args && args.length > 0))) {\n\t\t\t\tchunks.push(\n\t\t\t\t\ttoolStartChunk({\n\t\t\t\t\t\tid: state.id,\n\t\t\t\t\t\tname: state.name,\n\t\t\t\t\t\tindex: toolIndex,\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tstate.startEmitted = true;\n\t\t\t}\n\n\t\t\tif (args && args.length > 0) {\n\t\t\t\tstate.sawArguments = true;\n\t\t\t\tchunks.push(\n\t\t\t\t\ttoolArgsChunk({\n\t\t\t\t\t\tid: state.id,\n\t\t\t\t\t\tdelta: args,\n\t\t\t\t\t\tindex: toolIndex,\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate legacyFunctionChunks(\n\t\tvalue: unknown,\n\t\tchoiceIndex: number | undefined,\n\t\tchoicePosition: number,\n\t): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst name = asString(value.name);\n\t\tconst args = asString(value.arguments);\n\t\tconst legacyKey = choiceKey(choiceIndex, choicePosition);\n\t\tconst id = `${this.options.legacyFunctionIdPrefix}:${choiceIndex ?? choicePosition}`;\n\n\t\tif (name && !this.legacyStarted.has(legacyKey)) {\n\t\t\tchunks.push(withChoiceIndex({ kind: \"tool-start\", id, name, index: 0 }, choiceIndex));\n\t\t\tthis.legacyStarted.add(legacyKey);\n\t\t}\n\n\t\tif (args && args.length > 0) {\n\t\t\tif (!this.legacyStarted.has(legacyKey)) {\n\t\t\t\tchunks.push(\n\t\t\t\t\twithChoiceIndex(\n\t\t\t\t\t\t{ kind: \"tool-start\", id, name: name ?? \"unknown\", index: 0 },\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tthis.legacyStarted.add(legacyKey);\n\t\t\t}\n\t\t\tchunks.push(\n\t\t\t\twithChoiceIndex({ kind: \"tool-args-delta\", id, delta: args, index: 0 }, choiceIndex),\n\t\t\t);\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate toolState(key: string): ToolState {\n\t\tlet state = this.tools.get(key);\n\t\tif (!state) {\n\t\t\tstate = { name: \"unknown\", startEmitted: false, sawArguments: false };\n\t\t\tthis.tools.set(key, state);\n\t\t}\n\t\treturn state;\n\t}\n}\n","import type { RawChunk } from \"../../../core/types\";\nimport { asNumber, asString, isRecord } from \"../../utils\";\nimport {\n\topenAIProviderErrorChunks,\n\tproviderErrorPayload,\n\tthrowAdapterObjectError,\n\tthrowUnrecognizedResponseError,\n} from \"./errors\";\nimport {\n\tchoiceIndexFor,\n\tcitationChunksFromRootPayload,\n\tfinishReasonChunks,\n\tisRecognizableResponse,\n\tmetadataChunks,\n\treasoningChunks,\n\ttoolArgsChunk,\n\ttoolDoneChunk,\n\ttoolStartChunk,\n\tusageChunk,\n\twithChoiceIndex,\n} from \"./chunks\";\nimport { logprobChunksFromChoiceLogprobs } from \"../../shared/logprobs\";\nimport type { RequiredOpenAIChatLikeParserOptions } from \"./types\";\n\nexport function parseResponse(\n\tbody: unknown,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tif (!isRecord(body)) {\n\t\tthrowAdapterObjectError(\n\t\t\t`${options.errorPrefix}.parseResponse`,\n\t\t\t\"expected an OpenAI-compatible chat completion object\",\n\t\t);\n\t}\n\n\tconst looseError = providerErrorPayload(body, options);\n\tif (looseError) return openAIProviderErrorChunks(looseError, false, options);\n\n\tif (options.rejectUnrecognizedPayloads && !isRecognizableResponse(body)) {\n\t\tthrowUnrecognizedResponseError(options);\n\t}\n\n\tconst chunks: RawChunk[] = [];\n\tconst finishChunks: RawChunk[] = [];\n\tconst citationOptions = { emitLegacyCitationMetadata: options.emitLegacyCitationMetadata };\n\tchunks.push(...metadataChunks(body, citationOptions));\n\tchunks.push(...citationChunksFromRootPayload(body, citationOptions));\n\n\tconst choices = Array.isArray(body.choices) ? body.choices : [];\n\tfor (let position = 0; position < choices.length; position += 1) {\n\t\tconst choice = choices[position];\n\t\tif (!isRecord(choice)) continue;\n\t\tchunks.push(...responseChoiceChunks(choice, position, options));\n\t\tfinishChunks.push(...responseChoiceFinishChunks(choice, position, options));\n\t}\n\n\tconst usage = usageChunk(body.usage, options);\n\tif (usage) chunks.push(usage);\n\tchunks.push(...finishChunks);\n\treturn chunks;\n}\n\nfunction responseChoiceChunks(\n\tchoice: Record<string, unknown>,\n\tposition: number,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tconst choiceIndex = choiceIndexFor(choice, position, options);\n\tconst message = isRecord(choice.message) ? choice.message : undefined;\n\tconst chunks: RawChunk[] = [];\n\n\tchunks.push(...logprobChunksFromChoiceLogprobs(choice.logprobs, choiceIndex));\n\n\tif (message) {\n\t\tconst content = asString(message.content);\n\t\tif (content && content.length > 0) {\n\t\t\tchunks.push(\n\t\t\t\toptions.jsonMode\n\t\t\t\t\t? { kind: \"json-delta\", delta: content }\n\t\t\t\t\t: withChoiceIndex({ kind: \"text-delta\", text: content }, choiceIndex),\n\t\t\t);\n\t\t}\n\n\t\tconst refusal = asString(message.refusal);\n\t\tif (refusal && refusal.length > 0) {\n\t\t\tchunks.push({ kind: \"refusal-delta\", text: refusal });\n\t\t}\n\n\t\tchunks.push(...reasoningChunks(message, options));\n\t\tchunks.push(...responseToolCallChunks(message.tool_calls, choiceIndex));\n\t\tchunks.push(\n\t\t\t...responseLegacyFunctionChunks(message.function_call, choiceIndex, position, options),\n\t\t);\n\t}\n\n\treturn chunks;\n}\n\nfunction responseChoiceFinishChunks(\n\tchoice: Record<string, unknown>,\n\tposition: number,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tconst choiceIndex = choiceIndexFor(choice, position, options);\n\treturn finishReasonChunks(choice.finish_reason, choiceIndex, options);\n}\n\nfunction responseToolCallChunks(value: unknown, choiceIndex: number | undefined): RawChunk[] {\n\tif (!Array.isArray(value)) return [];\n\tconst chunks: RawChunk[] = [];\n\n\tfor (let position = 0; position < value.length; position += 1) {\n\t\tconst toolCall = value[position];\n\t\tif (!isRecord(toolCall)) continue;\n\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\tconst id = asString(toolCall.id);\n\t\tconst name = asString(fn?.name) ?? \"unknown\";\n\t\tconst args = asString(fn?.arguments) ?? \"\";\n\t\tconst index = asNumber(toolCall.index) ?? position;\n\n\t\tchunks.push(toolStartChunk({ id, name, index, choiceIndex }));\n\t\tif (args.length > 0) chunks.push(toolArgsChunk({ id, delta: args, index, choiceIndex }));\n\t\tchunks.push(toolDoneChunk({ id, index, choiceIndex }));\n\t}\n\n\treturn chunks;\n}\n\nfunction responseLegacyFunctionChunks(\n\tvalue: unknown,\n\tchoiceIndex: number | undefined,\n\tchoicePosition: number,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tif (!isRecord(value)) return [];\n\tconst name = asString(value.name) ?? \"unknown\";\n\tconst args = asString(value.arguments) ?? \"\";\n\tconst id = `${options.legacyFunctionIdPrefix}:${choiceIndex ?? choicePosition}`;\n\tconst chunks: RawChunk[] = [\n\t\twithChoiceIndex({ kind: \"tool-start\", id, name, index: 0 }, choiceIndex),\n\t];\n\tif (args.length > 0) {\n\t\tchunks.push(\n\t\t\twithChoiceIndex({ kind: \"tool-args-delta\", id, delta: args, index: 0 }, choiceIndex),\n\t\t);\n\t}\n\tchunks.push(withChoiceIndex({ kind: \"tool-done\", id, index: 0 }, choiceIndex));\n\treturn chunks;\n}\n","export interface OpenAIChatLikeParserOptions {\n\tjsonMode?: boolean;\n\tlegacyFunctionIdPrefix?: string;\n\terrorPrefix: \"openaiChatAdapter\" | \"openaiCompatibleAdapter\";\n\tlooseErrorShape?: boolean;\n\tallowMissingMetadata?: boolean;\n\tuseChoicePositionFallback?: boolean;\n\treasoningFieldAliases?: string[];\n\tusageInputTokenFields?: string[];\n\tusageOutputTokenFields?: string[];\n\trejectUnrecognizedPayloads?: boolean;\n\t/** @deprecated Dual-emit legacy metadata.raw citation blobs alongside typed events. */\n\temitLegacyCitationMetadata?: boolean;\n}\n\nexport interface RequiredOpenAIChatLikeParserOptions {\n\tjsonMode: boolean;\n\tlegacyFunctionIdPrefix: string;\n\terrorPrefix: \"openaiChatAdapter\" | \"openaiCompatibleAdapter\";\n\tlooseErrorShape: boolean;\n\tallowMissingMetadata: boolean;\n\tuseChoicePositionFallback: boolean;\n\treasoningFieldAliases: string[];\n\tusageInputTokenFields: string[];\n\tusageOutputTokenFields: string[];\n\trejectUnrecognizedPayloads: boolean;\n\temitLegacyCitationMetadata: boolean;\n}\n\nexport function normalizeOptions(\n\toptions: OpenAIChatLikeParserOptions,\n): RequiredOpenAIChatLikeParserOptions {\n\treturn {\n\t\tjsonMode: options.jsonMode ?? false,\n\t\tlegacyFunctionIdPrefix: options.legacyFunctionIdPrefix ?? \"legacy_function\",\n\t\terrorPrefix: options.errorPrefix,\n\t\tlooseErrorShape: options.looseErrorShape ?? false,\n\t\tallowMissingMetadata: options.allowMissingMetadata ?? false,\n\t\tuseChoicePositionFallback: options.useChoicePositionFallback ?? true,\n\t\treasoningFieldAliases: options.reasoningFieldAliases ?? [],\n\t\tusageInputTokenFields: options.usageInputTokenFields ?? [\"prompt_tokens\"],\n\t\tusageOutputTokenFields: options.usageOutputTokenFields ?? [\"completion_tokens\"],\n\t\trejectUnrecognizedPayloads: options.rejectUnrecognizedPayloads ?? false,\n\t\temitLegacyCitationMetadata: options.emitLegacyCitationMetadata ?? false,\n\t};\n}\n\nexport interface ToolState {\n\tid?: string;\n\tname: string;\n\tstartEmitted: boolean;\n\tsawArguments: boolean;\n}\n","import type { StreamAdapter } from \"../../../core/types\";\nimport { createStreamAdapter } from \"../../utils\";\nimport { OpenAIChatLikeParser } from \"./stream-parser\";\nimport { parseResponse } from \"./response\";\nimport { normalizeOptions, type OpenAIChatLikeParserOptions } from \"./types\";\n\nexport type { OpenAIChatLikeParserOptions } from \"./types\";\n\nexport function createOpenAIChatLikeAdapter(options: OpenAIChatLikeParserOptions): StreamAdapter {\n\tconst normalized = normalizeOptions(options);\n\tconst parser = new OpenAIChatLikeParser(normalized);\n\treturn createStreamAdapter({\n\t\tparser,\n\t\tparseResponse,\n\t\toptions: normalized,\n\t});\n}\n","import type { StreamAdapter } from \"../core/types\";\nimport { createOpenAIChatLikeAdapter } from \"./openai-chat/parser\";\n\nexport interface OpenAIChatAdapterOptions {\n\tjsonMode?: boolean;\n\tlegacyFunctionIdPrefix?: string;\n}\n\nexport function openaiChatAdapter(options: OpenAIChatAdapterOptions = {}): StreamAdapter {\n\treturn createOpenAIChatLikeAdapter({\n\t\t...options,\n\t\terrorPrefix: \"openaiChatAdapter\",\n\t\tlooseErrorShape: false,\n\t\tallowMissingMetadata: false,\n\t\tuseChoicePositionFallback: true,\n\t\tusageInputTokenFields: [\"prompt_tokens\"],\n\t\tusageOutputTokenFields: [\"completion_tokens\"],\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/utils/object.ts","../../src/adapters/errors.ts","../../src/adapters/utils.ts","../../src/adapters/shared/parse-payload.ts","../../src/adapters/openai-chat/parser/errors.ts","../../src/adapters/shared/citation-grounding.ts","../../src/adapters/openai-chat/parser/chunks.ts","../../src/adapters/shared/logprobs.ts","../../src/adapters/openai-chat/parser/stream-parser.ts","../../src/adapters/openai-chat/parser/response.ts","../../src/adapters/openai-chat/parser/types.ts","../../src/adapters/openai-chat/parser/index.ts","../../src/adapters/openai-chat.ts"],"names":[],"mappings":"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","file":"openai-chat.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 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","/** 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","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\";\nimport { asString, isRecord } from \"../../utils\";\nimport { adapterScopedError, providerErrorChunksFromPayload } from \"../../errors\";\nimport type { RequiredOpenAIChatLikeParserOptions } from \"./types\";\n\nexport function providerErrorPayload(\n\tpayload: Record<string, unknown>,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): Record<string, unknown> | undefined {\n\tif (isRecord(payload.error)) return payload.error;\n\tif (!options.looseErrorShape) return undefined;\n\n\tconst errorString = asString(payload.error);\n\tif (errorString) return { message: errorString };\n\n\tconst detailString = asString(payload.detail);\n\tif (detailString) return { message: detailString };\n\tif (isRecord(payload.detail)) return payload.detail;\n\n\tconst topLevelMessage = asString(payload.message);\n\tconst topLevelType = asString(payload.type);\n\tif (topLevelMessage && topLevelType === \"error\") return { message: topLevelMessage };\n\n\treturn undefined;\n}\n\nexport function openAIProviderErrorChunks(\n\terrorPayload: Record<string, unknown>,\n\trecoverable: boolean,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\treturn providerErrorChunksFromPayload(\n\t\terrorPayload,\n\t\toptions.errorPrefix,\n\t\trecoverable,\n\t\t\"OpenAI-compatible provider error\",\n\t);\n}\n\nexport function throwAdapterObjectError(scope: string, message = \"expected a JSON object\"): never {\n\tthrow adapterScopedError(scope, message);\n}\n\nexport function throwUnrecognizedChunkError(options: RequiredOpenAIChatLikeParserOptions): never {\n\tthrow adapterScopedError(\n\t\t`${options.errorPrefix}.parseChunk`,\n\t\t\"expected an OpenAI-compatible chat completion chunk\",\n\t);\n}\n\nexport function throwUnrecognizedResponseError(\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): never {\n\tthrow adapterScopedError(\n\t\t`${options.errorPrefix}.parseResponse`,\n\t\t\"expected an OpenAI-compatible chat completion object\",\n\t);\n}\n\nexport { adapterScopedError };\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 type { FinishReason, RawChunk } from \"../../../core/types\";\nimport { asNumber, asString, isRecord, optionalRawChunk } from \"../../utils\";\nimport { adapterScopedError } from \"../../errors\";\nimport {\n\tmetadataPayloadWithoutCitationFields,\n\tperplexityCitationFromPayload,\n\ttype CitationGroundingOptions,\n} from \"../../shared/citation-grounding\";\nimport type { RequiredOpenAIChatLikeParserOptions } from \"./types\";\n\nexport function metadataChunks(\n\tpayload: Record<string, unknown>,\n\t_options: CitationGroundingOptions = {},\n): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tconst id = asString(payload.id);\n\tif (id) chunks.push({ kind: \"message-start\", id });\n\n\tconst metadataPayload = metadataPayloadWithoutCitationFields(payload);\n\tconst metadata: Extract<RawChunk, { kind: \"metadata\" }> = {\n\t\tkind: \"metadata\",\n\t\traw: metadataPayload,\n\t};\n\tconst model = asString(payload.model);\n\tconst created = asNumber(payload.created);\n\tif (model) metadata.model = model;\n\tif (id) metadata.responseId = id;\n\tif (created !== undefined) metadata.created = created;\n\tif (metadata.model || metadata.responseId || metadata.created !== undefined) {\n\t\tchunks.push(metadata);\n\t}\n\treturn chunks;\n}\n\nexport function citationChunksFromRootPayload(\n\tpayload: Record<string, unknown>,\n\toptions: CitationGroundingOptions = {},\n): RawChunk[] {\n\treturn perplexityCitationFromPayload(payload, options);\n}\n\nexport function hasRootCitationFields(payload: Record<string, unknown>): boolean {\n\tconst citations = payload.citations;\n\tconst searchResults = payload.search_results;\n\treturn (\n\t\t(Array.isArray(citations) && citations.length > 0) ||\n\t\t(Array.isArray(searchResults) && searchResults.length > 0)\n\t);\n}\n\nexport function hasMetadata(payload: Record<string, unknown>): boolean {\n\treturn (\n\t\tasString(payload.id) !== undefined ||\n\t\tasString(payload.model) !== undefined ||\n\t\tasNumber(payload.created) !== undefined\n\t);\n}\n\nexport function isRecognizableResponse(payload: Record<string, unknown>): boolean {\n\treturn (\n\t\thasMetadata(payload) ||\n\t\ttypeof payload.object === \"string\" ||\n\t\tArray.isArray(payload.choices) ||\n\t\tisRecord(payload.usage)\n\t);\n}\n\nexport function reasoningChunks(\n\tsource: Record<string, unknown>,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tconst aliases = new Set([\n\t\t\"reasoning\",\n\t\t\"reasoning_content\",\n\t\t\"reasoning_summary\",\n\t\t...options.reasoningFieldAliases,\n\t]);\n\tfor (const field of aliases) {\n\t\tconst text = asString(source[field]);\n\t\tif (!text) continue;\n\t\tchunks.push({\n\t\t\tkind: \"reasoning-delta\",\n\t\t\ttext,\n\t\t\tvariant: field === \"reasoning_summary\" ? \"summary\" : \"detail\",\n\t\t});\n\t}\n\treturn chunks;\n}\n\nexport function finishReasonChunks(\n\tvalue: unknown,\n\tchoiceIndex: number | undefined,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tif (value === null || value === undefined) return [];\n\tconst finishReason = normalizeFinishReason(value);\n\tif (finishReason) {\n\t\treturn [withChoiceIndex({ kind: \"finish\", reason: finishReason }, choiceIndex)];\n\t}\n\treturn [\n\t\t{\n\t\t\tkind: \"provider-error\",\n\t\t\terror: adapterScopedError(\n\t\t\t\toptions.errorPrefix,\n\t\t\t\t`unknown OpenAI-compatible finish_reason: ${String(value)}`,\n\t\t\t),\n\t\t\trecoverable: true,\n\t\t},\n\t\twithChoiceIndex({ kind: \"finish\", reason: \"error\" }, choiceIndex),\n\t];\n}\n\nexport function usageChunk(\n\tvalue: unknown,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst inputTokens = firstNumber(value, options.usageInputTokenFields);\n\tconst outputTokens = firstNumber(value, options.usageOutputTokenFields);\n\tconst details = isRecord(value.completion_tokens_details)\n\t\t? value.completion_tokens_details\n\t\t: undefined;\n\tconst reasoningTokens = details ? asNumber(details.reasoning_tokens) : undefined;\n\tif (inputTokens === undefined && outputTokens === undefined && reasoningTokens === undefined) {\n\t\treturn undefined;\n\t}\n\tconst chunk: Extract<RawChunk, { kind: \"usage\" }> = { kind: \"usage\", raw: value };\n\tif (inputTokens !== undefined) chunk.inputTokens = inputTokens;\n\tif (outputTokens !== undefined) chunk.outputTokens = outputTokens;\n\tif (reasoningTokens !== undefined) chunk.reasoningTokens = reasoningTokens;\n\treturn chunk;\n}\n\nexport function choiceIndexFor(\n\tchoice: Record<string, unknown>,\n\tposition: number,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): number | undefined {\n\treturn asNumber(choice.index) ?? (options.useChoicePositionFallback ? position : undefined);\n}\n\nexport function toolStartChunk(input: {\n\tid: string | undefined;\n\tname: string;\n\tindex: number;\n\tchoiceIndex: number | undefined;\n}): RawChunk {\n\treturn optionalRawChunk({\n\t\tkind: \"tool-start\",\n\t\tid: input.id,\n\t\tname: input.name,\n\t\tindex: input.index,\n\t\tchoiceIndex: input.choiceIndex,\n\t});\n}\n\nexport function toolArgsChunk(input: {\n\tid: string | undefined;\n\tdelta: string;\n\tindex: number;\n\tchoiceIndex: number | undefined;\n}): RawChunk {\n\treturn optionalRawChunk({\n\t\tkind: \"tool-args-delta\",\n\t\tid: input.id,\n\t\tdelta: input.delta,\n\t\tindex: input.index,\n\t\tchoiceIndex: input.choiceIndex,\n\t});\n}\n\nexport function toolDoneChunk(input: {\n\tid: string | undefined;\n\tindex: number;\n\tchoiceIndex: number | undefined;\n}): RawChunk {\n\treturn optionalRawChunk({\n\t\tkind: \"tool-done\",\n\t\tid: input.id,\n\t\tindex: input.index,\n\t\tchoiceIndex: input.choiceIndex,\n\t});\n}\n\nexport function withChoiceIndex<T extends RawChunk>(chunk: T, choiceIndex: number | undefined): T {\n\tif (choiceIndex === undefined) return chunk;\n\treturn optionalRawChunk({ ...chunk, choiceIndex }) as T;\n}\n\nexport function toolKey(\n\tchoiceIndex: number | undefined,\n\tchoicePosition: number,\n\ttoolIndex: number,\n): string {\n\treturn `${choiceKey(choiceIndex, choicePosition)}:${toolIndex}`;\n}\n\nexport function choiceKey(choiceIndex: number | undefined, choicePosition: number): string {\n\treturn choiceIndex === undefined ? `unknown-choice:${choicePosition}` : String(choiceIndex);\n}\n\nfunction normalizeFinishReason(value: unknown): FinishReason | undefined {\n\tif (\n\t\tvalue === \"stop\" ||\n\t\tvalue === \"length\" ||\n\t\tvalue === \"content_filter\" ||\n\t\tvalue === \"tool_calls\"\n\t) {\n\t\treturn value;\n\t}\n\tif (value === \"function_call\") return \"tool_calls\";\n\treturn undefined;\n}\n\nfunction firstNumber(source: Record<string, unknown>, fields: string[]): number | undefined {\n\tfor (const field of fields) {\n\t\tconst value = asNumber(source[field]);\n\t\tif (value !== undefined) return value;\n\t}\n\treturn undefined;\n}\n","import type { RawChunk } from \"../../core/types\";\nimport { asNumber, asString, isRecord, optionalRawChunk } from \"../utils\";\n\nexport type LogprobChannel = \"content\" | \"refusal\";\n\nexport interface LogprobPositionState {\n\treadonly positions: Map<string, number>;\n}\n\nexport function createLogprobPositionState(): LogprobPositionState {\n\treturn { positions: new Map() };\n}\n\nexport function logprobPositionKey(\n\tchoiceIndex: number | undefined,\n\tchannel: LogprobChannel,\n): string {\n\treturn `${choiceIndex ?? 0}:${channel}`;\n}\n\nexport function nextLogprobPosition(\n\tstate: LogprobPositionState,\n\tchoiceIndex: number | undefined,\n\tchannel: LogprobChannel,\n): number {\n\tconst key = logprobPositionKey(choiceIndex, channel);\n\tconst next = state.positions.get(key) ?? 0;\n\tstate.positions.set(key, next + 1);\n\treturn next;\n}\n\nexport function normalizeTopLogprobs(\n\tvalue: unknown,\n): Array<{ token: string; logprob: number; bytes?: number[] }> | undefined {\n\tif (!Array.isArray(value) || value.length === 0) return undefined;\n\tconst result: Array<{ token: string; logprob: number; bytes?: number[] }> = [];\n\tfor (const entry of value) {\n\t\tif (!isRecord(entry)) continue;\n\t\tconst token = asString(entry.token);\n\t\tconst logprob = asNumber(entry.logprob);\n\t\tif (token === undefined || logprob === undefined) continue;\n\t\tconst item: { token: string; logprob: number; bytes?: number[] } = { token, logprob };\n\t\tif (Array.isArray(entry.bytes)) {\n\t\t\tconst bytes = entry.bytes.filter((byte): byte is number => typeof byte === \"number\");\n\t\t\tif (bytes.length > 0) item.bytes = bytes;\n\t\t}\n\t\tresult.push(item);\n\t}\n\treturn result.length > 0 ? result : undefined;\n}\n\nexport function logprobEntryFromProvider(\n\tentry: unknown,\n\tchannel: LogprobChannel,\n\tchoiceIndex?: number,\n\tposition?: number,\n): RawChunk | undefined {\n\tif (!isRecord(entry)) return undefined;\n\tconst token = asString(entry.token);\n\tif (token === undefined || token.length === 0) return undefined;\n\tconst logprob = asNumber(entry.logprob);\n\tif (logprob === undefined) return undefined;\n\n\tconst chunk: Extract<RawChunk, { kind: \"logprob\" }> = {\n\t\tkind: \"logprob\",\n\t\tchannel,\n\t\ttoken,\n\t\tlogprob,\n\t\traw: entry,\n\t};\n\tif (Array.isArray(entry.bytes)) {\n\t\tconst bytes = entry.bytes.filter((byte): byte is number => typeof byte === \"number\");\n\t\tif (bytes.length > 0) chunk.bytes = bytes;\n\t}\n\tconst topLogprobs = normalizeTopLogprobs(entry.top_logprobs);\n\tif (topLogprobs) chunk.topLogprobs = topLogprobs;\n\tif (choiceIndex !== undefined) chunk.choiceIndex = choiceIndex;\n\tif (position !== undefined) chunk.position = position;\n\treturn optionalRawChunk(chunk);\n}\n\nexport function logprobChunksFromChoiceLogprobs(\n\tlogprobs: unknown,\n\tchoiceIndex?: number,\n\tpositionState?: LogprobPositionState,\n): RawChunk[] {\n\tif (logprobs === null || logprobs === undefined) return [];\n\tif (!isRecord(logprobs)) return [];\n\n\tconst chunks: RawChunk[] = [];\n\tconst content = logprobs.content;\n\tconst refusal = logprobs.refusal;\n\n\tif (Array.isArray(content)) {\n\t\tfor (let index = 0; index < content.length; index += 1) {\n\t\t\tconst position = positionState\n\t\t\t\t? nextLogprobPosition(positionState, choiceIndex, \"content\")\n\t\t\t\t: index;\n\t\t\tconst chunk = logprobEntryFromProvider(content[index], \"content\", choiceIndex, position);\n\t\t\tif (chunk) chunks.push(chunk);\n\t\t}\n\t}\n\n\tif (Array.isArray(refusal)) {\n\t\tfor (let index = 0; index < refusal.length; index += 1) {\n\t\t\tconst position = positionState\n\t\t\t\t? nextLogprobPosition(positionState, choiceIndex, \"refusal\")\n\t\t\t\t: index;\n\t\t\tconst chunk = logprobEntryFromProvider(refusal[index], \"refusal\", choiceIndex, position);\n\t\t\tif (chunk) chunks.push(chunk);\n\t\t}\n\t}\n\n\treturn chunks;\n}\n\n/** Map Responses API LogProb[] (top-level on event or content part) to RawChunks. */\nexport function logprobChunksFromResponsesLogprobs(\n\tlogprobs: unknown,\n\tchannel: LogprobChannel,\n\tchoiceIndex?: number,\n\tpositionState?: LogprobPositionState,\n): RawChunk[] {\n\tif (logprobs === null || logprobs === undefined) return [];\n\tif (!Array.isArray(logprobs)) return [];\n\n\tconst chunks: RawChunk[] = [];\n\tfor (let index = 0; index < logprobs.length; index += 1) {\n\t\tconst position = positionState\n\t\t\t? nextLogprobPosition(positionState, choiceIndex, channel)\n\t\t\t: index;\n\t\tconst chunk = logprobEntryFromProvider(logprobs[index], channel, choiceIndex, position);\n\t\tif (chunk) chunks.push(chunk);\n\t}\n\treturn chunks;\n}\n","import type { RawChunk } from \"../../../core/types\";\nimport { asNumber, asString, isRecord } from \"../../utils\";\nimport { parseAdapterObjectPayload } from \"../../shared/parse-payload\";\nimport {\n\topenAIProviderErrorChunks,\n\tproviderErrorPayload,\n\tthrowUnrecognizedChunkError,\n} from \"./errors\";\nimport {\n\tchoiceIndexFor,\n\tchoiceKey,\n\tcitationChunksFromRootPayload,\n\tfinishReasonChunks,\n\thasMetadata,\n\tmetadataChunks,\n\treasoningChunks,\n\ttoolArgsChunk,\n\ttoolKey,\n\ttoolStartChunk,\n\tusageChunk,\n\twithChoiceIndex,\n} from \"./chunks\";\nimport {\n\tcreateLogprobPositionState,\n\tlogprobChunksFromChoiceLogprobs,\n\ttype LogprobPositionState,\n} from \"../../shared/logprobs\";\nimport type { RequiredOpenAIChatLikeParserOptions, ToolState } from \"./types\";\n\nexport class OpenAIChatLikeParser {\n\tprivate metadataEmitted = false;\n\tprivate readonly tools = new Map<string, ToolState>();\n\tprivate readonly legacyStarted = new Set<string>();\n\tprivate readonly logprobPositions: LogprobPositionState = createLogprobPositionState();\n\n\tconstructor(private readonly options: RequiredOpenAIChatLikeParserOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tconst payload = parseAdapterObjectPayload(raw, `${this.options.errorPrefix}.parseChunk`);\n\t\tif (!payload) return [];\n\n\t\tconst looseError = providerErrorPayload(payload, this.options);\n\t\tif (looseError) return openAIProviderErrorChunks(looseError, false, this.options);\n\n\t\tif (!this.options.looseErrorShape && asString(payload.error) && !isRecord(payload.error)) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (this.options.rejectUnrecognizedPayloads && !this.isRecognizableChunk(payload)) {\n\t\t\tthrowUnrecognizedChunkError(this.options);\n\t\t}\n\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst citationOptions = {\n\t\t\temitLegacyCitationMetadata: this.options.emitLegacyCitationMetadata,\n\t\t};\n\t\tif (!this.metadataEmitted && hasMetadata(payload)) {\n\t\t\tchunks.push(...metadataChunks(payload, citationOptions));\n\t\t\tthis.metadataEmitted = true;\n\t\t}\n\n\t\tchunks.push(...citationChunksFromRootPayload(payload, citationOptions));\n\n\t\tconst usage = usageChunk(payload.usage, this.options);\n\t\tif (usage) chunks.push(usage);\n\n\t\tconst choices = Array.isArray(payload.choices) ? payload.choices : [];\n\t\tfor (let position = 0; position < choices.length; position += 1) {\n\t\t\tconst choice = choices[position];\n\t\t\tif (!isRecord(choice)) continue;\n\t\t\tchunks.push(...this.choiceChunks(choice, position));\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate isRecognizableChunk(payload: Record<string, unknown>): boolean {\n\t\treturn (\n\t\t\thasMetadata(payload) ||\n\t\t\ttypeof payload.object === \"string\" ||\n\t\t\tArray.isArray(payload.choices) ||\n\t\t\tisRecord(payload.usage)\n\t\t);\n\t}\n\n\tprivate choiceChunks(choice: Record<string, unknown>, position: number): RawChunk[] {\n\t\tconst choiceIndex = choiceIndexFor(choice, position, this.options);\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst delta = isRecord(choice.delta) ? choice.delta : undefined;\n\n\t\tchunks.push(\n\t\t\t...logprobChunksFromChoiceLogprobs(choice.logprobs, choiceIndex, this.logprobPositions),\n\t\t);\n\n\t\tif (delta) {\n\t\t\tchunks.push(...this.deltaChunks(delta, choiceIndex, position));\n\t\t}\n\n\t\tchunks.push(...finishReasonChunks(choice.finish_reason, choiceIndex, this.options));\n\t\treturn chunks;\n\t}\n\n\tprivate deltaChunks(\n\t\tdelta: Record<string, unknown>,\n\t\tchoiceIndex: number | undefined,\n\t\tchoicePosition: number,\n\t): RawChunk[] {\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst content = asString(delta.content);\n\t\tif (content && content.length > 0) {\n\t\t\tchunks.push(\n\t\t\t\tthis.options.jsonMode\n\t\t\t\t\t? { kind: \"json-delta\", delta: content }\n\t\t\t\t\t: withChoiceIndex({ kind: \"text-delta\", text: content }, choiceIndex),\n\t\t\t);\n\t\t}\n\n\t\tconst refusal = asString(delta.refusal);\n\t\tif (refusal && refusal.length > 0) {\n\t\t\tchunks.push({ kind: \"refusal-delta\", text: refusal });\n\t\t}\n\n\t\tchunks.push(...reasoningChunks(delta, this.options));\n\t\tchunks.push(...this.toolCallChunks(delta.tool_calls, choiceIndex, choicePosition));\n\t\tchunks.push(...this.legacyFunctionChunks(delta.function_call, choiceIndex, choicePosition));\n\t\treturn chunks;\n\t}\n\n\tprivate toolCallChunks(\n\t\tvalue: unknown,\n\t\tchoiceIndex: number | undefined,\n\t\tchoicePosition: number,\n\t): RawChunk[] {\n\t\tif (!Array.isArray(value)) return [];\n\t\tconst chunks: RawChunk[] = [];\n\n\t\tfor (let position = 0; position < value.length; position += 1) {\n\t\t\tconst toolCall = value[position];\n\t\t\tif (!isRecord(toolCall)) continue;\n\n\t\t\tconst toolIndex = asNumber(toolCall.index) ?? position;\n\t\t\tconst key = toolKey(choiceIndex, choicePosition, toolIndex);\n\t\t\tconst state = this.toolState(key);\n\t\t\tconst id = asString(toolCall.id);\n\t\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\t\tconst name = asString(fn?.name);\n\t\t\tconst args = asString(fn?.arguments);\n\n\t\t\tif (id) state.id = id;\n\t\t\tif (name) state.name = name;\n\n\t\t\tif (!state.startEmitted && (id || name || (args && args.length > 0))) {\n\t\t\t\tchunks.push(\n\t\t\t\t\ttoolStartChunk({\n\t\t\t\t\t\tid: state.id,\n\t\t\t\t\t\tname: state.name,\n\t\t\t\t\t\tindex: toolIndex,\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tstate.startEmitted = true;\n\t\t\t}\n\n\t\t\tif (args && args.length > 0) {\n\t\t\t\tstate.sawArguments = true;\n\t\t\t\tchunks.push(\n\t\t\t\t\ttoolArgsChunk({\n\t\t\t\t\t\tid: state.id,\n\t\t\t\t\t\tdelta: args,\n\t\t\t\t\t\tindex: toolIndex,\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate legacyFunctionChunks(\n\t\tvalue: unknown,\n\t\tchoiceIndex: number | undefined,\n\t\tchoicePosition: number,\n\t): RawChunk[] {\n\t\tif (!isRecord(value)) return [];\n\t\tconst chunks: RawChunk[] = [];\n\t\tconst name = asString(value.name);\n\t\tconst args = asString(value.arguments);\n\t\tconst legacyKey = choiceKey(choiceIndex, choicePosition);\n\t\tconst id = `${this.options.legacyFunctionIdPrefix}:${choiceIndex ?? choicePosition}`;\n\n\t\tif (name && !this.legacyStarted.has(legacyKey)) {\n\t\t\tchunks.push(withChoiceIndex({ kind: \"tool-start\", id, name, index: 0 }, choiceIndex));\n\t\t\tthis.legacyStarted.add(legacyKey);\n\t\t}\n\n\t\tif (args && args.length > 0) {\n\t\t\tif (!this.legacyStarted.has(legacyKey)) {\n\t\t\t\tchunks.push(\n\t\t\t\t\twithChoiceIndex(\n\t\t\t\t\t\t{ kind: \"tool-start\", id, name: name ?? \"unknown\", index: 0 },\n\t\t\t\t\t\tchoiceIndex,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tthis.legacyStarted.add(legacyKey);\n\t\t\t}\n\t\t\tchunks.push(\n\t\t\t\twithChoiceIndex({ kind: \"tool-args-delta\", id, delta: args, index: 0 }, choiceIndex),\n\t\t\t);\n\t\t}\n\n\t\treturn chunks;\n\t}\n\n\tprivate toolState(key: string): ToolState {\n\t\tlet state = this.tools.get(key);\n\t\tif (!state) {\n\t\t\tstate = { name: \"unknown\", startEmitted: false, sawArguments: false };\n\t\t\tthis.tools.set(key, state);\n\t\t}\n\t\treturn state;\n\t}\n}\n","import type { RawChunk } from \"../../../core/types\";\nimport { asNumber, asString, isRecord } from \"../../utils\";\nimport {\n\topenAIProviderErrorChunks,\n\tproviderErrorPayload,\n\tthrowAdapterObjectError,\n\tthrowUnrecognizedResponseError,\n} from \"./errors\";\nimport {\n\tchoiceIndexFor,\n\tcitationChunksFromRootPayload,\n\tfinishReasonChunks,\n\tisRecognizableResponse,\n\tmetadataChunks,\n\treasoningChunks,\n\ttoolArgsChunk,\n\ttoolDoneChunk,\n\ttoolStartChunk,\n\tusageChunk,\n\twithChoiceIndex,\n} from \"./chunks\";\nimport { logprobChunksFromChoiceLogprobs } from \"../../shared/logprobs\";\nimport type { RequiredOpenAIChatLikeParserOptions } from \"./types\";\n\nexport function parseResponse(\n\tbody: unknown,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tif (!isRecord(body)) {\n\t\tthrowAdapterObjectError(\n\t\t\t`${options.errorPrefix}.parseResponse`,\n\t\t\t\"expected an OpenAI-compatible chat completion object\",\n\t\t);\n\t}\n\n\tconst looseError = providerErrorPayload(body, options);\n\tif (looseError) return openAIProviderErrorChunks(looseError, false, options);\n\n\tif (options.rejectUnrecognizedPayloads && !isRecognizableResponse(body)) {\n\t\tthrowUnrecognizedResponseError(options);\n\t}\n\n\tconst chunks: RawChunk[] = [];\n\tconst finishChunks: RawChunk[] = [];\n\tconst citationOptions = { emitLegacyCitationMetadata: options.emitLegacyCitationMetadata };\n\tchunks.push(...metadataChunks(body, citationOptions));\n\tchunks.push(...citationChunksFromRootPayload(body, citationOptions));\n\n\tconst choices = Array.isArray(body.choices) ? body.choices : [];\n\tfor (let position = 0; position < choices.length; position += 1) {\n\t\tconst choice = choices[position];\n\t\tif (!isRecord(choice)) continue;\n\t\tchunks.push(...responseChoiceChunks(choice, position, options));\n\t\tfinishChunks.push(...responseChoiceFinishChunks(choice, position, options));\n\t}\n\n\tconst usage = usageChunk(body.usage, options);\n\tif (usage) chunks.push(usage);\n\tchunks.push(...finishChunks);\n\treturn chunks;\n}\n\nfunction responseChoiceChunks(\n\tchoice: Record<string, unknown>,\n\tposition: number,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tconst choiceIndex = choiceIndexFor(choice, position, options);\n\tconst message = isRecord(choice.message) ? choice.message : undefined;\n\tconst chunks: RawChunk[] = [];\n\n\tchunks.push(...logprobChunksFromChoiceLogprobs(choice.logprobs, choiceIndex));\n\n\tif (message) {\n\t\tconst content = asString(message.content);\n\t\tif (content && content.length > 0) {\n\t\t\tchunks.push(\n\t\t\t\toptions.jsonMode\n\t\t\t\t\t? { kind: \"json-delta\", delta: content }\n\t\t\t\t\t: withChoiceIndex({ kind: \"text-delta\", text: content }, choiceIndex),\n\t\t\t);\n\t\t}\n\n\t\tconst refusal = asString(message.refusal);\n\t\tif (refusal && refusal.length > 0) {\n\t\t\tchunks.push({ kind: \"refusal-delta\", text: refusal });\n\t\t}\n\n\t\tchunks.push(...reasoningChunks(message, options));\n\t\tchunks.push(...responseToolCallChunks(message.tool_calls, choiceIndex));\n\t\tchunks.push(\n\t\t\t...responseLegacyFunctionChunks(message.function_call, choiceIndex, position, options),\n\t\t);\n\t}\n\n\treturn chunks;\n}\n\nfunction responseChoiceFinishChunks(\n\tchoice: Record<string, unknown>,\n\tposition: number,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tconst choiceIndex = choiceIndexFor(choice, position, options);\n\treturn finishReasonChunks(choice.finish_reason, choiceIndex, options);\n}\n\nfunction responseToolCallChunks(value: unknown, choiceIndex: number | undefined): RawChunk[] {\n\tif (!Array.isArray(value)) return [];\n\tconst chunks: RawChunk[] = [];\n\n\tfor (let position = 0; position < value.length; position += 1) {\n\t\tconst toolCall = value[position];\n\t\tif (!isRecord(toolCall)) continue;\n\t\tconst fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n\t\tconst id = asString(toolCall.id);\n\t\tconst name = asString(fn?.name) ?? \"unknown\";\n\t\tconst args = asString(fn?.arguments) ?? \"\";\n\t\tconst index = asNumber(toolCall.index) ?? position;\n\n\t\tchunks.push(toolStartChunk({ id, name, index, choiceIndex }));\n\t\tif (args.length > 0) chunks.push(toolArgsChunk({ id, delta: args, index, choiceIndex }));\n\t\tchunks.push(toolDoneChunk({ id, index, choiceIndex }));\n\t}\n\n\treturn chunks;\n}\n\nfunction responseLegacyFunctionChunks(\n\tvalue: unknown,\n\tchoiceIndex: number | undefined,\n\tchoicePosition: number,\n\toptions: RequiredOpenAIChatLikeParserOptions,\n): RawChunk[] {\n\tif (!isRecord(value)) return [];\n\tconst name = asString(value.name) ?? \"unknown\";\n\tconst args = asString(value.arguments) ?? \"\";\n\tconst id = `${options.legacyFunctionIdPrefix}:${choiceIndex ?? choicePosition}`;\n\tconst chunks: RawChunk[] = [\n\t\twithChoiceIndex({ kind: \"tool-start\", id, name, index: 0 }, choiceIndex),\n\t];\n\tif (args.length > 0) {\n\t\tchunks.push(\n\t\t\twithChoiceIndex({ kind: \"tool-args-delta\", id, delta: args, index: 0 }, choiceIndex),\n\t\t);\n\t}\n\tchunks.push(withChoiceIndex({ kind: \"tool-done\", id, index: 0 }, choiceIndex));\n\treturn chunks;\n}\n","export interface OpenAIChatLikeParserOptions {\n\tjsonMode?: boolean;\n\tlegacyFunctionIdPrefix?: string;\n\terrorPrefix: \"openaiChatAdapter\" | \"openaiCompatibleAdapter\";\n\tlooseErrorShape?: boolean;\n\tallowMissingMetadata?: boolean;\n\tuseChoicePositionFallback?: boolean;\n\treasoningFieldAliases?: string[];\n\tusageInputTokenFields?: string[];\n\tusageOutputTokenFields?: string[];\n\trejectUnrecognizedPayloads?: boolean;\n\t/** @deprecated Dual-emit legacy metadata.raw citation blobs alongside typed events. */\n\temitLegacyCitationMetadata?: boolean;\n}\n\nexport interface RequiredOpenAIChatLikeParserOptions {\n\tjsonMode: boolean;\n\tlegacyFunctionIdPrefix: string;\n\terrorPrefix: \"openaiChatAdapter\" | \"openaiCompatibleAdapter\";\n\tlooseErrorShape: boolean;\n\tallowMissingMetadata: boolean;\n\tuseChoicePositionFallback: boolean;\n\treasoningFieldAliases: string[];\n\tusageInputTokenFields: string[];\n\tusageOutputTokenFields: string[];\n\trejectUnrecognizedPayloads: boolean;\n\temitLegacyCitationMetadata: boolean;\n}\n\nexport function normalizeOptions(\n\toptions: OpenAIChatLikeParserOptions,\n): RequiredOpenAIChatLikeParserOptions {\n\treturn {\n\t\tjsonMode: options.jsonMode ?? false,\n\t\tlegacyFunctionIdPrefix: options.legacyFunctionIdPrefix ?? \"legacy_function\",\n\t\terrorPrefix: options.errorPrefix,\n\t\tlooseErrorShape: options.looseErrorShape ?? false,\n\t\tallowMissingMetadata: options.allowMissingMetadata ?? false,\n\t\tuseChoicePositionFallback: options.useChoicePositionFallback ?? true,\n\t\treasoningFieldAliases: options.reasoningFieldAliases ?? [],\n\t\tusageInputTokenFields: options.usageInputTokenFields ?? [\"prompt_tokens\"],\n\t\tusageOutputTokenFields: options.usageOutputTokenFields ?? [\"completion_tokens\"],\n\t\trejectUnrecognizedPayloads: options.rejectUnrecognizedPayloads ?? false,\n\t\temitLegacyCitationMetadata: options.emitLegacyCitationMetadata ?? false,\n\t};\n}\n\nexport interface ToolState {\n\tid?: string;\n\tname: string;\n\tstartEmitted: boolean;\n\tsawArguments: boolean;\n}\n","import type { StreamAdapter } from \"../../../core/types\";\nimport { createStreamAdapter } from \"../../utils\";\nimport { OpenAIChatLikeParser } from \"./stream-parser\";\nimport { parseResponse } from \"./response\";\nimport { normalizeOptions, type OpenAIChatLikeParserOptions } from \"./types\";\n\nexport type { OpenAIChatLikeParserOptions } from \"./types\";\n\nexport function createOpenAIChatLikeAdapter(options: OpenAIChatLikeParserOptions): StreamAdapter {\n\tconst normalized = normalizeOptions(options);\n\tconst parser = new OpenAIChatLikeParser(normalized);\n\treturn createStreamAdapter({\n\t\tparser,\n\t\tparseResponse,\n\t\toptions: normalized,\n\t});\n}\n","import type { StreamAdapter } from \"../core/types\";\nimport { createOpenAIChatLikeAdapter } from \"./openai-chat/parser\";\n\nexport interface OpenAIChatAdapterOptions {\n\tjsonMode?: boolean;\n\tlegacyFunctionIdPrefix?: string;\n}\n\nexport function openaiChatAdapter(options: OpenAIChatAdapterOptions = {}): StreamAdapter {\n\treturn createOpenAIChatLikeAdapter({\n\t\t...options,\n\t\terrorPrefix: \"openaiChatAdapter\",\n\t\tlooseErrorShape: false,\n\t\tallowMissingMetadata: false,\n\t\tuseChoicePositionFallback: true,\n\t\tusageInputTokenFields: [\"prompt_tokens\"],\n\t\tusageOutputTokenFields: [\"completion_tokens\"],\n\t});\n}\n"]}
|