llm-stream-assemble 1.2.0 → 1.3.5
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 +256 -24
- package/dist/adapters/openai-compatible.cjs +79 -19
- package/dist/adapters/openai-compatible.cjs.map +1 -1
- package/dist/adapters/openai-compatible.d.cts +36 -2
- package/dist/adapters/openai-compatible.d.ts +36 -2
- package/dist/adapters/openai-compatible.js +68 -20
- package/dist/adapters/openai-compatible.js.map +1 -1
- package/dist/index.cjs +78 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +68 -20
- package/dist/index.js.map +1 -1
- package/package.json +12 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/adapters/errors.ts","../../src/adapters/utils.ts","../../src/adapters/openai-chat/parser/errors.ts","../../src/adapters/openai-chat/parser/chunks.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-compatible.ts"],"names":[],"mappings":";AAQO,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;;;AChCO,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,MAAA,CAAO,WAAA;AAAA,IACb,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAS;AAAA,GAChE;AACD;AAEO,SAAS,oBAAA,CAAqB,SAAiB,OAAA,EAAwB;AAC7E,EAAA,OAAO,kBAAA,CAAmB,SAAS,OAAO,CAAA;AAC3C;AAEO,SAAS,oBAA8B,MAAA,EAI5B;AACjB,EAAA,OAAO;AAAA,IACN,WAAW,GAAA,EAAK;AACf,MAAA,OAAO,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,cAAc,IAAA,EAAM;AACnB,MAAA,OAAO,MAAA,CAAO,aAAA,CAAc,IAAA,EAAM,MAAA,CAAO,OAAO,CAAA;AAAA,IACjD;AAAA,GACD;AACD;AAEO,SAAS,gBAAA,CAAiB,KAAa,OAAA,EAA0B;AACvE,EAAA,IAAI;AACH,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACtB,SAAS,KAAA,EAAO;AACf,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,oBAAA,CAAqB,SAAS,OAAO,CAAA;AAAA,EAC5C;AACD;;;AC3CO,SAAS,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;;;ACpDO,SAAS,eAAe,OAAA,EAA8C;AAC5E,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,QAAA,GAAoD,EAAE,IAAA,EAAM,UAAA,EAAY,KAAK,OAAA,EAAQ;AAC3F,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,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;;;AC1KO,IAAM,uBAAN,MAA2B;AAAA,EAKjC,YAA6B,OAAA,EAA8C;AAA9C,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAA+C;AAAA,EAA/C,OAAA;AAAA,EAJrB,eAAA,GAAkB,KAAA;AAAA,EACT,KAAA,uBAAY,GAAA,EAAuB;AAAA,EACnC,aAAA,uBAAoB,GAAA,EAAY;AAAA,EAIjD,WAAW,GAAA,EAAyB;AACnC,IAAA,IAAI,GAAA,CAAI,IAAA,EAAK,KAAM,QAAA,SAAiB,EAAC;AAErC,IAAA,MAAM,UAAU,gBAAA,CAAiB,GAAA,EAAK,GAAG,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA,WAAA,CAAa,CAAA;AAC9E,IAAA,IAAI,CAAC,QAAA,CAAS,OAAO,CAAA,EAAG;AACvB,MAAA,uBAAA,CAAwB,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA,WAAA,CAAa,CAAA;AAAA,IACjE;AAEA,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,IAAI,CAAC,IAAA,CAAK,eAAA,IAAmB,WAAA,CAAY,OAAO,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,cAAA,CAAe,OAAO,CAAC,CAAA;AACtC,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACxB;AAEA,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,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;;;AC5LO,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,MAAA,CAAO,IAAA,CAAK,GAAG,cAAA,CAAe,IAAI,CAAC,CAAA;AAEnC,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,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;;;ACpHO,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;AAAA,GACnE;AACD;;;ACjCO,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;;;ACqBA,IAAM,cAAA,GAAiB;AAAA,EACtB,eAAA,EAAiB,IAAA;AAAA,EACjB,oBAAA,EAAsB,IAAA;AAAA,EACtB,yBAAA,EAA2B,IAAA;AAAA,EAC3B,qBAAA,EAAuB,CAAC,UAAA,EAAY,kBAAkB;AACvD,CAAA;AAEA,IAAM,gBAAA,GAA+E;AAAA,EACpF,UAAU,EAAE,qBAAA,EAAuB,CAAC,mBAAA,EAAqB,WAAA,EAAa,UAAU,CAAA,EAAE;AAAA,EAClF,UAAA,EAAY,EAAE,qBAAA,EAAuB,CAAC,WAAW,CAAA,EAAE;AAAA,EACnD,UAAU,EAAE,qBAAA,EAAuB,CAAC,WAAA,EAAa,iBAAiB,CAAA,EAAE;AAAA,EACpE,KAAA,EAAO;AAAA,IACN,eAAA,EAAiB,KAAA;AAAA,IACjB,oBAAA,EAAsB,KAAA;AAAA,IACtB,yBAAA,EAA2B,IAAA;AAAA,IAC3B,uBAAuB;AAAC;AAE1B,CAAA;AAEO,SAAS,uBAAA,CACf,OAAA,GAA0C,EAAC,EAC3B;AAChB,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,OAAA,CAAQ,QAAA,IAAY,SAAS,CAAA;AAC3D,EAAA,MAAM,4BAAA,GACL,OAAA,CAAQ,oBAAA,IACR,MAAA,CAAO,wBACP,cAAA,CAAe,oBAAA;AAChB,EAAA,MAAM,uBAAA,GACL,OAAA,CAAQ,eAAA,IAAmB,MAAA,CAAO,mBAAmB,cAAA,CAAe,eAAA;AACrE,EAAA,MAAM,iCAAA,GACL,OAAA,CAAQ,yBAAA,IACR,MAAA,CAAO,6BACP,cAAA,CAAe,yBAAA;AAEhB,EAAA,OAAO,2BAAA,CAA4B;AAAA,IAClC,GAAG,OAAA;AAAA,IACH,eAAA,EAAiB,uBAAA;AAAA,IACjB,oBAAA,EAAsB,4BAAA;AAAA,IACtB,yBAAA,EAA2B,iCAAA;AAAA,IAC3B,WAAA,EAAa,yBAAA;AAAA,IACb,qBAAA,EAAuB,CAAC,eAAA,EAAiB,cAAc,CAAA;AAAA,IACvD,sBAAA,EAAwB,CAAC,mBAAA,EAAqB,eAAe,CAAA;AAAA,IAC7D,4BAA4B,4BAAA,KAAiC,KAAA;AAAA,IAC7D,qBAAA,EAAuB;AAAA,MACtB,GAAI,MAAA,CAAO,qBAAA,IAAyB,EAAC;AAAA,MACrC,GAAI,OAAA,CAAQ,qBAAA,IAAyB;AAAC;AACvC,GACA,CAAA;AACF;AAEA,SAAS,eAAe,QAAA,EAAqD;AAC5E,EAAA,OAAO;AAAA,IACN,GAAG,cAAA;AAAA,IACH,GAAG,iBAAiB,QAAQ;AAAA,GAC7B;AACD","file":"openai-compatible.js","sourcesContent":["/** 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 { 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 Object.fromEntries(\n\t\tObject.entries(input).filter(([, value]) => value !== undefined),\n\t) 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 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 { FinishReason, RawChunk } from \"../../../core/types\";\nimport { asNumber, asString, isRecord, optionalRawChunk } from \"../../utils\";\nimport { adapterScopedError } from \"../../errors\";\nimport type { RequiredOpenAIChatLikeParserOptions } from \"./types\";\n\nexport function metadataChunks(payload: Record<string, unknown>): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tconst id = asString(payload.id);\n\tif (id) chunks.push({ kind: \"message-start\", id });\n\n\tconst metadata: Extract<RawChunk, { kind: \"metadata\" }> = { kind: \"metadata\", raw: payload };\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 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, parseAdapterJSON } from \"../../utils\";\nimport {\n\topenAIProviderErrorChunks,\n\tproviderErrorPayload,\n\tthrowAdapterObjectError,\n\tthrowUnrecognizedChunkError,\n} from \"./errors\";\nimport {\n\tchoiceIndexFor,\n\tchoiceKey,\n\tfinishReasonChunks,\n\thasMetadata,\n\tmetadataChunks,\n\treasoningChunks,\n\ttoolArgsChunk,\n\ttoolKey,\n\ttoolStartChunk,\n\tusageChunk,\n\twithChoiceIndex,\n} from \"./chunks\";\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\n\tconstructor(private readonly options: RequiredOpenAIChatLikeParserOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tif (raw.trim() === \"[DONE]\") return [];\n\n\t\tconst payload = parseAdapterJSON(raw, `${this.options.errorPrefix}.parseChunk`);\n\t\tif (!isRecord(payload)) {\n\t\t\tthrowAdapterObjectError(`${this.options.errorPrefix}.parseChunk`);\n\t\t}\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\tif (!this.metadataEmitted && hasMetadata(payload)) {\n\t\t\tchunks.push(...metadataChunks(payload));\n\t\t\tthis.metadataEmitted = true;\n\t\t}\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\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\tfinishReasonChunks,\n\tisRecognizableResponse,\n\tmetadataChunks,\n\treasoningChunks,\n\ttoolArgsChunk,\n\ttoolDoneChunk,\n\ttoolStartChunk,\n\tusageChunk,\n\twithChoiceIndex,\n} from \"./chunks\";\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\tchunks.push(...metadataChunks(body));\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\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}\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}\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};\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 type OpenAICompatibleProvider =\n\t| \"generic\"\n\t| \"openrouter\"\n\t| \"groq\"\n\t| \"deepseek\"\n\t| \"mistral\"\n\t| \"ollama\"\n\t| \"lmstudio\"\n\t| \"together\"\n\t| \"fireworks\"\n\t| \"perplexity\"\n\t| \"xai\"\n\t| \"azure\";\n\nexport interface OpenAICompatibleAdapterOptions {\n\tprovider?: OpenAICompatibleProvider;\n\tjsonMode?: boolean;\n\tlegacyFunctionIdPrefix?: string;\n\tlooseErrorShape?: boolean;\n\tallowMissingMetadata?: boolean;\n\tuseChoicePositionFallback?: boolean;\n\treasoningFieldAliases?: string[];\n}\n\ntype PresetOverrides = Partial<\n\tPick<\n\t\tOpenAICompatibleAdapterOptions,\n\t\t| \"reasoningFieldAliases\"\n\t\t| \"looseErrorShape\"\n\t\t| \"allowMissingMetadata\"\n\t\t| \"useChoicePositionFallback\"\n\t>\n>;\n\nconst DEFAULT_PRESET = {\n\tlooseErrorShape: true,\n\tallowMissingMetadata: true,\n\tuseChoicePositionFallback: true,\n\treasoningFieldAliases: [\"thinking\", \"thinking_content\"],\n} as const satisfies PresetOverrides;\n\nconst PRESET_OVERRIDES: Partial<Record<OpenAICompatibleProvider, PresetOverrides>> = {\n\tdeepseek: { reasoningFieldAliases: [\"reasoning_content\", \"reasoning\", \"thinking\"] },\n\topenrouter: { reasoningFieldAliases: [\"reasoning\"] },\n\ttogether: { reasoningFieldAliases: [\"reasoning\", \"reasoning_delta\"] },\n\tazure: {\n\t\tlooseErrorShape: false,\n\t\tallowMissingMetadata: false,\n\t\tuseChoicePositionFallback: true,\n\t\treasoningFieldAliases: [],\n\t},\n};\n\nexport function openaiCompatibleAdapter(\n\toptions: OpenAICompatibleAdapterOptions = {},\n): StreamAdapter {\n\tconst preset = providerPreset(options.provider ?? \"generic\");\n\tconst resolvedAllowMissingMetadata =\n\t\toptions.allowMissingMetadata ??\n\t\tpreset.allowMissingMetadata ??\n\t\tDEFAULT_PRESET.allowMissingMetadata;\n\tconst resolvedLooseErrorShape =\n\t\toptions.looseErrorShape ?? preset.looseErrorShape ?? DEFAULT_PRESET.looseErrorShape;\n\tconst resolvedUseChoicePositionFallback =\n\t\toptions.useChoicePositionFallback ??\n\t\tpreset.useChoicePositionFallback ??\n\t\tDEFAULT_PRESET.useChoicePositionFallback;\n\n\treturn createOpenAIChatLikeAdapter({\n\t\t...options,\n\t\tlooseErrorShape: resolvedLooseErrorShape,\n\t\tallowMissingMetadata: resolvedAllowMissingMetadata,\n\t\tuseChoicePositionFallback: resolvedUseChoicePositionFallback,\n\t\terrorPrefix: \"openaiCompatibleAdapter\",\n\t\tusageInputTokenFields: [\"prompt_tokens\", \"input_tokens\"],\n\t\tusageOutputTokenFields: [\"completion_tokens\", \"output_tokens\"],\n\t\trejectUnrecognizedPayloads: resolvedAllowMissingMetadata === false,\n\t\treasoningFieldAliases: [\n\t\t\t...(preset.reasoningFieldAliases ?? []),\n\t\t\t...(options.reasoningFieldAliases ?? []),\n\t\t],\n\t});\n}\n\nfunction providerPreset(provider: OpenAICompatibleProvider): PresetOverrides {\n\treturn {\n\t\t...DEFAULT_PRESET,\n\t\t...PRESET_OVERRIDES[provider],\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/adapters/errors.ts","../../src/adapters/utils.ts","../../src/adapters/openai-chat/parser/errors.ts","../../src/adapters/openai-chat/parser/chunks.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-compatible-presets.ts","../../src/adapters/openai-compatible-resolve.ts","../../src/adapters/openai-compatible.ts"],"names":[],"mappings":";AAQO,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;;;AChCO,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,MAAA,CAAO,WAAA;AAAA,IACb,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAS;AAAA,GAChE;AACD;AAEO,SAAS,oBAAA,CAAqB,SAAiB,OAAA,EAAwB;AAC7E,EAAA,OAAO,kBAAA,CAAmB,SAAS,OAAO,CAAA;AAC3C;AAEO,SAAS,oBAA8B,MAAA,EAI5B;AACjB,EAAA,OAAO;AAAA,IACN,WAAW,GAAA,EAAK;AACf,MAAA,OAAO,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,cAAc,IAAA,EAAM;AACnB,MAAA,OAAO,MAAA,CAAO,aAAA,CAAc,IAAA,EAAM,MAAA,CAAO,OAAO,CAAA;AAAA,IACjD;AAAA,GACD;AACD;AAEO,SAAS,gBAAA,CAAiB,KAAa,OAAA,EAA0B;AACvE,EAAA,IAAI;AACH,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACtB,SAAS,KAAA,EAAO;AACf,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,oBAAA,CAAqB,SAAS,OAAO,CAAA;AAAA,EAC5C;AACD;;;AC3CO,SAAS,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;;;ACpDO,SAAS,eAAe,OAAA,EAA8C;AAC5E,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,QAAA,GAAoD,EAAE,IAAA,EAAM,UAAA,EAAY,KAAK,OAAA,EAAQ;AAC3F,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,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;;;AC1KO,IAAM,uBAAN,MAA2B;AAAA,EAKjC,YAA6B,OAAA,EAA8C;AAA9C,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAA+C;AAAA,EAA/C,OAAA;AAAA,EAJrB,eAAA,GAAkB,KAAA;AAAA,EACT,KAAA,uBAAY,GAAA,EAAuB;AAAA,EACnC,aAAA,uBAAoB,GAAA,EAAY;AAAA,EAIjD,WAAW,GAAA,EAAyB;AACnC,IAAA,IAAI,GAAA,CAAI,IAAA,EAAK,KAAM,QAAA,SAAiB,EAAC;AAErC,IAAA,MAAM,UAAU,gBAAA,CAAiB,GAAA,EAAK,GAAG,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA,WAAA,CAAa,CAAA;AAC9E,IAAA,IAAI,CAAC,QAAA,CAAS,OAAO,CAAA,EAAG;AACvB,MAAA,uBAAA,CAAwB,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA,WAAA,CAAa,CAAA;AAAA,IACjE;AAEA,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,IAAI,CAAC,IAAA,CAAK,eAAA,IAAmB,WAAA,CAAY,OAAO,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,cAAA,CAAe,OAAO,CAAC,CAAA;AACtC,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACxB;AAEA,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,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;;;AC5LO,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,MAAA,CAAO,IAAA,CAAK,GAAG,cAAA,CAAe,IAAI,CAAC,CAAA;AAEnC,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,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;;;ACpHO,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;AAAA,GACnE;AACD;;;ACjCO,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;;;AChBO,IAAM,2BAAA,GAA8B;AAAA,EAC1C,SAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA;AACD;AAMO,IAAM,0BAA0B,2BAAA,CAA4B,MAAA;AAAA,EAClE,CAAC,MAAiC,CAAA,KAAM;AACzC;AAGO,IAAM,yBAAA,GAA4B;AAAA,EACxC;AACD;AAEO,SAAS,yBAAyB,QAAA,EAA6C;AACrF,EAAA,OAAQ,yBAAA,CAAgD,SAAS,QAAQ,CAAA;AAC1E;AAEO,IAAM,qBAAqB,uBAAA,CAAwB,MAAA;AAAA,EACzD,CAAC,CAAA,KAAM,CAAC,wBAAA,CAAyB,CAAC;AACnC;AASO,IAAM,cAAA,GAAiB;AAAA,EAC7B,eAAA,EAAiB,IAAA;AAAA,EACjB,oBAAA,EAAsB,IAAA;AAAA,EACtB,yBAAA,EAA2B,IAAA;AAAA,EAC3B,qBAAA,EAAuB,CAAC,UAAA,EAAY,kBAAkB;AACvD;AAEO,IAAM,gBAAA,GAA+E;AAAA,EAC3F,UAAU,EAAE,qBAAA,EAAuB,CAAC,mBAAA,EAAqB,WAAA,EAAa,UAAU,CAAA,EAAE;AAAA,EAClF,UAAA,EAAY,EAAE,qBAAA,EAAuB,CAAC,WAAW,CAAA,EAAE;AAAA,EACnD,UAAU,EAAE,qBAAA,EAAuB,CAAC,WAAA,EAAa,iBAAiB,CAAA,EAAE;AAAA,EACpE,KAAA,EAAO;AAAA,IACN,eAAA,EAAiB,KAAA;AAAA,IACjB,oBAAA,EAAsB,KAAA;AAAA,IACtB,yBAAA,EAA2B,IAAA;AAAA,IAC3B,uBAAuB;AAAC;AAE1B;AAEO,IAAM,oBAAA,GAAuB,MAAA,CAAO,IAAA,CAAK,gBAAgB;AAEzD,SAAS,kBAAkB,QAAA,EAA6C;AAC9E,EAAA,OAAO,QAAA,IAAY,gBAAA;AACpB;AAEO,SAAS,eAAe,QAAA,EAAqD;AACnF,EAAA,OAAO;AAAA,IACN,GAAG,cAAA;AAAA,IACH,GAAG,iBAAiB,QAAQ;AAAA,GAC7B;AACD;;;AClDO,SAAS,8BAAA,CACf,OAAA,GAA0C,EAAC,EACT;AAClC,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,OAAA,CAAQ,QAAA,IAAY,SAAS,CAAA;AAC3D,EAAA,MAAM,oBAAA,GACL,OAAA,CAAQ,oBAAA,IACR,MAAA,CAAO,wBACP,cAAA,CAAe,oBAAA;AAChB,EAAA,MAAM,eAAA,GACL,OAAA,CAAQ,eAAA,IAAmB,MAAA,CAAO,mBAAmB,cAAA,CAAe,eAAA;AACrE,EAAA,MAAM,yBAAA,GACL,OAAA,CAAQ,yBAAA,IACR,MAAA,CAAO,6BACP,cAAA,CAAe,yBAAA;AAEhB,EAAA,OAAO;AAAA,IACN,eAAA;AAAA,IACA,oBAAA;AAAA,IACA,yBAAA;AAAA,IACA,4BAA4B,oBAAA,KAAyB,KAAA;AAAA,IACrD,qBAAA,EAAuB;AAAA,MACtB,GAAI,MAAA,CAAO,qBAAA,IAAyB,EAAC;AAAA,MACrC,GAAI,OAAA,CAAQ,qBAAA,IAAyB;AAAC;AACvC,GACD;AACD;AAEO,SAAS,wBAAwB,QAAA,EAAwD;AAC/F,EAAA,OAAO,QAAA,IAAY,SAAA;AACpB;;;AC1BO,SAAS,uBAAA,CACf,OAAA,GAA0C,EAAC,EAC3B;AAChB,EAAA,MAAM,QAAA,GAAW,+BAA+B,OAAO,CAAA;AAEvD,EAAA,OAAO,2BAAA,CAA4B;AAAA,IAClC,GAAG,OAAA;AAAA,IACH,iBAAiB,QAAA,CAAS,eAAA;AAAA,IAC1B,sBAAsB,QAAA,CAAS,oBAAA;AAAA,IAC/B,2BAA2B,QAAA,CAAS,yBAAA;AAAA,IACpC,WAAA,EAAa,yBAAA;AAAA,IACb,qBAAA,EAAuB,CAAC,eAAA,EAAiB,cAAc,CAAA;AAAA,IACvD,sBAAA,EAAwB,CAAC,mBAAA,EAAqB,eAAe,CAAA;AAAA,IAC7D,4BAA4B,QAAA,CAAS,0BAAA;AAAA,IACrC,uBAAuB,QAAA,CAAS;AAAA,GAChC,CAAA;AACF","file":"openai-compatible.js","sourcesContent":["/** 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 { 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 Object.fromEntries(\n\t\tObject.entries(input).filter(([, value]) => value !== undefined),\n\t) 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 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 { FinishReason, RawChunk } from \"../../../core/types\";\nimport { asNumber, asString, isRecord, optionalRawChunk } from \"../../utils\";\nimport { adapterScopedError } from \"../../errors\";\nimport type { RequiredOpenAIChatLikeParserOptions } from \"./types\";\n\nexport function metadataChunks(payload: Record<string, unknown>): RawChunk[] {\n\tconst chunks: RawChunk[] = [];\n\tconst id = asString(payload.id);\n\tif (id) chunks.push({ kind: \"message-start\", id });\n\n\tconst metadata: Extract<RawChunk, { kind: \"metadata\" }> = { kind: \"metadata\", raw: payload };\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 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, parseAdapterJSON } from \"../../utils\";\nimport {\n\topenAIProviderErrorChunks,\n\tproviderErrorPayload,\n\tthrowAdapterObjectError,\n\tthrowUnrecognizedChunkError,\n} from \"./errors\";\nimport {\n\tchoiceIndexFor,\n\tchoiceKey,\n\tfinishReasonChunks,\n\thasMetadata,\n\tmetadataChunks,\n\treasoningChunks,\n\ttoolArgsChunk,\n\ttoolKey,\n\ttoolStartChunk,\n\tusageChunk,\n\twithChoiceIndex,\n} from \"./chunks\";\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\n\tconstructor(private readonly options: RequiredOpenAIChatLikeParserOptions) {}\n\n\tparseChunk(raw: string): RawChunk[] {\n\t\tif (raw.trim() === \"[DONE]\") return [];\n\n\t\tconst payload = parseAdapterJSON(raw, `${this.options.errorPrefix}.parseChunk`);\n\t\tif (!isRecord(payload)) {\n\t\t\tthrowAdapterObjectError(`${this.options.errorPrefix}.parseChunk`);\n\t\t}\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\tif (!this.metadataEmitted && hasMetadata(payload)) {\n\t\t\tchunks.push(...metadataChunks(payload));\n\t\t\tthis.metadataEmitted = true;\n\t\t}\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\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\tfinishReasonChunks,\n\tisRecognizableResponse,\n\tmetadataChunks,\n\treasoningChunks,\n\ttoolArgsChunk,\n\ttoolDoneChunk,\n\ttoolStartChunk,\n\tusageChunk,\n\twithChoiceIndex,\n} from \"./chunks\";\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\tchunks.push(...metadataChunks(body));\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\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}\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}\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};\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","export const OPENAI_COMPATIBLE_PROVIDERS = [\n\t\"generic\",\n\t\"openrouter\",\n\t\"groq\",\n\t\"deepseek\",\n\t\"mistral\",\n\t\"ollama\",\n\t\"lmstudio\",\n\t\"together\",\n\t\"fireworks\",\n\t\"perplexity\",\n\t\"xai\",\n\t\"azure\",\n\t\"cloudflare\",\n] as const;\n\nexport type OpenAICompatibleProvider = (typeof OPENAI_COMPATIBLE_PROVIDERS)[number];\n\nexport type HostCompatiblePreset = Exclude<OpenAICompatibleProvider, \"generic\">;\n\nexport const HOST_COMPATIBLE_PRESETS = OPENAI_COMPATIBLE_PROVIDERS.filter(\n\t(p): p is HostCompatiblePreset => p !== \"generic\",\n);\n\n/** Presets with strict defaults (`allowMissingMetadata: false`, `looseErrorShape: false`). */\nexport const STRICT_COMPATIBLE_PRESETS = [\n\t\"azure\",\n] as const satisfies readonly OpenAICompatibleProvider[];\n\nexport function isStrictCompatiblePreset(provider: OpenAICompatibleProvider): boolean {\n\treturn (STRICT_COMPATIBLE_PRESETS as readonly string[]).includes(provider);\n}\n\nexport const LOOSE_HOST_PRESETS = HOST_COMPATIBLE_PRESETS.filter(\n\t(p) => !isStrictCompatiblePreset(p),\n);\n\nexport type PresetOverrides = Partial<{\n\treasoningFieldAliases: string[];\n\tlooseErrorShape: boolean;\n\tallowMissingMetadata: boolean;\n\tuseChoicePositionFallback: boolean;\n}>;\n\nexport const DEFAULT_PRESET = {\n\tlooseErrorShape: true,\n\tallowMissingMetadata: true,\n\tuseChoicePositionFallback: true,\n\treasoningFieldAliases: [\"thinking\", \"thinking_content\"],\n} as const satisfies PresetOverrides;\n\nexport const PRESET_OVERRIDES: Partial<Record<OpenAICompatibleProvider, PresetOverrides>> = {\n\tdeepseek: { reasoningFieldAliases: [\"reasoning_content\", \"reasoning\", \"thinking\"] },\n\topenrouter: { reasoningFieldAliases: [\"reasoning\"] },\n\ttogether: { reasoningFieldAliases: [\"reasoning\", \"reasoning_delta\"] },\n\tazure: {\n\t\tlooseErrorShape: false,\n\t\tallowMissingMetadata: false,\n\t\tuseChoicePositionFallback: true,\n\t\treasoningFieldAliases: [],\n\t},\n};\n\nexport const PRESET_OVERRIDE_KEYS = Object.keys(PRESET_OVERRIDES) as HostCompatiblePreset[];\n\nexport function hasPresetOverride(provider: OpenAICompatibleProvider): boolean {\n\treturn provider in PRESET_OVERRIDES;\n}\n\nexport function providerPreset(provider: OpenAICompatibleProvider): PresetOverrides {\n\treturn {\n\t\t...DEFAULT_PRESET,\n\t\t...PRESET_OVERRIDES[provider],\n\t};\n}\n","import {\n\tDEFAULT_PRESET,\n\ttype OpenAICompatibleProvider,\n\tproviderPreset,\n} from \"./openai-compatible-presets\";\n\nexport interface OpenAICompatibleAdapterOptions {\n\tprovider?: OpenAICompatibleProvider;\n\tjsonMode?: boolean;\n\tlegacyFunctionIdPrefix?: string;\n\tlooseErrorShape?: boolean;\n\tallowMissingMetadata?: boolean;\n\tuseChoicePositionFallback?: boolean;\n\treasoningFieldAliases?: string[];\n}\n\nexport interface ResolvedCompatibleAdapterConfig {\n\tlooseErrorShape: boolean;\n\tallowMissingMetadata: boolean;\n\tuseChoicePositionFallback: boolean;\n\trejectUnrecognizedPayloads: boolean;\n\treasoningFieldAliases: string[];\n}\n\nexport function resolveCompatibleAdapterConfig(\n\toptions: OpenAICompatibleAdapterOptions = {},\n): ResolvedCompatibleAdapterConfig {\n\tconst preset = providerPreset(options.provider ?? \"generic\");\n\tconst allowMissingMetadata =\n\t\toptions.allowMissingMetadata ??\n\t\tpreset.allowMissingMetadata ??\n\t\tDEFAULT_PRESET.allowMissingMetadata;\n\tconst looseErrorShape =\n\t\toptions.looseErrorShape ?? preset.looseErrorShape ?? DEFAULT_PRESET.looseErrorShape;\n\tconst useChoicePositionFallback =\n\t\toptions.useChoicePositionFallback ??\n\t\tpreset.useChoicePositionFallback ??\n\t\tDEFAULT_PRESET.useChoicePositionFallback;\n\n\treturn {\n\t\tlooseErrorShape,\n\t\tallowMissingMetadata,\n\t\tuseChoicePositionFallback,\n\t\trejectUnrecognizedPayloads: allowMissingMetadata === false,\n\t\treasoningFieldAliases: [\n\t\t\t...(preset.reasoningFieldAliases ?? []),\n\t\t\t...(options.reasoningFieldAliases ?? []),\n\t\t],\n\t};\n}\n\nexport function compatibleProviderLabel(provider: OpenAICompatibleProvider | undefined): string {\n\treturn provider ?? \"generic\";\n}\n","import type { StreamAdapter } from \"../core/types\";\nimport { createOpenAIChatLikeAdapter } from \"./openai-chat/parser\";\nimport {\n\tresolveCompatibleAdapterConfig,\n\ttype OpenAICompatibleAdapterOptions,\n} from \"./openai-compatible-resolve\";\n\nexport type { OpenAICompatibleProvider } from \"./openai-compatible-presets\";\nexport {\n\tDEFAULT_PRESET,\n\tHOST_COMPATIBLE_PRESETS,\n\tLOOSE_HOST_PRESETS,\n\tOPENAI_COMPATIBLE_PROVIDERS,\n\tPRESET_OVERRIDE_KEYS,\n\tPRESET_OVERRIDES,\n\tSTRICT_COMPATIBLE_PRESETS,\n\thasPresetOverride,\n\tisStrictCompatiblePreset,\n\tproviderPreset,\n} from \"./openai-compatible-presets\";\nexport {\n\ttype OpenAICompatibleAdapterOptions,\n\ttype ResolvedCompatibleAdapterConfig,\n\tcompatibleProviderLabel,\n\tresolveCompatibleAdapterConfig,\n} from \"./openai-compatible-resolve\";\n\nexport function openaiCompatibleAdapter(\n\toptions: OpenAICompatibleAdapterOptions = {},\n): StreamAdapter {\n\tconst resolved = resolveCompatibleAdapterConfig(options);\n\n\treturn createOpenAIChatLikeAdapter({\n\t\t...options,\n\t\tlooseErrorShape: resolved.looseErrorShape,\n\t\tallowMissingMetadata: resolved.allowMissingMetadata,\n\t\tuseChoicePositionFallback: resolved.useChoicePositionFallback,\n\t\terrorPrefix: \"openaiCompatibleAdapter\",\n\t\tusageInputTokenFields: [\"prompt_tokens\", \"input_tokens\"],\n\t\tusageOutputTokenFields: [\"completion_tokens\", \"output_tokens\"],\n\t\trejectUnrecognizedPayloads: resolved.rejectUnrecognizedPayloads,\n\t\treasoningFieldAliases: resolved.reasoningFieldAliases,\n\t});\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1308,7 +1308,34 @@ function openaiChatAdapter(options = {}) {
|
|
|
1308
1308
|
});
|
|
1309
1309
|
}
|
|
1310
1310
|
|
|
1311
|
-
// src/adapters/openai-compatible.ts
|
|
1311
|
+
// src/adapters/openai-compatible-presets.ts
|
|
1312
|
+
var OPENAI_COMPATIBLE_PROVIDERS = [
|
|
1313
|
+
"generic",
|
|
1314
|
+
"openrouter",
|
|
1315
|
+
"groq",
|
|
1316
|
+
"deepseek",
|
|
1317
|
+
"mistral",
|
|
1318
|
+
"ollama",
|
|
1319
|
+
"lmstudio",
|
|
1320
|
+
"together",
|
|
1321
|
+
"fireworks",
|
|
1322
|
+
"perplexity",
|
|
1323
|
+
"xai",
|
|
1324
|
+
"azure",
|
|
1325
|
+
"cloudflare"
|
|
1326
|
+
];
|
|
1327
|
+
var HOST_COMPATIBLE_PRESETS = OPENAI_COMPATIBLE_PROVIDERS.filter(
|
|
1328
|
+
(p) => p !== "generic"
|
|
1329
|
+
);
|
|
1330
|
+
var STRICT_COMPATIBLE_PRESETS = [
|
|
1331
|
+
"azure"
|
|
1332
|
+
];
|
|
1333
|
+
function isStrictCompatiblePreset(provider) {
|
|
1334
|
+
return STRICT_COMPATIBLE_PRESETS.includes(provider);
|
|
1335
|
+
}
|
|
1336
|
+
var LOOSE_HOST_PRESETS = HOST_COMPATIBLE_PRESETS.filter(
|
|
1337
|
+
(p) => !isStrictCompatiblePreset(p)
|
|
1338
|
+
);
|
|
1312
1339
|
var DEFAULT_PRESET = {
|
|
1313
1340
|
looseErrorShape: true,
|
|
1314
1341
|
allowMissingMetadata: true,
|
|
@@ -1326,32 +1353,53 @@ var PRESET_OVERRIDES = {
|
|
|
1326
1353
|
reasoningFieldAliases: []
|
|
1327
1354
|
}
|
|
1328
1355
|
};
|
|
1329
|
-
|
|
1356
|
+
var PRESET_OVERRIDE_KEYS = Object.keys(PRESET_OVERRIDES);
|
|
1357
|
+
function hasPresetOverride(provider) {
|
|
1358
|
+
return provider in PRESET_OVERRIDES;
|
|
1359
|
+
}
|
|
1360
|
+
function providerPreset(provider) {
|
|
1361
|
+
return {
|
|
1362
|
+
...DEFAULT_PRESET,
|
|
1363
|
+
...PRESET_OVERRIDES[provider]
|
|
1364
|
+
};
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
// src/adapters/openai-compatible-resolve.ts
|
|
1368
|
+
function resolveCompatibleAdapterConfig(options = {}) {
|
|
1330
1369
|
const preset = providerPreset(options.provider ?? "generic");
|
|
1331
|
-
const
|
|
1332
|
-
const
|
|
1333
|
-
const
|
|
1370
|
+
const allowMissingMetadata = options.allowMissingMetadata ?? preset.allowMissingMetadata ?? DEFAULT_PRESET.allowMissingMetadata;
|
|
1371
|
+
const looseErrorShape = options.looseErrorShape ?? preset.looseErrorShape ?? DEFAULT_PRESET.looseErrorShape;
|
|
1372
|
+
const useChoicePositionFallback = options.useChoicePositionFallback ?? preset.useChoicePositionFallback ?? DEFAULT_PRESET.useChoicePositionFallback;
|
|
1373
|
+
return {
|
|
1374
|
+
looseErrorShape,
|
|
1375
|
+
allowMissingMetadata,
|
|
1376
|
+
useChoicePositionFallback,
|
|
1377
|
+
rejectUnrecognizedPayloads: allowMissingMetadata === false,
|
|
1378
|
+
reasoningFieldAliases: [
|
|
1379
|
+
...preset.reasoningFieldAliases ?? [],
|
|
1380
|
+
...options.reasoningFieldAliases ?? []
|
|
1381
|
+
]
|
|
1382
|
+
};
|
|
1383
|
+
}
|
|
1384
|
+
function compatibleProviderLabel(provider) {
|
|
1385
|
+
return provider ?? "generic";
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
// src/adapters/openai-compatible.ts
|
|
1389
|
+
function openaiCompatibleAdapter(options = {}) {
|
|
1390
|
+
const resolved = resolveCompatibleAdapterConfig(options);
|
|
1334
1391
|
return createOpenAIChatLikeAdapter({
|
|
1335
1392
|
...options,
|
|
1336
|
-
looseErrorShape:
|
|
1337
|
-
allowMissingMetadata:
|
|
1338
|
-
useChoicePositionFallback:
|
|
1393
|
+
looseErrorShape: resolved.looseErrorShape,
|
|
1394
|
+
allowMissingMetadata: resolved.allowMissingMetadata,
|
|
1395
|
+
useChoicePositionFallback: resolved.useChoicePositionFallback,
|
|
1339
1396
|
errorPrefix: "openaiCompatibleAdapter",
|
|
1340
1397
|
usageInputTokenFields: ["prompt_tokens", "input_tokens"],
|
|
1341
1398
|
usageOutputTokenFields: ["completion_tokens", "output_tokens"],
|
|
1342
|
-
rejectUnrecognizedPayloads:
|
|
1343
|
-
reasoningFieldAliases:
|
|
1344
|
-
...preset.reasoningFieldAliases ?? [],
|
|
1345
|
-
...options.reasoningFieldAliases ?? []
|
|
1346
|
-
]
|
|
1399
|
+
rejectUnrecognizedPayloads: resolved.rejectUnrecognizedPayloads,
|
|
1400
|
+
reasoningFieldAliases: resolved.reasoningFieldAliases
|
|
1347
1401
|
});
|
|
1348
1402
|
}
|
|
1349
|
-
function providerPreset(provider) {
|
|
1350
|
-
return {
|
|
1351
|
-
...DEFAULT_PRESET,
|
|
1352
|
-
...PRESET_OVERRIDES[provider]
|
|
1353
|
-
};
|
|
1354
|
-
}
|
|
1355
1403
|
|
|
1356
1404
|
// src/adapters/anthropic.ts
|
|
1357
1405
|
function anthropicAdapter(options = {}) {
|
|
@@ -2524,14 +2572,22 @@ function isError(event) {
|
|
|
2524
2572
|
return event.type === "error";
|
|
2525
2573
|
}
|
|
2526
2574
|
|
|
2575
|
+
exports.HOST_COMPATIBLE_PRESETS = HOST_COMPATIBLE_PRESETS;
|
|
2576
|
+
exports.LOOSE_HOST_PRESETS = LOOSE_HOST_PRESETS;
|
|
2577
|
+
exports.OPENAI_COMPATIBLE_PROVIDERS = OPENAI_COMPATIBLE_PROVIDERS;
|
|
2578
|
+
exports.PRESET_OVERRIDES = PRESET_OVERRIDES;
|
|
2579
|
+
exports.PRESET_OVERRIDE_KEYS = PRESET_OVERRIDE_KEYS;
|
|
2580
|
+
exports.STRICT_COMPATIBLE_PRESETS = STRICT_COMPATIBLE_PRESETS;
|
|
2527
2581
|
exports.anthropicAdapter = anthropicAdapter;
|
|
2528
2582
|
exports.assembleFromFile = assembleFromFile;
|
|
2529
2583
|
exports.assembleFromPayloads = assembleFromPayloads;
|
|
2530
2584
|
exports.assembleResponse = assembleResponse;
|
|
2531
2585
|
exports.assembleStream = assembleStream;
|
|
2532
2586
|
exports.collectStream = collectStream;
|
|
2587
|
+
exports.compatibleProviderLabel = compatibleProviderLabel;
|
|
2533
2588
|
exports.createAssemblyTransform = createAssemblyTransform;
|
|
2534
2589
|
exports.geminiAdapter = geminiAdapter;
|
|
2590
|
+
exports.hasPresetOverride = hasPresetOverride;
|
|
2535
2591
|
exports.isError = isError;
|
|
2536
2592
|
exports.isFinish = isFinish;
|
|
2537
2593
|
exports.isJsonDelta = isJsonDelta;
|
|
@@ -2542,6 +2598,7 @@ exports.isReasoningDelta = isReasoningDelta;
|
|
|
2542
2598
|
exports.isReasoningDone = isReasoningDone;
|
|
2543
2599
|
exports.isRefusalDelta = isRefusalDelta;
|
|
2544
2600
|
exports.isRefusalDone = isRefusalDone;
|
|
2601
|
+
exports.isStrictCompatiblePreset = isStrictCompatiblePreset;
|
|
2545
2602
|
exports.isTextDelta = isTextDelta;
|
|
2546
2603
|
exports.isTextDone = isTextDone;
|
|
2547
2604
|
exports.isToolCallArgsDelta = isToolCallArgsDelta;
|
|
@@ -2554,6 +2611,8 @@ exports.openaiCompatibleAdapter = openaiCompatibleAdapter;
|
|
|
2554
2611
|
exports.openaiResponsesAdapter = openaiResponsesAdapter;
|
|
2555
2612
|
exports.parsePartialJSON = parsePartialJSON;
|
|
2556
2613
|
exports.parseSSE = parseSSE;
|
|
2614
|
+
exports.providerPreset = providerPreset;
|
|
2615
|
+
exports.resolveCompatibleAdapterConfig = resolveCompatibleAdapterConfig;
|
|
2557
2616
|
exports.tapEvents = tapEvents;
|
|
2558
2617
|
exports.toSSE = toSSE;
|
|
2559
2618
|
//# sourceMappingURL=index.cjs.map
|