@nemesis-oss/ollama-sdk 1.9.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +68 -0
- package/README.md +242 -2
- package/dist/{anthropic-5oYIRS6D.d.ts → anthropic-CfricAhK.d.ts} +1 -1
- package/dist/{anthropic-BIh45UXj.d.cts → anthropic-DinrABof.d.cts} +1 -1
- package/dist/{compose-DCVYMvOL.d.ts → compose-BQYXdpar.d.ts} +1 -1
- package/dist/{compose-Dj6FdF2n.d.cts → compose-lt-Qz3lI.d.cts} +1 -1
- package/dist/generated-api.d.cts +5 -5
- package/dist/generated-api.d.ts +5 -5
- package/dist/generated-runtime.cjs.map +1 -1
- package/dist/generated-runtime.d.cts +2 -2
- package/dist/generated-runtime.d.ts +2 -2
- package/dist/generated-runtime.js.map +1 -1
- package/dist/index.cjs +787 -96
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +780 -97
- package/dist/index.d.ts +780 -97
- package/dist/index.js +771 -97
- package/dist/index.js.map +1 -1
- package/dist/mcp-generated.d.cts +2 -2
- package/dist/mcp-generated.d.ts +2 -2
- package/dist/{runtime-C3rfpkZw.d.ts → runtime-CCm4CtU_.d.ts} +29 -2
- package/dist/{runtime-D2W9TfCJ.d.cts → runtime-DTtWCxDs.d.cts} +29 -2
- package/dist/skills.cjs.map +1 -1
- package/dist/skills.d.cts +3 -3
- package/dist/skills.d.ts +3 -3
- package/dist/skills.js.map +1 -1
- package/dist/{types-DVcX_zMp.d.cts → types-BtQexFpT.d.cts} +5 -2
- package/dist/{types-DVcX_zMp.d.ts → types-BtQexFpT.d.ts} +5 -2
- package/package.json +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/utils.ts","../src/streaming/ndjson.ts","../src/streaming/sse.ts","../src/generated/models/IncludedBalance.schema.ts","../src/generated/models/LegacyBalanceLimit.schema.ts","../src/generated/models/LegacyIncludedBalance.schema.ts","../src/generated/models/BalanceResponse.schema.ts","../src/generated/models/ToolCall.schema.ts","../src/generated/models/ChatMessage.schema.ts","../src/generated/models/ModelOptions.schema.ts","../src/generated/models/ThinkValue.schema.ts","../src/generated/models/ToolDefinition.schema.ts","../src/generated/models/ChatRequest.schema.ts","../src/generated/models/TokenLogprob.schema.ts","../src/generated/models/Logprob.schema.ts","../src/generated/models/ChatResponse.schema.ts","../src/generated/models/CopyRequest.schema.ts","../src/generated/models/CreateRequest.schema.ts","../src/generated/models/DeleteRequest.schema.ts","../src/generated/models/EmbedRequest.schema.ts","../src/generated/models/EmbedResponse.schema.ts","../src/generated/models/GenerateRequest.schema.ts","../src/generated/models/GenerateResponse.schema.ts","../src/generated/models/ModelSummary.schema.ts","../src/generated/models/ListResponse.schema.ts","../src/generated/models/Ps.schema.ts","../src/generated/models/PsResponse.schema.ts","../src/generated/models/PullRequest.schema.ts","../src/generated/models/PushRequest.schema.ts","../src/generated/models/ShowRequest.schema.ts","../src/generated/models/Thinking.schema.ts","../src/generated/models/ShowResponse.schema.ts","../src/generated/models/StatusResponse.schema.ts","../src/generated/models/SystemOneContent.schema.ts","../src/generated/models/SystemOneChoiceQuestion.schema.ts","../src/generated/models/SystemOneNoulQuestion.schema.ts","../src/generated/models/SystemOneScoreQuestion.schema.ts","../src/generated/models/SystemOneRequest.schema.ts","../src/generated/models/SystemOneConfidence.schema.ts","../src/generated/models/SystemOneProbabilities.schema.ts","../src/generated/models/SystemOneChoiceAnswer.schema.ts","../src/generated/models/SystemOneNoulAnswer.schema.ts","../src/generated/models/SystemOneScoreAnswer.schema.ts","../src/generated/models/SystemOneResponse.schema.ts","../src/generated/models/UsageMetrics.schema.ts","../src/generated/models/UsageBucket.schema.ts","../src/generated/models/UsageResponse.schema.ts","../src/generated/models/VersionResponse.schema.ts","../src/generated/models/WebFetchRequest.schema.ts","../src/generated/models/WebFetchResponse.schema.ts","../src/generated/models/WebSearchRequest.schema.ts","../src/generated/models/WebSearchResult.schema.ts","../src/generated/models/WebSearchResponse.schema.ts","../src/generated/runtime/schema-registry.ts","../src/generated/runtime/runtime.ts"],"names":["z"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BO,IAAM,iBAAA,GAAN,cAAgC,KAAA,CAAM;AAAA,EAClC,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EAET,WAAA,CAAY,SAAiB,OAAA,EAAmC;AAC9D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAC7B,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,SAAA,IAAa,KAAA;AACtC,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAA;AACvB,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AAAA,EAC1B;AACF,CAAA;AAkKO,IAAM,iBAAA,GAAN,cAAgC,iBAAA,CAAkB;AAAA;AAAA,EAE9C,cAAA;AAAA,EACT,WAAA,CACE,SACA,OAAA,EAGA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,MAAM,cAAA,EAAgB,SAAA,EAAW,OAAO,CAAA;AACrE,IAAA,IAAA,CAAK,cAAA,GAAiB,SAAS,cAAA,IAAkB,EAAA;AAAA,EACnD;AACF,CAAA;AAgCO,IAAM,4BAAA,GAAN,cAA2C,iBAAA,CAAkB;AAAA,EACzD,WAAA;AAAA,EACA,MAAA;AAAA,EACT,WAAA,CACE,SACA,OAAA,EAIA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,MAAM,0BAAA,EAA4B,SAAA,EAAW,OAAO,CAAA;AACjF,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AAAA,EACxB;AACF,CAAA;AAYO,IAAM,0BAAA,GAAN,cAAyC,iBAAA,CAAkB;AAAA,EACvD,WAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACT,WAAA,CACE,SACA,OAAA,EAKA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,qBAAqB,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,GAAA,EAAK,CAAA;AACvF,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AAAA,EAC1B;AACF,CAAA;AAaO,IAAM,6BAAA,GAAN,cAA4C,iBAAA,CAAkB;AAAA,EAC1D,WAAA;AAAA,EACA,MAAA;AAAA,EACT,WAAA,CACE,SACA,OAAA,EAIA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,MAAM,2BAAA,EAA6B,SAAA,EAAW,OAAO,CAAA;AAClF,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AAAA,EACxB;AACF,CAAA;AAUO,IAAM,+BAAA,GAAN,cAA8C,iBAAA,CAAkB;AAAA,EAC5D,WAAA;AAAA,EACA,kBAAA;AAAA,EACT,WAAA,CACE,SACA,OAAA,EAIA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,MAAM,wBAAA,EAA0B,SAAA,EAAW,OAAO,CAAA;AAC/E,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,qBAAqB,OAAA,CAAQ,kBAAA;AAAA,EACpC;AACF,CAAA;AA0KO,IAAM,wBAAA,GAAN,cAAuC,iBAAA,CAAkB;AAAA,EAC9D,WAAA,CAAY,SAAiB,OAAA,EAA8D;AACzF,IAAA,KAAA,CAAM,SAAS,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,gBAAgB,CAAA;AAAA,EACrD;AACF,CAAA;;;ACzaO,SAAS,iBAAoB,MAAA,EAAyD;AAC3F,EAAA,OAAO;AAAA,IACL,OAAO,MAAA,CAAO,YAAY,CAAA,GAAI;AAC5B,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,MAAA,EAAO;AAAA,MACtB,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACrB;AAAA,GACF;AACF;;;ACrDA,SAAS,mBAAmB,KAAA,EAA2C;AACrE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,IAAI,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,KAAA;AAG1E,EAAA,OACE,EAAE,OAAA,IAAW,MAAA,CAAA,IACb,EAAE,UAAA,IAAc,MAAA,CAAA,IAChB,EAAE,SAAA,IAAa,MAAA,CAAA,IACf,EAAE,QAAA,IAAY,MAAA,CAAA,IACd,EAAE,MAAA,IAAU,MAAA,CAAA;AAEhB;AAWA,gBAAuB,kBACrB,MAAA,EACoC;AAIpC,EAAA,IAAA,MAAA,GAAA,EAAA;AAAA,EAAA,IAAA;AAHA,IAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,MAAY,OAAA,GAAU,OAAA,CAAA,MAAA,EAAA,gBAAA,CAAiB,MAAM,CAAA,EAAvB,IAAA,CAAA;AAEtB,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AAEV,MAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAE/B,MAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,QAAA,IAAI,CAAC,OAAA,EAAS;AACd,QAAA,IAAI,IAAA;AACJ,QAAA,IAAI;AACF,UAAA,IAAA,GAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,QAC3B,SAAS,GAAA,EAAK;AACZ,UAAA,MAAM,IAAI,wBAAA,CAAyB,CAAA,mCAAA,EAAsC,OAAO,CAAA,CAAA,EAAI;AAAA,YAClF,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH;AAQA,QAAA,IAAI,kBAAA,CAAmB,IAAI,CAAA,EAAG;AAC5B,UAAA,MAAM,IAAI,iBAAA,CAAmB,IAAA,CAA0B,KAAK,CAAA;AAAA,QAC9D;AAEA,QAAA,MAAM,IAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,MAAK,EAAG;AACjB,MAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MAC3B,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,IAAI,wBAAA,CAAyB,CAAA,mCAAA,EAAsC,OAAO,CAAA,CAAA,EAAI;AAAA,UAClF,KAAA,EAAO;AAAA,SACR,CAAA;AAAA,MACH;AACA,MAAA,IAAI,kBAAA,CAAmB,IAAI,CAAA,EAAG;AAC5B,QAAA,MAAM,IAAI,iBAAA,CAAmB,IAAA,CAA0B,KAAK,CAAA;AAAA,MAC9D;AACA,MAAA,MAAM,IAAA;AAAA,IACR;AAAA,EAAA,CAAA,CAAA,OAnDA,CAAA,EAAA;AAAA,IAAA,IAAA,MAAA,GAAA,CAAA,EAAA,SAAA,GAAA,IAAA;AAAA,EAAA,CAAA,SAAA;AAAA,IAAA,IAAA,QAAA,GAAA,aAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA;AAAA,IAAA,QAAA,IAAA,MAAA,QAAA;AAAA,EAAA;AAqDF;;;AChHA,SAAS,QAAA,CACP,KAAA,EACA,IAAA,EACA,EAAA,EACA,KAAA,EACsB;AACtB,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAE9B,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AAC7B,EAAA,OAAO;AAAA,IACL,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,IACvC,IAAA,EAAM,OAAO,QAAA,CAAS,IAAI,IAAI,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,MAAA;AAAA,IACpD,GAAI,EAAA,KAAO,MAAA,GAAY,EAAE,EAAA,KAAO,EAAC;AAAA,IACjC,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU;AAAC,GACzC;AACF;AASA,gBAAuB,eACrB,MAAA,EAC2C;AAkD3C,EAAA,IAAA,MAAA,GAAA,EAAA;AAAA,EAAA,IAAA;AAjDA,IAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAEhC,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,OAAiB,EAAC;AACtB,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,KAAA;AAEJ,IAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAuC;AAC1D,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,SAAA,EAAW,IAAA,EAAM,aAAa,KAAK,CAAA;AAC1D,QAAA,SAAA,GAAY,KAAA,CAAA;AACZ,QAAA,IAAA,GAAO,EAAC;AACR,QAAA,KAAA,GAAQ,KAAA,CAAA;AACR,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,KAAA,CAAA;AAEjC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAClC,MAAA,MAAM,QAAQ,SAAA,KAAc,CAAA,CAAA,GAAK,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,SAAS,CAAA;AAC/D,MAAA,IAAI,QAAQ,SAAA,KAAc,CAAA,CAAA,GAAK,KAAK,IAAA,CAAK,KAAA,CAAM,YAAY,CAAC,CAAA;AAC5D,MAAA,IAAI,MAAM,UAAA,CAAW,GAAG,GAAG,KAAA,GAAQ,KAAA,CAAM,MAAM,CAAC,CAAA;AAEhD,MAAA,QAAQ,KAAA;AAAO,QACb,KAAK,OAAA;AACH,UAAA,SAAA,GAAY,KAAA;AACZ,UAAA;AAAA,QACF,KAAK,MAAA;AACH,UAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACf,UAAA;AAAA,QACF,KAAK,IAAA;AACH,UAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,IAAI,GAAG,WAAA,GAAc,KAAA;AACzC,UAAA;AAAA,QACF,KAAK,OAAA,EAAS;AACZ,UAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AACvB,YAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,YAAA,IAAI,MAAA,CAAO,aAAA,CAAc,MAAM,CAAA,EAAG,KAAA,GAAQ,MAAA;AAAA,UAC5C;AACA,UAAA;AAAA,QACF;AAAA,QACA;AACE,UAAA;AAAA;AAGJ,MAAA,OAAO,KAAA,CAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAY,OAAA,GAAU,OAAA,CAAA,MAAA,EAAA,gBAAA,CAAiB,MAAM,CAAA,EAAvB,IAAA,CAAA;AAEtB,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AAEV,MAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAEhD,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,MAAM,EAAA,GAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAC9B,QAAA,MAAM,EAAA,GAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAC9B,QAAA,IAAI,EAAA,KAAO,CAAA,CAAA,IAAM,EAAA,KAAO,CAAA,CAAA,EAAI;AAE5B,QAAA,IAAI,OAAO,CAAA,CAAA,IAAM,EAAA,KAAO,MAAM,EAAA,KAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAExD,QAAA,MAAM,OAAA,GAAU,EAAA,KAAO,CAAA,CAAA,GAAK,EAAA,GAAK,EAAA,KAAO,KAAK,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA;AACjE,QAAA,IAAI,eAAA,GAAkB,CAAA;AAEtB,QAAA,IAAI,MAAA,CAAO,OAAO,CAAA,KAAM,IAAA,IAAQ,OAAO,OAAA,GAAU,CAAC,MAAM,IAAA,EAAM;AAC5D,UAAA,eAAA,GAAkB,CAAA;AAAA,QACpB;AAEA,QAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA;AACpC,QAAA,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA;AAE/C,QAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAC9B,QAAA,IAAI,OAAO,MAAM,KAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,MAAA,IAAU,QAAQ,MAAA,EAAO;AACzB,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,MAAM,KAAA,GAAQ,YAAY,MAAM,CAAA;AAChC,MAAA,IAAI,OAAO,MAAM,KAAA;AAAA,IACnB;AAEA,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,SAAA,EAAW,IAAA,EAAM,aAAa,KAAK,CAAA;AAC7D,IAAA,IAAI,UAAU,MAAM,QAAA;AAAA,EAAA,CAAA,CAAA,OArCpB,CAAA,EAAA;AAAA,IAAA,IAAA,MAAA,GAAA,CAAA,EAAA,SAAA,GAAA,IAAA;AAAA,EAAA,CAAA,SAAA;AAAA,IAAA,IAAA,QAAA,GAAA,aAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA;AAAA,IAAA,QAAA,IAAA,MAAA,QAAA;AAAA,EAAA;AAuCF;ACjIO,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,aAAA,EAAeA,MAAE,MAAA,EAAO;AAAA,EACxB,MAAA,EAAQA,MAAE,MAAA,CAAO;AAAA,IACf,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,IACf,KAAA,EAAOA,MAAE,MAAA;AAAO,GACjB;AACH,CAAC,CAAA;ACPM,IAAM,wBAAA,GAA2BA,MAAE,MAAA,CAAO;AAAA,EAC/C,iBAAA,EAAmBA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA,EAC5C,SAAA,EAAWA,MAAE,MAAA;AACf,CAAC,CAAA;;;ACFM,IAAM,2BAAA,GAA8BA,MAAE,MAAA,CAAO;AAAA,EAClD,OAAA,EAAS,wBAAA;AAAA,EACT,MAAA,EAAQ;AACV,CAAC,CAAA;;;ACFM,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,UAAUA,KAAAA,CAAE,KAAA,CAAM,CAAC,qBAAA,EAAuB,2BAA2B,CAAC,CAAA;AAAA,EACtE,SAAA,EAAWA,MAAE,MAAA,CAAO;AAAA,IAClB,WAAA,EAAaA,MAAE,MAAA;AAAO,GACvB;AACH,CAAC,CAAA;ACPM,IAAM,cAAA,GAAiBA,MAAE,MAAA,CAAO;AAAA,EACrC,QAAA,EAAUA,MACP,MAAA,CAAO;AAAA,IACN,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,IACf,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACjC,WAAWA,KAAAA,CAAE,MAAA,CAAO,EAAE,EAAE,QAAA;AAAS,GAClC,EACA,QAAA;AACL,CAAC,CAAA;;;ACPM,IAAM,iBAAA,GAAoBA,MAAE,MAAA,CAAO;AAAA,EACxC,IAAA,EAAMA,MAAE,IAAA,CAAK,CAAC,UAAU,MAAA,EAAQ,WAAA,EAAa,MAAM,CAAC,CAAA;AAAA,EACpD,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,QAAQA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACrC,UAAA,EAAYA,KAAAA,CAAE,KAAA,CAAM,cAAc,EAAE,QAAA;AACtC,CAAC,CAAA;ACLM,IAAM,kBAAA,GAAqBA,MAC/B,MAAA,CAAO;AAAA,EACN,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,IAAA,EAAMA,KAAAA,CAAE,KAAA,CAAM,CAACA,MAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,CAAC,CAAC,EAAE,QAAA,EAAS;AAAA,EAC1D,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC,CAAA,CACA,QAAA,CAASA,KAAAA,CAAE,OAAA,EAAS,CAAA;ACXhB,IAAM,gBAAA,GAAmBA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,OAAA,EAAQ,EAAGA,KAAAA,CAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,IAAA,EAAM,CAAC,CAAA;ACDpE,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,IAAA,EAAMA,KAAAA,CAAE,IAAA,CAAK,CAAC,UAAU,CAAC,CAAA;AAAA,EACzB,QAAA,EAAUA,MAAE,MAAA,CAAO;AAAA,IACjB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,IACf,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACjC,UAAA,EAAYA,KAAAA,CAAE,MAAA,CAAO,EAAE;AAAA,GACxB;AACH,CAAC,CAAA;;;ACHM,IAAM,iBAAA,GAAoBA,MAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,QAAA,EAAUA,KAAAA,CAAE,KAAA,CAAM,iBAAiB,CAAA;AAAA,EACnC,KAAA,EAAOA,KAAAA,CAAE,KAAA,CAAM,oBAAoB,EAAE,QAAA,EAAS;AAAA,EAC9C,QAAQA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,KAAK,CAAC,MAAM,CAAC,CAAA,EAAGA,MAAE,MAAA,CAAO,EAAE,CAAC,CAAC,EAAE,QAAA,EAAS;AAAA,EAC3D,OAAA,EAAS,mBAAmB,QAAA,EAAS;AAAA,EACrC,MAAA,EAAQA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC7B,KAAA,EAAO,iBAAiB,QAAA,EAAS;AAAA,EACjC,UAAA,EAAYA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACvD,QAAA,EAAUA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,YAAA,EAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC3B,CAAC,CAAA;ACdM,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,OAAOA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA;AAC7B,CAAC,CAAA;;;ACHM,IAAM,aAAA,GAAgBA,MAAE,MAAA,CAAO;AAAA,EACpC,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,OAAOA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACpC,YAAA,EAAcA,KAAAA,CAAE,KAAA,CAAM,kBAAkB,EAAE,QAAA;AAC5C,CAAC,CAAA;;;ACLM,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,OAAA,EAASA,MACN,MAAA,CAAO;AAAA,IACN,MAAMA,KAAAA,CAAE,IAAA,CAAK,CAAC,WAAW,CAAC,EAAE,QAAA,EAAS;AAAA,IACrC,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC7B,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC9B,UAAA,EAAYA,KAAAA,CAAE,KAAA,CAAM,cAAc,EAAE,QAAA,EAAS;AAAA,IAC7C,QAAQA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA;AAAS,GACtC,EACA,QAAA,EAAS;AAAA,EACZ,IAAA,EAAMA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,cAAA,EAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,iBAAA,EAAmBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACvC,wBAAA,EAA0BA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9C,oBAAA,EAAsBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1C,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,QAAA,EAAUA,KAAAA,CAAE,KAAA,CAAM,aAAa,EAAE,QAAA;AACnC,CAAC,CAAA;ACxBM,IAAM,iBAAA,GAAoBA,MAAE,MAAA,CAAO;AAAA,EACxC,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,EACjB,WAAA,EAAaA,MAAE,MAAA;AACjB,CAAC,CAAA;ACFM,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EAC1C,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,KAAA,EAAOA,KAAAA,CAAE,MAAA,CAAO,EAAE,CAAA,CAAE,QAAA,CAASA,KAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EAClD,WAAA,EAAaA,KAAAA,CAAE,MAAA,CAAO,EAAE,CAAA,CAAE,QAAA,CAASA,KAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EACxD,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,MAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,CAAC,CAAC,EAAE,QAAA,EAAS;AAAA,EAC7D,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,YAAYA,KAAAA,CAAE,MAAA,CAAO,EAAE,EAAE,QAAA,EAAS;AAAA,EAClC,QAAA,EAAUA,KAAAA,CAAE,KAAA,CAAM,iBAAiB,EAAE,QAAA,EAAS;AAAA,EAC9C,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,cAAA,EAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,cAAcA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC3C,MAAA,EAAQA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACtB,CAAC,CAAA;AClBM,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EAC1C,KAAA,EAAOA,MAAE,MAAA;AACX,CAAC,CAAA;ACDM,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAOA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,EAChD,QAAA,EAAUA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,OAAA,EAAS,mBAAmB,QAAA;AAC9B,CAAC,CAAA;ACRM,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EAC1C,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,UAAA,EAAYA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAClD,cAAA,EAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,iBAAA,EAAmBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAChC,CAAC,CAAA;ACJM,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,QAAQA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACrC,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAM,CAACA,MAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,MAAA,CAAO,EAAE,CAAC,CAAC,EAAE,QAAA,EAAS;AAAA,EACrD,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,MAAA,EAAQA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC7B,KAAA,EAAO,iBAAiB,QAAA,EAAS;AAAA,EACjC,GAAA,EAAKA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC1B,UAAA,EAAYA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACvD,OAAA,EAAS,mBAAmB,QAAA,EAAS;AAAA,EACrC,QAAA,EAAUA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,YAAA,EAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC3B,CAAC,CAAA;ACfM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,IAAA,EAAMA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,cAAA,EAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,iBAAA,EAAmBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACvC,wBAAA,EAA0BA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9C,oBAAA,EAAsBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1C,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,QAAA,EAAUA,KAAAA,CAAE,KAAA,CAAM,aAAa,EAAE,QAAA;AACnC,CAAC,CAAA;ACfM,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,YAAA,EAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,OAAA,EAASA,MACN,MAAA,CAAO;AAAA,IACN,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC5B,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC5B,QAAA,EAAUA,KAAAA,CAAE,KAAA,CAAM,CAACA,MAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,EAAQ,GAAGA,KAAAA,CAAE,IAAA,EAAM,CAAC,EAAE,QAAA,EAAS;AAAA,IAC5D,cAAA,EAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACpC,kBAAA,EAAoBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GACzC,EACA,QAAA;AACL,CAAC,CAAA;;;ACjBM,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAM,kBAAkB,EAAE,QAAA;AACtC,CAAC,CAAA;ACHM,IAAM,QAAA,GAAWA,MAAE,MAAA,CAAO;AAAA,EAC/B,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,SAASA,KAAAA,CAAE,MAAA,CAAO,EAAE,EAAE,QAAA,EAAS;AAAA,EAC/B,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,cAAA,EAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC7B,CAAC,CAAA;;;ACRM,IAAM,gBAAA,GAAmBA,MAAE,MAAA,CAAO;AAAA,EACvC,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAM,QAAQ,EAAE,QAAA;AAC5B,CAAC,CAAA;ACHM,IAAM,iBAAA,GAAoBA,MAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,QAAA,EAAUA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,MAAA,EAAQA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACtB,CAAC,CAAA;ACJM,IAAM,iBAAA,GAAoBA,MAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,QAAA,EAAUA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,MAAA,EAAQA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACtB,CAAC,CAAA;ACJM,IAAM,iBAAA,GAAoBA,MAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,OAAA,EAASA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACvB,CAAC,CAAA;ACFM,IAAM,cAAA,GAAiBA,MAAE,MAAA,CAAO;AAAA,EACrC,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,OAAA,EAAQ,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,EAClD,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,SAAQ,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC;AAC5C,CAAC,CAAA;;;ACHM,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,QAAA,EAAU,eAAe,QAAA,EAAS;AAAA,EAClC,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAASA,KAAAA,CAAE,MAAA,CAAO,EAAE,EAAE,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,cAAcA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC3C,YAAYA,KAAAA,CAAE,MAAA,CAAO,EAAE,EAAE,QAAA;AAC3B,CAAC,CAAA;ACVM,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACrB,CAAC,CAAA;ACDM,IAAM,sBAAA,GAAyBA,MAAE,KAAA,CAAM;AAAA,EAC5CA,MAAE,MAAA,EAAO,CAAE,MAAM,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAClCA,KAAAA,CAAE,OAAO,EAAE,EAAE,QAAA,CAASA,KAAAA,CAAE,SAAS,CAAA;AAAA,EACjCA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,OAAA,EAAS;AACrB,CAAC,CAAA;;;ACJM,IAAM,6BAAA,GAAgCA,MAAE,MAAA,CAAO;AAAA,EACpD,IAAA,EAAMA,KAAAA,CAAE,IAAA,CAAK,CAAC,QAAQ,CAAC,CAAA;AAAA,EACvB,YAAA,EAAc,sBAAA;AAAA,EACd,QAAA,EAAUA,KAAAA,CACP,MAAA,CAAO,EAAE,CAAA,CACT,QAAA,CAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,MAAA,IAAUA,KAAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAA,CACxC,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,IAAU,CAAA,EAAG,EAAE,SAAS,iCAAA,EAAmC,CAAA,CACxF,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,IAAU,EAAA,EAAI,EAAE,OAAA,EAAS,iCAAA,EAAmC,EACzF,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAM,IAAI,MAAA,CAAO,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG;AAAA,IACrE,OAAA,EAAS;AAAA,GACV;AACL,CAAC,CAAA;ACXM,IAAM,2BAAA,GAA8BA,MAAE,MAAA,CAAO;AAAA,EAClD,IAAA,EAAMA,KAAAA,CAAE,IAAA,CAAK,CAAC,MAAM,CAAC,CAAA;AAAA,EACrB,YAAA,EAAc,sBAAA;AAAA,EACd,QAAA,EAAUA,MACP,MAAA,CAAO;AAAA,IACN,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC3B,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC3B,EACA,QAAA;AACL,CAAC,CAAA;ACTM,IAAM,4BAAA,GAA+BA,MAAE,MAAA,CAAO;AAAA,EACnD,IAAA,EAAMA,KAAAA,CAAE,IAAA,CAAK,CAAC,OAAO,CAAC,CAAA;AAAA,EACtB,YAAA,EAAc,sBAAA;AAAA,EACd,QAAA,EAAUA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE;AAC7C,CAAC,CAAA;;;ACDM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,MAAM,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACzC,KAAA,EAAO,sBAAA;AAAA,EACP,QAAQA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACrC,SAAA,EAAWA,KAAAA,CACR,MAAA,CAAO,EAAE,CAAA,CACT,QAAA;AAAA,IACCA,MAAE,KAAA,CAAM;AAAA,MACN,6BAAA;AAAA,MACA,2BAAA;AAAA,MACA;AAAA,KACD;AAAA,GACH,CACC,OAAO,CAAC,CAAA,KAAM,OAAO,IAAA,CAAK,CAAC,EAAE,MAAA,IAAU,CAAA,EAAG,EAAE,OAAA,EAAS,iCAAA,EAAmC,CAAA,CACxF,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,IAAU,IAAI,EAAE,OAAA,EAAS,mCAAmC,CAAA,CACzF,OAAO,CAAC,CAAA,KAAM,OAAO,IAAA,CAAK,CAAC,EAAE,KAAA,CAAM,CAAC,MAAM,IAAI,MAAA,CAAO,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG;AAAA,IACrE,OAAA,EAAS;AAAA,GACV,CAAA;AAAA,EACH,UAAA,EAAYA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA,CAAE,QAAA;AAChD,CAAC,CAAA;ACtBM,IAAM,yBAAA,GAA4BA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA;ACAzD,IAAM,4BAAA,GAA+BA,KAAAA,CAAE,MAAA,CAAO,EAAE,CAAA,CAAE,QAAA,CAASA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA;;;ACCnF,IAAM,2BAAA,GAA8BA,MAAE,MAAA,CAAO;AAAA,EAClD,IAAA,EAAMA,KAAAA,CAAE,IAAA,CAAK,CAAC,QAAQ,CAAC,CAAA;AAAA,EACvB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,EACjB,aAAA,EAAe,4BAAA;AAAA,EACf,UAAA,EAAY;AACd,CAAC,CAAA;ACPM,IAAM,yBAAA,GAA4BA,MAAE,MAAA,CAAO;AAAA,EAChD,IAAA,EAAMA,KAAAA,CAAE,IAAA,CAAK,CAAC,MAAM,CAAC,CAAA;AAAA,EACrB,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,CAAC;AAC/B,CAAC,CAAA;ACDM,IAAM,0BAAA,GAA6BA,MAAE,MAAA,CAAO;AAAA,EACjD,IAAA,EAAMA,KAAAA,CAAE,IAAA,CAAK,CAAC,OAAO,CAAC,CAAA;AAAA,EACtB,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA,EAC/B,MAAA,EAAQA,MAAE,MAAA,CAAO,EAAE,CAAA,CAAE,QAAA,CAASA,KAAAA,CAAE,MAAA,EAAQ,CAAA;AAAA,EACxC,aAAA,EAAe,4BAAA;AAAA,EACf,UAAA,EAAY;AACd,CAAC,CAAA;;;ACLM,IAAM,uBAAA,GAA0BA,MAAE,MAAA,CAAO;AAAA,EAC9C,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,OAAA,EAASA,KAAAA,CACN,MAAA,CAAO,EAAE,CAAA,CACT,QAAA;AAAA,IACCA,MAAE,KAAA,CAAM,CAAC,2BAAA,EAA6B,yBAAA,EAA2B,0BAA0B,CAAC;AAAA,GAC9F;AAAA,EACF,KAAA,EAAOA,MAAE,MAAA,CAAO;AAAA,IACd,YAAA,EAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,IAC9B,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AAAA,GAChC;AACH,CAAC,CAAA;ACdM,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC/B,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,YAAA,EAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,mBAAA,EAAqBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACzC,aAAA,EAAeA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC5B,CAAC,CAAA;;;ACLM,IAAM,oBAAoBA,KAAAA,CAAE,YAAA;AAAA,EACjC,kBAAA;AAAA,EACAA,MAAE,MAAA,CAAO;AAAA,IACP,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,IACf,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,IAChB,OAAA,EAASA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAAS,GAC/B;AACH,CAAA;;;ACNO,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EAC1C,OAAOA,KAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EAClC,OAAOA,KAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,EAC9B,aAAaA,KAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AAAA,EACnC,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,MAAA,EAAQ,kBAAA;AAAA,EACR,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,iBAAiB;AACpC,CAAC,CAAA;ACVM,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACtB,CAAC,CAAA;ACFM,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,GAAA,EAAKA,MAAE,MAAA;AACT,CAAC,CAAA;ACFM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,OAAOA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA;AAC7B,CAAC,CAAA;ACJM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA;AACzC,CAAC,CAAA;ACHM,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,GAAA,EAAKA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACzB,OAAA,EAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACtB,CAAC,CAAA;;;ACHM,IAAM,uBAAA,GAA0BA,MAAE,MAAA,CAAO;AAAA,EAC9C,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,qBAAqB,EAAE,QAAA;AAC1C,CAAC,CAAA;;;ACiCM,IAAM,cAAA,GAAsD;AAAA,EACjE,IAAA,EAAM,iBAAA;AAAA,EACN,IAAA,EAAM,iBAAA;AAAA,EACN,MAAA,EAAQ,mBAAA;AAAA,EACR,MAAA,EAAQ,mBAAA;AAAA,EACR,KAAA,EAAO,kBAAA;AAAA,EACP,QAAA,EAAU,qBAAA;AAAA,EACV,IAAA,EAAM,iBAAA;AAAA,EACN,IAAA,EAAM,iBAAA;AAAA,EACN,IAAA,EAAM,iBAAA;AAAA,EACN,SAAA,EAAW,sBAAA;AAAA,EACX,QAAA,EAAU,qBAAA;AAAA,EACV,SAAA,EAAW;AACb;AAQO,IAAM,eAAA,GAAuD;AAAA,EAClE,OAAA,EAAS,qBAAA;AAAA,EACT,IAAA,EAAM,kBAAA;AAAA,EACN,MAAA,EAAQ,oBAAA;AAAA,EACR,KAAA,EAAO,mBAAA;AAAA,EACP,QAAA,EAAU,sBAAA;AAAA,EACV,EAAA,EAAI,gBAAA;AAAA,EACJ,IAAA,EAAM,oBAAA;AAAA,EACN,IAAA,EAAM,oBAAA;AAAA,EACN,IAAA,EAAM,kBAAA;AAAA,EACN,SAAA,EAAW,uBAAA;AAAA,EACX,IAAA,EAAM,kBAAA;AAAA,EACN,KAAA,EAAO,mBAAA;AAAA,EACP,OAAA,EAAS,qBAAA;AAAA,EACT,QAAA,EAAU,sBAAA;AAAA,EACV,SAAA,EAAW;AACb;AAGO,SAAS,iBAAiB,WAAA,EAA4C;AAC3E,EAAA,OAAO,eAAe,WAAW,CAAA;AACnC;AAGO,SAAS,kBAAkB,WAAA,EAA4C;AAC5E,EAAA,OAAO,gBAAgB,WAAW,CAAA;AACpC;;;ACqDA,SAAS,eAAA,CAAgB,GAAW,CAAA,EAAmB;AACrD,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,EAAE,KAAK,CAAC,CAAA;AAC9D,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,EAAE,KAAK,CAAC,CAAA;AAC9D,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,MAAA,EAAQ,EAAA,CAAG,MAAM,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG;AAC1D,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,CAAC,CAAA,IAAK,CAAA;AACpB,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,CAAC,CAAA,IAAK,CAAA;AACpB,IAAA,IAAI,EAAA,KAAO,EAAA,EAAI,OAAO,EAAA,GAAK,EAAA;AAAA,EAC7B;AACA,EAAA,OAAO,CAAA;AACT;AAaA,eAAe,mBAAmB,IAAA,EAAuD;AACvF,EAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAA+B;AAAA,IACvD,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACT,CAAA;AACD,EAAA,IAAI,UAAU,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,SAAiB,MAAA,CAAO,OAAA;AAChE,EAAA,OAAO,MAAA;AACT;AAOA,SAAS,aAAa,GAAA,EAA6B;AACjD,EAAA,IAAI,GAAA,CAAI,QAAQ,OAAO,GAAA,CAAI,SAAS,QAAA,IAAY,QAAA,IAAY,IAAI,IAAA,EAAM;AACpE,IAAA,MAAM,QAAA,GAAY,IAAI,IAAA,CAA8B,MAAA;AACpD,IAAA,IAAI,OAAO,QAAA,KAAa,SAAA,EAAW,OAAO,QAAA;AAAA,EAC5C;AACA,EAAA,OAAO,QAAQ,GAAA,CAAI,gBAAA,IAAoB,GAAA,CAAI,SAAA,CAAU,UAAU,gBAAgB,CAAA;AACjF;AASA,SAAS,UAAU,GAAA,EAA6B;AAC9C,EAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,EAAW,OAAO,MAAA;AACnC,EAAA,IAAI,OAAO,IAAI,IAAA,KAAS,QAAA,IAAY,IAAI,IAAA,KAAS,IAAA,SAAa,GAAA,CAAI,IAAA;AAClE,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,IACE,GAAA,CAAI,SAAA,CAAU,SAAA,CAAU,SAAA,IACxB,GAAA,CAAI,UAAU,SAAA,CAAU,gBAAA,IACxB,IAAA,CAAK,MAAA,KAAW,MAAA,EAChB;AACA,IAAA,OAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AAAA,EACjC;AACA,EAAA,OAAO,IAAA;AACT;AAGO,IAAM,gBAAN,MAAoB;AAAA,EASzB,YAA6B,OAAA,EAA+B;AAA/B,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAFrD,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,mBAAmB,SAAA,EAAoD;AAC7E,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,MAAM,SAAA,GAAY,KAAK,OAAA,CAAQ,SAAA;AAC/B,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,wBAAA;AAAA,UACR,CAAA,UAAA,EAAa,SAAA,CAAU,WAAW,CAAA,EAAA,EAAK,SAAA,CAAU,MAAM,CAAA,CAAA,EAAI,SAAA,CAAU,IAAI,CAAA,gBAAA,EACtD,SAAA,CAAU,IAAI,CAAA,8LAAA;AAAA,SAGnC;AAAA,MACF;AACA,MAAA,OAAO,SAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAK,OAAA,CAAQ,IAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,OAAoB,GAAA,EAAgC;AACxD,IAAA,MAAM,IAAA,CAAK,sBAAA,CAAuB,GAAA,CAAI,SAAS,CAAA;AAC/C,IAAA,IAAI,IAAA,GAAO,UAAU,GAAG,CAAA;AAOxB,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,gBAAA,KAAqB,IAAA,IAAQ,SAAS,MAAA,EAAW;AAChE,MAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,GAAA,CAAI,SAAA,CAAU,WAAW,CAAA;AACzD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA;AACpC,QAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,UAAA,MAAM,IAAI,4BAAA;AAAA,YACR,CAAA,yCAAA,EAA4C,GAAA,CAAI,SAAA,CAAU,WAAW,MAC/D,GAAA,CAAI,SAAA,CAAU,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA,GAAA,CAAA,GAC9C,OAAO,KAAA,CAAM,MAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,KAAK,GAAG,CAAA,IAAK,QAAQ,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAC1D,KAAK,IAAI,CAAA;AAAA,YACd;AAAA,cACE,WAAA,EAAa,IAAI,SAAA,CAAU,WAAA;AAAA,cAC3B,MAAA,EAAQ,OAAO,KAAA,CAAM,MAAA;AAAA,cACrB,OAAA,EAAS,EAAE,MAAA,EAAQ,GAAA,CAAI,UAAU,MAAA,EAAQ,GAAA,EAAK,GAAA,CAAI,SAAA,CAAU,IAAA;AAAK;AACnE,WACF;AAAA,QACF;AACA,QAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AAAA,MAChB;AAAA,IACF;AAYA,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,MAAM,UAAA,GAAa,sBAAsB,IAAI,CAAA;AAC7C,MAAA,MAAM,SAAA,GAAY,cAAc,IAAI,CAAA;AACpC,MAAA,MAAM,kBAAA,GAAqB,GAAA,CAAI,SAAA,CAAU,WAAA,EAAa,yBAAA;AACtD,MAAA,MAAM,YAAA,GAAe,GAAA,CAAI,SAAA,CAAU,WAAA,EAAa,eAAA;AAChD,MAAA,MAAM,eAAA,GACJ,SAAA,IAAa,kBAAA,KAAuB,MAAA,GAAY,kBAAA,GAAqB,YAAA;AACvE,MAAA,IAAI,eAAA,KAAoB,MAAA,IAAa,UAAA,CAAW,UAAA,GAAa,eAAA,EAAiB;AAC5E,QAAA,MAAM,IAAI,0BAAA;AAAA,UACR,aAAa,GAAA,CAAI,SAAA,CAAU,WAAW,CAAA,EAAA,EAAK,GAAA,CAAI,UAAU,MAAM,CAAA,CAAA,EAC1D,IAAI,SAAA,CAAU,IAAI,qBAAqB,UAAA,CAAW,UAAU,2CAC5B,eAAe,CAAA,MAAA,CAAA,IACjD,YAAY,kBAAA,GAAqB,GAAA,CAAA;AAAA,UACpC;AAAA,YACE,WAAA,EAAa,IAAI,SAAA,CAAU,WAAA;AAAA,YAC3B,aAAa,UAAA,CAAW,UAAA;AAAA,YACxB,QAAA,EAAU,eAAA;AAAA,YACV,OAAA,EAAS,EAAE,MAAA,EAAQ,GAAA,CAAI,UAAU,MAAA,EAAQ,GAAA,EAAK,GAAA,CAAI,SAAA,CAAU,IAAA;AAAK;AACnE,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,aAAa,GAAG,CAAA;AAQlC,IAAA,MAAM,eAAe,iBAAA,CAAkB,GAAA,CAAI,SAAA,CAAU,IAAA,EAAM,IAAI,UAAU,CAAA;AAIzE,IAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,YAAA,EAAc,GAAA,CAAI,WAAW,CAAA;AAOpE,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,IAAS,oBAAA,CAAqB,IAAI,CAAA;AAMpD,IAAA,MAAM,UAAkC,EAAC;AACzC,IAAA,IAAI,IAAI,YAAA,EAAc;AACpB,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA,EAAG;AAC3D,QAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,KAAA;AAAA,MACjB;AAAA,IACF;AASA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA,EAAM,aAAA;AAAA,MACN,MAAA,EAAQ,IAAI,SAAA,CAAU,MAAA;AAAA,MACtB,GAAI,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,KAAS,EAAC;AAAA,MACrC,GAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,GAAI,EAAE,OAAA,EAAQ,GAAI,EAAC;AAAA,MACrD,GAAI,IAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAO,GAAI,EAAC;AAAA,MACzD,GAAI,SAAA,GAAY,EAAE,GAAA,EAAK,IAAA,KAAS,EAAC;AAAA,MACjC,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU;AAAC,KACzC;AAEA,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,MAAA,GAAU,MAAM,IAAA,CAAK,kBAAA,CAAmB,IAAI,SAAS,CAAA,CAAE,QAAW,OAAO,CAAA;AAO/E,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,iBAAA,KAAsB,IAAA,EAAM;AAC3C,QAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,GAAA,CAAI,SAAA,CAAU,WAAW,CAAA;AAClE,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,MAAM,OAAA,GAAU,cAAA,CAAe,SAAA,CAAU,MAAM,CAAA;AAC/C,UAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACpB,YAAA,MAAM,IAAI,6BAAA;AAAA,cACR,CAAA,0CAAA,EAA6C,GAAA,CAAI,SAAA,CAAU,WAAW,MAChE,GAAA,CAAI,SAAA,CAAU,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA,GAAA,CAAA,GAC9C,QAAQ,KAAA,CAAM,MAAA,CACX,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,KAAK,GAAG,CAAA,IAAK,QAAQ,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAC1D,KAAK,IAAI,CAAA;AAAA,cACd;AAAA,gBACE,WAAA,EAAa,IAAI,SAAA,CAAU,WAAA;AAAA,gBAC3B,MAAA,EAAQ,QAAQ,KAAA,CAAM,MAAA;AAAA,gBACtB,OAAA,EAAS,EAAE,MAAA,EAAQ,GAAA,CAAI,UAAU,MAAA,EAAQ,GAAA,EAAK,GAAA,CAAI,SAAA,CAAU,IAAA;AAAK;AACnE,aACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,MAAA;AAAA,IACT;AAcA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,kBAAA,CAAmB,IAAI,SAAS,CAAA,CAAE,QAAkB,OAAO,CAAA;AACvF,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,MAAM,IAAI,wBAAA;AAAA,QACR,CAAA,UAAA,EAAa,GAAA,CAAI,SAAA,CAAU,WAAW,CAAA,iCAAA;AAAA,OACxC;AAAA,IACF;AACA,IAAA,OAAO,kBAAqB,GAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,EAAM,SAAS,IAAI,CAAA;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAc,uBAAuB,SAAA,EAA+C;AAClF,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,SAAA,IAAa,IAAA;AAC5C,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,SAAA,CAAU,YAAY,KAAA,EAAO;AAC9C,MAAA,MAAM,IAAI,wBAAA;AAAA,QACR,CAAA,UAAA,EAAa,UAAU,WAAW,CAAA,EAAA,EAAK,UAAU,MAAM,CAAA,CAAA,EAAI,UAAU,IAAI,CAAA,gDAAA;AAAA,OAE3E;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,UAAU,WAAA,EAAa,gBAAA;AAC1C,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,IAAI,aAAA,GAAgB,KAAK,OAAA,CAAQ,aAAA;AACjC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,cAAA,IAAkB,MAAA;AAC9C,IAAA,IAAI,CAAC,aAAA,IAAiB,MAAA,KAAW,KAAA,EAAO;AACtC,MAAA,IAAI,CAAC,KAAK,kBAAA,EAAoB;AAC5B,QAAA,MAAM,CAAA,GAAI,mBAAmB,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ;AAC7D,UAAA,IAAI,WAAW,QAAA,EAAU;AACvB,YAAA,MAAM,IAAI,+BAAA;AAAA,cACR,CAAA,UAAA,EAAa,SAAA,CAAU,WAAW,CAAA,oBAAA,EAAuB,UAAU,CAAA,mFAAA,CAAA;AAAA,cAGnE;AAAA,gBACE,aAAa,SAAA,CAAU,WAAA;AAAA,gBACvB,kBAAA,EAAoB,UAAA;AAAA,gBACpB,KAAA,EAAO;AAAA;AACT,aACF;AAAA,UACF;AAGA,UAAA,OAAO,MAAA;AAAA,QACT,CAAC,CAAA;AACD,QAAA,IAAA,CAAK,kBAAA,GAAqB,CAAA;AAAA,MAC5B;AACA,MAAA,aAAA,GAAiB,MAAM,KAAK,kBAAA,IAAuB,MAAA;AAAA,IACrD;AAEA,IAAA,IAAI,aAAA,IAAiB,eAAA,CAAgB,aAAA,EAAe,UAAU,IAAI,CAAA,EAAG;AACnE,MAAA,MAAM,IAAI,wBAAA;AAAA,QACR,CAAA,UAAA,EAAa,SAAA,CAAU,WAAW,CAAA,EAAA,EAAK,SAAA,CAAU,MAAM,CAAA,CAAA,EAAI,SAAA,CAAU,IAAI,CAAA,qBAAA,EACjD,UAAU,CAAA,iBAAA,EAAoB,aAAa,CAAA,EAAA;AAAA,OACrE;AAAA,IACF;AAAA,EACF;AACF;AAgBA,SAAS,iBAAA,CACP,MACA,IAAA,EACoC;AACpC,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,OAAO,kBAAqB,IAAI,CAAA;AAAA,EAClC;AACA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,OAAO,qBAAwB,IAAI,CAAA;AAAA,EACrC;AACA,EAAA,MAAM,IAAI,wBAAA;AAAA,IACR,mBAAmB,IAAI,CAAA,wDAAA;AAAA,GACzB;AACF;AAcA,gBAAgB,qBACd,IAAA,EACoC;AACpC,EAAA,WAAA,MAAiB,KAAA,IAAS,cAAA,CAAe,IAAI,CAAA,EAAG;AAC9C,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AACnB,IAAA,IAAI,CAAC,IAAA,EAAM;AAGX,IAAA,IAAI,SAAS,QAAA,EAAU;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IACvB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAI,wBAAA,CAAyB,CAAA,wCAAA,EAA2C,IAAI,CAAA,CAAA,EAAI;AAAA,QACpF,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAcA,SAAS,sBAAsB,IAAA,EAA2B;AACxD,EAAA,IAAI,IAAA,YAAgB,YAAY,OAAO,IAAA;AACvC,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU,OAAO,IAAI,WAAA,EAAY,CAAE,OAAO,IAAI,CAAA;AAElE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAChC,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,IAAI,CAAA;AACtC;AAYA,SAAS,cAAc,IAAA,EAAwB;AAC7C,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,MAAM,OAAO,KAAA;AACtD,EAAA,MAAM,GAAA,GAAM,IAAA;AACZ,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,IAAK,OAAO,MAAA,GAAS,CAAA;AAClD;AAiBA,SAAS,iBAAA,CACP,cACA,UAAA,EACQ;AAER,EAAA,IAAI,CAAC,YAAA,CAAa,QAAA,CAAS,GAAG,GAAG,OAAO,YAAA;AAExC,EAAA,MAAM,MAAA,GAAS,cAAc,EAAC;AAC9B,EAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,cAAA,EAAgB,CAAC,QAAQ,IAAA,KAAiB;AACpE,IAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AACzB,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,MAAM,IAAI,wBAAA;AAAA,QACR,CAAA,wBAAA,EAA2B,IAAI,CAAA,qBAAA,EAAwB,YAAY,CAAA,+DAAA;AAAA,OAErE;AAAA,IACF;AACA,IAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,EACjC,CAAC,CAAA;AACH;AAQA,SAAS,qBAAqB,IAAA,EAAmC;AAC/D,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,MAAM,OAAO,MAAA;AACtD,EAAA,MAAM,GAAA,GAAM,IAAA;AACZ,EAAA,MAAM,QAAQ,GAAA,CAAI,KAAA;AAClB,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA;AAC7C;AAUA,SAAS,gBAAA,CACP,MACA,WAAA,EACQ;AACR,EAAA,IAAI,CAAC,eAAe,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,MAAA,KAAW,GAAG,OAAO,IAAA;AAClE,EAAA,MAAM,KAAA,GAAQ,OAAO,OAAA,CAAQ,WAAW,EACrC,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,GAAG,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAE,CAAA,CAC/E,IAAA,CAAK,GAAG,CAAA;AACX,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AACzB","file":"generated-runtime.cjs","sourcesContent":["/**\n * Structured, typed error hierarchy for OllamaClient.\n */\n\nimport type { z } from 'zod';\n\nexport interface OllamaErrorRequestContext {\n readonly method?: string | undefined;\n readonly url?: string | undefined;\n readonly model?: string | undefined;\n}\n\nexport interface OllamaErrorResponseContext {\n readonly status?: number | undefined;\n readonly headers?: Record<string, string> | undefined;\n readonly body?: unknown;\n}\n\nexport interface OllamaClientErrorOptions extends ErrorOptions {\n readonly code: string;\n readonly status?: number | undefined;\n readonly retryable?: boolean | undefined;\n readonly request?: OllamaErrorRequestContext | undefined;\n readonly response?: OllamaErrorResponseContext | undefined;\n}\n\nexport class OllamaClientError extends Error {\n readonly code: string;\n readonly status?: number | undefined;\n readonly retryable: boolean;\n readonly request?: OllamaErrorRequestContext | undefined;\n readonly response?: OllamaErrorResponseContext | undefined;\n\n constructor(message: string, options: OllamaClientErrorOptions) {\n super(message, { cause: options.cause });\n this.name = this.constructor.name;\n this.code = options.code;\n this.status = options.status;\n this.retryable = options.retryable ?? false;\n this.request = options.request;\n this.response = options.response;\n }\n}\n\nexport class OllamaNetworkError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> | undefined,\n ) {\n super(message, { ...options, code: 'network_error', retryable: true });\n }\n}\n\nexport class OllamaTimeoutError extends OllamaClientError {\n readonly timeoutMs?: number | undefined;\n constructor(\n message: string,\n options?:\n | (Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & { timeoutMs?: number | undefined })\n | undefined,\n ) {\n super(message, { ...options, code: 'timeout', retryable: true });\n this.timeoutMs = options?.timeoutMs;\n }\n}\n\nexport class OllamaAuthError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> | undefined,\n ) {\n super(message, { ...options, code: 'auth_error', retryable: false });\n }\n}\n\nexport class OllamaNotFoundError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> | undefined,\n ) {\n super(message, { ...options, code: 'not_found', retryable: false });\n }\n}\n\nexport class OllamaRateLimitError extends OllamaClientError {\n readonly retryAfterMs?: number | undefined;\n constructor(\n message: string,\n options?:\n | (Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n retryAfterMs?: number | undefined;\n })\n | undefined,\n ) {\n super(message, { ...options, code: 'rate_limited', retryable: true });\n this.retryAfterMs = options?.retryAfterMs;\n }\n}\n\n/**\n * Thrown client-side, before a network request is made, by `QuotaManager.assertCanProceed`\n * (see `src/quota.ts`) when issuing the request would exceed a configured usage budget for\n * one of its rolling windows. This is distinct from `OllamaRateLimitError`, which reflects\n * the server's own 429 response — Ollama Cloud does not expose account-level quota via the\n * API, so `QuotaManager` tracks usage against budgets the caller configures locally and\n * fails fast rather than waiting for the server to reject the request.\n */\nexport class OllamaQuotaExceededError extends OllamaClientError {\n readonly windowId: string;\n readonly resetAt: number;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n windowId: string;\n resetAt: number;\n },\n ) {\n super(message, { ...options, code: 'quota_exceeded', retryable: false });\n this.windowId = options.windowId;\n this.resetAt = options.resetAt;\n }\n}\n\nexport class OllamaServerError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> | undefined,\n ) {\n super(message, { ...options, code: 'server_error', retryable: true });\n }\n}\n\n/**\n * Thrown when the Ollama server returns HTTP **503 Service Unavailable**,\n * indicating that the request queue is saturated (`OLLAMA_MAX_QUEUE`\n * exceeded, default 512 — see the FAQ).\n *\n * Semantically a specialization of {@link OllamaServerError} (503 is a\n * kind of 5xx server error), but extends {@link OllamaClientError}\n * directly to preserve the subclass-specific `code: 'overloaded'` —\n * `OllamaServerError`'s constructor unconditionally forces\n * `code: 'server_error'`. Callers wanting to catch any 5xx should\n * use `error.status >= 500 && error.status < 600` OR explicitly\n * list both `OllamaServerError` and `OllamaOverloadedError`/\n * `OllamaBadGatewayError` in their `instanceof` checks.\n *\n * `retryable` is `true` because the queue will eventually drain;\n * callers using {@link withRetry} will get automatic backoff.\n */\nexport class OllamaOverloadedError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable' | 'status'> | undefined,\n ) {\n super(message, { ...options, code: 'overloaded', status: 503, retryable: true });\n }\n}\n\n/**\n * Thrown when the Ollama server returns HTTP **502 Bad Gateway**,\n * indicating that a cloud model could not be reached by the\n * Ollama Cloud proxy. The model may be temporarily down, the\n * cloud provider may be experiencing an outage, or the model\n * may have been deprovisioned.\n *\n * Semantically a specialization of {@link OllamaServerError} (502 is a\n * kind of 5xx server error), but extends {@link OllamaClientError}\n * directly to preserve the subclass-specific `code: 'bad_gateway'` —\n * see {@link OllamaOverloadedError} for the rationale. Callers wanting\n * to catch any 5xx should use `error.status >= 500 && error.status < 600`\n * OR explicitly list both classes in their `instanceof` checks.\n *\n * `retryable` is `true` for transient cloud-provider outages.\n */\nexport class OllamaBadGatewayError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable' | 'status'> | undefined,\n ) {\n super(message, { ...options, code: 'bad_gateway', status: 502, retryable: true });\n }\n}\n\n/**\n * Thrown when the Ollama server emits an in-band error frame inside\n * an NDJSON stream (chat / generate / pull / push / create).\n *\n * Ollama streams start with HTTP 200 OK and chunked transfer encoding.\n * If an error occurs mid-generation (GPU OOM, driver crash, context\n * window overflow, model unload race, etc.), the server emits a final\n * JSON chunk of the form `{\"error\": \"...\"}` and closes the stream.\n * The HTTP status code never changes from 200, so HTTP-status-based\n * error detection misses these errors entirely — they would silently\n * bleed into the assistant's content stream as garbage tokens or\n * undefined-field accesses.\n *\n * `partialContent` carries whatever was accumulated before the error\n * frame, so callers can log/diagnose what the model produced before\n * failing. For chat streams this is the concatenated `message.content`;\n * for generate streams it's the concatenated `response`; for pull/push\n * streams it's empty (progress events don't accumulate content).\n *\n * See: https://github.com/ollama/ollama/blob/main/docs/api.md\n */\nexport class OllamaStreamError extends OllamaClientError {\n /** Content accumulated before the in-band error frame, or '' if none. */\n readonly partialContent: string;\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n partialContent?: string | undefined;\n },\n ) {\n super(message, { ...options, code: 'stream_error', retryable: false });\n this.partialContent = options?.partialContent ?? '';\n }\n}\n\nexport class OllamaAbortError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> | undefined,\n ) {\n super(message, { ...options, code: 'aborted', retryable: false });\n }\n}\n\nexport class OllamaToolValidationError extends OllamaClientError {\n readonly toolName: string;\n readonly issues?: unknown;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & { toolName: string; issues?: unknown },\n ) {\n super(message, { ...options, code: 'tool_validation_error', retryable: false });\n this.toolName = options.toolName;\n this.issues = options.issues;\n }\n}\n\n/**\n * Thrown by `OllamaRuntime.invoke` when `validateRequests: true` is set and\n * the request body fails Zod validation against the operation's registered\n * schema. See ADR 0020 (runtime Zod validation).\n *\n * The error carries the original Zod issues so callers can inspect which\n * fields failed. No HTTP request is made when this error is thrown.\n */\nexport class OllamaRequestValidationError extends OllamaClientError {\n readonly operationId: string;\n readonly issues: readonly z.ZodIssue[];\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & {\n operationId: string;\n issues: readonly z.ZodIssue[];\n },\n ) {\n super(message, { ...options, code: 'request_validation_error', retryable: false });\n this.operationId = options.operationId;\n this.issues = options.issues;\n }\n}\n\n/**\n * Thrown by `OllamaRuntime.invoke` BEFORE any HTTP request is made when the\n * serialized request body exceeds the operation's declared\n * `constraints.maxRequestBytes`. The Ollama server returns 413 for such\n * payloads; this client-side check fails fast so the round-trip is avoided.\n *\n * Wave 12 (P0 #5): the IR has carried `maxRequestBytes` for System One\n * (64 KiB) since v1.7.0, but the runtime never enforced it. This closes\n * that contract/runtime gap.\n */\nexport class OllamaRequestTooLargeError extends OllamaClientError {\n readonly operationId: string;\n readonly actualBytes: number;\n readonly maxBytes: number;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable' | 'status'> & {\n operationId: string;\n actualBytes: number;\n maxBytes: number;\n },\n ) {\n super(message, { ...options, code: 'request_too_large', retryable: false, status: 413 });\n this.operationId = options.operationId;\n this.actualBytes = options.actualBytes;\n this.maxBytes = options.maxBytes;\n }\n}\n\n/**\n * Thrown by `OllamaRuntime.invoke` AFTER the HTTP response is received\n * when `validateResponses: true` is set and the response body fails Zod\n * validation against the operation's registered response schema.\n *\n * Wave 13: the runtime previously never validated responses (see ADR\n * 0020). This opt-in error gives callers a way to detect wire-format\n * mismatches for operations where typed response semantics are critical\n * (e.g. System One). The error carries the original Zod issues so\n * callers can inspect which fields failed.\n */\nexport class OllamaResponseValidationError extends OllamaClientError {\n readonly operationId: string;\n readonly issues: readonly z.ZodIssue[];\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n operationId: string;\n issues: readonly z.ZodIssue[];\n },\n ) {\n super(message, { ...options, code: 'response_validation_error', retryable: false });\n this.operationId = options.operationId;\n this.issues = options.issues;\n }\n}\n\n/**\n * Thrown by `OllamaRuntime.invoke` BEFORE any HTTP request is made when the\n * operation declares `constraints.minOllamaVersion` and the runtime could\n * not obtain a server version to compare against (e.g. `enforceVersion:\n * 'strict'` was set and `/api/version` was unreachable). Distinct from\n * {@link OllamaGenericClientError} so callers can branch on the failure\n * mode rather than parsing the message.\n */\nexport class OllamaServerVersionUnknownError extends OllamaClientError {\n readonly operationId: string;\n readonly minRequiredVersion: string;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n operationId: string;\n minRequiredVersion: string;\n },\n ) {\n super(message, { ...options, code: 'server_version_unknown', retryable: false });\n this.operationId = options.operationId;\n this.minRequiredVersion = options.minRequiredVersion;\n }\n}\n\nexport class OllamaToolTimeoutError extends OllamaClientError {\n readonly toolName: string;\n readonly timeoutMs: number;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n toolName: string;\n timeoutMs: number;\n },\n ) {\n super(message, { ...options, code: 'tool_timeout', retryable: false });\n this.toolName = options.toolName;\n this.timeoutMs = options.timeoutMs;\n }\n}\n\n/**\n * Thrown client-side, before a network request is made, when a request asks for a\n * capability an endpoint is known not to support (e.g. structured output `format` against\n * an Ollama Cloud endpoint — see `ModelCapabilities.supportsStructuredOutputRequest` in\n * `src/capabilities/capabilities.ts`). Its `code` is included in `DEFAULT_FAILOVER_CODES`\n * by default, so in a multi-endpoint setup it causes failover to the next candidate rather\n * than failing outright — it only surfaces to the caller if every candidate is rejected.\n */\nexport class OllamaUnsupportedCapabilityError extends OllamaClientError {\n readonly capability: string;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & { capability: string },\n ) {\n super(message, { ...options, code: 'unsupported_capability', retryable: false });\n this.capability = options.capability;\n }\n}\n\n/**\n * Thrown client-side, before any network call, when `config.endpoints` uses\n * `OllamaEndpoint.models` to scope endpoints/credentials to specific models and the\n * requested `model` isn't in any configured endpoint's allow-list. This is a routing\n * misconfiguration, not a connectivity problem — the SDK deliberately does not \"probe\"\n * unauthorized endpoints to find one that happens to work (that would burn quota on keys\n * that were never entitled to the model and produce non-deterministic startup behavior).\n */\nexport class OllamaModelRoutingError extends OllamaClientError {\n readonly model: string;\n readonly availableModels: readonly string[];\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n model: string;\n availableModels: readonly string[];\n },\n ) {\n super(message, { ...options, code: 'model_routing_error', retryable: false });\n this.model = options.model;\n this.availableModels = options.availableModels;\n }\n}\n\n/**\n * Thrown before an agent tool loop starts when the selected model's /api/show metadata\n * does not advertise a capability required by the loop.\n */\nexport class OllamaIncompatibleModelError extends OllamaClientError {\n readonly model: string;\n readonly capability: string;\n readonly reportedCapabilities: readonly string[];\n\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n model: string;\n capability: string;\n reportedCapabilities: readonly string[];\n },\n ) {\n super(message, { ...options, code: 'incompatible_model', retryable: false });\n this.model = options.model;\n this.capability = options.capability;\n this.reportedCapabilities = options.reportedCapabilities;\n }\n}\nexport class OllamaAgentMaxToolCallsError extends OllamaClientError {\n readonly maxToolCalls: number;\n readonly toolCallsExecuted: number;\n\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & {\n maxToolCalls: number;\n toolCallsExecuted: number;\n },\n ) {\n super(message, { ...options, code: 'agent_max_tool_calls_exceeded', retryable: false });\n this.maxToolCalls = options.maxToolCalls;\n this.toolCallsExecuted = options.toolCallsExecuted;\n }\n}\n\nexport class OllamaAgentMaxIterationsError extends OllamaClientError {\n readonly maxIterations: number;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & { maxIterations: number },\n ) {\n super(message, { ...options, code: 'agent_max_iterations_exceeded', retryable: false });\n this.maxIterations = options.maxIterations;\n }\n}\n\nexport class OllamaMcpError extends OllamaClientError {\n readonly mcpMethod:\n | 'listTools'\n | 'callTool'\n | 'tools/call'\n | 'tasks/get'\n | 'tasks/result'\n | 'tasks/cancel';\n readonly toolName?: string | undefined;\n readonly issues?: unknown;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & {\n mcpMethod:\n | 'listTools'\n | 'callTool'\n | 'tools/call'\n | 'tasks/get'\n | 'tasks/result'\n | 'tasks/cancel';\n toolName?: string | undefined;\n issues?: unknown;\n },\n ) {\n super(message, { ...options, code: 'mcp_error', retryable: options.retryable ?? false });\n this.mcpMethod = options.mcpMethod;\n this.toolName = options.toolName;\n this.issues = options.issues;\n }\n}\n\nexport class OllamaSkillNotFoundError extends OllamaClientError {\n readonly skillName: string;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & { skillName: string },\n ) {\n super(message, { ...options, code: 'skill_not_found', retryable: false });\n this.skillName = options.skillName;\n }\n}\n\nexport class OllamaSkillInvalidError extends OllamaClientError {\n readonly skillName: string;\n readonly path?: string | undefined;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & {\n skillName: string;\n path?: string | undefined;\n },\n ) {\n super(message, { ...options, code: 'skill_invalid', retryable: false });\n this.skillName = options.skillName;\n this.path = options.path;\n }\n}\n\nexport class OllamaGenericClientError extends OllamaClientError {\n constructor(message: string, options?: Omit<OllamaClientErrorOptions, 'code'> | undefined) {\n super(message, { ...options, code: 'client_error' });\n }\n}\n\nfunction isDomAbortError(error: unknown): error is DOMException {\n return (\n typeof DOMException !== 'undefined' &&\n error instanceof DOMException &&\n error.name === 'AbortError'\n );\n}\n\nfunction statusToError(\n status: number,\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'status'>,\n): OllamaClientError {\n if (status === 401 || status === 403) {\n return new OllamaAuthError(message, { ...options, status });\n }\n if (status === 404) {\n return new OllamaNotFoundError(message, { ...options, status });\n }\n if (status === 429) {\n return new OllamaRateLimitError(message, { ...options, status });\n }\n if (status === 502) {\n // Cloud model could not be reached. Distinct from generic 5xx so\n // callers running multi-model agents can branch on cloud-provider\n // failures specifically (fail over to a different model/endpoint\n // rather than blindly retrying the same one).\n return new OllamaBadGatewayError(message, { ...options });\n }\n if (status === 503) {\n // Queue saturation (OLLAMA_MAX_QUEUE exceeded). Retryable — the\n // queue will eventually drain. Distinct from generic 5xx so\n // callers running parallel swarms can branch on saturation.\n return new OllamaOverloadedError(message, { ...options });\n }\n if (status >= 500) {\n return new OllamaServerError(message, { ...options, status });\n }\n return new OllamaGenericClientError(message, { ...options, status });\n}\n\n/**\n * Maps arbitrary thrown exceptions into structured OllamaClientError instances.\n */\nexport function mapError(\n error: unknown,\n context: {\n request?: OllamaErrorRequestContext | undefined;\n response?: OllamaErrorResponseContext | undefined;\n } = {},\n): OllamaClientError {\n if (error instanceof OllamaClientError) {\n return error;\n }\n if (isDomAbortError(error)) {\n return new OllamaAbortError(error.message || 'Request was aborted', {\n cause: error,\n request: context.request,\n });\n }\n if (error instanceof TypeError) {\n return new OllamaNetworkError(error.message || 'Network request failed', {\n cause: error,\n request: context.request,\n });\n }\n if (context.response?.status !== undefined) {\n const message = error instanceof Error ? error.message : String(error);\n return statusToError(context.response.status, message, {\n cause: error,\n request: context.request,\n response: context.response,\n });\n }\n const message = error instanceof Error ? error.message : String(error);\n return new OllamaGenericClientError(message, {\n cause: error,\n request: context.request,\n response: context.response,\n });\n}\n","/**\n * Cross-runtime helpers with no Node.js API dependency, so they stay safe to import from\n * the core client bundle (see ADR 0006 — Edge Runtime CI).\n */\n\nimport { imageStringNeedsResolution, resolveImages, type VisionInput } from './vision.js';\n\n/**\n * Encodes an image to a base64 string, matching the wire format Ollama's `/api/chat` and\n * `/api/generate` `images` arrays expect.\n *\n * - A `string` is assumed to already be base64-encoded and is returned unchanged. For\n * data URIs, URLs, and local file paths use {@link resolveImageInput}, which this SDK's\n * request pipeline applies automatically (see {@link withEncodedImages}).\n * - A `Uint8Array` (or Node `Buffer`) is base64-encoded using whichever universal primitive\n * the runtime exposes: `Buffer` on Node.js, `btoa` on browsers/Edge runtimes. Chunked so it\n * doesn't blow the engine's max call-stack/argument-count limits on large images.\n */\nexport async function encodeImage(image: VisionInput): Promise<string> {\n if (typeof image === 'string') return image;\n\n const bufferCtor = (\n globalThis as { Buffer?: { from(data: Uint8Array): { toString(encoding: string): string } } }\n ).Buffer;\n if (bufferCtor !== undefined) return bufferCtor.from(image).toString('base64');\n\n const CHUNK_SIZE = 0x8000;\n let binary = '';\n for (let i = 0; i < image.length; i += CHUNK_SIZE) {\n binary += String.fromCharCode(...image.subarray(i, i + CHUNK_SIZE));\n }\n return btoa(binary);\n}\n\nasync function encodeImages(\n images: readonly VisionInput[],\n signal?: AbortSignal | undefined,\n): Promise<readonly string[]> {\n return resolveImages(images, signal) as Promise<readonly string[]>;\n}\n\n/**\n * Normalizes `req.images` to wire-ready raw base64 strings, resolving every polymorphic\n * {@link VisionInput} — data URIs (header stripped), `http(s)://` URLs (fetched), local\n * file paths (read via dynamically-imported `node:fs`, Node.js only), and raw\n * `Buffer`/`Uint8Array` bytes (base64-encoded). Returns `req` **unchanged (same reference)**\n * when every entry is already a plain base64 string (the common case), so the request\n * pipeline stays allocation-free for pre-encoded callers.\n */\nexport async function withEncodedImages<T extends { images?: readonly VisionInput[] | undefined }>(\n req: T,\n signal?: AbortSignal | undefined,\n): Promise<T> {\n const needsResolution = req.images?.some(\n (image) => typeof image !== 'string' || imageStringNeedsResolution(image),\n );\n if (!needsResolution) return req;\n return { ...req, images: await encodeImages(req.images ?? [], signal) };\n}\n\n/**\n * Applies {@link withEncodedImages} to each message's `images` array. Returns `messages`\n * unchanged (same reference) if no message carries a non-base64-ready image.\n */\nexport async function withEncodedMessageImages<\n T extends { images?: readonly VisionInput[] | undefined },\n>(messages: readonly T[], signal?: AbortSignal | undefined): Promise<readonly T[]> {\n const needsResolution = messages.some((message) =>\n message.images?.some((image) => typeof image !== 'string' || imageStringNeedsResolution(image)),\n );\n if (!needsResolution) return messages;\n return Promise.all(messages.map((message) => withEncodedImages(message, signal)));\n}\n\n// ─── Disposable helpers (TS 5.2+ `using` declarations) ──────────────────\n//\n// These wrappers turn cleanup operations into `Disposable` / `AsyncDisposable`\n// values so callers can use `using` / `await using` declarations instead of\n// try/finally blocks. This eliminates the \"forgot to clean up in the finally\n// block\" bug class for timer, reader, and span lifecycles.\n\n/** Wraps a `setTimeout` handle so `clearTimeout` runs at scope exit. */\nexport function disposableTimer(timer: ReturnType<typeof setTimeout>): Disposable {\n return {\n [Symbol.dispose]() {\n clearTimeout(timer);\n },\n };\n}\n\n/** Wraps a `ReadableStreamDefaultReader` so `cancel()` + `releaseLock()` run at scope exit. */\nexport function disposableReader<T>(reader: ReadableStreamDefaultReader<T>): AsyncDisposable {\n return {\n async [Symbol.asyncDispose]() {\n try {\n await reader.cancel();\n } catch {\n /* stream may already be closed */\n }\n reader.releaseLock();\n },\n };\n}\n\n/** Wraps an OpenTelemetry span so `span.end()` runs at scope exit. */\nexport function disposableSpan(span: { end(): void }): Disposable {\n return {\n [Symbol.dispose]() {\n span.end();\n },\n };\n}\n","/**\n * NDJSON (newline-delimited JSON) stream reader for native fetch Response bodies.\n *\n * Ollama's streaming endpoints (chat / generate / pull / push / create)\n * emit newline-delimited JSON objects. Each line is a complete JSON\n * document. The transport is chunked HTTP with status 200 OK — meaning\n * the HTTP status never changes mid-stream even when the server\n * encounters an error after generation has started.\n *\n * Instead, Ollama emits a final JSON frame of the form\n * `{\"error\": \"...\"}` and closes the stream. This reader detects such\n * in-band error frames and throws {@link OllamaStreamError} immediately,\n * so callers don't see the error message bleed into the assistant's\n * content stream as garbage tokens.\n */\n\nimport { OllamaGenericClientError, OllamaStreamError } from '../errors.js';\nimport { disposableReader } from '../utils.js';\n\n/**\n * A frame carrying an in-band stream error. Ollama emits this shape as\n * the final chunk of a stream when generation fails mid-flight (GPU\n * OOM, driver crash, context window overflow, model unload race, etc).\n *\n * Note that not every chunk with an `error` field is an error frame —\n * some valid Ollama response shapes carry `error` as a property name\n * for unrelated purposes (none documented in the public API, but the\n * generated schema set has a few). We only treat a frame as an\n * in-band error when it has an `error` field that is a non-empty\n * string AND no other top-level fields that would identify it as a\n * valid response chunk (e.g. `model`, `response`, `message`, `status`,\n * `done`).\n */\ninterface InBandErrorFrame {\n readonly error: string;\n}\n\n/**\n * Returns `true` if `value` looks like an Ollama in-band stream error\n * frame — i.e. it has a non-empty string `error` field and none of\n * the markers that would identify it as a valid response chunk.\n *\n * The valid-chunk markers (`model`, `response`, `message`, `status`,\n * `done`) cover every documented Ollama streaming endpoint: chat\n * chunks carry `message` and `done`; generate chunks carry `response`\n * and `done`; pull/push/create chunks carry `status`; all chunks\n * carry `model` once the model has loaded. A bare `{\"error\": \"...\"}`\n * frame with none of these is unambiguously an in-band error.\n */\nfunction isInBandErrorFrame(value: unknown): value is InBandErrorFrame {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n if (typeof record.error !== 'string' || record.error.length === 0) return false;\n // Reject frames that look like valid response chunks which happen to\n // also carry an `error` field (none documented, but defensive).\n return (\n !('model' in record) &&\n !('response' in record) &&\n !('message' in record) &&\n !('status' in record) &&\n !('done' in record)\n );\n}\n\n/**\n * Parses a byte stream from fetch body into an async generator of typed JSON chunks.\n *\n * Throws {@link OllamaStreamError} immediately upon encountering an\n * in-band `{\"error\": \"...\"}` frame. The thrown error carries an empty\n * `partialContent` (this low-level parser does not accumulate content;\n * the higher-level aggregator in `streaming/normalize.ts` is the\n * right place to surface partial content if needed).\n */\nexport async function* parseNdjsonStream<T>(\n stream: ReadableStream<Uint8Array>,\n): AsyncGenerator<T, void, undefined> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n await using _reader = disposableReader(reader);\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n // Keep the last partial line in buffer\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n let json: unknown;\n try {\n json = JSON.parse(trimmed);\n } catch (err) {\n throw new OllamaGenericClientError(`Failed to parse stream JSON chunk: ${trimmed}`, {\n cause: err,\n });\n }\n\n // In-band error trapping: detect `{\"error\": \"...\"}` frames\n // before they reach the typed-chunk consumer. This is the\n // critical fix for the \"HTTP 200 OK + mid-stream error\" case\n // documented in Ollama's errors.md — without it, the error\n // message would either bleed into content or hit undefined-field\n // accesses downstream.\n if (isInBandErrorFrame(json)) {\n throw new OllamaStreamError((json as InBandErrorFrame).error);\n }\n\n yield json as T;\n }\n }\n\n if (buffer.trim()) {\n const trimmed = buffer.trim();\n let json: unknown;\n try {\n json = JSON.parse(trimmed);\n } catch (err) {\n throw new OllamaGenericClientError(`Failed to parse stream JSON chunk: ${trimmed}`, {\n cause: err,\n });\n }\n if (isInBandErrorFrame(json)) {\n throw new OllamaStreamError((json as InBandErrorFrame).error);\n }\n yield json as T;\n }\n // reader.cancel() + reader.releaseLock() called automatically via `await using _reader`\n}\n","/**\n * Server-Sent Events (SSE) parser for OpenAI/Anthropic-compatible streaming endpoints.\n *\n * Implements standard event-stream field rules without coupling the parser to\n * any provider-specific event schema.\n */\n\nimport { disposableReader } from '../utils.js';\n\nexport interface SseEvent {\n /** Event type; omitted when the server emitted no explicit event field. */\n readonly event?: string | undefined;\n /** Event data with consecutive data fields joined by a newline. */\n readonly data: string;\n /** Last event id associated with this dispatch, when present. */\n readonly id?: string | undefined;\n /** Reconnection delay requested by the server, in milliseconds, when valid. */\n readonly retry?: number | undefined;\n}\n\nfunction dispatch(\n event: string | undefined,\n data: string[],\n id: string | undefined,\n retry: number | undefined,\n): SseEvent | undefined {\n if (data.length === 0) return undefined;\n\n const joined = data.join('\\n');\n return {\n ...(event !== undefined ? { event } : {}),\n data: joined.endsWith('\\n') ? joined.slice(0, -1) : joined,\n ...(id !== undefined ? { id } : {}),\n ...(retry !== undefined ? { retry } : {}),\n };\n}\n\n/**\n * Parses an SSE byte stream into discrete events.\n *\n * Supports CRLF, CR, and LF line endings; comments; repeated data fields;\n * event/id/retry fields; UTF-8 chunks split across arbitrary byte boundaries;\n * and a terminal event without a trailing blank line.\n */\nexport async function* parseSseStream(\n stream: ReadableStream<Uint8Array>,\n): AsyncGenerator<SseEvent, void, undefined> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n\n let buffer = '';\n let eventType: string | undefined;\n let data: string[] = [];\n let lastEventId: string | undefined;\n let retry: number | undefined;\n\n const processLine = (line: string): SseEvent | undefined => {\n if (line.length === 0) {\n const event = dispatch(eventType, data, lastEventId, retry);\n eventType = undefined;\n data = [];\n retry = undefined;\n return event;\n }\n\n if (line.startsWith(':')) return undefined;\n\n const separator = line.indexOf(':');\n const field = separator === -1 ? line : line.slice(0, separator);\n let value = separator === -1 ? '' : line.slice(separator + 1);\n if (value.startsWith(' ')) value = value.slice(1);\n\n switch (field) {\n case 'event':\n eventType = value;\n break;\n case 'data':\n data.push(value);\n break;\n case 'id':\n if (!value.includes('\\0')) lastEventId = value;\n break;\n case 'retry': {\n if (/^\\d+$/.test(value)) {\n const parsed = Number(value);\n if (Number.isSafeInteger(parsed)) retry = parsed;\n }\n break;\n }\n default:\n break;\n }\n\n return undefined;\n };\n\n await using _reader = disposableReader(reader);\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n while (true) {\n const lf = buffer.indexOf('\\n');\n const cr = buffer.indexOf('\\r');\n if (lf === -1 && cr === -1) break;\n // A CR may be the first half of a CRLF sequence split across two network chunks.\n if (cr !== -1 && lf === -1 && cr === buffer.length - 1) break;\n\n const lineEnd = lf === -1 ? cr : cr === -1 ? lf : Math.min(lf, cr);\n let separatorLength = 1;\n\n if (buffer[lineEnd] === '\\r' && buffer[lineEnd + 1] === '\\n') {\n separatorLength = 2;\n }\n\n const line = buffer.slice(0, lineEnd);\n buffer = buffer.slice(lineEnd + separatorLength);\n\n const event = processLine(line);\n if (event) yield event;\n }\n }\n\n buffer += decoder.decode();\n if (buffer.length > 0) {\n const event = processLine(buffer);\n if (event) yield event;\n }\n\n const terminal = dispatch(eventType, data, lastEventId, retry);\n if (terminal) yield terminal;\n // reader.cancel() + reader.releaseLock() called automatically via `await using _reader`\n}\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const IncludedBalanceSchema = z.object({\n balance_usd: z.number(),\n allowance_usd: z.number(),\n period: z.object({\n from: z.string(),\n until: z.string(),\n }),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const LegacyBalanceLimitSchema = z.object({\n remaining_percent: z.number().min(0).max(100),\n resets_at: z.string(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { LegacyBalanceLimitSchema } from './LegacyBalanceLimit.schema.js';\n\nexport const LegacyIncludedBalanceSchema = z.object({\n session: LegacyBalanceLimitSchema,\n weekly: LegacyBalanceLimitSchema,\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { IncludedBalanceSchema } from './IncludedBalance.schema.js';\nimport { LegacyIncludedBalanceSchema } from './LegacyIncludedBalance.schema.js';\n\nexport const BalanceResponseSchema = z.object({\n included: z.union([IncludedBalanceSchema, LegacyIncludedBalanceSchema]),\n purchased: z.object({\n balance_usd: z.number(),\n }),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const ToolCallSchema = z.object({\n function: z\n .object({\n name: z.string(),\n description: z.string().optional(),\n arguments: z.object({}).optional(),\n })\n .optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ToolCallSchema } from './ToolCall.schema.js';\n\nexport const ChatMessageSchema = z.object({\n role: z.enum(['system', 'user', 'assistant', 'tool']),\n content: z.string(),\n images: z.array(z.string()).optional(),\n tool_calls: z.array(ToolCallSchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Runtime options that control text generation */\nexport const ModelOptionsSchema = z\n .object({\n seed: z.number().optional(),\n temperature: z.number().optional(),\n top_k: z.number().optional(),\n top_p: z.number().optional(),\n min_p: z.number().optional(),\n stop: z.union([z.string(), z.array(z.string())]).optional(),\n num_ctx: z.number().optional(),\n num_predict: z.number().optional(),\n })\n .catchall(z.unknown());\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Controls a model's thinking output. Use `/api/show` to discover the supported values and default for the selected model. `true` requests thinking, `false` requests no thinking output, and `null` uses the model default. String values are model-defined; supported names must match `/api/show` exactly. Numbers are not supported. */\nexport const ThinkValueSchema = z.union([z.boolean(), z.string(), z.null()]);\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const ToolDefinitionSchema = z.object({\n type: z.enum(['function']),\n function: z.object({\n name: z.string(),\n description: z.string().optional(),\n parameters: z.object({}),\n }),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ChatMessageSchema } from './ChatMessage.schema.js';\nimport { ModelOptionsSchema } from './ModelOptions.schema.js';\nimport { ThinkValueSchema } from './ThinkValue.schema.js';\nimport { ToolDefinitionSchema } from './ToolDefinition.schema.js';\n\nexport const ChatRequestSchema = z.object({\n model: z.string(),\n messages: z.array(ChatMessageSchema),\n tools: z.array(ToolDefinitionSchema).optional(),\n format: z.union([z.enum(['json']), z.object({})]).optional(),\n options: ModelOptionsSchema.optional(),\n stream: z.boolean().optional(),\n think: ThinkValueSchema.optional(),\n keep_alive: z.union([z.string(), z.number()]).optional(),\n logprobs: z.boolean().optional(),\n top_logprobs: z.number().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Log probability information for a single token alternative */\nexport const TokenLogprobSchema = z.object({\n token: z.string().optional(),\n logprob: z.number().optional(),\n bytes: z.array(z.number()).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { TokenLogprobSchema } from './TokenLogprob.schema.js';\n\n/** Log probability information for a generated token */\nexport const LogprobSchema = z.object({\n token: z.string().optional(),\n logprob: z.number().optional(),\n bytes: z.array(z.number()).optional(),\n top_logprobs: z.array(TokenLogprobSchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { LogprobSchema } from './Logprob.schema.js';\nimport { ToolCallSchema } from './ToolCall.schema.js';\n\nexport const ChatResponseSchema = z.object({\n model: z.string().optional(),\n created_at: z.string().optional(),\n message: z\n .object({\n role: z.enum(['assistant']).optional(),\n content: z.string().optional(),\n thinking: z.string().optional(),\n tool_calls: z.array(ToolCallSchema).optional(),\n images: z.array(z.string()).optional(),\n })\n .optional(),\n done: z.boolean().optional(),\n done_reason: z.string().optional(),\n total_duration: z.number().optional(),\n load_duration: z.number().optional(),\n prompt_eval_count: z.number().optional(),\n prompt_eval_cached_count: z.number().optional(),\n prompt_eval_duration: z.number().optional(),\n eval_count: z.number().optional(),\n eval_duration: z.number().optional(),\n logprobs: z.array(LogprobSchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const CopyRequestSchema = z.object({\n source: z.string(),\n destination: z.string(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ChatMessageSchema } from './ChatMessage.schema.js';\n\nexport const CreateRequestSchema = z.object({\n model: z.string(),\n from: z.string().optional(),\n template: z.string().optional(),\n renderer: z.string().optional(),\n parser: z.string().optional(),\n files: z.object({}).catchall(z.string()).optional(),\n draft_files: z.object({}).catchall(z.string()).optional(),\n license: z.union([z.string(), z.array(z.string())]).optional(),\n system: z.string().optional(),\n parameters: z.object({}).optional(),\n messages: z.array(ChatMessageSchema).optional(),\n quantize: z.string().optional(),\n draft_quantize: z.string().optional(),\n requires: z.string().optional(),\n capabilities: z.array(z.string()).optional(),\n stream: z.boolean().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const DeleteRequestSchema = z.object({\n model: z.string(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ModelOptionsSchema } from './ModelOptions.schema.js';\n\nexport const EmbedRequestSchema = z.object({\n model: z.string(),\n input: z.union([z.string(), z.array(z.string())]),\n truncate: z.boolean().optional(),\n dimensions: z.number().optional(),\n keep_alive: z.string().optional(),\n options: ModelOptionsSchema.optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const EmbedResponseSchema = z.object({\n model: z.string().optional(),\n embeddings: z.array(z.array(z.number())).optional(),\n total_duration: z.number().optional(),\n load_duration: z.number().optional(),\n prompt_eval_count: z.number().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ModelOptionsSchema } from './ModelOptions.schema.js';\nimport { ThinkValueSchema } from './ThinkValue.schema.js';\n\nexport const GenerateRequestSchema = z.object({\n model: z.string(),\n prompt: z.string().optional(),\n suffix: z.string().optional(),\n images: z.array(z.string()).optional(),\n format: z.union([z.string(), z.object({})]).optional(),\n system: z.string().optional(),\n stream: z.boolean().optional(),\n think: ThinkValueSchema.optional(),\n raw: z.boolean().optional(),\n keep_alive: z.union([z.string(), z.number()]).optional(),\n options: ModelOptionsSchema.optional(),\n logprobs: z.boolean().optional(),\n top_logprobs: z.number().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { LogprobSchema } from './Logprob.schema.js';\n\nexport const GenerateResponseSchema = z.object({\n model: z.string().optional(),\n created_at: z.string().optional(),\n response: z.string().optional(),\n thinking: z.string().optional(),\n done: z.boolean().optional(),\n done_reason: z.string().optional(),\n total_duration: z.number().optional(),\n load_duration: z.number().optional(),\n prompt_eval_count: z.number().optional(),\n prompt_eval_cached_count: z.number().optional(),\n prompt_eval_duration: z.number().optional(),\n eval_count: z.number().optional(),\n eval_duration: z.number().optional(),\n logprobs: z.array(LogprobSchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Summary information for a locally available model */\nexport const ModelSummarySchema = z.object({\n name: z.string().optional(),\n model: z.string().optional(),\n remote_model: z.string().optional(),\n remote_host: z.string().optional(),\n modified_at: z.string().optional(),\n size: z.number().optional(),\n digest: z.string().optional(),\n details: z\n .object({\n format: z.string().optional(),\n family: z.string().optional(),\n families: z.union([z.array(z.string()), z.null()]).optional(),\n parameter_size: z.string().optional(),\n quantization_level: z.string().optional(),\n })\n .optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ModelSummarySchema } from './ModelSummary.schema.js';\n\nexport const ListResponseSchema = z.object({\n models: z.array(ModelSummarySchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const PsSchema = z.object({\n name: z.string().optional(),\n model: z.string().optional(),\n size: z.number().optional(),\n digest: z.string().optional(),\n details: z.object({}).optional(),\n expires_at: z.string().optional(),\n size_vram: z.number().optional(),\n context_length: z.number().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { PsSchema } from './Ps.schema.js';\n\nexport const PsResponseSchema = z.object({\n models: z.array(PsSchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const PullRequestSchema = z.object({\n model: z.string(),\n insecure: z.boolean().optional(),\n stream: z.boolean().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const PushRequestSchema = z.object({\n model: z.string(),\n insecure: z.boolean().optional(),\n stream: z.boolean().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const ShowRequestSchema = z.object({\n model: z.string(),\n verbose: z.boolean().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Thinking controls advertised by a model. Models without thinking metadata omit this field. */\nexport const ThinkingSchema = z.object({\n values: z.array(z.union([z.boolean(), z.string()])),\n default: z.union([z.boolean(), z.string()]),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ThinkingSchema } from './Thinking.schema.js';\n\nexport const ShowResponseSchema = z.object({\n thinking: ThinkingSchema.optional(),\n parameters: z.string().optional(),\n license: z.string().optional(),\n modified_at: z.string().optional(),\n details: z.object({}).optional(),\n template: z.string().optional(),\n capabilities: z.array(z.string()).optional(),\n model_info: z.object({}).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const StatusResponseSchema = z.object({\n status: z.string().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** A nonempty string, or an object or array serialized as JSON text. Not interpreted as chat messages or multimodal input. */\nexport const SystemOneContentSchema = z.union([\n z.string().regex(new RegExp('\\\\S')),\n z.object({}).catchall(z.unknown()),\n z.array(z.unknown()),\n]);\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneContentSchema } from './SystemOneContent.schema.js';\n\nexport const SystemOneChoiceQuestionSchema = z.object({\n type: z.enum(['choice']),\n instructions: SystemOneContentSchema,\n criteria: z\n .object({})\n .catchall(z.union([z.string(), z.null()]))\n .refine((v) => Object.keys(v).length >= 2, { message: 'must have at least 2 properties' })\n .refine((v) => Object.keys(v).length <= 26, { message: 'must have at most 26 properties' })\n .refine((v) => Object.keys(v).every((k) => new RegExp('\\\\S').test(k)), {\n message: 'property names must match pattern \"\\\\S\"',\n }),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneContentSchema } from './SystemOneContent.schema.js';\n\nexport const SystemOneNoulQuestionSchema = z.object({\n type: z.enum(['noul']),\n instructions: SystemOneContentSchema,\n criteria: z\n .object({\n false: z.string().optional(),\n true: z.string().optional(),\n })\n .optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneContentSchema } from './SystemOneContent.schema.js';\n\nexport const SystemOneScoreQuestionSchema = z.object({\n type: z.enum(['score']),\n instructions: SystemOneContentSchema,\n criteria: z.array(z.string()).min(2).max(26),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneChoiceQuestionSchema } from './SystemOneChoiceQuestion.schema.js';\nimport { SystemOneContentSchema } from './SystemOneContent.schema.js';\nimport { SystemOneNoulQuestionSchema } from './SystemOneNoulQuestion.schema.js';\nimport { SystemOneScoreQuestionSchema } from './SystemOneScoreQuestion.schema.js';\n\nexport const SystemOneRequestSchema = z.object({\n model: z.string().regex(new RegExp('\\\\S')),\n state: SystemOneContentSchema,\n images: z.array(z.string()).optional(),\n questions: z\n .object({})\n .catchall(\n z.union([\n SystemOneChoiceQuestionSchema,\n SystemOneNoulQuestionSchema,\n SystemOneScoreQuestionSchema,\n ]),\n )\n .refine((v) => Object.keys(v).length >= 1, { message: 'must have at least 1 properties' })\n .refine((v) => Object.keys(v).length <= 64, { message: 'must have at most 64 properties' })\n .refine((v) => Object.keys(v).every((k) => new RegExp('\\\\S').test(k)), {\n message: 'property names must match pattern \"\\\\S\"',\n }),\n keep_alive: z.union([z.string(), z.number()]).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Distribution concentration, calculated as 1 - H(p) / ln(N), where H(p) is entropy and N is the candidate count. Zero means uniform probabilities; values near 1 mean one candidate dominates. Not calibrated correctness. */\nexport const SystemOneConfidenceSchema = z.number().min(0).max(1);\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Probabilities normalized over the supplied candidates, summing to 1 subject to floating-point precision. */\nexport const SystemOneProbabilitiesSchema = z.object({}).catchall(z.number().min(0).max(1));\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneConfidenceSchema } from './SystemOneConfidence.schema.js';\nimport { SystemOneProbabilitiesSchema } from './SystemOneProbabilities.schema.js';\n\nexport const SystemOneChoiceAnswerSchema = z.object({\n type: z.enum(['choice']),\n choice: z.string(),\n probabilities: SystemOneProbabilitiesSchema,\n confidence: SystemOneConfidenceSchema,\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const SystemOneNoulAnswerSchema = z.object({\n type: z.enum(['noul']),\n noul: z.number().min(0).max(1),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneConfidenceSchema } from './SystemOneConfidence.schema.js';\nimport { SystemOneProbabilitiesSchema } from './SystemOneProbabilities.schema.js';\n\nexport const SystemOneScoreAnswerSchema = z.object({\n type: z.enum(['score']),\n score: z.number().min(0).max(25),\n legend: z.object({}).catchall(z.string()),\n probabilities: SystemOneProbabilitiesSchema,\n confidence: SystemOneConfidenceSchema,\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneChoiceAnswerSchema } from './SystemOneChoiceAnswer.schema.js';\nimport { SystemOneNoulAnswerSchema } from './SystemOneNoulAnswer.schema.js';\nimport { SystemOneScoreAnswerSchema } from './SystemOneScoreAnswer.schema.js';\n\nexport const SystemOneResponseSchema = z.object({\n model: z.string(),\n answers: z\n .object({})\n .catchall(\n z.union([SystemOneChoiceAnswerSchema, SystemOneNoulAnswerSchema, SystemOneScoreAnswerSchema]),\n ),\n usage: z.object({\n input_tokens: z.number().min(0),\n output_tokens: z.number().min(0),\n }),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const UsageMetricsSchema = z.object({\n request_count: z.number().min(0),\n usage_usd: z.number().optional(),\n input_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n output_tokens: z.number().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { UsageMetricsSchema } from './UsageMetrics.schema.js';\n\nexport const UsageBucketSchema = z.intersection(\n UsageMetricsSchema,\n z.object({\n from: z.string(),\n until: z.string(),\n partial: z.boolean().optional(),\n }),\n);\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { UsageBucketSchema } from './UsageBucket.schema.js';\nimport { UsageMetricsSchema } from './UsageMetrics.schema.js';\n\nexport const UsageResponseSchema = z.object({\n range: z.enum(['24h', '7d', '30d']),\n scope: z.enum(['self', 'team']),\n granularity: z.enum(['hour', 'day']),\n from: z.string(),\n until: z.string(),\n totals: UsageMetricsSchema,\n buckets: z.array(UsageBucketSchema),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const VersionResponseSchema = z.object({\n version: z.string().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const WebFetchRequestSchema = z.object({\n url: z.string(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const WebFetchResponseSchema = z.object({\n title: z.string().optional(),\n content: z.string().optional(),\n links: z.array(z.string()).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const WebSearchRequestSchema = z.object({\n query: z.string(),\n max_results: z.number().min(1).max(10).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const WebSearchResultSchema = z.object({\n title: z.string().optional(),\n url: z.string().optional(),\n content: z.string().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { WebSearchResultSchema } from './WebSearchResult.schema.js';\n\nexport const WebSearchResponseSchema = z.object({\n results: z.array(WebSearchResultSchema).optional(),\n});\n","/**\n * AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n * Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n * Maps every operation whose IR entry carries `request.$ref` / `response.$ref`\n * to its generated Zod schema. Consumed by OllamaRuntime when\n * `validateRequests: true` / `validateResponses: true` is set (ADR 0020).\n */\n\nimport type { z } from 'zod';\nimport { BalanceResponseSchema } from '../models/BalanceResponse.schema.js';\nimport { ChatRequestSchema } from '../models/ChatRequest.schema.js';\nimport { ChatResponseSchema } from '../models/ChatResponse.schema.js';\nimport { CopyRequestSchema } from '../models/CopyRequest.schema.js';\nimport { CreateRequestSchema } from '../models/CreateRequest.schema.js';\nimport { DeleteRequestSchema } from '../models/DeleteRequest.schema.js';\nimport { EmbedRequestSchema } from '../models/EmbedRequest.schema.js';\nimport { EmbedResponseSchema } from '../models/EmbedResponse.schema.js';\nimport { GenerateRequestSchema } from '../models/GenerateRequest.schema.js';\nimport { GenerateResponseSchema } from '../models/GenerateResponse.schema.js';\nimport { ListResponseSchema } from '../models/ListResponse.schema.js';\nimport { PsResponseSchema } from '../models/PsResponse.schema.js';\nimport { PullRequestSchema } from '../models/PullRequest.schema.js';\nimport { PushRequestSchema } from '../models/PushRequest.schema.js';\nimport { ShowRequestSchema } from '../models/ShowRequest.schema.js';\nimport { ShowResponseSchema } from '../models/ShowResponse.schema.js';\nimport { StatusResponseSchema } from '../models/StatusResponse.schema.js';\nimport { SystemOneRequestSchema } from '../models/SystemOneRequest.schema.js';\nimport { SystemOneResponseSchema } from '../models/SystemOneResponse.schema.js';\nimport { UsageResponseSchema } from '../models/UsageResponse.schema.js';\nimport { VersionResponseSchema } from '../models/VersionResponse.schema.js';\nimport { WebFetchRequestSchema } from '../models/WebFetchRequest.schema.js';\nimport { WebFetchResponseSchema } from '../models/WebFetchResponse.schema.js';\nimport { WebSearchRequestSchema } from '../models/WebSearchRequest.schema.js';\nimport { WebSearchResponseSchema } from '../models/WebSearchResponse.schema.js';\n\n/**\n * Map from operationId → request schema. The runtime consults this\n * registry (via getRequestSchema) when `validateRequests: true` is\n * set on OllamaRuntime.\n *\n * Wave 12 (P1 #6): this file is now generated from the canonical IR.\n */\nexport const requestSchemas: Readonly<Record<string, z.ZodType>> = {\n chat: ChatRequestSchema,\n copy: CopyRequestSchema,\n create: CreateRequestSchema,\n delete: DeleteRequestSchema,\n embed: EmbedRequestSchema,\n generate: GenerateRequestSchema,\n pull: PullRequestSchema,\n push: PushRequestSchema,\n show: ShowRequestSchema,\n systemOne: SystemOneRequestSchema,\n webFetch: WebFetchRequestSchema,\n webSearch: WebSearchRequestSchema,\n};\n\n/**\n * Map from operationId → response schema. The runtime consults this\n * registry (via getResponseSchema) when `validateResponses: true` is\n * set on OllamaRuntime. Wave 13 added this map for operations where\n * typed response semantics are critical (e.g. System One).\n */\nexport const responseSchemas: Readonly<Record<string, z.ZodType>> = {\n balance: BalanceResponseSchema,\n chat: ChatResponseSchema,\n create: StatusResponseSchema,\n embed: EmbedResponseSchema,\n generate: GenerateResponseSchema,\n ps: PsResponseSchema,\n pull: StatusResponseSchema,\n push: StatusResponseSchema,\n show: ShowResponseSchema,\n systemOne: SystemOneResponseSchema,\n tags: ListResponseSchema,\n usage: UsageResponseSchema,\n version: VersionResponseSchema,\n webFetch: WebFetchResponseSchema,\n webSearch: WebSearchResponseSchema,\n};\n\n/** Look up a request schema by operationId. Returns `undefined` if no schema exists. */\nexport function getRequestSchema(operationId: string): z.ZodType | undefined {\n return requestSchemas[operationId];\n}\n\n/** Look up a response schema by operationId. Returns `undefined` if no schema exists. */\nexport function getResponseSchema(operationId: string): z.ZodType | undefined {\n return responseSchemas[operationId];\n}\n","/**\n * OllamaRuntime — the runtime seam generated API classes delegate to.\n *\n * This is the only hand-written file in `src/generated/runtime/`. Every\n * generated method in `src/generated/api/*-api.ts` ends with:\n *\n * ```ts\n * return this.runtime.invoke({ operation: chatOp, body: request });\n * ```\n *\n * The runtime is responsible for:\n * - Method/path resolution (from {@link OperationDefinition})\n * - Streaming default application (when the request doesn't set `stream`)\n * - Environment guard (rejecting cloud calls for local-only operations)\n * - Version constraint guard (failing fast when the server is too old)\n * - Delegating to the existing {@link HttpClient} for transport, retry,\n * telemetry, NDJSON/SSE parsing\n *\n * It is intentionally a thin adapter — the existing transport, streaming,\n * middleware, and error-mapping layers are preserved verbatim. This file\n * only adds the contract-aware glue between generated API classes and the\n * existing HttpClient.\n */\nimport { HttpClient, type HttpRequestOptions } from '../../transport/http.js';\nimport { parseNdjsonStream } from '../../streaming/ndjson.js';\nimport { parseSseStream } from '../../streaming/sse.js';\nimport {\n OllamaGenericClientError,\n OllamaRequestTooLargeError,\n OllamaRequestValidationError,\n OllamaResponseValidationError,\n OllamaServerVersionUnknownError,\n} from '../../errors.js';\nimport type { OperationDefinition, InvokeRequest } from './operation-definition.js';\nimport type { TransportMode } from './operation-definition.js';\nimport { getRequestSchema, getResponseSchema } from './schema-registry.js';\n\n/**\n * Minimal HTTP client surface the runtime consumes. Either a full\n * {@link HttpClient} or a {@link FailoverHttpClient} — the runtime only\n * calls `request()`.\n *\n * Wave 14: widened from `HttpClient` to allow the failover-aware wrapper\n * without breaking existing callers that pass a plain HttpClient.\n */\nexport type RuntimeHttpBackend = Pick<HttpClient, 'baseUrl' | 'request'>;\n\n/** Constructor options for {@link OllamaRuntime}. */\nexport interface OllamaRuntimeOptions {\n readonly http: RuntimeHttpBackend;\n /**\n * Wave 15 (P0): HTTP backend for operations that declare a non-default\n * `host` (e.g. web search/fetch at `https://ollama.com`). When an\n * operation has `host: 'https://ollama.com'` and `cloudHttp` is\n * configured, the runtime routes the request through this backend\n * instead of the default `http`. When `cloudHttp` is not configured\n * and a host-bearing operation is invoked, the runtime throws.\n *\n * OllamaClient.runtime sets this to a dedicated cloud HttpClient\n * pointed at `https://ollama.com` with the configured API key.\n */\n readonly cloudHttp?: RuntimeHttpBackend;\n /**\n * Whether this runtime is targeting a local Ollama instance. Defaults to\n * `true`. When `false`, operations marked `environment.cloud === false`\n * (i.e. local-only like `/v1/systemone`) are rejected at request time.\n */\n readonly localMode?: boolean;\n /**\n * Server version, if known (typically from a prior `/api/version` call).\n * When set, operations with `constraints.minOllamaVersion` are checked\n * against this value at request time.\n *\n * Wave 12 (P0 #5): when unset, the runtime will lazily fetch and cache\n * the server version the first time a version-gated operation is\n * invoked. The fetch policy is controlled by {@link enforceVersion}.\n */\n readonly serverVersion?: string;\n /**\n * When `true`, the runtime validates every request body against the\n * generated Zod schema before sending it. Defaults to `false` — opt-in.\n *\n * Validation behavior:\n * - If the operation has a registered request schema (see\n * {@link schema-registry.ts}), the body is parsed via `safeParse`.\n * - On parse failure, throws `OllamaRequestValidationError` with the\n * Zod issues attached. No HTTP request is made.\n * - On parse success, the parsed (and stripped of unknown fields) body\n * is sent — this means callers can't accidentally send extra fields\n * that the contract doesn't allow.\n * - If the operation has NO registered schema (e.g. GET endpoints,\n * `/v1/systemone`, OpenAI/Anthropic compat surfaces), validation is\n * skipped silently.\n *\n * Response validation is intentionally NOT enabled by default — see\n * ADR 0020 for the rationale (forward-compat with wire-format\n * extensions).\n *\n * Wave 13: an opt-in `validateResponses` option is now available for\n * operations where typed response semantics are the entire point\n * (e.g. System One). When enabled, the runtime validates the HTTP\n * response body against the operation's registered response schema\n * before returning it to the caller. On failure, throws\n * {@link OllamaResponseValidationError}.\n */\n readonly validateRequests?: boolean;\n /**\n * Wave 13: when `true`, the runtime validates every response body\n * against the operation's registered response schema before returning\n * it. Defaults to `false` — opt-in. Only operations with a registered\n * response schema are validated; others pass through unchanged.\n *\n * On validation failure, throws {@link OllamaResponseValidationError}\n * with the Zod issues attached. The HTTP response is still consumed.\n *\n * Use this for operations where typed response semantics are critical\n * (System One, structured output). Don't enable globally — legitimate\n * forward-compat wire-format extensions would cause false rejections.\n */\n readonly validateResponses?: boolean;\n /**\n * Policy for enforcing `constraints.minOllamaVersion` when\n * {@link serverVersion} is not explicitly supplied.\n *\n * - `'auto'` (default): lazily fetch `/api/version` once and cache the\n * result; subsequent version-gated invocations reuse the cached\n * value. If the fetch fails, the operation is allowed through\n * (fail-open) — the server will reject it if it truly doesn't\n * support it.\n * - `'strict'`: same as `'auto'`, but if the version fetch fails the\n * invocation throws {@link OllamaServerVersionUnknownError} rather\n * than fail-open. Use this when the caller wants hard guarantees\n * that a version-gated operation will not be sent to a server that\n * can't handle it.\n * - `'off'`: never fetch `/api/version` automatically. The runtime\n * only enforces the version constraint when {@link serverVersion}\n * was explicitly supplied. Useful in tests that mock fetch and want\n * to avoid spurious version probes.\n */\n readonly enforceVersion?: 'auto' | 'strict' | 'off';\n}\n\nfunction compareVersions(a: string, b: string): number {\n const pa = a.split('.').map((s) => Number.parseInt(s, 10) ?? 0);\n const pb = b.split('.').map((s) => Number.parseInt(s, 10) ?? 0);\n for (let i = 0; i < Math.max(pa.length, pb.length); i += 1) {\n const va = pa[i] ?? 0;\n const vb = pb[i] ?? 0;\n if (va !== vb) return va - vb;\n }\n return 0;\n}\n\n/**\n * Best-effort one-shot fetch of the Ollama server version.\n *\n * Resolves to `undefined` if the server's response shape doesn't include a\n * `version` field. Network/parse errors propagate to the caller, where the\n * `enforceVersion` policy decides whether they become hard failures\n * ('strict') or silent fallthrough ('auto').\n *\n * The result is cached per-runtime in {@link OllamaRuntime}'s private\n * state — we don't re-probe `/api/version` for every version-gated call.\n */\nasync function fetchServerVersion(http: RuntimeHttpBackend): Promise<string | undefined> {\n const result = await http.request<{ version?: unknown }>({\n path: '/api/version',\n method: 'GET',\n });\n if (result && typeof result.version === 'string') return result.version;\n return undefined;\n}\n\n/**\n * Decide whether the request should stream. If the request body explicitly\n * sets `stream`, that wins. Otherwise the operation's `streamingDefault`\n * from the contract is used.\n */\nfunction shouldStream(req: InvokeRequest): boolean {\n if (req.body && typeof req.body === 'object' && 'stream' in req.body) {\n const explicit = (req.body as { stream?: unknown }).stream;\n if (typeof explicit === 'boolean') return explicit;\n }\n return Boolean(req.streamingDefault ?? req.operation.transport.streamingDefault);\n}\n\n/**\n * Apply the streaming default to the request body if needed.\n *\n * If the operation streams by default and the body doesn't set `stream`,\n * add `stream: true`. The user can always override by setting `stream`\n * explicitly on the request.\n */\nfunction buildBody(req: InvokeRequest): unknown {\n if (req.body === undefined) return undefined;\n if (typeof req.body !== 'object' || req.body === null) return req.body;\n const body = req.body as Record<string, unknown>;\n if (\n req.operation.transport.streaming &&\n req.operation.transport.streamingDefault &&\n body.stream === undefined\n ) {\n return { ...body, stream: true };\n }\n return body;\n}\n\n/** The runtime seam. */\nexport class OllamaRuntime {\n /**\n * Cached promise of the Ollama server version, populated lazily the first\n * time a version-gated operation is invoked. `undefined` until then.\n *\n * Wave 12 (P0 #5): see {@link OllamaRuntimeOptions.enforceVersion}.\n */\n private serverVersionCache: Promise<string | undefined> | undefined;\n\n constructor(private readonly options: OllamaRuntimeOptions) {}\n\n /**\n * Wave 15 (P0): resolve the HTTP backend for a given operation.\n *\n * Operations with a declared `host` (e.g. web search/fetch at\n * https://ollama.com) must route to a HttpClient pointed at that host,\n * not the default one. The runtime accepts an optional `cloudHttp`\n * backend for this purpose — if the operation declares a host and no\n * cloud backend is configured, the runtime throws rather than silently\n * sending the request to the wrong server.\n */\n private resolveHttpBackend(operation: OperationDefinition): RuntimeHttpBackend {\n if (operation.host) {\n const cloudHttp = this.options.cloudHttp;\n if (!cloudHttp) {\n throw new OllamaGenericClientError(\n `Operation ${operation.operationId} (${operation.method} ${operation.path}) ` +\n `targets host \"${operation.host}\" but the runtime has no cloudHttp backend configured. ` +\n `Use OllamaClient.webSearch() / OllamaClient.webFetch() for cloud-hosted operations, ` +\n `or construct OllamaRuntime with a cloudHttp option.`,\n );\n }\n return cloudHttp;\n }\n return this.options.http;\n }\n\n /**\n * Invoke an operation. Called by every generated API method.\n *\n * Returns a `Promise<T>` for non-streaming operations, or an\n * `AsyncGenerator<T>` for streaming operations. The generated API\n * class's overloads pick the right return type at compile time.\n */\n async invoke<T = unknown>(req: InvokeRequest): Promise<T> {\n await this.assertOperationAllowed(req.operation);\n let body = buildBody(req);\n\n // Wave 10 (ADR 0020): runtime Zod validation. Opt-in via\n // `validateRequests: true` on the runtime constructor. Throws\n // `OllamaRequestValidationError` BEFORE any HTTP request is made\n // when the body fails validation. The validated (and stripped)\n // body replaces the original so unknown fields can't leak through.\n if (this.options.validateRequests === true && body !== undefined) {\n const schema = getRequestSchema(req.operation.operationId);\n if (schema) {\n const result = schema.safeParse(body);\n if (!result.success) {\n throw new OllamaRequestValidationError(\n `Request validation failed for operation \"${req.operation.operationId}\" ` +\n `(${req.operation.method} ${req.operation.path}): ` +\n result.error.issues\n .map((i) => `${i.path.join('.') || '<root>'}: ${i.message}`)\n .join('; '),\n {\n operationId: req.operation.operationId,\n issues: result.error.issues,\n request: { method: req.operation.method, url: req.operation.path },\n },\n );\n }\n body = result.data;\n }\n }\n\n // Wave 12 (P0 #5) + Wave 13: enforce request size limits BEFORE\n // the request is sent. The Ollama server returns 413 for oversized\n // bodies; failing fast client-side avoids the round-trip.\n //\n // Wave 13 adds conditional limits: when the operation declares\n // `maxRequestBytesWithImages` AND the body contains a non-empty\n // `images` array, the higher limit applies (e.g. System One allows\n // 32 MiB with images vs 64 KiB without). When images are absent\n // or the operation doesn't declare a separate images limit, the\n // base `maxRequestBytes` applies.\n if (body !== undefined) {\n const serialized = serializeForByteCount(body);\n const hasImages = bodyHasImages(body);\n const maxBytesWithImages = req.operation.constraints?.maxRequestBytesWithImages;\n const maxBytesBase = req.operation.constraints?.maxRequestBytes;\n const applicableLimit =\n hasImages && maxBytesWithImages !== undefined ? maxBytesWithImages : maxBytesBase;\n if (applicableLimit !== undefined && serialized.byteLength > applicableLimit) {\n throw new OllamaRequestTooLargeError(\n `Operation ${req.operation.operationId} (${req.operation.method} ` +\n `${req.operation.path}) request body is ${serialized.byteLength} bytes, ` +\n `exceeding the contract limit of ${applicableLimit} bytes` +\n (hasImages ? ' (images limit).' : '.'),\n {\n operationId: req.operation.operationId,\n actualBytes: serialized.byteLength,\n maxBytes: applicableLimit,\n request: { method: req.operation.method, url: req.operation.path },\n },\n );\n }\n }\n\n const streaming = shouldStream(req);\n\n // Wave 15 (P0): substitute path parameters into the path template.\n // The operation's path may contain `{name}` segments (e.g.\n // `/v1/models/{model}`, `/api/blobs/{digest}`). The caller provides\n // values via `req.pathParams`; we URI-encode each value and substitute\n // it into the template. If a required path parameter is missing, we\n // throw before making the HTTP request.\n const resolvedPath = resolvePathParams(req.operation.path, req.pathParams);\n\n // Wave 17 (P1): apply query parameters to the path. Query params are\n // appended as URL-encoded key=value pairs after a '?' separator.\n const pathWithQuery = applyQueryParams(resolvedPath, req.queryParams);\n\n // Wave 17 (P1): extract model from the request body for failover\n // routing. The failover layer uses this to filter endpoints by\n // OllamaEndpoint.models (credential-scoped routing). We extract it\n // here rather than in the FailoverHttpClient because the runtime\n // has access to the request body.\n const model = req.model ?? extractModelFromBody(body);\n\n // Wave 17 (P1): merge header parameters from the InvokeRequest with\n // any existing headers. The operation may declare header parameters\n // (e.g. Authorization, Accept); the caller provides values via\n // req.headerParams.\n const headers: Record<string, string> = {};\n if (req.headerParams) {\n for (const [key, value] of Object.entries(req.headerParams)) {\n headers[key] = value;\n }\n }\n\n // The HttpClient expects the narrow method union 'GET' | 'POST' |\n // 'DELETE' | 'HEAD' | undefined — cast through `as` because our\n // OperationDefinition.method is the wider HttpMethod type.\n // Wave 15: pass the model through via a custom property on the\n // request options. The FailoverHttpClient reads this to pass to\n // executeWithFailover for model-scoped routing. Plain HttpClient\n // ignores it (it's not part of HttpRequestOptions).\n const httpReq = {\n path: pathWithQuery,\n method: req.operation.method as 'GET' | 'POST' | 'DELETE' | 'HEAD',\n ...(body !== undefined ? { body } : {}),\n ...(Object.keys(headers).length > 0 ? { headers } : {}),\n ...(req.signal !== undefined ? { signal: req.signal } : {}),\n ...(streaming ? { raw: true } : {}),\n ...(model !== undefined ? { model } : {}),\n } as HttpRequestOptions;\n\n if (!streaming) {\n const result = (await this.resolveHttpBackend(req.operation).request<T>(httpReq)) as T;\n // Wave 13: opt-in response validation. When `validateResponses: true`\n // is set and the operation has a registered response schema, validate\n // the response body before returning it. Throws\n // OllamaResponseValidationError on failure. Only use this for\n // operations where typed response semantics are critical (System One,\n // structured output) — don't enable globally.\n if (this.options.validateResponses === true) {\n const responseSchema = getResponseSchema(req.operation.operationId);\n if (responseSchema) {\n const result2 = responseSchema.safeParse(result);\n if (!result2.success) {\n throw new OllamaResponseValidationError(\n `Response validation failed for operation \"${req.operation.operationId}\" ` +\n `(${req.operation.method} ${req.operation.path}): ` +\n result2.error.issues\n .map((i) => `${i.path.join('.') || '<root>'}: ${i.message}`)\n .join('; '),\n {\n operationId: req.operation.operationId,\n issues: result2.error.issues,\n request: { method: req.operation.method, url: req.operation.path },\n },\n );\n }\n }\n }\n return result;\n }\n\n // Streaming: HttpClient returns the raw Response (via the `raw: true`\n // option) so we can read its body through the parser the contract\n // specifies for this operation.\n //\n // Wave 12 (P0 #2): the runtime now honors `operation.transport.mode`\n // instead of unconditionally parsing every stream as NDJSON. Native\n // Ollama operations (chat/generate/create/pull/push) declare\n // `transport.mode === 'ndjson'` and continue to use parseNdjsonStream;\n // OpenAI/Anthropic compatibility operations declare `transport.mode ===\n // 'sse'` and now correctly use the SSE parser, then JSON-decode each\n // event's `data` field. This closes the contract/runtime violation\n // where generated compat streaming was being parsed as NDJSON.\n const response = await this.resolveHttpBackend(req.operation).request<Response>(httpReq);\n if (!response.body) {\n throw new OllamaGenericClientError(\n `Operation ${req.operation.operationId}: streaming response had no body.`,\n );\n }\n return parseStreamByMode<T>(req.operation.transport.mode, response.body) as unknown as T;\n }\n\n /**\n * Apply environment + version guards before delegating to HttpClient.\n *\n * Throws {@link OllamaGenericClientError} when:\n * - The operation is local-only and the runtime is in cloud mode.\n * - The operation has `constraints.minOllamaVersion` and the server is older.\n *\n * Wave 12 (P0 #5): when `minOllamaVersion` is declared but the runtime's\n * `serverVersion` is unknown AND `enforceVersion` is `'auto'` or\n * `'strict'`, the runtime lazily fetches `/api/version` (cached on the\n * runtime instance) so the constraint is actually enforced even when the\n * caller didn't supply it. Previously the constraint was only enforced\n * when `serverVersion` was manually supplied — meaning in practice it was\n * almost never enforced.\n */\n private async assertOperationAllowed(operation: OperationDefinition): Promise<void> {\n const localMode = this.options.localMode ?? true;\n if (!localMode && !operation.environment.cloud) {\n throw new OllamaGenericClientError(\n `Operation ${operation.operationId} (${operation.method} ${operation.path}) ` +\n `is local-only and not supported in cloud mode.`,\n );\n }\n const minVersion = operation.constraints?.minOllamaVersion;\n if (!minVersion) return;\n\n let serverVersion = this.options.serverVersion;\n const policy = this.options.enforceVersion ?? 'auto';\n if (!serverVersion && policy !== 'off') {\n if (!this.serverVersionCache) {\n const p = fetchServerVersion(this.options.http).catch((err) => {\n if (policy === 'strict') {\n throw new OllamaServerVersionUnknownError(\n `Operation ${operation.operationId} requires Ollama >= ${minVersion} ` +\n `but the runtime could not determine the server version ` +\n `(enforceVersion: 'strict').`,\n {\n operationId: operation.operationId,\n minRequiredVersion: minVersion,\n cause: err,\n },\n );\n }\n // 'auto' — fail-open: surface nothing, the server will reject if\n // it can't handle it.\n return undefined;\n });\n this.serverVersionCache = p;\n }\n serverVersion = (await this.serverVersionCache) ?? undefined;\n }\n\n if (serverVersion && compareVersions(serverVersion, minVersion) < 0) {\n throw new OllamaGenericClientError(\n `Operation ${operation.operationId} (${operation.method} ${operation.path}) ` +\n `requires Ollama >= ${minVersion} (server reports ${serverVersion}).`,\n );\n }\n }\n}\n\n/**\n * Pick the stream parser that matches the operation's declared transport\n * mode, returning a uniform `AsyncGenerator<T>`.\n *\n * - `ndjson` → one JSON object per line (native Ollama streaming).\n * - `sse` → Server-Sent Events; each event's `data` field is parsed as\n * JSON. Heartbeat/comment-only events and events whose `data`\n * is the literal `[DONE]` sentinel are skipped (the OpenAI\n * compatibility layer uses that sentinel to terminate streams).\n * - `json` → not a streaming mode; callers should never reach this branch\n * for a non-streaming operation. We throw defensively so a\n * future operation that mis-declares its transport surfaces\n * loudly instead of silently degrading.\n */\nfunction parseStreamByMode<T>(\n mode: TransportMode,\n body: ReadableStream<Uint8Array>,\n): AsyncGenerator<T, void, undefined> {\n if (mode === 'ndjson') {\n return parseNdjsonStream<T>(body);\n }\n if (mode === 'sse') {\n return parseSseStreamAsJson<T>(body);\n }\n throw new OllamaGenericClientError(\n `Transport mode \"${mode}\" is not a streaming mode; cannot parse a stream for it.`,\n );\n}\n\n/**\n * Adapter that yields the JSON-decoded payload of each SSE `data` field.\n *\n * The hand-written OpenAI/Anthropic compatibility clients\n * (`src/integrations/{openai,anthropic}.ts`) consume raw `SseEvent`s and\n * apply provider-specific event-shape logic (tool-call accumulation,\n * reasoning deltas, etc.). The generated compatibility API surface is\n * intentionally shape-agnostic: it yields the raw JSON payload of each\n * event, leaving provider-specific interpretation to the caller. Consumers\n * who want the richer aggregated streaming experience should use\n * `client.openai` / `client.anthropic` instead of the generated API class.\n */\nasync function* parseSseStreamAsJson<T>(\n body: ReadableStream<Uint8Array>,\n): AsyncGenerator<T, void, undefined> {\n for await (const event of parseSseStream(body)) {\n const data = event.data;\n if (!data) continue;\n // OpenAI's stream terminator sentinel — yield nothing; the generator\n // simply completes on the next iteration.\n if (data === '[DONE]') return;\n try {\n yield JSON.parse(data) as T;\n } catch (err) {\n throw new OllamaGenericClientError(`Failed to parse SSE event data as JSON: ${data}`, {\n cause: err,\n });\n }\n }\n}\n\n/**\n * Serialize a request body for byte counting (used by the\n * `maxRequestBytes` guard). The byte count mirrors what the HttpClient\n * would actually send on the wire: UTF-8 encoded JSON. Buffer (Node) and\n * Uint8Array inputs are passed through directly since their byte length\n * is already known.\n *\n * This intentionally mirrors HttpClient's serialization (`JSON.stringify`\n * with no whitespace) so the byte count is accurate against the actual\n * request payload — using a different serializer would let oversized\n * bodies through.\n */\nfunction serializeForByteCount(body: unknown): Uint8Array {\n if (body instanceof Uint8Array) return body;\n if (typeof body === 'string') return new TextEncoder().encode(body);\n // HttpClient calls JSON.stringify on the body before sending — match that.\n const json = JSON.stringify(body);\n return new TextEncoder().encode(json);\n}\n\n/**\n * Wave 13: detect whether a request body carries a non-empty `images`\n * array. Used by the request-size guard to select between the base\n * `maxRequestBytes` limit and the higher `maxRequestBytesWithImages`\n * limit (e.g. System One: 64 KiB without images, 32 MiB with).\n *\n * Returns true only when the body is an object with an `images` property\n * that is a non-empty array. Falsy/absent/empty images → false (base\n * limit applies).\n */\nfunction bodyHasImages(body: unknown): boolean {\n if (typeof body !== 'object' || body === null) return false;\n const obj = body as Record<string, unknown>;\n const images = obj.images;\n return Array.isArray(images) && images.length > 0;\n}\n\n/**\n * Wave 15 (P0): substitute path parameters into a path template.\n *\n * Replaces every `{name}` segment in the path with the URI-encoded value\n * from `pathParams`. If a `{name}` segment has no corresponding value in\n * `pathParams`, throws an error — sending a literal `{name}` to the server\n * would produce a confusing 404 rather than a clear client-side error.\n *\n * Example:\n * resolvePathParams('/v1/models/{model}', { model: 'gpt-4' })\n * → '/v1/models/gpt-4'\n *\n * resolvePathParams('/api/blobs/{digest}', { digest: 'sha256:abc' })\n * → '/api/blobs/sha256%3Aabc'\n */\nfunction resolvePathParams(\n pathTemplate: string,\n pathParams: Readonly<Record<string, string>> | undefined,\n): string {\n // If the path has no `{...}` segments, return it unchanged.\n if (!pathTemplate.includes('{')) return pathTemplate;\n\n const params = pathParams ?? {};\n return pathTemplate.replace(/\\{([^}]+)\\}/g, (_match, name: string) => {\n const value = params[name];\n if (value === undefined) {\n throw new OllamaGenericClientError(\n `Missing path parameter \"${name}\" for path template \"${pathTemplate}\". ` +\n `Provide it via the pathParams field on the invoke() request.`,\n );\n }\n return encodeURIComponent(value);\n });\n}\n\n/**\n * Wave 15 (P1): extract the `model` field from a request body for\n * failover routing. The failover layer uses this to filter endpoints by\n * `OllamaEndpoint.models` (credential-scoped routing). Returns undefined\n * for bodies that don't carry a model (e.g. GET /api/tags, GET /api/version).\n */\nfunction extractModelFromBody(body: unknown): string | undefined {\n if (typeof body !== 'object' || body === null) return undefined;\n const obj = body as Record<string, unknown>;\n const model = obj.model;\n return typeof model === 'string' ? model : undefined;\n}\n\n/**\n * Wave 17 (P1): append query parameters to a path.\n *\n * Takes a resolved path (e.g. `/api/tags`) and a map of query params\n * (e.g. `{ limit: '10' }`), returns the path with `?limit=10` appended.\n * Values are URI-encoded. If no query params are provided, the path is\n * returned unchanged.\n */\nfunction applyQueryParams(\n path: string,\n queryParams: Readonly<Record<string, string>> | undefined,\n): string {\n if (!queryParams || Object.keys(queryParams).length === 0) return path;\n const pairs = Object.entries(queryParams)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n .join('&');\n return `${path}?${pairs}`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/utils.ts","../src/streaming/ndjson.ts","../src/streaming/sse.ts","../src/generated/models/IncludedBalance.schema.ts","../src/generated/models/LegacyBalanceLimit.schema.ts","../src/generated/models/LegacyIncludedBalance.schema.ts","../src/generated/models/BalanceResponse.schema.ts","../src/generated/models/ToolCall.schema.ts","../src/generated/models/ChatMessage.schema.ts","../src/generated/models/ModelOptions.schema.ts","../src/generated/models/ThinkValue.schema.ts","../src/generated/models/ToolDefinition.schema.ts","../src/generated/models/ChatRequest.schema.ts","../src/generated/models/TokenLogprob.schema.ts","../src/generated/models/Logprob.schema.ts","../src/generated/models/ChatResponse.schema.ts","../src/generated/models/CopyRequest.schema.ts","../src/generated/models/CreateRequest.schema.ts","../src/generated/models/DeleteRequest.schema.ts","../src/generated/models/EmbedRequest.schema.ts","../src/generated/models/EmbedResponse.schema.ts","../src/generated/models/GenerateRequest.schema.ts","../src/generated/models/GenerateResponse.schema.ts","../src/generated/models/ModelSummary.schema.ts","../src/generated/models/ListResponse.schema.ts","../src/generated/models/Ps.schema.ts","../src/generated/models/PsResponse.schema.ts","../src/generated/models/PullRequest.schema.ts","../src/generated/models/PushRequest.schema.ts","../src/generated/models/ShowRequest.schema.ts","../src/generated/models/Thinking.schema.ts","../src/generated/models/ShowResponse.schema.ts","../src/generated/models/StatusResponse.schema.ts","../src/generated/models/SystemOneContent.schema.ts","../src/generated/models/SystemOneChoiceQuestion.schema.ts","../src/generated/models/SystemOneNoulQuestion.schema.ts","../src/generated/models/SystemOneScoreQuestion.schema.ts","../src/generated/models/SystemOneRequest.schema.ts","../src/generated/models/SystemOneConfidence.schema.ts","../src/generated/models/SystemOneProbabilities.schema.ts","../src/generated/models/SystemOneChoiceAnswer.schema.ts","../src/generated/models/SystemOneNoulAnswer.schema.ts","../src/generated/models/SystemOneScoreAnswer.schema.ts","../src/generated/models/SystemOneResponse.schema.ts","../src/generated/models/UsageMetrics.schema.ts","../src/generated/models/UsageBucket.schema.ts","../src/generated/models/UsageResponse.schema.ts","../src/generated/models/VersionResponse.schema.ts","../src/generated/models/WebFetchRequest.schema.ts","../src/generated/models/WebFetchResponse.schema.ts","../src/generated/models/WebSearchRequest.schema.ts","../src/generated/models/WebSearchResult.schema.ts","../src/generated/models/WebSearchResponse.schema.ts","../src/generated/runtime/schema-registry.ts","../src/generated/runtime/runtime.ts"],"names":["z"],"mappings":"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","file":"generated-runtime.cjs","sourcesContent":["/**\n * Structured, typed error hierarchy for OllamaClient.\n */\n\nimport type { z } from 'zod';\n\nexport interface OllamaErrorRequestContext {\n readonly method?: string | undefined;\n readonly url?: string | undefined;\n readonly model?: string | undefined;\n}\n\nexport interface OllamaErrorResponseContext {\n readonly status?: number | undefined;\n readonly headers?: Record<string, string> | undefined;\n readonly body?: unknown;\n}\n\nexport interface OllamaClientErrorOptions extends ErrorOptions {\n readonly code: string;\n readonly status?: number | undefined;\n readonly retryable?: boolean | undefined;\n readonly request?: OllamaErrorRequestContext | undefined;\n readonly response?: OllamaErrorResponseContext | undefined;\n}\n\nexport class OllamaClientError extends Error {\n readonly code: string;\n readonly status?: number | undefined;\n readonly retryable: boolean;\n readonly request?: OllamaErrorRequestContext | undefined;\n readonly response?: OllamaErrorResponseContext | undefined;\n\n constructor(message: string, options: OllamaClientErrorOptions) {\n super(message, { cause: options.cause });\n this.name = this.constructor.name;\n this.code = options.code;\n this.status = options.status;\n this.retryable = options.retryable ?? false;\n this.request = options.request;\n this.response = options.response;\n }\n}\n\nexport class OllamaNetworkError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> | undefined,\n ) {\n super(message, { ...options, code: 'network_error', retryable: true });\n }\n}\n\nexport class OllamaTimeoutError extends OllamaClientError {\n readonly timeoutMs?: number | undefined;\n constructor(\n message: string,\n options?:\n | (Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & { timeoutMs?: number | undefined })\n | undefined,\n ) {\n super(message, { ...options, code: 'timeout', retryable: true });\n this.timeoutMs = options?.timeoutMs;\n }\n}\n\nexport class OllamaAuthError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> | undefined,\n ) {\n super(message, { ...options, code: 'auth_error', retryable: false });\n }\n}\n\nexport class OllamaNotFoundError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> | undefined,\n ) {\n super(message, { ...options, code: 'not_found', retryable: false });\n }\n}\n\nexport class OllamaRateLimitError extends OllamaClientError {\n readonly retryAfterMs?: number | undefined;\n constructor(\n message: string,\n options?:\n | (Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n retryAfterMs?: number | undefined;\n })\n | undefined,\n ) {\n super(message, { ...options, code: 'rate_limited', retryable: true });\n this.retryAfterMs = options?.retryAfterMs;\n }\n}\n\n/**\n * Thrown client-side, before a network request is made, by `QuotaManager.assertCanProceed`\n * (see `src/quota.ts`) when issuing the request would exceed a configured usage budget for\n * one of its rolling windows. This is distinct from `OllamaRateLimitError`, which reflects\n * the server's own 429 response — Ollama Cloud does not expose account-level quota via the\n * API, so `QuotaManager` tracks usage against budgets the caller configures locally and\n * fails fast rather than waiting for the server to reject the request.\n */\nexport class OllamaQuotaExceededError extends OllamaClientError {\n readonly windowId: string;\n readonly resetAt: number;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n windowId: string;\n resetAt: number;\n },\n ) {\n super(message, { ...options, code: 'quota_exceeded', retryable: false });\n this.windowId = options.windowId;\n this.resetAt = options.resetAt;\n }\n}\n\nexport class OllamaServerError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> | undefined,\n ) {\n super(message, { ...options, code: 'server_error', retryable: true });\n }\n}\n\n/**\n * Thrown when the Ollama server returns HTTP **503 Service Unavailable**,\n * indicating that the request queue is saturated (`OLLAMA_MAX_QUEUE`\n * exceeded, default 512 — see the FAQ).\n *\n * Semantically a specialization of {@link OllamaServerError} (503 is a\n * kind of 5xx server error), but extends {@link OllamaClientError}\n * directly to preserve the subclass-specific `code: 'overloaded'` —\n * `OllamaServerError`'s constructor unconditionally forces\n * `code: 'server_error'`. Callers wanting to catch any 5xx should\n * use `error.status >= 500 && error.status < 600` OR explicitly\n * list both `OllamaServerError` and `OllamaOverloadedError`/\n * `OllamaBadGatewayError` in their `instanceof` checks.\n *\n * `retryable` is `true` because the queue will eventually drain;\n * callers using {@link withRetry} will get automatic backoff.\n */\nexport class OllamaOverloadedError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable' | 'status'> | undefined,\n ) {\n super(message, { ...options, code: 'overloaded', status: 503, retryable: true });\n }\n}\n\n/**\n * Thrown when the Ollama server returns HTTP **502 Bad Gateway**,\n * indicating that a cloud model could not be reached by the\n * Ollama Cloud proxy. The model may be temporarily down, the\n * cloud provider may be experiencing an outage, or the model\n * may have been deprovisioned.\n *\n * Semantically a specialization of {@link OllamaServerError} (502 is a\n * kind of 5xx server error), but extends {@link OllamaClientError}\n * directly to preserve the subclass-specific `code: 'bad_gateway'` —\n * see {@link OllamaOverloadedError} for the rationale. Callers wanting\n * to catch any 5xx should use `error.status >= 500 && error.status < 600`\n * OR explicitly list both classes in their `instanceof` checks.\n *\n * `retryable` is `true` for transient cloud-provider outages.\n */\nexport class OllamaBadGatewayError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable' | 'status'> | undefined,\n ) {\n super(message, { ...options, code: 'bad_gateway', status: 502, retryable: true });\n }\n}\n\n/**\n * Thrown when the Ollama server emits an in-band error frame inside\n * an NDJSON stream (chat / generate / pull / push / create).\n *\n * Ollama streams start with HTTP 200 OK and chunked transfer encoding.\n * If an error occurs mid-generation (GPU OOM, driver crash, context\n * window overflow, model unload race, etc.), the server emits a final\n * JSON chunk of the form `{\"error\": \"...\"}` and closes the stream.\n * The HTTP status code never changes from 200, so HTTP-status-based\n * error detection misses these errors entirely — they would silently\n * bleed into the assistant's content stream as garbage tokens or\n * undefined-field accesses.\n *\n * `partialContent` carries whatever was accumulated before the error\n * frame, so callers can log/diagnose what the model produced before\n * failing. For chat streams this is the concatenated `message.content`;\n * for generate streams it's the concatenated `response`; for pull/push\n * streams it's empty (progress events don't accumulate content).\n *\n * See: https://github.com/ollama/ollama/blob/main/docs/api.md\n */\nexport class OllamaStreamError extends OllamaClientError {\n /** Content accumulated before the in-band error frame, or '' if none. */\n readonly partialContent: string;\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n partialContent?: string | undefined;\n },\n ) {\n super(message, { ...options, code: 'stream_error', retryable: false });\n this.partialContent = options?.partialContent ?? '';\n }\n}\n\nexport class OllamaAbortError extends OllamaClientError {\n constructor(\n message: string,\n options?: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> | undefined,\n ) {\n super(message, { ...options, code: 'aborted', retryable: false });\n }\n}\n\nexport class OllamaToolValidationError extends OllamaClientError {\n readonly toolName: string;\n readonly issues?: unknown;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & { toolName: string; issues?: unknown },\n ) {\n super(message, { ...options, code: 'tool_validation_error', retryable: false });\n this.toolName = options.toolName;\n this.issues = options.issues;\n }\n}\n\n/**\n * Thrown by `OllamaRuntime.invoke` when `validateRequests: true` is set and\n * the request body fails Zod validation against the operation's registered\n * schema. See ADR 0020 (runtime Zod validation).\n *\n * The error carries the original Zod issues so callers can inspect which\n * fields failed. No HTTP request is made when this error is thrown.\n */\nexport class OllamaRequestValidationError extends OllamaClientError {\n readonly operationId: string;\n readonly issues: readonly z.ZodIssue[];\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & {\n operationId: string;\n issues: readonly z.ZodIssue[];\n },\n ) {\n super(message, { ...options, code: 'request_validation_error', retryable: false });\n this.operationId = options.operationId;\n this.issues = options.issues;\n }\n}\n\n/**\n * Thrown by `OllamaRuntime.invoke` BEFORE any HTTP request is made when the\n * serialized request body exceeds the operation's declared\n * `constraints.maxRequestBytes`. The Ollama server returns 413 for such\n * payloads; this client-side check fails fast so the round-trip is avoided.\n *\n * Wave 12 (P0 #5): the IR has carried `maxRequestBytes` for System One\n * (64 KiB) since v1.7.0, but the runtime never enforced it. This closes\n * that contract/runtime gap.\n */\nexport class OllamaRequestTooLargeError extends OllamaClientError {\n readonly operationId: string;\n readonly actualBytes: number;\n readonly maxBytes: number;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable' | 'status'> & {\n operationId: string;\n actualBytes: number;\n maxBytes: number;\n },\n ) {\n super(message, { ...options, code: 'request_too_large', retryable: false, status: 413 });\n this.operationId = options.operationId;\n this.actualBytes = options.actualBytes;\n this.maxBytes = options.maxBytes;\n }\n}\n\n/**\n * Thrown by `OllamaRuntime.invoke` AFTER the HTTP response is received\n * when `validateResponses: true` is set and the response body fails Zod\n * validation against the operation's registered response schema.\n *\n * Wave 13: the runtime previously never validated responses (see ADR\n * 0020). This opt-in error gives callers a way to detect wire-format\n * mismatches for operations where typed response semantics are critical\n * (e.g. System One). The error carries the original Zod issues so\n * callers can inspect which fields failed.\n */\nexport class OllamaResponseValidationError extends OllamaClientError {\n readonly operationId: string;\n readonly issues: readonly z.ZodIssue[];\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n operationId: string;\n issues: readonly z.ZodIssue[];\n },\n ) {\n super(message, { ...options, code: 'response_validation_error', retryable: false });\n this.operationId = options.operationId;\n this.issues = options.issues;\n }\n}\n\n/**\n * Thrown by `OllamaRuntime.invoke` BEFORE any HTTP request is made when the\n * operation declares `constraints.minOllamaVersion` and the runtime could\n * not obtain a server version to compare against (e.g. `enforceVersion:\n * 'strict'` was set and `/api/version` was unreachable). Distinct from\n * {@link OllamaGenericClientError} so callers can branch on the failure\n * mode rather than parsing the message.\n */\nexport class OllamaServerVersionUnknownError extends OllamaClientError {\n readonly operationId: string;\n readonly minRequiredVersion: string;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n operationId: string;\n minRequiredVersion: string;\n },\n ) {\n super(message, { ...options, code: 'server_version_unknown', retryable: false });\n this.operationId = options.operationId;\n this.minRequiredVersion = options.minRequiredVersion;\n }\n}\n\nexport class OllamaToolTimeoutError extends OllamaClientError {\n readonly toolName: string;\n readonly timeoutMs: number;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n toolName: string;\n timeoutMs: number;\n },\n ) {\n super(message, { ...options, code: 'tool_timeout', retryable: false });\n this.toolName = options.toolName;\n this.timeoutMs = options.timeoutMs;\n }\n}\n\n/**\n * Thrown client-side, before a network request is made, when a request asks for a\n * capability an endpoint is known not to support (e.g. structured output `format` against\n * an Ollama Cloud endpoint — see `ModelCapabilities.supportsStructuredOutputRequest` in\n * `src/capabilities/capabilities.ts`). Its `code` is included in `DEFAULT_FAILOVER_CODES`\n * by default, so in a multi-endpoint setup it causes failover to the next candidate rather\n * than failing outright — it only surfaces to the caller if every candidate is rejected.\n */\nexport class OllamaUnsupportedCapabilityError extends OllamaClientError {\n readonly capability: string;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & { capability: string },\n ) {\n super(message, { ...options, code: 'unsupported_capability', retryable: false });\n this.capability = options.capability;\n }\n}\n\n/**\n * Thrown client-side, before any network call, when `config.endpoints` uses\n * `OllamaEndpoint.models` to scope endpoints/credentials to specific models and the\n * requested `model` isn't in any configured endpoint's allow-list. This is a routing\n * misconfiguration, not a connectivity problem — the SDK deliberately does not \"probe\"\n * unauthorized endpoints to find one that happens to work (that would burn quota on keys\n * that were never entitled to the model and produce non-deterministic startup behavior).\n */\nexport class OllamaModelRoutingError extends OllamaClientError {\n readonly model: string;\n readonly availableModels: readonly string[];\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n model: string;\n availableModels: readonly string[];\n },\n ) {\n super(message, { ...options, code: 'model_routing_error', retryable: false });\n this.model = options.model;\n this.availableModels = options.availableModels;\n }\n}\n\n/**\n * Thrown before an agent tool loop starts when the selected model's /api/show metadata\n * does not advertise a capability required by the loop.\n */\nexport class OllamaIncompatibleModelError extends OllamaClientError {\n readonly model: string;\n readonly capability: string;\n readonly reportedCapabilities: readonly string[];\n\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'retryable'> & {\n model: string;\n capability: string;\n reportedCapabilities: readonly string[];\n },\n ) {\n super(message, { ...options, code: 'incompatible_model', retryable: false });\n this.model = options.model;\n this.capability = options.capability;\n this.reportedCapabilities = options.reportedCapabilities;\n }\n}\nexport class OllamaAgentMaxToolCallsError extends OllamaClientError {\n readonly maxToolCalls: number;\n readonly toolCallsExecuted: number;\n\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & {\n maxToolCalls: number;\n toolCallsExecuted: number;\n },\n ) {\n super(message, { ...options, code: 'agent_max_tool_calls_exceeded', retryable: false });\n this.maxToolCalls = options.maxToolCalls;\n this.toolCallsExecuted = options.toolCallsExecuted;\n }\n}\n\nexport class OllamaAgentMaxIterationsError extends OllamaClientError {\n readonly maxIterations: number;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & { maxIterations: number },\n ) {\n super(message, { ...options, code: 'agent_max_iterations_exceeded', retryable: false });\n this.maxIterations = options.maxIterations;\n }\n}\n\n/**\n * Thrown when the agent's cycle detection fires: the same tool call —\n * identical name **and** identical arguments — would execute more times than\n * `maxRepeatedToolCalls` allows during one run.\n *\n * This is the fail-fast diagnosis for a model stuck in a tool loop (repeatedly\n * calling the same function with the same arguments, never reacting to the\n * results); without it, a looping model only surfaces as a generic\n * {@link OllamaAgentMaxIterationsError} after burning the full iteration\n * budget on wasted calls.\n */\nexport class OllamaAgentToolLoopError extends OllamaClientError {\n /** Name of the tool whose identical call would exceed the repeat budget. */\n readonly toolName: string;\n /** How many times this exact call would have executed including the rejected one. */\n readonly repeatedExecutions: number;\n /** The configured per-signature execution budget. */\n readonly maxRepeatedToolCalls: number;\n /** Canonical `name(args)` signature of the repeated call (very large payloads truncated). */\n readonly signature: string;\n\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & {\n toolName: string;\n repeatedExecutions: number;\n maxRepeatedToolCalls: number;\n signature: string;\n },\n ) {\n super(message, { ...options, code: 'agent_tool_loop_detected', retryable: false });\n this.toolName = options.toolName;\n this.repeatedExecutions = options.repeatedExecutions;\n this.maxRepeatedToolCalls = options.maxRepeatedToolCalls;\n this.signature = options.signature;\n }\n}\n\nexport class OllamaMcpError extends OllamaClientError {\n readonly mcpMethod:\n 'listTools' | 'callTool' | 'tools/call' | 'tasks/get' | 'tasks/result' | 'tasks/cancel';\n readonly toolName?: string | undefined;\n readonly issues?: unknown;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & {\n mcpMethod:\n 'listTools' | 'callTool' | 'tools/call' | 'tasks/get' | 'tasks/result' | 'tasks/cancel';\n toolName?: string | undefined;\n issues?: unknown;\n },\n ) {\n super(message, { ...options, code: 'mcp_error', retryable: options.retryable ?? false });\n this.mcpMethod = options.mcpMethod;\n this.toolName = options.toolName;\n this.issues = options.issues;\n }\n}\n\nexport class OllamaSkillNotFoundError extends OllamaClientError {\n readonly skillName: string;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & { skillName: string },\n ) {\n super(message, { ...options, code: 'skill_not_found', retryable: false });\n this.skillName = options.skillName;\n }\n}\n\nexport class OllamaSkillInvalidError extends OllamaClientError {\n readonly skillName: string;\n readonly path?: string | undefined;\n constructor(\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code'> & {\n skillName: string;\n path?: string | undefined;\n },\n ) {\n super(message, { ...options, code: 'skill_invalid', retryable: false });\n this.skillName = options.skillName;\n this.path = options.path;\n }\n}\n\nexport class OllamaGenericClientError extends OllamaClientError {\n constructor(message: string, options?: Omit<OllamaClientErrorOptions, 'code'> | undefined) {\n super(message, { ...options, code: 'client_error' });\n }\n}\n\nfunction isDomAbortError(error: unknown): error is DOMException {\n return (\n typeof DOMException !== 'undefined' &&\n error instanceof DOMException &&\n error.name === 'AbortError'\n );\n}\n\nfunction statusToError(\n status: number,\n message: string,\n options: Omit<OllamaClientErrorOptions, 'code' | 'status'>,\n): OllamaClientError {\n if (status === 401 || status === 403) {\n return new OllamaAuthError(message, { ...options, status });\n }\n if (status === 404) {\n return new OllamaNotFoundError(message, { ...options, status });\n }\n if (status === 429) {\n return new OllamaRateLimitError(message, { ...options, status });\n }\n if (status === 502) {\n // Cloud model could not be reached. Distinct from generic 5xx so\n // callers running multi-model agents can branch on cloud-provider\n // failures specifically (fail over to a different model/endpoint\n // rather than blindly retrying the same one).\n return new OllamaBadGatewayError(message, { ...options });\n }\n if (status === 503) {\n // Queue saturation (OLLAMA_MAX_QUEUE exceeded). Retryable — the\n // queue will eventually drain. Distinct from generic 5xx so\n // callers running parallel swarms can branch on saturation.\n return new OllamaOverloadedError(message, { ...options });\n }\n if (status >= 500) {\n return new OllamaServerError(message, { ...options, status });\n }\n return new OllamaGenericClientError(message, { ...options, status });\n}\n\n/**\n * Maps arbitrary thrown exceptions into structured OllamaClientError instances.\n */\nexport function mapError(\n error: unknown,\n context: {\n request?: OllamaErrorRequestContext | undefined;\n response?: OllamaErrorResponseContext | undefined;\n } = {},\n): OllamaClientError {\n if (error instanceof OllamaClientError) {\n return error;\n }\n if (isDomAbortError(error)) {\n return new OllamaAbortError(error.message || 'Request was aborted', {\n cause: error,\n request: context.request,\n });\n }\n if (error instanceof TypeError) {\n return new OllamaNetworkError(error.message || 'Network request failed', {\n cause: error,\n request: context.request,\n });\n }\n if (context.response?.status !== undefined) {\n const message = error instanceof Error ? error.message : String(error);\n return statusToError(context.response.status, message, {\n cause: error,\n request: context.request,\n response: context.response,\n });\n }\n const message = error instanceof Error ? error.message : String(error);\n return new OllamaGenericClientError(message, {\n cause: error,\n request: context.request,\n response: context.response,\n });\n}\n","/**\n * Cross-runtime helpers with no Node.js API dependency, so they stay safe to import from\n * the core client bundle (see ADR 0006 — Edge Runtime CI).\n */\n\nimport { imageStringNeedsResolution, resolveImages, type VisionInput } from './vision.js';\n\n/**\n * Encodes an image to a base64 string, matching the wire format Ollama's `/api/chat` and\n * `/api/generate` `images` arrays expect.\n *\n * - A `string` is assumed to already be base64-encoded and is returned unchanged. For\n * data URIs, URLs, and local file paths use {@link resolveImageInput}, which this SDK's\n * request pipeline applies automatically (see {@link withEncodedImages}).\n * - A `Uint8Array` (or Node `Buffer`) is base64-encoded using whichever universal primitive\n * the runtime exposes: `Buffer` on Node.js, `btoa` on browsers/Edge runtimes. Chunked so it\n * doesn't blow the engine's max call-stack/argument-count limits on large images.\n */\nexport async function encodeImage(image: VisionInput): Promise<string> {\n if (typeof image === 'string') return image;\n\n const bufferCtor = (\n globalThis as { Buffer?: { from(data: Uint8Array): { toString(encoding: string): string } } }\n ).Buffer;\n if (bufferCtor !== undefined) return bufferCtor.from(image).toString('base64');\n\n const CHUNK_SIZE = 0x8000;\n let binary = '';\n for (let i = 0; i < image.length; i += CHUNK_SIZE) {\n binary += String.fromCharCode(...image.subarray(i, i + CHUNK_SIZE));\n }\n return btoa(binary);\n}\n\nasync function encodeImages(\n images: readonly VisionInput[],\n signal?: AbortSignal | undefined,\n): Promise<readonly string[]> {\n return resolveImages(images, signal) as Promise<readonly string[]>;\n}\n\n/**\n * Normalizes `req.images` to wire-ready raw base64 strings, resolving every polymorphic\n * {@link VisionInput} — data URIs (header stripped), `http(s)://` URLs (fetched), local\n * file paths (read via dynamically-imported `node:fs`, Node.js only), and raw\n * `Buffer`/`Uint8Array` bytes (base64-encoded). Returns `req` **unchanged (same reference)**\n * when every entry is already a plain base64 string (the common case), so the request\n * pipeline stays allocation-free for pre-encoded callers.\n */\nexport async function withEncodedImages<T extends { images?: readonly VisionInput[] | undefined }>(\n req: T,\n signal?: AbortSignal | undefined,\n): Promise<T> {\n const needsResolution = req.images?.some(\n (image) => typeof image !== 'string' || imageStringNeedsResolution(image),\n );\n if (!needsResolution) return req;\n return { ...req, images: await encodeImages(req.images ?? [], signal) };\n}\n\n/**\n * Applies {@link withEncodedImages} to each message's `images` array. Returns `messages`\n * unchanged (same reference) if no message carries a non-base64-ready image.\n */\nexport async function withEncodedMessageImages<\n T extends { images?: readonly VisionInput[] | undefined },\n>(messages: readonly T[], signal?: AbortSignal | undefined): Promise<readonly T[]> {\n const needsResolution = messages.some((message) =>\n message.images?.some((image) => typeof image !== 'string' || imageStringNeedsResolution(image)),\n );\n if (!needsResolution) return messages;\n return Promise.all(messages.map((message) => withEncodedImages(message, signal)));\n}\n\n// ─── Disposable helpers (TS 5.2+ `using` declarations) ──────────────────\n//\n// These wrappers turn cleanup operations into `Disposable` / `AsyncDisposable`\n// values so callers can use `using` / `await using` declarations instead of\n// try/finally blocks. This eliminates the \"forgot to clean up in the finally\n// block\" bug class for timer, reader, and span lifecycles.\n\n/** Wraps a `setTimeout` handle so `clearTimeout` runs at scope exit. */\nexport function disposableTimer(timer: ReturnType<typeof setTimeout>): Disposable {\n return {\n [Symbol.dispose]() {\n clearTimeout(timer);\n },\n };\n}\n\n/** Wraps a `ReadableStreamDefaultReader` so `cancel()` + `releaseLock()` run at scope exit. */\nexport function disposableReader<T>(reader: ReadableStreamDefaultReader<T>): AsyncDisposable {\n return {\n async [Symbol.asyncDispose]() {\n try {\n await reader.cancel();\n } catch {\n /* stream may already be closed */\n }\n reader.releaseLock();\n },\n };\n}\n\n/** Wraps an OpenTelemetry span so `span.end()` runs at scope exit. */\nexport function disposableSpan(span: { end(): void }): Disposable {\n return {\n [Symbol.dispose]() {\n span.end();\n },\n };\n}\n","/**\n * NDJSON (newline-delimited JSON) stream reader for native fetch Response bodies.\n *\n * Ollama's streaming endpoints (chat / generate / pull / push / create)\n * emit newline-delimited JSON objects. Each line is a complete JSON\n * document. The transport is chunked HTTP with status 200 OK — meaning\n * the HTTP status never changes mid-stream even when the server\n * encounters an error after generation has started.\n *\n * Instead, Ollama emits a final JSON frame of the form\n * `{\"error\": \"...\"}` and closes the stream. This reader detects such\n * in-band error frames and throws {@link OllamaStreamError} immediately,\n * so callers don't see the error message bleed into the assistant's\n * content stream as garbage tokens.\n */\n\nimport { OllamaGenericClientError, OllamaStreamError } from '../errors.js';\nimport { disposableReader } from '../utils.js';\n\n/**\n * A frame carrying an in-band stream error. Ollama emits this shape as\n * the final chunk of a stream when generation fails mid-flight (GPU\n * OOM, driver crash, context window overflow, model unload race, etc).\n *\n * Note that not every chunk with an `error` field is an error frame —\n * some valid Ollama response shapes carry `error` as a property name\n * for unrelated purposes (none documented in the public API, but the\n * generated schema set has a few). We only treat a frame as an\n * in-band error when it has an `error` field that is a non-empty\n * string AND no other top-level fields that would identify it as a\n * valid response chunk (e.g. `model`, `response`, `message`, `status`,\n * `done`).\n */\ninterface InBandErrorFrame {\n readonly error: string;\n}\n\n/**\n * Returns `true` if `value` looks like an Ollama in-band stream error\n * frame — i.e. it has a non-empty string `error` field and none of\n * the markers that would identify it as a valid response chunk.\n *\n * The valid-chunk markers (`model`, `response`, `message`, `status`,\n * `done`) cover every documented Ollama streaming endpoint: chat\n * chunks carry `message` and `done`; generate chunks carry `response`\n * and `done`; pull/push/create chunks carry `status`; all chunks\n * carry `model` once the model has loaded. A bare `{\"error\": \"...\"}`\n * frame with none of these is unambiguously an in-band error.\n */\nfunction isInBandErrorFrame(value: unknown): value is InBandErrorFrame {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n if (typeof record.error !== 'string' || record.error.length === 0) return false;\n // Reject frames that look like valid response chunks which happen to\n // also carry an `error` field (none documented, but defensive).\n return (\n !('model' in record) &&\n !('response' in record) &&\n !('message' in record) &&\n !('status' in record) &&\n !('done' in record)\n );\n}\n\n/**\n * Parses a byte stream from fetch body into an async generator of typed JSON chunks.\n *\n * Throws {@link OllamaStreamError} immediately upon encountering an\n * in-band `{\"error\": \"...\"}` frame. The thrown error carries an empty\n * `partialContent` (this low-level parser does not accumulate content;\n * the higher-level aggregator in `streaming/normalize.ts` is the\n * right place to surface partial content if needed).\n */\nexport async function* parseNdjsonStream<T>(\n stream: ReadableStream<Uint8Array>,\n): AsyncGenerator<T, void, undefined> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n await using _reader = disposableReader(reader);\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n // Keep the last partial line in buffer\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n let json: unknown;\n try {\n json = JSON.parse(trimmed);\n } catch (err) {\n throw new OllamaGenericClientError(`Failed to parse stream JSON chunk: ${trimmed}`, {\n cause: err,\n });\n }\n\n // In-band error trapping: detect `{\"error\": \"...\"}` frames\n // before they reach the typed-chunk consumer. This is the\n // critical fix for the \"HTTP 200 OK + mid-stream error\" case\n // documented in Ollama's errors.md — without it, the error\n // message would either bleed into content or hit undefined-field\n // accesses downstream.\n if (isInBandErrorFrame(json)) {\n throw new OllamaStreamError((json as InBandErrorFrame).error);\n }\n\n yield json as T;\n }\n }\n\n if (buffer.trim()) {\n const trimmed = buffer.trim();\n let json: unknown;\n try {\n json = JSON.parse(trimmed);\n } catch (err) {\n throw new OllamaGenericClientError(`Failed to parse stream JSON chunk: ${trimmed}`, {\n cause: err,\n });\n }\n if (isInBandErrorFrame(json)) {\n throw new OllamaStreamError((json as InBandErrorFrame).error);\n }\n yield json as T;\n }\n // reader.cancel() + reader.releaseLock() called automatically via `await using _reader`\n}\n","/**\n * Server-Sent Events (SSE) parser for OpenAI/Anthropic-compatible streaming endpoints.\n *\n * Implements standard event-stream field rules without coupling the parser to\n * any provider-specific event schema.\n */\n\nimport { disposableReader } from '../utils.js';\n\nexport interface SseEvent {\n /** Event type; omitted when the server emitted no explicit event field. */\n readonly event?: string | undefined;\n /** Event data with consecutive data fields joined by a newline. */\n readonly data: string;\n /** Last event id associated with this dispatch, when present. */\n readonly id?: string | undefined;\n /** Reconnection delay requested by the server, in milliseconds, when valid. */\n readonly retry?: number | undefined;\n}\n\nfunction dispatch(\n event: string | undefined,\n data: string[],\n id: string | undefined,\n retry: number | undefined,\n): SseEvent | undefined {\n if (data.length === 0) return undefined;\n\n const joined = data.join('\\n');\n return {\n ...(event !== undefined ? { event } : {}),\n data: joined.endsWith('\\n') ? joined.slice(0, -1) : joined,\n ...(id !== undefined ? { id } : {}),\n ...(retry !== undefined ? { retry } : {}),\n };\n}\n\n/**\n * Parses an SSE byte stream into discrete events.\n *\n * Supports CRLF, CR, and LF line endings; comments; repeated data fields;\n * event/id/retry fields; UTF-8 chunks split across arbitrary byte boundaries;\n * and a terminal event without a trailing blank line.\n */\nexport async function* parseSseStream(\n stream: ReadableStream<Uint8Array>,\n): AsyncGenerator<SseEvent, void, undefined> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n\n let buffer = '';\n let eventType: string | undefined;\n let data: string[] = [];\n let lastEventId: string | undefined;\n let retry: number | undefined;\n\n const processLine = (line: string): SseEvent | undefined => {\n if (line.length === 0) {\n const event = dispatch(eventType, data, lastEventId, retry);\n eventType = undefined;\n data = [];\n retry = undefined;\n return event;\n }\n\n if (line.startsWith(':')) return undefined;\n\n const separator = line.indexOf(':');\n const field = separator === -1 ? line : line.slice(0, separator);\n let value = separator === -1 ? '' : line.slice(separator + 1);\n if (value.startsWith(' ')) value = value.slice(1);\n\n switch (field) {\n case 'event':\n eventType = value;\n break;\n case 'data':\n data.push(value);\n break;\n case 'id':\n if (!value.includes('\\0')) lastEventId = value;\n break;\n case 'retry': {\n if (/^\\d+$/.test(value)) {\n const parsed = Number(value);\n if (Number.isSafeInteger(parsed)) retry = parsed;\n }\n break;\n }\n default:\n break;\n }\n\n return undefined;\n };\n\n await using _reader = disposableReader(reader);\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n while (true) {\n const lf = buffer.indexOf('\\n');\n const cr = buffer.indexOf('\\r');\n if (lf === -1 && cr === -1) break;\n // A CR may be the first half of a CRLF sequence split across two network chunks.\n if (cr !== -1 && lf === -1 && cr === buffer.length - 1) break;\n\n const lineEnd = lf === -1 ? cr : cr === -1 ? lf : Math.min(lf, cr);\n let separatorLength = 1;\n\n if (buffer[lineEnd] === '\\r' && buffer[lineEnd + 1] === '\\n') {\n separatorLength = 2;\n }\n\n const line = buffer.slice(0, lineEnd);\n buffer = buffer.slice(lineEnd + separatorLength);\n\n const event = processLine(line);\n if (event) yield event;\n }\n }\n\n buffer += decoder.decode();\n if (buffer.length > 0) {\n const event = processLine(buffer);\n if (event) yield event;\n }\n\n const terminal = dispatch(eventType, data, lastEventId, retry);\n if (terminal) yield terminal;\n // reader.cancel() + reader.releaseLock() called automatically via `await using _reader`\n}\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const IncludedBalanceSchema = z.object({\n balance_usd: z.number(),\n allowance_usd: z.number(),\n period: z.object({\n from: z.string(),\n until: z.string(),\n }),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const LegacyBalanceLimitSchema = z.object({\n remaining_percent: z.number().min(0).max(100),\n resets_at: z.string(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { LegacyBalanceLimitSchema } from './LegacyBalanceLimit.schema.js';\n\nexport const LegacyIncludedBalanceSchema = z.object({\n session: LegacyBalanceLimitSchema,\n weekly: LegacyBalanceLimitSchema,\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { IncludedBalanceSchema } from './IncludedBalance.schema.js';\nimport { LegacyIncludedBalanceSchema } from './LegacyIncludedBalance.schema.js';\n\nexport const BalanceResponseSchema = z.object({\n included: z.union([IncludedBalanceSchema, LegacyIncludedBalanceSchema]),\n purchased: z.object({\n balance_usd: z.number(),\n }),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const ToolCallSchema = z.object({\n function: z\n .object({\n name: z.string(),\n description: z.string().optional(),\n arguments: z.object({}).optional(),\n })\n .optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ToolCallSchema } from './ToolCall.schema.js';\n\nexport const ChatMessageSchema = z.object({\n role: z.enum(['system', 'user', 'assistant', 'tool']),\n content: z.string(),\n images: z.array(z.string()).optional(),\n tool_calls: z.array(ToolCallSchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Runtime options that control text generation */\nexport const ModelOptionsSchema = z\n .object({\n seed: z.number().optional(),\n temperature: z.number().optional(),\n top_k: z.number().optional(),\n top_p: z.number().optional(),\n min_p: z.number().optional(),\n stop: z.union([z.string(), z.array(z.string())]).optional(),\n num_ctx: z.number().optional(),\n num_predict: z.number().optional(),\n })\n .catchall(z.unknown());\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Controls a model's thinking output. Use `/api/show` to discover the supported values and default for the selected model. `true` requests thinking, `false` requests no thinking output, and `null` uses the model default. String values are model-defined; supported names must match `/api/show` exactly. Numbers are not supported. */\nexport const ThinkValueSchema = z.union([z.boolean(), z.string(), z.null()]);\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const ToolDefinitionSchema = z.object({\n type: z.enum(['function']),\n function: z.object({\n name: z.string(),\n description: z.string().optional(),\n parameters: z.object({}),\n }),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ChatMessageSchema } from './ChatMessage.schema.js';\nimport { ModelOptionsSchema } from './ModelOptions.schema.js';\nimport { ThinkValueSchema } from './ThinkValue.schema.js';\nimport { ToolDefinitionSchema } from './ToolDefinition.schema.js';\n\nexport const ChatRequestSchema = z.object({\n model: z.string(),\n messages: z.array(ChatMessageSchema),\n tools: z.array(ToolDefinitionSchema).optional(),\n format: z.union([z.enum(['json']), z.object({})]).optional(),\n options: ModelOptionsSchema.optional(),\n stream: z.boolean().optional(),\n think: ThinkValueSchema.optional(),\n keep_alive: z.union([z.string(), z.number()]).optional(),\n logprobs: z.boolean().optional(),\n top_logprobs: z.number().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Log probability information for a single token alternative */\nexport const TokenLogprobSchema = z.object({\n token: z.string().optional(),\n logprob: z.number().optional(),\n bytes: z.array(z.number()).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { TokenLogprobSchema } from './TokenLogprob.schema.js';\n\n/** Log probability information for a generated token */\nexport const LogprobSchema = z.object({\n token: z.string().optional(),\n logprob: z.number().optional(),\n bytes: z.array(z.number()).optional(),\n top_logprobs: z.array(TokenLogprobSchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { LogprobSchema } from './Logprob.schema.js';\nimport { ToolCallSchema } from './ToolCall.schema.js';\n\nexport const ChatResponseSchema = z.object({\n model: z.string().optional(),\n created_at: z.string().optional(),\n message: z\n .object({\n role: z.enum(['assistant']).optional(),\n content: z.string().optional(),\n thinking: z.string().optional(),\n tool_calls: z.array(ToolCallSchema).optional(),\n images: z.array(z.string()).optional(),\n })\n .optional(),\n done: z.boolean().optional(),\n done_reason: z.string().optional(),\n total_duration: z.number().optional(),\n load_duration: z.number().optional(),\n prompt_eval_count: z.number().optional(),\n prompt_eval_cached_count: z.number().optional(),\n prompt_eval_duration: z.number().optional(),\n eval_count: z.number().optional(),\n eval_duration: z.number().optional(),\n logprobs: z.array(LogprobSchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const CopyRequestSchema = z.object({\n source: z.string(),\n destination: z.string(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ChatMessageSchema } from './ChatMessage.schema.js';\n\nexport const CreateRequestSchema = z.object({\n model: z.string(),\n from: z.string().optional(),\n template: z.string().optional(),\n renderer: z.string().optional(),\n parser: z.string().optional(),\n files: z.object({}).catchall(z.string()).optional(),\n draft_files: z.object({}).catchall(z.string()).optional(),\n license: z.union([z.string(), z.array(z.string())]).optional(),\n system: z.string().optional(),\n parameters: z.object({}).optional(),\n messages: z.array(ChatMessageSchema).optional(),\n quantize: z.string().optional(),\n draft_quantize: z.string().optional(),\n requires: z.string().optional(),\n capabilities: z.array(z.string()).optional(),\n stream: z.boolean().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const DeleteRequestSchema = z.object({\n model: z.string(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ModelOptionsSchema } from './ModelOptions.schema.js';\n\nexport const EmbedRequestSchema = z.object({\n model: z.string(),\n input: z.union([z.string(), z.array(z.string())]),\n truncate: z.boolean().optional(),\n dimensions: z.number().optional(),\n keep_alive: z.string().optional(),\n options: ModelOptionsSchema.optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const EmbedResponseSchema = z.object({\n model: z.string().optional(),\n embeddings: z.array(z.array(z.number())).optional(),\n total_duration: z.number().optional(),\n load_duration: z.number().optional(),\n prompt_eval_count: z.number().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ModelOptionsSchema } from './ModelOptions.schema.js';\nimport { ThinkValueSchema } from './ThinkValue.schema.js';\n\nexport const GenerateRequestSchema = z.object({\n model: z.string(),\n prompt: z.string().optional(),\n suffix: z.string().optional(),\n images: z.array(z.string()).optional(),\n format: z.union([z.string(), z.object({})]).optional(),\n system: z.string().optional(),\n stream: z.boolean().optional(),\n think: ThinkValueSchema.optional(),\n raw: z.boolean().optional(),\n keep_alive: z.union([z.string(), z.number()]).optional(),\n options: ModelOptionsSchema.optional(),\n logprobs: z.boolean().optional(),\n top_logprobs: z.number().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { LogprobSchema } from './Logprob.schema.js';\n\nexport const GenerateResponseSchema = z.object({\n model: z.string().optional(),\n created_at: z.string().optional(),\n response: z.string().optional(),\n thinking: z.string().optional(),\n done: z.boolean().optional(),\n done_reason: z.string().optional(),\n total_duration: z.number().optional(),\n load_duration: z.number().optional(),\n prompt_eval_count: z.number().optional(),\n prompt_eval_cached_count: z.number().optional(),\n prompt_eval_duration: z.number().optional(),\n eval_count: z.number().optional(),\n eval_duration: z.number().optional(),\n logprobs: z.array(LogprobSchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Summary information for a locally available model */\nexport const ModelSummarySchema = z.object({\n name: z.string().optional(),\n model: z.string().optional(),\n remote_model: z.string().optional(),\n remote_host: z.string().optional(),\n modified_at: z.string().optional(),\n size: z.number().optional(),\n digest: z.string().optional(),\n details: z\n .object({\n format: z.string().optional(),\n family: z.string().optional(),\n families: z.union([z.array(z.string()), z.null()]).optional(),\n parameter_size: z.string().optional(),\n quantization_level: z.string().optional(),\n })\n .optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ModelSummarySchema } from './ModelSummary.schema.js';\n\nexport const ListResponseSchema = z.object({\n models: z.array(ModelSummarySchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const PsSchema = z.object({\n name: z.string().optional(),\n model: z.string().optional(),\n size: z.number().optional(),\n digest: z.string().optional(),\n details: z.object({}).optional(),\n expires_at: z.string().optional(),\n size_vram: z.number().optional(),\n context_length: z.number().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { PsSchema } from './Ps.schema.js';\n\nexport const PsResponseSchema = z.object({\n models: z.array(PsSchema).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const PullRequestSchema = z.object({\n model: z.string(),\n insecure: z.boolean().optional(),\n stream: z.boolean().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const PushRequestSchema = z.object({\n model: z.string(),\n insecure: z.boolean().optional(),\n stream: z.boolean().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const ShowRequestSchema = z.object({\n model: z.string(),\n verbose: z.boolean().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Thinking controls advertised by a model. Models without thinking metadata omit this field. */\nexport const ThinkingSchema = z.object({\n values: z.array(z.union([z.boolean(), z.string()])),\n default: z.union([z.boolean(), z.string()]),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { ThinkingSchema } from './Thinking.schema.js';\n\nexport const ShowResponseSchema = z.object({\n thinking: ThinkingSchema.optional(),\n parameters: z.string().optional(),\n license: z.string().optional(),\n modified_at: z.string().optional(),\n details: z.object({}).optional(),\n template: z.string().optional(),\n capabilities: z.array(z.string()).optional(),\n model_info: z.object({}).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const StatusResponseSchema = z.object({\n status: z.string().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** A nonempty string, or an object or array serialized as JSON text. Not interpreted as chat messages or multimodal input. */\nexport const SystemOneContentSchema = z.union([\n z.string().regex(new RegExp('\\\\S')),\n z.object({}).catchall(z.unknown()),\n z.array(z.unknown()),\n]);\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneContentSchema } from './SystemOneContent.schema.js';\n\nexport const SystemOneChoiceQuestionSchema = z.object({\n type: z.enum(['choice']),\n instructions: SystemOneContentSchema,\n criteria: z\n .object({})\n .catchall(z.union([z.string(), z.null()]))\n .refine((v) => Object.keys(v).length >= 2, { message: 'must have at least 2 properties' })\n .refine((v) => Object.keys(v).length <= 26, { message: 'must have at most 26 properties' })\n .refine((v) => Object.keys(v).every((k) => new RegExp('\\\\S').test(k)), {\n message: 'property names must match pattern \"\\\\S\"',\n }),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneContentSchema } from './SystemOneContent.schema.js';\n\nexport const SystemOneNoulQuestionSchema = z.object({\n type: z.enum(['noul']),\n instructions: SystemOneContentSchema,\n criteria: z\n .object({\n false: z.string().optional(),\n true: z.string().optional(),\n })\n .optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneContentSchema } from './SystemOneContent.schema.js';\n\nexport const SystemOneScoreQuestionSchema = z.object({\n type: z.enum(['score']),\n instructions: SystemOneContentSchema,\n criteria: z.array(z.string()).min(2).max(26),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneChoiceQuestionSchema } from './SystemOneChoiceQuestion.schema.js';\nimport { SystemOneContentSchema } from './SystemOneContent.schema.js';\nimport { SystemOneNoulQuestionSchema } from './SystemOneNoulQuestion.schema.js';\nimport { SystemOneScoreQuestionSchema } from './SystemOneScoreQuestion.schema.js';\n\nexport const SystemOneRequestSchema = z.object({\n model: z.string().regex(new RegExp('\\\\S')),\n state: SystemOneContentSchema,\n images: z.array(z.string()).optional(),\n questions: z\n .object({})\n .catchall(\n z.union([\n SystemOneChoiceQuestionSchema,\n SystemOneNoulQuestionSchema,\n SystemOneScoreQuestionSchema,\n ]),\n )\n .refine((v) => Object.keys(v).length >= 1, { message: 'must have at least 1 properties' })\n .refine((v) => Object.keys(v).length <= 64, { message: 'must have at most 64 properties' })\n .refine((v) => Object.keys(v).every((k) => new RegExp('\\\\S').test(k)), {\n message: 'property names must match pattern \"\\\\S\"',\n }),\n keep_alive: z.union([z.string(), z.number()]).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Distribution concentration, calculated as 1 - H(p) / ln(N), where H(p) is entropy and N is the candidate count. Zero means uniform probabilities; values near 1 mean one candidate dominates. Not calibrated correctness. */\nexport const SystemOneConfidenceSchema = z.number().min(0).max(1);\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\n/** Probabilities normalized over the supplied candidates, summing to 1 subject to floating-point precision. */\nexport const SystemOneProbabilitiesSchema = z.object({}).catchall(z.number().min(0).max(1));\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneConfidenceSchema } from './SystemOneConfidence.schema.js';\nimport { SystemOneProbabilitiesSchema } from './SystemOneProbabilities.schema.js';\n\nexport const SystemOneChoiceAnswerSchema = z.object({\n type: z.enum(['choice']),\n choice: z.string(),\n probabilities: SystemOneProbabilitiesSchema,\n confidence: SystemOneConfidenceSchema,\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const SystemOneNoulAnswerSchema = z.object({\n type: z.enum(['noul']),\n noul: z.number().min(0).max(1),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneConfidenceSchema } from './SystemOneConfidence.schema.js';\nimport { SystemOneProbabilitiesSchema } from './SystemOneProbabilities.schema.js';\n\nexport const SystemOneScoreAnswerSchema = z.object({\n type: z.enum(['score']),\n score: z.number().min(0).max(25),\n legend: z.object({}).catchall(z.string()),\n probabilities: SystemOneProbabilitiesSchema,\n confidence: SystemOneConfidenceSchema,\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { SystemOneChoiceAnswerSchema } from './SystemOneChoiceAnswer.schema.js';\nimport { SystemOneNoulAnswerSchema } from './SystemOneNoulAnswer.schema.js';\nimport { SystemOneScoreAnswerSchema } from './SystemOneScoreAnswer.schema.js';\n\nexport const SystemOneResponseSchema = z.object({\n model: z.string(),\n answers: z\n .object({})\n .catchall(\n z.union([SystemOneChoiceAnswerSchema, SystemOneNoulAnswerSchema, SystemOneScoreAnswerSchema]),\n ),\n usage: z.object({\n input_tokens: z.number().min(0),\n output_tokens: z.number().min(0),\n }),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const UsageMetricsSchema = z.object({\n request_count: z.number().min(0),\n usage_usd: z.number().optional(),\n input_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n output_tokens: z.number().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { UsageMetricsSchema } from './UsageMetrics.schema.js';\n\nexport const UsageBucketSchema = z.intersection(\n UsageMetricsSchema,\n z.object({\n from: z.string(),\n until: z.string(),\n partial: z.boolean().optional(),\n }),\n);\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { UsageBucketSchema } from './UsageBucket.schema.js';\nimport { UsageMetricsSchema } from './UsageMetrics.schema.js';\n\nexport const UsageResponseSchema = z.object({\n range: z.enum(['24h', '7d', '30d']),\n scope: z.enum(['self', 'team']),\n granularity: z.enum(['hour', 'day']),\n from: z.string(),\n until: z.string(),\n totals: UsageMetricsSchema,\n buckets: z.array(UsageBucketSchema),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const VersionResponseSchema = z.object({\n version: z.string().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const WebFetchRequestSchema = z.object({\n url: z.string(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const WebFetchResponseSchema = z.object({\n title: z.string().optional(),\n content: z.string().optional(),\n links: z.array(z.string()).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const WebSearchRequestSchema = z.object({\n query: z.string(),\n max_results: z.number().min(1).max(10).optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\n\nexport const WebSearchResultSchema = z.object({\n title: z.string().optional(),\n url: z.string().optional(),\n content: z.string().optional(),\n});\n","// AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n// Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n// Pairs with ./<name>.ts (the TypeScript interface).\n\nimport { z } from 'zod';\nimport { WebSearchResultSchema } from './WebSearchResult.schema.js';\n\nexport const WebSearchResponseSchema = z.object({\n results: z.array(WebSearchResultSchema).optional(),\n});\n","/**\n * AUTO-GENERATED by `npm run contract:generate`. DO NOT EDIT.\n * Source: contracts/ir/ollama.ir.json (canonical Ollama IR).\n * Maps every operation whose IR entry carries `request.$ref` / `response.$ref`\n * to its generated Zod schema. Consumed by OllamaRuntime when\n * `validateRequests: true` / `validateResponses: true` is set (ADR 0020).\n */\n\nimport type { z } from 'zod';\nimport { BalanceResponseSchema } from '../models/BalanceResponse.schema.js';\nimport { ChatRequestSchema } from '../models/ChatRequest.schema.js';\nimport { ChatResponseSchema } from '../models/ChatResponse.schema.js';\nimport { CopyRequestSchema } from '../models/CopyRequest.schema.js';\nimport { CreateRequestSchema } from '../models/CreateRequest.schema.js';\nimport { DeleteRequestSchema } from '../models/DeleteRequest.schema.js';\nimport { EmbedRequestSchema } from '../models/EmbedRequest.schema.js';\nimport { EmbedResponseSchema } from '../models/EmbedResponse.schema.js';\nimport { GenerateRequestSchema } from '../models/GenerateRequest.schema.js';\nimport { GenerateResponseSchema } from '../models/GenerateResponse.schema.js';\nimport { ListResponseSchema } from '../models/ListResponse.schema.js';\nimport { PsResponseSchema } from '../models/PsResponse.schema.js';\nimport { PullRequestSchema } from '../models/PullRequest.schema.js';\nimport { PushRequestSchema } from '../models/PushRequest.schema.js';\nimport { ShowRequestSchema } from '../models/ShowRequest.schema.js';\nimport { ShowResponseSchema } from '../models/ShowResponse.schema.js';\nimport { StatusResponseSchema } from '../models/StatusResponse.schema.js';\nimport { SystemOneRequestSchema } from '../models/SystemOneRequest.schema.js';\nimport { SystemOneResponseSchema } from '../models/SystemOneResponse.schema.js';\nimport { UsageResponseSchema } from '../models/UsageResponse.schema.js';\nimport { VersionResponseSchema } from '../models/VersionResponse.schema.js';\nimport { WebFetchRequestSchema } from '../models/WebFetchRequest.schema.js';\nimport { WebFetchResponseSchema } from '../models/WebFetchResponse.schema.js';\nimport { WebSearchRequestSchema } from '../models/WebSearchRequest.schema.js';\nimport { WebSearchResponseSchema } from '../models/WebSearchResponse.schema.js';\n\n/**\n * Map from operationId → request schema. The runtime consults this\n * registry (via getRequestSchema) when `validateRequests: true` is\n * set on OllamaRuntime.\n *\n * Wave 12 (P1 #6): this file is now generated from the canonical IR.\n */\nexport const requestSchemas: Readonly<Record<string, z.ZodType>> = {\n chat: ChatRequestSchema,\n copy: CopyRequestSchema,\n create: CreateRequestSchema,\n delete: DeleteRequestSchema,\n embed: EmbedRequestSchema,\n generate: GenerateRequestSchema,\n pull: PullRequestSchema,\n push: PushRequestSchema,\n show: ShowRequestSchema,\n systemOne: SystemOneRequestSchema,\n webFetch: WebFetchRequestSchema,\n webSearch: WebSearchRequestSchema,\n};\n\n/**\n * Map from operationId → response schema. The runtime consults this\n * registry (via getResponseSchema) when `validateResponses: true` is\n * set on OllamaRuntime. Wave 13 added this map for operations where\n * typed response semantics are critical (e.g. System One).\n */\nexport const responseSchemas: Readonly<Record<string, z.ZodType>> = {\n balance: BalanceResponseSchema,\n chat: ChatResponseSchema,\n create: StatusResponseSchema,\n embed: EmbedResponseSchema,\n generate: GenerateResponseSchema,\n ps: PsResponseSchema,\n pull: StatusResponseSchema,\n push: StatusResponseSchema,\n show: ShowResponseSchema,\n systemOne: SystemOneResponseSchema,\n tags: ListResponseSchema,\n usage: UsageResponseSchema,\n version: VersionResponseSchema,\n webFetch: WebFetchResponseSchema,\n webSearch: WebSearchResponseSchema,\n};\n\n/** Look up a request schema by operationId. Returns `undefined` if no schema exists. */\nexport function getRequestSchema(operationId: string): z.ZodType | undefined {\n return requestSchemas[operationId];\n}\n\n/** Look up a response schema by operationId. Returns `undefined` if no schema exists. */\nexport function getResponseSchema(operationId: string): z.ZodType | undefined {\n return responseSchemas[operationId];\n}\n","/**\n * OllamaRuntime — the runtime seam generated API classes delegate to.\n *\n * This is the only hand-written file in `src/generated/runtime/`. Every\n * generated method in `src/generated/api/*-api.ts` ends with:\n *\n * ```ts\n * return this.runtime.invoke({ operation: chatOp, body: request });\n * ```\n *\n * The runtime is responsible for:\n * - Method/path resolution (from {@link OperationDefinition})\n * - Streaming default application (when the request doesn't set `stream`)\n * - Environment guard (rejecting cloud calls for local-only operations)\n * - Version constraint guard (failing fast when the server is too old)\n * - Delegating to the existing {@link HttpClient} for transport, retry,\n * telemetry, NDJSON/SSE parsing\n *\n * It is intentionally a thin adapter — the existing transport, streaming,\n * middleware, and error-mapping layers are preserved verbatim. This file\n * only adds the contract-aware glue between generated API classes and the\n * existing HttpClient.\n */\nimport { HttpClient, type HttpRequestOptions } from '../../transport/http.js';\nimport { parseNdjsonStream } from '../../streaming/ndjson.js';\nimport { parseSseStream } from '../../streaming/sse.js';\nimport {\n OllamaGenericClientError,\n OllamaRequestTooLargeError,\n OllamaRequestValidationError,\n OllamaResponseValidationError,\n OllamaServerVersionUnknownError,\n} from '../../errors.js';\nimport type { OperationDefinition, InvokeRequest } from './operation-definition.js';\nimport type { TransportMode } from './operation-definition.js';\nimport { getRequestSchema, getResponseSchema } from './schema-registry.js';\n\n/**\n * Minimal HTTP client surface the runtime consumes. Either a full\n * {@link HttpClient} or a {@link FailoverHttpClient} — the runtime only\n * calls `request()`.\n *\n * Wave 14: widened from `HttpClient` to allow the failover-aware wrapper\n * without breaking existing callers that pass a plain HttpClient.\n */\nexport type RuntimeHttpBackend = Pick<HttpClient, 'baseUrl' | 'request'>;\n\n/** Constructor options for {@link OllamaRuntime}. */\nexport interface OllamaRuntimeOptions {\n readonly http: RuntimeHttpBackend;\n /**\n * Wave 15 (P0): HTTP backend for operations that declare a non-default\n * `host` (e.g. web search/fetch at `https://ollama.com`). When an\n * operation has `host: 'https://ollama.com'` and `cloudHttp` is\n * configured, the runtime routes the request through this backend\n * instead of the default `http`. When `cloudHttp` is not configured\n * and a host-bearing operation is invoked, the runtime throws.\n *\n * OllamaClient.runtime sets this to a dedicated cloud HttpClient\n * pointed at `https://ollama.com` with the configured API key.\n */\n readonly cloudHttp?: RuntimeHttpBackend;\n /**\n * Whether this runtime is targeting a local Ollama instance. Defaults to\n * `true`. When `false`, operations marked `environment.cloud === false`\n * (i.e. local-only like `/v1/systemone`) are rejected at request time.\n */\n readonly localMode?: boolean;\n /**\n * Server version, if known (typically from a prior `/api/version` call).\n * When set, operations with `constraints.minOllamaVersion` are checked\n * against this value at request time.\n *\n * Wave 12 (P0 #5): when unset, the runtime will lazily fetch and cache\n * the server version the first time a version-gated operation is\n * invoked. The fetch policy is controlled by {@link enforceVersion}.\n */\n readonly serverVersion?: string;\n /**\n * When `true`, the runtime validates every request body against the\n * generated Zod schema before sending it. Defaults to `false` — opt-in.\n *\n * Validation behavior:\n * - If the operation has a registered request schema (see\n * {@link schema-registry.ts}), the body is parsed via `safeParse`.\n * - On parse failure, throws `OllamaRequestValidationError` with the\n * Zod issues attached. No HTTP request is made.\n * - On parse success, the parsed (and stripped of unknown fields) body\n * is sent — this means callers can't accidentally send extra fields\n * that the contract doesn't allow.\n * - If the operation has NO registered schema (e.g. GET endpoints,\n * `/v1/systemone`, OpenAI/Anthropic compat surfaces), validation is\n * skipped silently.\n *\n * Response validation is intentionally NOT enabled by default — see\n * ADR 0020 for the rationale (forward-compat with wire-format\n * extensions).\n *\n * Wave 13: an opt-in `validateResponses` option is now available for\n * operations where typed response semantics are the entire point\n * (e.g. System One). When enabled, the runtime validates the HTTP\n * response body against the operation's registered response schema\n * before returning it to the caller. On failure, throws\n * {@link OllamaResponseValidationError}.\n */\n readonly validateRequests?: boolean;\n /**\n * Wave 13: when `true`, the runtime validates every response body\n * against the operation's registered response schema before returning\n * it. Defaults to `false` — opt-in. Only operations with a registered\n * response schema are validated; others pass through unchanged.\n *\n * On validation failure, throws {@link OllamaResponseValidationError}\n * with the Zod issues attached. The HTTP response is still consumed.\n *\n * Use this for operations where typed response semantics are critical\n * (System One, structured output). Don't enable globally — legitimate\n * forward-compat wire-format extensions would cause false rejections.\n */\n readonly validateResponses?: boolean;\n /**\n * Policy for enforcing `constraints.minOllamaVersion` when\n * {@link serverVersion} is not explicitly supplied.\n *\n * - `'auto'` (default): lazily fetch `/api/version` once and cache the\n * result; subsequent version-gated invocations reuse the cached\n * value. If the fetch fails, the operation is allowed through\n * (fail-open) — the server will reject it if it truly doesn't\n * support it.\n * - `'strict'`: same as `'auto'`, but if the version fetch fails the\n * invocation throws {@link OllamaServerVersionUnknownError} rather\n * than fail-open. Use this when the caller wants hard guarantees\n * that a version-gated operation will not be sent to a server that\n * can't handle it.\n * - `'off'`: never fetch `/api/version` automatically. The runtime\n * only enforces the version constraint when {@link serverVersion}\n * was explicitly supplied. Useful in tests that mock fetch and want\n * to avoid spurious version probes.\n */\n readonly enforceVersion?: 'auto' | 'strict' | 'off';\n}\n\nfunction compareVersions(a: string, b: string): number {\n const pa = a.split('.').map((s) => Number.parseInt(s, 10) ?? 0);\n const pb = b.split('.').map((s) => Number.parseInt(s, 10) ?? 0);\n for (let i = 0; i < Math.max(pa.length, pb.length); i += 1) {\n const va = pa[i] ?? 0;\n const vb = pb[i] ?? 0;\n if (va !== vb) return va - vb;\n }\n return 0;\n}\n\n/**\n * Best-effort one-shot fetch of the Ollama server version.\n *\n * Resolves to `undefined` if the server's response shape doesn't include a\n * `version` field. Network/parse errors propagate to the caller, where the\n * `enforceVersion` policy decides whether they become hard failures\n * ('strict') or silent fallthrough ('auto').\n *\n * The result is cached per-runtime in {@link OllamaRuntime}'s private\n * state — we don't re-probe `/api/version` for every version-gated call.\n */\nasync function fetchServerVersion(http: RuntimeHttpBackend): Promise<string | undefined> {\n const result = await http.request<{ version?: unknown }>({\n path: '/api/version',\n method: 'GET',\n });\n if (result && typeof result.version === 'string') return result.version;\n return undefined;\n}\n\n/**\n * Decide whether the request should stream. If the request body explicitly\n * sets `stream`, that wins. Otherwise the operation's `streamingDefault`\n * from the contract is used.\n */\nfunction shouldStream(req: InvokeRequest): boolean {\n if (req.body && typeof req.body === 'object' && 'stream' in req.body) {\n const explicit = (req.body as { stream?: unknown }).stream;\n if (typeof explicit === 'boolean') return explicit;\n }\n return Boolean(req.streamingDefault ?? req.operation.transport.streamingDefault);\n}\n\n/**\n * Apply the streaming default to the request body if needed.\n *\n * If the operation streams by default and the body doesn't set `stream`,\n * add `stream: true`. The user can always override by setting `stream`\n * explicitly on the request.\n */\nfunction buildBody(req: InvokeRequest): unknown {\n if (req.body === undefined) return undefined;\n if (typeof req.body !== 'object' || req.body === null) return req.body;\n const body = req.body as Record<string, unknown>;\n if (\n req.operation.transport.streaming &&\n req.operation.transport.streamingDefault &&\n body.stream === undefined\n ) {\n return { ...body, stream: true };\n }\n return body;\n}\n\n/** The runtime seam. */\nexport class OllamaRuntime {\n /**\n * Cached promise of the Ollama server version, populated lazily the first\n * time a version-gated operation is invoked. `undefined` until then.\n *\n * Wave 12 (P0 #5): see {@link OllamaRuntimeOptions.enforceVersion}.\n */\n private serverVersionCache: Promise<string | undefined> | undefined;\n\n constructor(private readonly options: OllamaRuntimeOptions) {}\n\n /**\n * Wave 15 (P0): resolve the HTTP backend for a given operation.\n *\n * Operations with a declared `host` (e.g. web search/fetch at\n * https://ollama.com) must route to a HttpClient pointed at that host,\n * not the default one. The runtime accepts an optional `cloudHttp`\n * backend for this purpose — if the operation declares a host and no\n * cloud backend is configured, the runtime throws rather than silently\n * sending the request to the wrong server.\n */\n private resolveHttpBackend(operation: OperationDefinition): RuntimeHttpBackend {\n if (operation.host) {\n const cloudHttp = this.options.cloudHttp;\n if (!cloudHttp) {\n throw new OllamaGenericClientError(\n `Operation ${operation.operationId} (${operation.method} ${operation.path}) ` +\n `targets host \"${operation.host}\" but the runtime has no cloudHttp backend configured. ` +\n `Use OllamaClient.webSearch() / OllamaClient.webFetch() for cloud-hosted operations, ` +\n `or construct OllamaRuntime with a cloudHttp option.`,\n );\n }\n return cloudHttp;\n }\n return this.options.http;\n }\n\n /**\n * Invoke an operation. Called by every generated API method.\n *\n * Returns a `Promise<T>` for non-streaming operations, or an\n * `AsyncGenerator<T>` for streaming operations. The generated API\n * class's overloads pick the right return type at compile time.\n */\n async invoke<T = unknown>(req: InvokeRequest): Promise<T> {\n await this.assertOperationAllowed(req.operation);\n let body = buildBody(req);\n\n // Wave 10 (ADR 0020): runtime Zod validation. Opt-in via\n // `validateRequests: true` on the runtime constructor. Throws\n // `OllamaRequestValidationError` BEFORE any HTTP request is made\n // when the body fails validation. The validated (and stripped)\n // body replaces the original so unknown fields can't leak through.\n if (this.options.validateRequests === true && body !== undefined) {\n const schema = getRequestSchema(req.operation.operationId);\n if (schema) {\n const result = schema.safeParse(body);\n if (!result.success) {\n throw new OllamaRequestValidationError(\n `Request validation failed for operation \"${req.operation.operationId}\" ` +\n `(${req.operation.method} ${req.operation.path}): ` +\n result.error.issues\n .map((i) => `${i.path.join('.') || '<root>'}: ${i.message}`)\n .join('; '),\n {\n operationId: req.operation.operationId,\n issues: result.error.issues,\n request: { method: req.operation.method, url: req.operation.path },\n },\n );\n }\n body = result.data;\n }\n }\n\n // Wave 12 (P0 #5) + Wave 13: enforce request size limits BEFORE\n // the request is sent. The Ollama server returns 413 for oversized\n // bodies; failing fast client-side avoids the round-trip.\n //\n // Wave 13 adds conditional limits: when the operation declares\n // `maxRequestBytesWithImages` AND the body contains a non-empty\n // `images` array, the higher limit applies (e.g. System One allows\n // 32 MiB with images vs 64 KiB without). When images are absent\n // or the operation doesn't declare a separate images limit, the\n // base `maxRequestBytes` applies.\n if (body !== undefined) {\n const serialized = serializeForByteCount(body);\n const hasImages = bodyHasImages(body);\n const maxBytesWithImages = req.operation.constraints?.maxRequestBytesWithImages;\n const maxBytesBase = req.operation.constraints?.maxRequestBytes;\n const applicableLimit =\n hasImages && maxBytesWithImages !== undefined ? maxBytesWithImages : maxBytesBase;\n if (applicableLimit !== undefined && serialized.byteLength > applicableLimit) {\n throw new OllamaRequestTooLargeError(\n `Operation ${req.operation.operationId} (${req.operation.method} ` +\n `${req.operation.path}) request body is ${serialized.byteLength} bytes, ` +\n `exceeding the contract limit of ${applicableLimit} bytes` +\n (hasImages ? ' (images limit).' : '.'),\n {\n operationId: req.operation.operationId,\n actualBytes: serialized.byteLength,\n maxBytes: applicableLimit,\n request: { method: req.operation.method, url: req.operation.path },\n },\n );\n }\n }\n\n const streaming = shouldStream(req);\n\n // Wave 15 (P0): substitute path parameters into the path template.\n // The operation's path may contain `{name}` segments (e.g.\n // `/v1/models/{model}`, `/api/blobs/{digest}`). The caller provides\n // values via `req.pathParams`; we URI-encode each value and substitute\n // it into the template. If a required path parameter is missing, we\n // throw before making the HTTP request.\n const resolvedPath = resolvePathParams(req.operation.path, req.pathParams);\n\n // Wave 17 (P1): apply query parameters to the path. Query params are\n // appended as URL-encoded key=value pairs after a '?' separator.\n const pathWithQuery = applyQueryParams(resolvedPath, req.queryParams);\n\n // Wave 17 (P1): extract model from the request body for failover\n // routing. The failover layer uses this to filter endpoints by\n // OllamaEndpoint.models (credential-scoped routing). We extract it\n // here rather than in the FailoverHttpClient because the runtime\n // has access to the request body.\n const model = req.model ?? extractModelFromBody(body);\n\n // Wave 17 (P1): merge header parameters from the InvokeRequest with\n // any existing headers. The operation may declare header parameters\n // (e.g. Authorization, Accept); the caller provides values via\n // req.headerParams.\n const headers: Record<string, string> = {};\n if (req.headerParams) {\n for (const [key, value] of Object.entries(req.headerParams)) {\n headers[key] = value;\n }\n }\n\n // The HttpClient expects the narrow method union 'GET' | 'POST' |\n // 'DELETE' | 'HEAD' | undefined — cast through `as` because our\n // OperationDefinition.method is the wider HttpMethod type.\n // Wave 15: pass the model through via a custom property on the\n // request options. The FailoverHttpClient reads this to pass to\n // executeWithFailover for model-scoped routing. Plain HttpClient\n // ignores it (it's not part of HttpRequestOptions).\n const httpReq = {\n path: pathWithQuery,\n method: req.operation.method as 'GET' | 'POST' | 'DELETE' | 'HEAD',\n ...(body !== undefined ? { body } : {}),\n ...(Object.keys(headers).length > 0 ? { headers } : {}),\n ...(req.signal !== undefined ? { signal: req.signal } : {}),\n ...(streaming ? { raw: true } : {}),\n ...(model !== undefined ? { model } : {}),\n } as HttpRequestOptions;\n\n if (!streaming) {\n const result = (await this.resolveHttpBackend(req.operation).request<T>(httpReq)) as T;\n // Wave 13: opt-in response validation. When `validateResponses: true`\n // is set and the operation has a registered response schema, validate\n // the response body before returning it. Throws\n // OllamaResponseValidationError on failure. Only use this for\n // operations where typed response semantics are critical (System One,\n // structured output) — don't enable globally.\n if (this.options.validateResponses === true) {\n const responseSchema = getResponseSchema(req.operation.operationId);\n if (responseSchema) {\n const result2 = responseSchema.safeParse(result);\n if (!result2.success) {\n throw new OllamaResponseValidationError(\n `Response validation failed for operation \"${req.operation.operationId}\" ` +\n `(${req.operation.method} ${req.operation.path}): ` +\n result2.error.issues\n .map((i) => `${i.path.join('.') || '<root>'}: ${i.message}`)\n .join('; '),\n {\n operationId: req.operation.operationId,\n issues: result2.error.issues,\n request: { method: req.operation.method, url: req.operation.path },\n },\n );\n }\n }\n }\n return result;\n }\n\n // Streaming: HttpClient returns the raw Response (via the `raw: true`\n // option) so we can read its body through the parser the contract\n // specifies for this operation.\n //\n // Wave 12 (P0 #2): the runtime now honors `operation.transport.mode`\n // instead of unconditionally parsing every stream as NDJSON. Native\n // Ollama operations (chat/generate/create/pull/push) declare\n // `transport.mode === 'ndjson'` and continue to use parseNdjsonStream;\n // OpenAI/Anthropic compatibility operations declare `transport.mode ===\n // 'sse'` and now correctly use the SSE parser, then JSON-decode each\n // event's `data` field. This closes the contract/runtime violation\n // where generated compat streaming was being parsed as NDJSON.\n const response = await this.resolveHttpBackend(req.operation).request<Response>(httpReq);\n if (!response.body) {\n throw new OllamaGenericClientError(\n `Operation ${req.operation.operationId}: streaming response had no body.`,\n );\n }\n return parseStreamByMode<T>(req.operation.transport.mode, response.body) as unknown as T;\n }\n\n /**\n * Apply environment + version guards before delegating to HttpClient.\n *\n * Throws {@link OllamaGenericClientError} when:\n * - The operation is local-only and the runtime is in cloud mode.\n * - The operation has `constraints.minOllamaVersion` and the server is older.\n *\n * Wave 12 (P0 #5): when `minOllamaVersion` is declared but the runtime's\n * `serverVersion` is unknown AND `enforceVersion` is `'auto'` or\n * `'strict'`, the runtime lazily fetches `/api/version` (cached on the\n * runtime instance) so the constraint is actually enforced even when the\n * caller didn't supply it. Previously the constraint was only enforced\n * when `serverVersion` was manually supplied — meaning in practice it was\n * almost never enforced.\n */\n private async assertOperationAllowed(operation: OperationDefinition): Promise<void> {\n const localMode = this.options.localMode ?? true;\n if (!localMode && !operation.environment.cloud) {\n throw new OllamaGenericClientError(\n `Operation ${operation.operationId} (${operation.method} ${operation.path}) ` +\n `is local-only and not supported in cloud mode.`,\n );\n }\n const minVersion = operation.constraints?.minOllamaVersion;\n if (!minVersion) return;\n\n let serverVersion = this.options.serverVersion;\n const policy = this.options.enforceVersion ?? 'auto';\n if (!serverVersion && policy !== 'off') {\n if (!this.serverVersionCache) {\n const p = fetchServerVersion(this.options.http).catch((err) => {\n if (policy === 'strict') {\n throw new OllamaServerVersionUnknownError(\n `Operation ${operation.operationId} requires Ollama >= ${minVersion} ` +\n `but the runtime could not determine the server version ` +\n `(enforceVersion: 'strict').`,\n {\n operationId: operation.operationId,\n minRequiredVersion: minVersion,\n cause: err,\n },\n );\n }\n // 'auto' — fail-open: surface nothing, the server will reject if\n // it can't handle it.\n return undefined;\n });\n this.serverVersionCache = p;\n }\n serverVersion = (await this.serverVersionCache) ?? undefined;\n }\n\n if (serverVersion && compareVersions(serverVersion, minVersion) < 0) {\n throw new OllamaGenericClientError(\n `Operation ${operation.operationId} (${operation.method} ${operation.path}) ` +\n `requires Ollama >= ${minVersion} (server reports ${serverVersion}).`,\n );\n }\n }\n}\n\n/**\n * Pick the stream parser that matches the operation's declared transport\n * mode, returning a uniform `AsyncGenerator<T>`.\n *\n * - `ndjson` → one JSON object per line (native Ollama streaming).\n * - `sse` → Server-Sent Events; each event's `data` field is parsed as\n * JSON. Heartbeat/comment-only events and events whose `data`\n * is the literal `[DONE]` sentinel are skipped (the OpenAI\n * compatibility layer uses that sentinel to terminate streams).\n * - `json` → not a streaming mode; callers should never reach this branch\n * for a non-streaming operation. We throw defensively so a\n * future operation that mis-declares its transport surfaces\n * loudly instead of silently degrading.\n */\nfunction parseStreamByMode<T>(\n mode: TransportMode,\n body: ReadableStream<Uint8Array>,\n): AsyncGenerator<T, void, undefined> {\n if (mode === 'ndjson') {\n return parseNdjsonStream<T>(body);\n }\n if (mode === 'sse') {\n return parseSseStreamAsJson<T>(body);\n }\n throw new OllamaGenericClientError(\n `Transport mode \"${mode}\" is not a streaming mode; cannot parse a stream for it.`,\n );\n}\n\n/**\n * Adapter that yields the JSON-decoded payload of each SSE `data` field.\n *\n * The hand-written OpenAI/Anthropic compatibility clients\n * (`src/integrations/{openai,anthropic}.ts`) consume raw `SseEvent`s and\n * apply provider-specific event-shape logic (tool-call accumulation,\n * reasoning deltas, etc.). The generated compatibility API surface is\n * intentionally shape-agnostic: it yields the raw JSON payload of each\n * event, leaving provider-specific interpretation to the caller. Consumers\n * who want the richer aggregated streaming experience should use\n * `client.openai` / `client.anthropic` instead of the generated API class.\n */\nasync function* parseSseStreamAsJson<T>(\n body: ReadableStream<Uint8Array>,\n): AsyncGenerator<T, void, undefined> {\n for await (const event of parseSseStream(body)) {\n const data = event.data;\n if (!data) continue;\n // OpenAI's stream terminator sentinel — yield nothing; the generator\n // simply completes on the next iteration.\n if (data === '[DONE]') return;\n try {\n yield JSON.parse(data) as T;\n } catch (err) {\n throw new OllamaGenericClientError(`Failed to parse SSE event data as JSON: ${data}`, {\n cause: err,\n });\n }\n }\n}\n\n/**\n * Serialize a request body for byte counting (used by the\n * `maxRequestBytes` guard). The byte count mirrors what the HttpClient\n * would actually send on the wire: UTF-8 encoded JSON. Buffer (Node) and\n * Uint8Array inputs are passed through directly since their byte length\n * is already known.\n *\n * This intentionally mirrors HttpClient's serialization (`JSON.stringify`\n * with no whitespace) so the byte count is accurate against the actual\n * request payload — using a different serializer would let oversized\n * bodies through.\n */\nfunction serializeForByteCount(body: unknown): Uint8Array {\n if (body instanceof Uint8Array) return body;\n if (typeof body === 'string') return new TextEncoder().encode(body);\n // HttpClient calls JSON.stringify on the body before sending — match that.\n const json = JSON.stringify(body);\n return new TextEncoder().encode(json);\n}\n\n/**\n * Wave 13: detect whether a request body carries a non-empty `images`\n * array. Used by the request-size guard to select between the base\n * `maxRequestBytes` limit and the higher `maxRequestBytesWithImages`\n * limit (e.g. System One: 64 KiB without images, 32 MiB with).\n *\n * Returns true only when the body is an object with an `images` property\n * that is a non-empty array. Falsy/absent/empty images → false (base\n * limit applies).\n */\nfunction bodyHasImages(body: unknown): boolean {\n if (typeof body !== 'object' || body === null) return false;\n const obj = body as Record<string, unknown>;\n const images = obj.images;\n return Array.isArray(images) && images.length > 0;\n}\n\n/**\n * Wave 15 (P0): substitute path parameters into a path template.\n *\n * Replaces every `{name}` segment in the path with the URI-encoded value\n * from `pathParams`. If a `{name}` segment has no corresponding value in\n * `pathParams`, throws an error — sending a literal `{name}` to the server\n * would produce a confusing 404 rather than a clear client-side error.\n *\n * Example:\n * resolvePathParams('/v1/models/{model}', { model: 'gpt-4' })\n * → '/v1/models/gpt-4'\n *\n * resolvePathParams('/api/blobs/{digest}', { digest: 'sha256:abc' })\n * → '/api/blobs/sha256%3Aabc'\n */\nfunction resolvePathParams(\n pathTemplate: string,\n pathParams: Readonly<Record<string, string>> | undefined,\n): string {\n // If the path has no `{...}` segments, return it unchanged.\n if (!pathTemplate.includes('{')) return pathTemplate;\n\n const params = pathParams ?? {};\n return pathTemplate.replace(/\\{([^}]+)\\}/g, (_match, name: string) => {\n const value = params[name];\n if (value === undefined) {\n throw new OllamaGenericClientError(\n `Missing path parameter \"${name}\" for path template \"${pathTemplate}\". ` +\n `Provide it via the pathParams field on the invoke() request.`,\n );\n }\n return encodeURIComponent(value);\n });\n}\n\n/**\n * Wave 15 (P1): extract the `model` field from a request body for\n * failover routing. The failover layer uses this to filter endpoints by\n * `OllamaEndpoint.models` (credential-scoped routing). Returns undefined\n * for bodies that don't carry a model (e.g. GET /api/tags, GET /api/version).\n */\nfunction extractModelFromBody(body: unknown): string | undefined {\n if (typeof body !== 'object' || body === null) return undefined;\n const obj = body as Record<string, unknown>;\n const model = obj.model;\n return typeof model === 'string' ? model : undefined;\n}\n\n/**\n * Wave 17 (P1): append query parameters to a path.\n *\n * Takes a resolved path (e.g. `/api/tags`) and a map of query params\n * (e.g. `{ limit: '10' }`), returns the path with `?limit=10` appended.\n * Values are URI-encoded. If no query params are provided, the path is\n * returned unchanged.\n */\nfunction applyQueryParams(\n path: string,\n queryParams: Readonly<Record<string, string>> | undefined,\n): string {\n if (!queryParams || Object.keys(queryParams).length === 0) return path;\n const pairs = Object.entries(queryParams)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n .join('&');\n return `${path}?${pairs}`;\n}\n"]}
|