@agentskit/adapters 0.6.0 → 0.7.1

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/dist/index.cjs CHANGED
@@ -60,16 +60,22 @@ function generic(config) {
60
60
 
61
61
  // src/utils.ts
62
62
  function toProviderMessages(messages) {
63
- return messages.map((message) => {
63
+ const knownToolCallIds = /* @__PURE__ */ new Set();
64
+ const output = [];
65
+ for (const message of messages) {
64
66
  if (message.role === "tool") {
65
- return {
67
+ const id = message.toolCallId;
68
+ if (!id || !knownToolCallIds.has(id)) continue;
69
+ output.push({
66
70
  role: "tool",
67
71
  content: message.content,
68
- tool_call_id: message.toolCallId
69
- };
72
+ tool_call_id: id
73
+ });
74
+ continue;
70
75
  }
71
76
  if (message.role === "assistant" && message.toolCalls && message.toolCalls.length > 0) {
72
- return {
77
+ for (const tc of message.toolCalls) knownToolCallIds.add(tc.id);
78
+ output.push({
73
79
  role: "assistant",
74
80
  content: message.content || null,
75
81
  tool_calls: message.toolCalls.map((tc) => ({
@@ -80,10 +86,13 @@ function toProviderMessages(messages) {
80
86
  arguments: typeof tc.args === "string" ? tc.args : JSON.stringify(tc.args ?? {})
81
87
  }
82
88
  }))
83
- };
89
+ });
90
+ continue;
84
91
  }
85
- return { role: message.role, content: message.content };
86
- });
92
+ if (message.role === "assistant" && !message.content) continue;
93
+ output.push({ role: message.role, content: message.content });
94
+ }
95
+ return output;
87
96
  }
88
97
  async function* readSSELines(stream) {
89
98
  const reader = stream.getReader();
@@ -158,6 +167,16 @@ async function* parseOpenAIStream(stream) {
158
167
  }
159
168
  }
160
169
  }
170
+ if (event.usage) {
171
+ yield {
172
+ type: "usage",
173
+ usage: {
174
+ promptTokens: event.usage.prompt_tokens ?? 0,
175
+ completionTokens: event.usage.completion_tokens ?? 0,
176
+ totalTokens: event.usage.total_tokens ?? 0
177
+ }
178
+ };
179
+ }
161
180
  } catch {
162
181
  }
163
182
  }
@@ -202,6 +221,24 @@ async function* parseAnthropicStream(stream) {
202
221
  };
203
222
  pendingToolCalls.delete(index);
204
223
  }
224
+ } else if (event.type === "message_delta" && event.usage) {
225
+ yield {
226
+ type: "usage",
227
+ usage: {
228
+ promptTokens: event.usage.input_tokens ?? 0,
229
+ completionTokens: event.usage.output_tokens ?? 0,
230
+ totalTokens: (event.usage.input_tokens ?? 0) + (event.usage.output_tokens ?? 0)
231
+ }
232
+ };
233
+ } else if (event.type === "message_start" && event.message?.usage) {
234
+ yield {
235
+ type: "usage",
236
+ usage: {
237
+ promptTokens: event.message.usage.input_tokens ?? 0,
238
+ completionTokens: 0,
239
+ totalTokens: event.message.usage.input_tokens ?? 0
240
+ }
241
+ };
205
242
  } else if (event.type === "message_stop") {
206
243
  for (const [, tc] of pendingToolCalls) {
207
244
  yield { type: "tool_call", toolCall: { id: tc.id, name: tc.name, args: tc.args || "{}" } };
@@ -223,6 +260,16 @@ async function* parseGeminiStream(stream) {
223
260
  for await (const data of readSSELines(stream)) {
224
261
  try {
225
262
  const event = JSON.parse(data);
263
+ if (event.usageMetadata) {
264
+ yield {
265
+ type: "usage",
266
+ usage: {
267
+ promptTokens: event.usageMetadata.promptTokenCount ?? 0,
268
+ completionTokens: event.usageMetadata.candidatesTokenCount ?? 0,
269
+ totalTokens: event.usageMetadata.totalTokenCount ?? 0
270
+ }
271
+ };
272
+ }
226
273
  const parts = event.candidates?.[0]?.content?.parts;
227
274
  if (!Array.isArray(parts)) continue;
228
275
  for (const part of parts) {
@@ -267,6 +314,18 @@ async function* parseOllamaStream(stream) {
267
314
  }
268
315
  }
269
316
  if (event.done) {
317
+ if (typeof event.prompt_eval_count === "number" || typeof event.eval_count === "number") {
318
+ const promptTokens = event.prompt_eval_count ?? 0;
319
+ const completionTokens = event.eval_count ?? 0;
320
+ yield {
321
+ type: "usage",
322
+ usage: {
323
+ promptTokens,
324
+ completionTokens,
325
+ totalTokens: promptTokens + completionTokens
326
+ }
327
+ };
328
+ }
270
329
  yield { type: "done" };
271
330
  return;
272
331
  }
@@ -468,6 +527,7 @@ function anthropic(config) {
468
527
  // src/openai.ts
469
528
  function openai(config) {
470
529
  const { apiKey, model, baseUrl = "https://api.openai.com", retry } = config;
530
+ const includeUsage = config.includeUsage ?? baseUrl.startsWith("https://api.openai.com");
471
531
  return {
472
532
  capabilities: {
473
533
  streaming: true,
@@ -494,6 +554,7 @@ function openai(config) {
494
554
  max_tokens: request.context?.maxTokens,
495
555
  stream: true
496
556
  };
557
+ if (includeUsage) body.stream_options = { include_usage: true };
497
558
  return createStreamSource(
498
559
  (signal) => fetch(`${baseUrl}/v1/chat/completions`, {
499
560
  method: "POST",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/createAdapter.ts","../src/generic.ts","../src/utils.ts","../src/anthropic.ts","../src/openai.ts","../src/gemini.ts","../src/openai-compatible.ts","../src/grok.ts","../src/ollama.ts","../src/deepseek.ts","../src/kimi.ts","../src/langchain.ts","../src/vercel-ai.ts","../src/mock.ts","../src/embedders/openai.ts","../src/embedders/gemini.ts","../src/embedders/ollama.ts","../src/embedders/openai-compatible.ts","../src/embedders/deepseek.ts","../src/embedders/grok.ts","../src/embedders/kimi.ts"],"names":["resolve","fetchAvailableModels","buildModelError"],"mappings":";;;AAGO,SAAS,cAAc,MAAA,EAA6C;AACzE,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,OAAA,MAA2C;AAAA,MACxD,QAAQ,mBAAuD;AAC7D,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACxC,UAAA,MAAM,MAAA,GAAS,MAAA,YAAkB,QAAA,GAC7B,MAAA,CAAO,IAAA,GACP,MAAA;AACJ,UAAA,OAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,QAC5B,SAAS,GAAA,EAAK;AACZ,UAAA,MAAM;AAAA,YACJ,IAAA,EAAM,OAAA;AAAA,YACN,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,WAC1D;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,OAAO,MAAM;AACX,QAAA,MAAA,CAAO,KAAA,IAAQ;AAAA,MACjB;AAAA,KACF;AAAA,GACF;AACF;;;ACtBO,SAAS,QAAQ,MAAA,EAA8C;AACpE,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,IAAI,MAAA,GAAyD,IAAA;AAC7D,MAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAEhC,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAuD;AAC7D,UAAA,IAAI;AACF,YAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACxC,YAAA,MAAA,GAAS,OAAO,SAAA,EAAU;AAE1B,YAAA,OAAO,IAAA,EAAM;AACX,cAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,cAAA,IAAI,IAAA,EAAM;AACV,cAAA,MAAM,OAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AACnD,cAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAK;AAAA,YACtC;AAEA,YAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,UACvB,SAAS,GAAA,EAAK;AACZ,YAAA,MAAM;AAAA,cACJ,IAAA,EAAM,OAAA;AAAA,cACN,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,aAC1D;AAAA,UACF,CAAA,SAAE;AACA,YAAA,MAAA,EAAQ,WAAA,EAAY;AAAA,UACtB;AAAA,QACF,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,KAAK,QAAQ,MAAA,EAAO;AAAA,QACtB;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;ACpCO,SAAS,mBAAmB,QAAA,EAAqB;AACtD,EAAA,OAAO,QAAA,CAAS,IAAI,CAAA,OAAA,KAAW;AAC7B,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,cAAc,OAAA,CAAQ;AAAA,OACxB;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,WAAA,IAAe,OAAA,CAAQ,aAAa,OAAA,CAAQ,SAAA,CAAU,SAAS,CAAA,EAAG;AACrF,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS,QAAQ,OAAA,IAAW,IAAA;AAAA,QAC5B,UAAA,EAAY,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,CAAA,EAAA,MAAO;AAAA,UACvC,IAAI,EAAA,CAAG,EAAA;AAAA,UACP,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU;AAAA,YACR,MAAM,EAAA,CAAG,IAAA;AAAA,YACT,SAAA,EAAW,OAAO,EAAA,CAAG,IAAA,KAAS,QAAA,GAAW,EAAA,CAAG,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,IAAA,IAAQ,EAAE;AAAA;AACjF,SACF,CAAE;AAAA,OACJ;AAAA,IACF;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,OAAA,EAAS,QAAQ,OAAA,EAAQ;AAAA,EACxD,CAAC,CAAA;AACH;AAEA,gBAAuB,aAAa,MAAA,EAAuD;AACzF,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,IAAI;AACF,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;AAC/B,MAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAChC,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK;AAChC,QAAA,IAAI,MAAM,MAAM,IAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACF;AAEA,gBAAuB,gBAAgB,MAAA,EAAuD;AAC5F,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,IAAI;AACF,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;AAC/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,SAAS,MAAM,OAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACF;AAEA,gBAAuB,kBAAkB,MAAA,EAA4D;AACnG,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAwD;AAErF,EAAA,WAAA,MAAiB,IAAA,IAAQ,YAAA,CAAa,MAAM,CAAA,EAAG;AAC7C,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,KAAA,MAAW,GAAG,EAAE,CAAA,IAAK,gBAAA,EAAkB;AACrC,QAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,EAAE,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,GAAG,IAAA,EAAM,IAAA,EAAM,EAAA,CAAG,IAAA,IAAQ,MAAK,EAAE;AAAA,MAC3F;AACA,MAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,MAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA,EAAG,KAAA;AAElC,MAAA,IAAI,OAAO,KAAA,EAAO,OAAA,KAAY,QAAA,EAAU;AACtC,QAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,MAAM,OAAA,EAAQ;AAAA,MAC/C;AAEA,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,UAAU,CAAA,EAAG;AACpC,QAAA,KAAA,MAAW,QAAA,IAAY,MAAM,UAAA,EAAY;AACvC,UAAA,MAAM,KAAA,GAAgB,SAAS,KAAA,IAAS,CAAA;AACxC,UAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AAE3C,UAAA,IAAI,QAAA,EAAU,UAAU,IAAA,EAAM;AAE5B,YAAA,gBAAA,CAAiB,IAAI,KAAA,EAAO;AAAA,cAC1B,EAAA,EAAI,QAAA,CAAS,EAAA,IAAM,QAAA,EAAU,EAAA,IAAM,QAAQ,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,cAC9D,IAAA,EAAM,SAAS,QAAA,CAAS,IAAA;AAAA,cACxB,OAAO,QAAA,EAAU,IAAA,IAAQ,EAAA,KAAO,QAAA,CAAS,SAAS,SAAA,IAAa,EAAA;AAAA,aAChE,CAAA;AAAA,UACH,CAAA,MAAA,IAAW,QAAA,IAAY,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW;AAEpD,YAAA,QAAA,CAAS,IAAA,IAAQ,SAAS,QAAA,CAAS,SAAA;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,GAAG,EAAE,CAAA,IAAK,gBAAA,EAAkB;AACrC,IAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,EAAE,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,GAAG,IAAA,EAAM,IAAA,EAAM,EAAA,CAAG,IAAA,IAAQ,MAAK,EAAE;AAAA,EAC3F;AACA,EAAA,gBAAA,CAAiB,KAAA,EAAM;AAEvB,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACvB;AAEA,gBAAuB,qBAAqB,MAAA,EAA4D;AACtG,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAwD;AAErF,EAAA,WAAA,MAAiB,IAAA,IAAQ,YAAA,CAAa,MAAM,CAAA,EAAG;AAC7C,IAAA,IAAI,SAAS,QAAA,EAAU;AAEvB,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,MAAA,IAAI,KAAA,CAAM,SAAS,qBAAA,IAAyB,KAAA,CAAM,OAAO,IAAA,KAAS,YAAA,IAAgB,KAAA,CAAM,KAAA,EAAO,IAAA,EAAM;AACnG,QAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,CAAM,MAAM,IAAA,EAAK;AAAA,MAClD,WAAW,KAAA,CAAM,IAAA,KAAS,yBAAyB,KAAA,CAAM,KAAA,EAAO,SAAS,kBAAA,EAAoB;AAC3F,QAAA,MAAM,KAAA,GAAgB,MAAM,KAAA,IAAS,CAAA;AACrC,QAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AAC3C,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,QAAA,CAAS,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,YAAA,IAAgB,EAAA;AAAA,QAC/C;AAAA,MACF,WAAW,KAAA,CAAM,IAAA,KAAS,yBAAyB,KAAA,CAAM,aAAA,EAAe,SAAS,UAAA,EAAY;AAC3F,QAAA,MAAM,KAAA,GAAgB,MAAM,KAAA,IAAS,CAAA;AACrC,QAAA,gBAAA,CAAiB,IAAI,KAAA,EAAO;AAAA,UAC1B,EAAA,EAAI,MAAM,aAAA,CAAc,EAAA;AAAA,UACxB,IAAA,EAAM,MAAM,aAAA,CAAc,IAAA;AAAA,UAC1B,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,oBAAA,EAAsB;AAC9C,QAAA,MAAM,KAAA,GAAgB,MAAM,KAAA,IAAS,CAAA;AACrC,QAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AACrC,QAAA,IAAI,EAAA,EAAI;AACN,UAAA,MAAM;AAAA,YACJ,IAAA,EAAM,WAAA;AAAA,YACN,QAAA,EAAU;AAAA,cACR,IAAI,EAAA,CAAG,EAAA;AAAA,cACP,MAAM,EAAA,CAAG,IAAA;AAAA,cACT,IAAA,EAAM,GAAG,IAAA,IAAQ;AAAA;AACnB,WACF;AACA,UAAA,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAAA,QAC/B;AAAA,MACF,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,cAAA,EAAgB;AAExC,QAAA,KAAA,MAAW,GAAG,EAAE,CAAA,IAAK,gBAAA,EAAkB;AACrC,UAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,EAAE,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,GAAG,IAAA,EAAM,IAAA,EAAM,EAAA,CAAG,IAAA,IAAQ,MAAK,EAAE;AAAA,QAC3F;AACA,QAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,QAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACrB,QAAA;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,GAAG,EAAE,CAAA,IAAK,gBAAA,EAAkB;AACrC,IAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,EAAE,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,GAAG,IAAA,EAAM,IAAA,EAAM,EAAA,CAAG,IAAA,IAAQ,MAAK,EAAE;AAAA,EAC3F;AACA,EAAA,gBAAA,CAAiB,KAAA,EAAM;AAEvB,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACvB;AAEA,gBAAuB,kBAAkB,MAAA,EAA4D;AACnG,EAAA,WAAA,MAAiB,IAAA,IAAQ,YAAA,CAAa,MAAM,CAAA,EAAG;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,GAAa,CAAC,GAAG,OAAA,EAAS,KAAA;AAC9C,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAE3B,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,KAAK,IAAA,EAAM;AAC9C,UAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAK,IAAA,EAAK;AAAA,QAC3C,CAAA,MAAA,IAAW,KAAK,YAAA,EAAc;AAC5B,UAAA,MAAM,KAAK,IAAA,CAAK,YAAA;AAChB,UAAA,MAAM;AAAA,YACJ,IAAA,EAAM,WAAA;AAAA,YACN,QAAA,EAAU;AAAA,cACR,EAAA,EAAI,GAAG,EAAA,IAAM,CAAA,EAAG,GAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,cACrC,MAAM,EAAA,CAAG,IAAA;AAAA,cACT,MAAM,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,IAAA,IAAQ,EAAE;AAAA;AACpC,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACvB;AAEA,gBAAuB,kBAAkB,MAAA,EAA4D;AACnG,EAAA,WAAA,MAAiB,IAAA,IAAQ,eAAA,CAAgB,MAAM,CAAA,EAAG;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,MAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,QAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,CAAM,QAAQ,OAAA,EAAQ;AAAA,MACvD;AACA,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,EAAS,UAAU,CAAA,EAAG;AAC5C,QAAA,KAAA,MAAW,EAAA,IAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AACzC,UAAA,IAAI,EAAA,EAAI,UAAU,IAAA,EAAM;AACtB,YAAA,MAAM;AAAA,cACJ,IAAA,EAAM,WAAA;AAAA,cACN,QAAA,EAAU;AAAA,gBACR,EAAA,EAAI,EAAA,CAAG,EAAA,IAAM,CAAA,EAAG,EAAA,CAAG,SAAS,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,gBAC9C,IAAA,EAAM,GAAG,QAAA,CAAS,IAAA;AAAA,gBAClB,IAAA,EAAM,OAAO,EAAA,CAAG,QAAA,CAAS,cAAc,QAAA,GACnC,EAAA,CAAG,QAAA,CAAS,SAAA,GACZ,KAAK,SAAA,CAAU,EAAA,CAAG,QAAA,CAAS,SAAA,IAAa,EAAE;AAAA;AAChD,aACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,MAAM,IAAA,EAAM;AACd,QAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACrB,QAAA;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACvB;AA2BA,IAAM,aAAA,GAEF;AAAA,EACF,WAAA,EAAa,CAAA;AAAA,EACb,WAAA,EAAa,GAAA;AAAA,EACb,UAAA,EAAY,GAAA;AAAA,EACZ,MAAA,EAAQ,IAAA;AAAA,EACR,OAAA,EAAS,CAAC,EAAE,KAAA,EAAO,UAAS,KAAM;AAChC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,KAAK,GAAG,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAAA,IAChE;AACA,IAAA,IAAI,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,cAAc,OAAO,KAAA;AAEzE,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAEA,SAAS,aAAa,EAAA,EAA2B;AAC/C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAAA,aAAW,UAAA,CAAWA,QAAAA,EAAS,EAAE,CAAC,CAAA;AACvD;AAEA,SAAS,YAAA,CAAa,SAAiB,IAAA,EAAqF;AAC1H,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,GAAU,CAAC,CAAC,CAAA;AACjF,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,OAAO,GAAA;AACzB,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,GAAG,CAAA;AACvC;AAEA,SAAS,gBAAgB,KAAA,EAA0C;AACjE,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,CAAA,GAAI,OAAO,KAAK,CAAA;AACtB,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,SAAU,CAAA,GAAI,GAAA;AACjC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,GAAA,EAAK,CAAA;AAC7D,EAAA,OAAO,MAAA;AACT;AAOA,eAAsB,cAAA,CACpB,OAAA,EACA,MAAA,EACA,QAAA,GAAyB,EAAC,EACP;AACnB,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,GAAG,aAAA;AAAA,IACH,GAAG;AAAA,GACL;AACA,EAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,IAAS,YAAA;AAChC,EAAA,IAAI,SAAA;AAEJ,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,IAAA,CAAK,aAAa,OAAA,EAAA,EAAW;AAC5D,IAAA,IAAI,OAAO,OAAA,EAAS,MAAM,IAAI,YAAA,CAAa,WAAW,YAAY,CAAA;AAElE,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,MAAM,CAAA;AAGrC,MAAA,IAAI,QAAA,CAAS,IAAI,OAAO,QAAA;AACxB,MAAA,IAAI,OAAA,IAAW,IAAA,CAAK,WAAA,IAAe,CAAC,IAAA,CAAK,QAAQ,EAAE,QAAA,EAAU,OAAA,EAAS,CAAA,EAAG;AACvE,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAA,MAAM,eAAe,eAAA,CAAgB,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAC,CAAA;AACxE,MAAA,MAAM,KAAA,GAAQ,YAAA,IAAgB,YAAA,CAAa,OAAA,EAAS,IAAI,CAAA;AACxD,MAAA,QAAA,CAAS,OAAA,GAAU,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,QAAQ,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,CAAA;AACjF,MAAA,MAAM,MAAM,KAAK,CAAA;AAEjB,MAAA,QAAA,CAAS,IAAA,EAAM,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACxC,SAAS,GAAA,EAAK;AACZ,MAAA,SAAA,GAAY,GAAA;AACZ,MAAA,IAAI,GAAA,YAAe,YAAA,IAAgB,GAAA,CAAI,IAAA,KAAS,cAAc,MAAM,GAAA;AACpE,MAAA,IAAI,OAAA,IAAW,IAAA,CAAK,WAAA,IAAe,CAAC,IAAA,CAAK,OAAA,CAAQ,EAAE,KAAA,EAAO,GAAA,EAAK,OAAA,EAAS,CAAA,EAAG,MAAM,GAAA;AAEjF,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,EAAS,IAAI,CAAA;AACxC,MAAA,QAAA,CAAS,OAAA,GAAU,EAAE,OAAA,EAAS,OAAA,EAAS,OAAO,MAAA,EAAS,GAAA,CAAc,SAAS,CAAA;AAC9E,MAAA,MAAM,MAAM,KAAK,CAAA;AAAA,IACnB;AAAA,EACF;AAGA,EAAA,MAAM,SAAA,IAAa,IAAI,KAAA,CAAM,oCAAoC,CAAA;AACnE;AAEO,SAAS,kBAAA,CACd,OAAA,EACA,KAAA,EACA,UAAA,EACA,KAAA,EACc;AACd,EAAA,IAAI,eAAA,GAA0C,IAAI,eAAA,EAAgB;AAElE,EAAA,OAAO;AAAA,IACL,QAAQ,mBAAuD;AAC7D,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAAe,OAAA,EAAS,gBAAiB,MAAA,EAAQ,KAAA,IAAS,EAAE,CAAA;AAEnF,QAAA,IAAI,CAAC,QAAA,CAAS,EAAA,IAAM,CAAC,SAAS,IAAA,EAAM;AAClC,UAAA,MAAM,EAAE,MAAM,OAAA,EAAS,OAAA,EAAS,GAAG,UAAU,CAAA,QAAA,EAAW,QAAA,CAAS,MAAM,CAAA,CAAA,EAAG;AAC1E,UAAA;AAAA,QACF;AAEA,QAAA,OAAO,KAAA,CAAM,SAAS,IAAI,CAAA;AAAA,MAC5B,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,GAAA,YAAe,YAAA,IAAgB,GAAA,CAAI,IAAA,KAAS,YAAA,EAAc;AAC9D,QAAA,MAAM;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,SAC1D;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,OAAO,MAAM;AACX,MAAA,eAAA,EAAiB,KAAA,EAAM;AACvB,MAAA,eAAA,GAAkB,IAAA;AAAA,IACpB;AAAA,GACF;AACF;AAUO,SAAS,SAAA,CAAU,IAAA,EAAc,UAAA,GAAa,EAAA,EAAc;AACjE,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,UAAA,EAAY,OAAO,CAAC,IAAI,CAAA;AAC3C,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,IAAI,UAAU,CAAA;AAE9C,IAAA,IAAI,GAAA,GAAM,KAAK,MAAA,EAAQ;AACrB,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AACvC,MAAA,IAAI,cAAc,EAAA,IAAM,SAAA,GAAY,GAAA,IAAO,CAAA,QAAS,SAAA,GAAY,CAAA;AAAA,IAClE;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AAC3B,IAAA,CAAA,GAAI,GAAA;AAAA,EACN;AACA,EAAA,OAAO,GAAA;AACT;AAYO,SAAS,eACd,OAAA,EACA,WAAA,EACA,UAAA,EACA,OAAA,GAA0E,EAAC,EAC7D;AACd,EAAA,MAAM,EAAE,SAAA,GAAY,EAAA,EAAI,OAAA,GAAU,CAAA,EAAG,OAAM,GAAI,OAAA;AAC/C,EAAA,IAAI,eAAA,GAA0C,IAAI,eAAA,EAAgB;AAElE,EAAA,OAAO;AAAA,IACL,QAAQ,mBAAuD;AAC7D,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAAe,OAAA,EAAS,gBAAiB,MAAA,EAAQ,KAAA,IAAS,EAAE,CAAA;AAEnF,QAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,UAAA,MAAM,EAAE,MAAM,OAAA,EAAS,OAAA,EAAS,GAAG,UAAU,CAAA,QAAA,EAAW,QAAA,CAAS,MAAM,CAAA,CAAA,EAAG;AAC1E,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAAY,QAAQ,CAAA;AACvC,QAAA,MAAM,MAAA,GAAS,SAAA,CAAU,IAAA,EAAM,SAAS,CAAA;AACxC,QAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,UAAA,IAAI,oBAAoB,IAAA,EAAM;AAC9B,UAAA,IAAI,UAAU,CAAA,EAAG;AACf,YAAA,MAAM,IAAI,OAAA,CAAc,CAACA,QAAAA,EAAS,MAAA,KAAW;AAC3C,cAAA,MAAM,KAAA,GAAQ,UAAA,CAAWA,QAAAA,EAAS,OAAO,CAAA;AACzC,cAAA,eAAA,EAAiB,MAAA,CAAO,gBAAA;AAAA,gBACtB,OAAA;AAAA,gBACA,MAAM;AACJ,kBAAA,YAAA,CAAa,KAAK,CAAA;AAClB,kBAAA,MAAA,CAAO,IAAI,YAAA,CAAa,SAAA,EAAW,YAAY,CAAC,CAAA;AAAA,gBAClD,CAAA;AAAA,gBACA,EAAE,MAAM,IAAA;AAAK,eACf;AAAA,YACF,CAAC,CAAA;AAAA,UACH;AACA,UAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAM;AAAA,QACvC;AACA,QAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,MACvB,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,GAAA,YAAe,YAAA,IAAgB,GAAA,CAAI,IAAA,KAAS,YAAA,EAAc;AAC9D,QAAA,MAAM;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,SAC1D;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,OAAO,MAAM;AACX,MAAA,eAAA,EAAiB,KAAA,EAAM;AACvB,MAAA,eAAA,GAAkB,IAAA;AAAA,IACpB;AAAA,GACF;AACF;;;AC7dO,SAAS,UAAU,MAAA,EAAyC;AACjE,EAAA,MAAM,EAAE,QAAQ,KAAA,EAAO,OAAA,GAAU,6BAA6B,SAAA,GAAY,IAAA,EAAM,OAAM,GAAI,MAAA;AAE1F,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,WAAW,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,IAAK,KAAA,CAAM,SAAS,MAAM,CAAA;AAAA,MAC5D,UAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,KAAA;AAAA,QACA,UAAA,EAAY,OAAA,CAAQ,OAAA,EAAS,SAAA,IAAa,SAAA;AAAA,QAC1C,UAAU,OAAA,CAAQ,QAAA,CACf,OAAO,CAAA,OAAA,KAAW,OAAA,CAAQ,SAAS,QAAQ,CAAA,CAC3C,GAAA,CAAI,CAAA,OAAA,MAAY,EAAE,IAAA,EAAM,OAAA,CAAQ,MAAM,OAAA,EAAS,OAAA,CAAQ,SAAQ,CAAE,CAAA;AAAA,QACpE,MAAA,EAAQ,QAAQ,QAAA,CAAS,IAAA,CAAK,aAAW,OAAA,CAAQ,IAAA,KAAS,QAAQ,CAAA,EAAG,OAAA;AAAA,QACrE,KAAA,EAAO,OAAA,CAAQ,OAAA,EAAS,KAAA,EAAO,IAAI,CAAA,IAAA,MAAS;AAAA,UAC1C,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,cAAc,IAAA,CAAK;AAAA,SACrB,CAAE,CAAA;AAAA,QACF,MAAA,EAAQ;AAAA,OACV;AAEA,MAAA,OAAO,kBAAA;AAAA,QACL,CAAC,MAAA,KAAW,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,YAAA,CAAA,EAAgB;AAAA,UAC1C,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,cAAA,EAAgB,kBAAA;AAAA,YAChB,WAAA,EAAa,MAAA;AAAA,YACb,mBAAA,EAAqB;AAAA,WACvB;AAAA,UACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,UACzB;AAAA,SACD,CAAA;AAAA,QACD,oBAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;AC7CO,SAAS,OAAO,MAAA,EAAsC;AAC3D,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,GAAU,wBAAA,EAA0B,OAAM,GAAI,MAAA;AAErE,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA;AAAA;AAAA,MAGP,WAAW,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,IAAK,KAAA,CAAM,WAAW,IAAI,CAAA;AAAA,MAC1D,YAAY,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA,IAAK,KAAA,CAAM,WAAW,GAAG,CAAA;AAAA,MAC7D,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,KAAA;AAAA,QACA,QAAA,EAAU,kBAAA,CAAmB,OAAA,CAAQ,QAAQ,CAAA;AAAA,QAC7C,KAAA,EAAO,OAAA,CAAQ,OAAA,EAAS,KAAA,EAAO,IAAI,CAAA,IAAA,MAAS;AAAA,UAC1C,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU;AAAA,YACR,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,aAAa,IAAA,CAAK,WAAA;AAAA,YAClB,YAAY,IAAA,CAAK;AAAA;AACnB,SACF,CAAE,CAAA;AAAA,QACF,WAAA,EAAa,QAAQ,OAAA,EAAS,WAAA;AAAA,QAC9B,UAAA,EAAY,QAAQ,OAAA,EAAS,SAAA;AAAA,QAC7B,MAAA,EAAQ;AAAA,OACV;AAEA,MAAA,OAAO,kBAAA;AAAA,QACL,CAAC,MAAA,KAAW,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,oBAAA,CAAA,EAAwB;AAAA,UAClD,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,cAAA,EAAgB,kBAAA;AAAA,YAChB,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,WACnC;AAAA,UACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,UACzB;AAAA,SACD,CAAA;AAAA,QACD,iBAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;AC9CO,SAAS,OAAO,MAAA,EAAsC;AAC3D,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,GAAU,2CAAA,EAA6C,OAAM,GAAI,MAAA;AAExF,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,QAAA,EAAU,OAAA,CAAQ,QAAA,CACf,MAAA,CAAO,CAAA,OAAA,KAAW,QAAQ,IAAA,KAAS,QAAQ,CAAA,CAC3C,GAAA,CAAI,CAAA,OAAA,MAAY;AAAA,UACf,IAAA,EAAM,OAAA,CAAQ,IAAA,KAAS,WAAA,GAAc,OAAA,GAAU,MAAA;AAAA,UAC/C,OAAO,CAAC,EAAE,IAAA,EAAM,OAAA,CAAQ,SAAS;AAAA,SACnC,CAAE,CAAA;AAAA,QACJ,iBAAA,EAAmB,QAAQ,QAAA,CAAS,IAAA,CAAK,aAAW,OAAA,CAAQ,IAAA,KAAS,QAAQ,CAAA,GACzE;AAAA,UACE,IAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,OAAA,CAAQ,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,KAAW,OAAA,CAAQ,IAAA,KAAS,QAAQ,CAAA,CAAG,SAAS;AAAA,SACxF,GACA;AAAA,OACN;AAEA,MAAA,OAAO,kBAAA;AAAA,QACL,CAAC,MAAA,KAAW,KAAA;AAAA,UACV,CAAA,EAAG,OAAO,CAAA,eAAA,EAAkB,KAAK,sCAAsC,MAAM,CAAA,CAAA;AAAA,UAC7E;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,YAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,YACzB;AAAA;AACF,SACF;AAAA,QACA,iBAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;AC/CO,SAAS,8BAA8B,cAAA,EAAwB;AACpE,EAAA,OAAO,SAAS,wBAAwB,MAAA,EAAgD;AACtF,IAAA,OAAO,MAAA,CAAO;AAAA,MACZ,GAAG,MAAA;AAAA,MACH,OAAA,EAAS,OAAO,OAAA,IAAW;AAAA,KAC5B,CAAA;AAAA,EACH,CAAA;AACF;;;ACRO,IAAM,IAAA,GAAO,8BAA8B,kBAAkB;;;ACK7D,SAAS,OAAO,MAAA,EAAsC;AAC3D,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,GAAU,wBAAA,EAA0B,OAAM,GAAI,MAAA;AAE7D,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,KAAA;AAAA;AAAA,MACP,YAAY,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,IAAK,KAAA,CAAM,SAAS,QAAQ;AAAA,KAChE;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,KAAA;AAAA,QACA,MAAA,EAAQ,IAAA;AAAA,QACR,QAAA,EAAU,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,OAAA,MAAY;AAAA,UACzC,MAAM,OAAA,CAAQ,IAAA;AAAA,UACd,SAAS,OAAA,CAAQ;AAAA,SACnB,CAAE;AAAA,OACJ;AAEA,MAAA,OAAO,kBAAA;AAAA,QACL,CAAC,MAAA,KAAW,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,SAAA,CAAA,EAAa;AAAA,UACvC,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,UAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,UACzB;AAAA,SACD,CAAA;AAAA,QACD,iBAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;ACrCO,IAAM,QAAA,GAAW,8BAA8B,0BAA0B;;;ACAzE,IAAM,IAAA,GAAO,8BAA8B,yBAAyB;;;ACQ3E,SAAS,OAAO,KAAA,EAAwB;AACtC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,aAAa,KAAA,EAAO;AAC5D,IAAA,MAAM,UAAW,KAAA,CAAgC,OAAA;AACjD,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AAAA,EAC1C;AACA,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,UAAU,MAAA,EAAyC;AACjE,EAAA,MAAM,EAAE,QAAA,EAAU,IAAA,GAAO,QAAA,EAAS,GAAI,MAAA;AAEtC,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,OAAA,MAA2C;AAAA,MACxD,QAAQ,mBAAuD;AAC7D,QAAA,IAAI;AACF,UAAA,IAAI,IAAA,KAAS,QAAA,IAAY,QAAA,CAAS,YAAA,EAAc;AAC9C,YAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,YAAA;AAAA,cAC5B,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS;AAAA,cAC7B,EAAE,SAAS,IAAA;AAAK,aAClB;AAEA,YAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,cAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA;AAC1C,cAAA,IAAI,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA,EAAG;AACjC,gBAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,gBAAA,IAAI,OAAO,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,cAClD,WAAW,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,IAAK,MAAM,IAAA,EAAM;AACrD,gBAAA,MAAM;AAAA,kBACJ,IAAA,EAAM,WAAA;AAAA,kBACN,QAAA,EAAU;AAAA,oBACR,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,MAAA,IAAU,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,CAAA,CAAE,CAAA;AAAA,oBACxD,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAAA,oBACvB,MAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAA,IAAQ,EAAE;AAAA;AACvC,iBACF;AAAA,cACF,CAAA,MAAA,IAAW,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,EAAG;AACrC,gBAAA;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA,MAAA,IAAW,SAAS,MAAA,EAAQ;AAC1B,YAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,MAAA,CAAO,EAAE,QAAA,EAAU,OAAA,CAAQ,UAAU,CAAA;AACnE,YAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,cAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,cAAA,IAAI,OAAO,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,YAClD;AAAA,UACF,CAAA,MAAO;AACL,YAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,wDAAA,EAAyD;AACzF,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,QACvB,SAAS,KAAA,EAAO;AACd,UAAA,MAAM;AAAA,YACJ,IAAA,EAAM,OAAA;AAAA,YACN,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,WAChE;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,OAAO,MAAM;AAAA,MAAC;AAAA,KAChB;AAAA,GACF;AACF;AAMO,SAAS,UAAU,MAAA,EAAyC;AACjE,EAAA,OAAO,SAAA,CAAU;AAAA,IACf,UAAU,MAAA,CAAO,KAAA;AAAA,IACjB,IAAA,EAAM;AAAA,GACP,CAAA;AACH;;;AC5EA,gBAAgB,kBAAkB,MAAA,EAA4D;AAC5F,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAEhC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AACV,MAAA,MAAM,OAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AACnD,MAAA,IAAI,MAAM,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,IAAA,EAAK;AAAA,IAChD;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AAEA,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AACvB;AAEO,SAAS,SAAS,MAAA,EAAwC;AAC/D,EAAA,MAAM,EAAE,GAAA,EAAK,OAAA,GAAU,EAAC,EAAG,OAAM,GAAI,MAAA;AAErC,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA;AAAA;AAAA,KAGd;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,QAAA,EAAU,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,OAAA,MAAY,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ,CAAE,CAAA;AAAA,QAC5F,KAAA,EAAO,QAAQ,OAAA,EAAS,KAAA;AAAA,QACxB,YAAA,EAAc,QAAQ,OAAA,EAAS;AAAA,OACjC;AAEA,MAAA,OAAO,kBAAA;AAAA,QACL,CAAC,MAAA,KAAW,KAAA,CAAM,GAAA,EAAK;AAAA,UACrB,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAoB,GAAG,OAAA,EAAQ;AAAA,UAC1D,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,UACzB;AAAA,SACD,CAAA;AAAA,QACD,iBAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;;;ACIO,SAAS,YAAY,OAAA,EAA6C;AACvE,EAAA,MAAM,EAAE,QAAA,EAAU,OAAA,GAAU,CAAA,EAAG,SAAQ,GAAI,OAAA;AAC3C,EAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,EAAA,OAAO;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,UAAA,EAAY,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACT;AAAA,IACA,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,OAAA,EAAS,KAAK,OAAO,CAAA;AACrB,MAAA,MAAM,MAAA,GAAS,SAAA,EAAA;AACf,MAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAuD;AAC7D,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA;AAChD,UAAA,IAAI,eAAA,GAAkB,KAAA;AAEtB,UAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,YAAA,IAAI,SAAA,EAAW;AACf,YAAA,IAAI,OAAA,GAAU,GAAG,MAAM,IAAI,QAAQ,CAAA,CAAA,KAAK,UAAA,CAAW,CAAA,EAAG,OAAO,CAAC,CAAA;AAC9D,YAAA,MAAM,KAAA;AACN,YAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,SAAS,OAAA,EAAS;AACnD,cAAA,eAAA,GAAkB,IAAA;AAAA,YACpB;AAAA,UACF;AAGA,UAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,QAC7C,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,SAAA,GAAY,IAAA;AAAA,QACd;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;AAEA,SAAS,OAAA,CACP,QAAA,EACA,SAAA,EACA,OAAA,EACe;AACf,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAC,CAAA,EAAG;AAEhF,IAAA,MAAM,QAAA,GAAW,QAAA;AACjB,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,SAAA,GAAY,QAAA,CAAS,MAAM,CAAA;AACjD,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,OAAO,QAAA,CAAS,CAAC,CAAA,KAAM,UAAA,EAAY;AAEvF,IAAA,MAAM,QAAA,GAAW,QAAA;AACjB,IAAA,OAAO,QAAA,CAAS,SAAA,GAAY,QAAA,CAAS,MAAM,EAAE,OAAO,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,IAAA,OAAO,SAAS,OAAO,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,QAAA;AACT;AAyBO,SAAS,gBAAA,CACd,OACA,IAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,CAAC,OAAA,KAA0C;AACvD,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,YAAA,CAAa,OAAO,CAAA;AAC9C,MAAA,MAAM,WAA0B,EAAC;AACjC,MAAA,MAAM,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAE1C,MAAA,OAAO;AAAA,QACL,QAAQ,mBAAuD;AAC7D,UAAA,IAAI;AACF,YAAA,WAAA,MAAiB,KAAA,IAAS,WAAA,CAAY,MAAA,EAAO,EAAG;AAC9C,cAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AACnB,cAAA,MAAM,KAAA;AAAA,YACR;AAAA,UACF,CAAA,SAAE;AACA,YAAA,MAAM,KAAK,IAAA,CAAK,EAAE,YAAY,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAA;AAAA,UAC3D;AAAA,QACF,CAAA;AAAA,QACA,KAAA,EAAO,MAAM,WAAA,CAAY,KAAA;AAAM,OACjC;AAAA,IACF;AAAA,GACF;AACF;AAKO,SAAS,YAAA,GAA8D;AAC5E,EAAA,MAAM,UAA4B,EAAC;AACnC,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,IACnB;AAAA,GACF;AACF;AAMO,SAAS,cAAc,OAAA,EAA2C;AACvE,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,KAAQ,KAAK,MAAM;AAAA,GAC1C,CAAA;AACH;;;AC7LA,eAAe,oBAAA,CAAqB,SAAiB,MAAA,EAAmC;AACtF,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,UAAA,CAAA,EAAc;AAAA,IACnD,OAAA,EAAS,EAAE,eAAA,EAAiB,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA;AAAG,GAChD,CAAA;AACD,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,EAC3C;AACA,EAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,EAAA,OAAO,IAAA,CAAK,IAAA,CACT,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,EAAE,CAAA,CACb,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,CAAG,QAAA,CAAS,OAAO,CAAC,EACjC,IAAA,EAAK;AACV;AAEA,eAAe,eAAA,CACb,OAAA,EACA,MAAA,EACA,aAAA,EACgB;AAChB,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,oBAAA,CAAqB,OAAA,EAAS,MAAM,CAAA;AACzD,IAAA,MAAM,OAAO,MAAA,CAAO,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,YAAA;AACrD,IAAA,OAAO,IAAI,KAAA;AAAA,MACT,CAAA,yBAAA,EAA4B,aAAa,CAAA,8BAAA,EAAiC,IAAI,CAAA;AAAA,KAChF;AAAA,EACF,SAAS,UAAA,EAAY;AACnB,IAAA,OAAO,IAAI,KAAA;AAAA,MACT,CAAA,yBAAA,EAA4B,aAAa,CAAA,oCAAA,EAAwC,UAAA,CAAqB,OAAO,CAAA;AAAA,KAC/G;AAAA,EACF;AACF;AAEO,SAAS,eAAe,MAAA,EAAuC;AACpE,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,GAAQ,wBAAA,EAA0B,OAAA,GAAU,0BAAyB,GAAI,MAAA;AAEzF,EAAA,OAAO,OAAO,IAAA,KAAoC;AAChD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,cAAA,CAAA,EAAkB;AAAA,MACvD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,OACnC;AAAA,MACA,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,MAAM;AAAA,KAC5C,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,SAAA,GAAa,MAAM,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AAGzD,MAAA,MAAM,UAAU,SAAA,CAAU,KAAA,EAAO,OAAA,IAAW,CAAA,KAAA,EAAQ,SAAS,MAAM,CAAA,CAAA;AACnE,MAAA,MAAM,MAAM,eAAA,CAAgB,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,SAAA;AAAA,EACtB,CAAA;AACF;;;ACxDA,eAAeC,qBAAAA,CAAqB,SAAiB,MAAA,EAAmC;AACtF,EAAA,MAAM,WAAW,MAAM,KAAA,CAAM,GAAG,OAAO,CAAA,mBAAA,EAAsB,MAAM,CAAA,CAAE,CAAA;AACrE,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,EAC3C;AACA,EAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAGlC,EAAA,OAAO,KAAK,MAAA,CACT,MAAA,CAAO,OAAK,CAAA,CAAE,0BAAA,CAA2B,SAAS,cAAc,CAAC,EACjE,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAA,CAAK,OAAA,CAAQ,WAAW,EAAE,CAAC,EACtC,IAAA,EAAK;AACV;AAEA,eAAeC,gBAAAA,CACb,OAAA,EACA,MAAA,EACA,aAAA,EACgB;AAChB,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAMD,qBAAAA,CAAqB,OAAA,EAAS,MAAM,CAAA;AACzD,IAAA,MAAM,OAAO,MAAA,CAAO,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,YAAA;AACrD,IAAA,OAAO,IAAI,KAAA;AAAA,MACT,CAAA,yBAAA,EAA4B,aAAa,CAAA,8BAAA,EAAiC,IAAI,CAAA;AAAA,KAChF;AAAA,EACF,SAAS,UAAA,EAAY;AACnB,IAAA,OAAO,IAAI,KAAA;AAAA,MACT,CAAA,yBAAA,EAA4B,aAAa,CAAA,oCAAA,EAAwC,UAAA,CAAqB,OAAO,CAAA;AAAA,KAC/G;AAAA,EACF;AACF;AAEO,SAAS,eAAe,MAAA,EAAuC;AACpE,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,KAAA,GAAQ,oBAAA;AAAA,IACR,OAAA,GAAU;AAAA,GACZ,GAAI,MAAA;AAEJ,EAAA,OAAO,OAAO,IAAA,KAAoC;AAChD,IAAA,MAAM,WAAW,MAAM,KAAA;AAAA,MACrB,CAAA,EAAG,OAAO,CAAA,eAAA,EAAkB,KAAK,qBAAqB,MAAM,CAAA,CAAA;AAAA,MAC5D;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,KAAA,EAAO,UAAU,KAAK,CAAA,CAAA;AAAA,UACtB,SAAS,EAAE,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,CAAA;AAAE,SAC9B;AAAA;AACH,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,SAAA,GAAa,MAAM,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AAGzD,MAAA,MAAM,UAAU,SAAA,CAAU,KAAA,EAAO,OAAA,IAAW,CAAA,KAAA,EAAQ,SAAS,MAAM,CAAA,CAAA;AACnE,MAAA,MAAM,MAAMC,gBAAAA,CAAgB,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,OAAO,KAAK,SAAA,CAAU,MAAA;AAAA,EACxB,CAAA;AACF;;;AChEA,eAAeD,sBAAqB,OAAA,EAAoC;AACtE,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,SAAA,CAAW,CAAA;AAClD,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,EAC3C;AACA,EAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,EAAA,OAAO,IAAA,CAAK,MAAA,CACT,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA,CACf,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,QAAA,CAAS,OAAO,CAAC,EACrC,IAAA,EAAK;AACV;AAEA,eAAeC,gBAAAA,CACb,SACA,aAAA,EACgB;AAChB,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAMD,qBAAAA,CAAqB,OAAO,CAAA;AACjD,IAAA,MAAM,OAAO,MAAA,CAAO,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,YAAA;AACrD,IAAA,OAAO,IAAI,KAAA;AAAA,MACT,CAAA,yBAAA,EAA4B,aAAa,CAAA,8BAAA,EAAiC,IAAI,CAAA;AAAA,KAChF;AAAA,EACF,SAAS,UAAA,EAAY;AACnB,IAAA,OAAO,IAAI,KAAA;AAAA,MACT,CAAA,yBAAA,EAA4B,aAAa,CAAA,oCAAA,EAAwC,UAAA,CAAqB,OAAO,CAAA;AAAA,KAC/G;AAAA,EACF;AACF;AAEO,SAAS,eAAe,MAAA,EAAuC;AACpE,EAAA,MAAM,EAAE,KAAA,GAAQ,kBAAA,EAAoB,OAAA,GAAU,0BAAyB,GAAI,MAAA;AAE3E,EAAA,OAAO,OAAO,IAAA,KAAoC;AAChD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,UAAA,CAAA,EAAc;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,MAAM;AAAA,KAC5C,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,SAAA,GAAa,MAAM,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AACzD,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,KAAA,IAAS,CAAA,KAAA,EAAQ,SAAS,MAAM,CAAA,CAAA;AAC1D,MAAA,MAAM,MAAMC,gBAAAA,CAAgB,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,OAAO,IAAA,CAAK,WAAW,CAAC,CAAA;AAAA,EAC1B,CAAA;AACF;;;AC/CA,eAAeD,qBAAAA,CAAqB,SAAiB,MAAA,EAAmC;AACtF,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,UAAA,CAAA,EAAc;AAAA,IACnD,OAAA,EAAS,EAAE,eAAA,EAAiB,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA;AAAG,GAChD,CAAA;AACD,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,EAC3C;AACA,EAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,EAAA,OAAO,IAAA,CAAK,IAAA,CACT,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,EAAE,CAAA,CACb,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,CAAG,QAAA,CAAS,OAAO,CAAC,EACjC,IAAA,EAAK;AACV;AAEA,eAAeC,gBAAAA,CACb,QAAA,EACA,OAAA,EACA,MAAA,EACA,aAAA,EACgB;AAChB,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAMD,qBAAAA,CAAqB,OAAA,EAAS,MAAM,CAAA;AACzD,IAAA,MAAM,OAAO,MAAA,CAAO,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,YAAA;AACrD,IAAA,OAAO,IAAI,KAAA;AAAA,MACT,CAAA,EAAG,QAAQ,CAAA,mBAAA,EAAsB,aAAa,iCAAiC,IAAI,CAAA;AAAA,KACrF;AAAA,EACF,SAAS,UAAA,EAAY;AACnB,IAAA,OAAO,IAAI,KAAA;AAAA,MACT,GAAG,QAAQ,CAAA,mBAAA,EAAsB,aAAa,CAAA,oCAAA,EAAwC,WAAqB,OAAO,CAAA;AAAA,KACpH;AAAA,EACF;AACF;AAEO,SAAS,8BAAA,CAA+B,UAAkB,cAAA,EAAwB;AACvF,EAAA,OAAO,SAAS,SAAS,MAAA,EAAiD;AACxE,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,QAAQ,CAAA,iCAAA,CAAmC,CAAA;AAAA,IACtF;AACA,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,GAAU,gBAAe,GAAI,MAAA;AAEpD,IAAA,OAAO,OAAO,IAAA,KAAoC;AAChD,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,cAAA,CAAA,EAAkB;AAAA,QACvD,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,SACnC;AAAA,QACA,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,MAAM;AAAA,OAC5C,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,SAAA,GAAa,MAAM,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AAGzD,QAAA,MAAM,UAAU,SAAA,CAAU,KAAA,EAAO,OAAA,IAAW,CAAA,KAAA,EAAQ,SAAS,MAAM,CAAA,CAAA;AACnE,QAAA,MAAM,MAAMC,gBAAAA,CAAgB,QAAA,EAAU,OAAA,EAAS,QAAQ,OAAO,CAAA;AAAA,MAChE;AAEA,MAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,SAAA;AAAA,IACtB,CAAA;AAAA,EACF,CAAA;AACF;;;AClEO,IAAM,gBAAA,GAAmB,8BAAA,CAA+B,UAAA,EAAY,0BAA0B;;;ACA9F,IAAM,YAAA,GAAe,8BAAA,CAA+B,MAAA,EAAQ,kBAAkB;;;ACA9E,IAAM,YAAA,GAAe,8BAAA,CAA+B,MAAA,EAAQ,yBAAyB","file":"index.cjs","sourcesContent":["import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { CreateAdapterConfig } from './types'\n\nexport function createAdapter(config: CreateAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => ({\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const result = await config.send(request)\n const stream = result instanceof Response\n ? result.body!\n : result\n yield* config.parse(stream)\n } catch (err) {\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n config.abort?.()\n },\n }),\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { GenericAdapterConfig } from './types'\n\nexport function generic(config: GenericAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null\n const decoder = new TextDecoder()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const stream = await config.send(request)\n reader = stream.getReader()\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n const text = decoder.decode(value, { stream: true })\n yield { type: 'text', content: text }\n }\n\n yield { type: 'done' }\n } catch (err) {\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n } finally {\n reader?.releaseLock()\n }\n },\n abort: () => {\n void reader?.cancel()\n },\n }\n },\n }\n}\n","import type { AdapterRequest, Message, StreamChunk, StreamSource } from '@agentskit/core'\n\nexport function toProviderMessages(messages: Message[]) {\n return messages.map(message => {\n if (message.role === 'tool') {\n return {\n role: 'tool' as const,\n content: message.content,\n tool_call_id: message.toolCallId,\n }\n }\n if (message.role === 'assistant' && message.toolCalls && message.toolCalls.length > 0) {\n return {\n role: 'assistant' as const,\n content: message.content || null,\n tool_calls: message.toolCalls.map(tc => ({\n id: tc.id,\n type: 'function' as const,\n function: {\n name: tc.name,\n arguments: typeof tc.args === 'string' ? tc.args : JSON.stringify(tc.args ?? {}),\n },\n })),\n }\n }\n return { role: message.role, content: message.content }\n })\n}\n\nexport async function* readSSELines(stream: ReadableStream): AsyncIterableIterator<string> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\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 buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n if (!line.startsWith('data: ')) continue\n const data = line.slice(6).trim()\n if (data) yield data\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nexport async function* readNDJSONLines(stream: ReadableStream): AsyncIterableIterator<string> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\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 buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n const trimmed = line.trim()\n if (trimmed) yield trimmed\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nexport async function* parseOpenAIStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') {\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n\n try {\n const event = JSON.parse(data)\n const delta = event.choices?.[0]?.delta\n\n if (typeof delta?.content === 'string') {\n yield { type: 'text', content: delta.content }\n }\n\n if (Array.isArray(delta?.tool_calls)) {\n for (const toolCall of delta.tool_calls) {\n const index: number = toolCall.index ?? 0\n const existing = pendingToolCalls.get(index)\n\n if (toolCall?.function?.name) {\n // First chunk for this tool call — store it\n pendingToolCalls.set(index, {\n id: toolCall.id ?? existing?.id ?? `tool-${index}-${Date.now()}`,\n name: toolCall.function.name,\n args: (existing?.args ?? '') + (toolCall.function.arguments ?? ''),\n })\n } else if (existing && toolCall?.function?.arguments) {\n // Subsequent chunk — accumulate arguments\n existing.args += toolCall.function.arguments\n }\n }\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n // Flush any remaining tool calls if stream ends without [DONE]\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n\n yield { type: 'done' }\n}\n\nexport async function* parseAnthropicStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') continue\n\n try {\n const event = JSON.parse(data)\n if (event.type === 'content_block_delta' && event.delta?.type === 'text_delta' && event.delta?.text) {\n yield { type: 'text', content: event.delta.text }\n } else if (event.type === 'content_block_delta' && event.delta?.type === 'input_json_delta') {\n const index: number = event.index ?? 0\n const existing = pendingToolCalls.get(index)\n if (existing) {\n existing.args += event.delta.partial_json ?? ''\n }\n } else if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {\n const index: number = event.index ?? 0\n pendingToolCalls.set(index, {\n id: event.content_block.id,\n name: event.content_block.name,\n args: '',\n })\n } else if (event.type === 'content_block_stop') {\n const index: number = event.index ?? 0\n const tc = pendingToolCalls.get(index)\n if (tc) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: tc.id,\n name: tc.name,\n args: tc.args || '{}',\n },\n }\n pendingToolCalls.delete(index)\n }\n } else if (event.type === 'message_stop') {\n // Flush any remaining tool calls\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n // Flush remaining if stream ends without message_stop\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n\n yield { type: 'done' }\n}\n\nexport async function* parseGeminiStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n for await (const data of readSSELines(stream)) {\n try {\n const event = JSON.parse(data)\n const parts = event.candidates?.[0]?.content?.parts\n if (!Array.isArray(parts)) continue\n\n for (const part of parts) {\n if (typeof part.text === 'string' && part.text) {\n yield { type: 'text', content: part.text }\n } else if (part.functionCall) {\n const fc = part.functionCall\n yield {\n type: 'tool_call',\n toolCall: {\n id: fc.id ?? `${fc.name}-${Date.now()}`,\n name: fc.name,\n args: JSON.stringify(fc.args ?? {}),\n },\n }\n }\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n yield { type: 'done' }\n}\n\nexport async function* parseOllamaStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n for await (const data of readNDJSONLines(stream)) {\n try {\n const event = JSON.parse(data)\n if (event.message?.content) {\n yield { type: 'text', content: event.message.content }\n }\n if (Array.isArray(event.message?.tool_calls)) {\n for (const tc of event.message.tool_calls) {\n if (tc?.function?.name) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: tc.id ?? `${tc.function.name}-${Date.now()}`,\n name: tc.function.name,\n args: typeof tc.function.arguments === 'string'\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments ?? {}),\n },\n }\n }\n }\n }\n if (event.done) {\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n yield { type: 'done' }\n}\n\n/**\n * Retry knobs for adapter fetches. Tunable per call to createStreamSource.\n *\n * Default behavior:\n * - 3 attempts total (1 initial + 2 retries)\n * - exponential backoff: 500ms, 1000ms, 2000ms ... (capped at maxDelayMs)\n * - full jitter on each delay\n * - retry on HTTP 408, 429, 500, 502, 503, 504\n * - retry on network errors (fetch throws)\n * - DO NOT retry on 4xx other than 408/429 (those are bad requests / auth)\n * - retries only the initial fetch — never mid-stream\n * - respects Retry-After header when present\n */\nexport interface RetryOptions {\n maxAttempts?: number\n baseDelayMs?: number\n maxDelayMs?: number\n jitter?: boolean\n retryOn?: (info: { error?: unknown; response?: Response; attempt: number }) => boolean\n /** Hook for tests + logging. Called after every failed attempt. */\n onRetry?: (info: { attempt: number; delayMs: number; reason: string }) => void\n /** Sleep override for tests. Defaults to setTimeout. */\n sleep?: (ms: number) => Promise<void>\n}\n\nconst DEFAULT_RETRY: Required<Omit<RetryOptions, 'onRetry' | 'sleep' | 'retryOn'>> & {\n retryOn: NonNullable<RetryOptions['retryOn']>\n} = {\n maxAttempts: 3,\n baseDelayMs: 500,\n maxDelayMs: 8000,\n jitter: true,\n retryOn: ({ error, response }) => {\n if (response) {\n return [408, 429, 500, 502, 503, 504].includes(response.status)\n }\n if (error instanceof DOMException && error.name === 'AbortError') return false\n // Network error: TypeError from fetch, AbortError from upstream timeout, etc.\n return true\n },\n}\n\nfunction defaultSleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nfunction computeDelay(attempt: number, opts: Required<Pick<RetryOptions, 'baseDelayMs' | 'maxDelayMs' | 'jitter'>>): number {\n const exp = Math.min(opts.maxDelayMs, opts.baseDelayMs * Math.pow(2, attempt - 1))\n if (!opts.jitter) return exp\n return Math.floor(Math.random() * exp)\n}\n\nfunction parseRetryAfter(value: string | null): number | undefined {\n if (!value) return undefined\n const n = Number(value)\n if (!Number.isNaN(n)) return n * 1000\n const date = Date.parse(value)\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now())\n return undefined\n}\n\n/**\n * Run a fetch with retries on transient failures. Returns the final\n * Response (whether successful or not — caller decides), or throws if\n * the AbortSignal fires or all attempts fail with a thrown error.\n */\nexport async function fetchWithRetry(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n signal: AbortSignal,\n retryOpt: RetryOptions = {},\n): Promise<Response> {\n const opts = {\n ...DEFAULT_RETRY,\n ...retryOpt,\n }\n const sleep = retryOpt.sleep ?? defaultSleep\n let lastError: unknown\n\n for (let attempt = 1; attempt <= opts.maxAttempts; attempt++) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n\n try {\n const response = await doFetch(signal)\n\n // Success or non-retryable failure → return.\n if (response.ok) return response\n if (attempt >= opts.maxAttempts || !opts.retryOn({ response, attempt })) {\n return response\n }\n\n const retryAfterMs = parseRetryAfter(response.headers.get('retry-after'))\n const delay = retryAfterMs ?? computeDelay(attempt, opts)\n retryOpt.onRetry?.({ attempt, delayMs: delay, reason: `HTTP ${response.status}` })\n await sleep(delay)\n // Drain the body so the connection can be reused.\n response.body?.cancel().catch(() => {})\n } catch (err) {\n lastError = err\n if (err instanceof DOMException && err.name === 'AbortError') throw err\n if (attempt >= opts.maxAttempts || !opts.retryOn({ error: err, attempt })) throw err\n\n const delay = computeDelay(attempt, opts)\n retryOpt.onRetry?.({ attempt, delayMs: delay, reason: (err as Error).message })\n await sleep(delay)\n }\n }\n\n // Unreachable, but the TS narrowing needs it.\n throw lastError ?? new Error('fetchWithRetry: exhausted attempts')\n}\n\nexport function createStreamSource(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n parse: (stream: ReadableStream) => AsyncIterableIterator<StreamChunk>,\n errorLabel: string,\n retry?: RetryOptions,\n): StreamSource {\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const response = await fetchWithRetry(doFetch, abortController!.signal, retry ?? {})\n\n if (!response.ok || !response.body) {\n yield { type: 'error', content: `${errorLabel} error: ${response.status}` }\n return\n }\n\n yield* parse(response.body)\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') return\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n\n/**\n * Chunk-splitter that turns one large string into N streamable text chunks.\n * Useful when a provider returns the full response in one shot and you\n * want to feed it to a UI that expects streaming.\n *\n * Default splits by whitespace boundaries with a target chunk size of ~32\n * characters.\n */\nexport function chunkText(text: string, targetSize = 32): string[] {\n if (text.length <= targetSize) return [text]\n const out: string[] = []\n let i = 0\n while (i < text.length) {\n let end = Math.min(text.length, i + targetSize)\n // Prefer to cut on whitespace within the next few chars\n if (end < text.length) {\n const nextSpace = text.indexOf(' ', end)\n if (nextSpace !== -1 && nextSpace - end <= 8) end = nextSpace + 1\n }\n out.push(text.slice(i, end))\n i = end\n }\n return out\n}\n\n/**\n * Build a StreamSource from a non-streaming fetch. The adapter is\n * auto-completing: it fetches once, then yields the text as a sequence\n * of chunks so UIs see the same streaming shape they'd see from a\n * native streaming provider.\n *\n * Use this when you're wiring a provider that only has a non-streaming\n * endpoint but you want consumers (useChat, the runtime) to get\n * identical ergonomics.\n */\nexport function simulateStream(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n extractText: (response: Response) => Promise<string>,\n errorLabel: string,\n options: { chunkSize?: number; delayMs?: number; retry?: RetryOptions } = {},\n): StreamSource {\n const { chunkSize = 32, delayMs = 8, retry } = options\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const response = await fetchWithRetry(doFetch, abortController!.signal, retry ?? {})\n\n if (!response.ok) {\n yield { type: 'error', content: `${errorLabel} error: ${response.status}` }\n return\n }\n\n const text = await extractText(response)\n const chunks = chunkText(text, chunkSize)\n for (const chunk of chunks) {\n if (abortController === null) return\n if (delayMs > 0) {\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, delayMs)\n abortController?.signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer)\n reject(new DOMException('Aborted', 'AbortError'))\n },\n { once: true },\n )\n })\n }\n yield { type: 'text', content: chunk }\n }\n yield { type: 'done' }\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') return\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseAnthropicStream, type RetryOptions } from './utils'\n\nexport interface AnthropicConfig {\n apiKey: string\n model: string\n baseUrl?: string\n maxTokens?: number\n retry?: RetryOptions\n}\n\nexport function anthropic(config: AnthropicConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.anthropic.com', maxTokens = 4096, retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: model.includes('sonnet') || model.includes('opus'),\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n max_tokens: request.context?.maxTokens ?? maxTokens,\n messages: request.messages\n .filter(message => message.role !== 'system')\n .map(message => ({ role: message.role, content: message.content })),\n system: request.messages.find(message => message.role === 'system')?.content,\n tools: request.context?.tools?.map(tool => ({\n name: tool.name,\n description: tool.description,\n input_schema: tool.schema,\n })),\n stream: true,\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/v1/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseAnthropicStream,\n 'Anthropic API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseOpenAIStream, toProviderMessages, type RetryOptions } from './utils'\n\nexport interface OpenAIConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function openai(config: OpenAIConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.openai.com', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n // o1 / o3 models emit reasoning; older models don't. Accurate per-model\n // detection would need a model registry; 'true' is the safer default here.\n reasoning: model.startsWith('o1') || model.startsWith('o3'),\n multiModal: model.startsWith('gpt-4') || model.startsWith('o'),\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n messages: toProviderMessages(request.messages),\n tools: request.context?.tools?.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n },\n })),\n temperature: request.context?.temperature,\n max_tokens: request.context?.maxTokens,\n stream: true,\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/v1/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseOpenAIStream,\n 'OpenAI API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseGeminiStream, type RetryOptions } from './utils'\n\nexport interface GeminiConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function gemini(config: GeminiConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://generativelanguage.googleapis.com', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n contents: request.messages\n .filter(message => message.role !== 'system')\n .map(message => ({\n role: message.role === 'assistant' ? 'model' : 'user',\n parts: [{ text: message.content }],\n })),\n systemInstruction: request.messages.find(message => message.role === 'system')\n ? {\n role: 'system',\n parts: [{ text: request.messages.find(message => message.role === 'system')!.content }],\n }\n : undefined,\n }\n\n return createStreamSource(\n (signal) => fetch(\n `${baseUrl}/v1beta/models/${model}:streamGenerateContent?alt=sse&key=${apiKey}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal,\n },\n ),\n parseGeminiStream,\n 'Gemini API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory } from '@agentskit/core'\nimport { openai, type OpenAIConfig } from './openai'\n\nexport interface OpenAICompatibleConfig extends OpenAIConfig {}\n\nexport function createOpenAICompatibleAdapter(defaultBaseUrl: string) {\n return function openAICompatibleAdapter(config: OpenAICompatibleConfig): AdapterFactory {\n return openai({\n ...config,\n baseUrl: config.baseUrl ?? defaultBaseUrl,\n })\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface GrokConfig extends OpenAICompatibleConfig {}\n\nexport const grok = createOpenAICompatibleAdapter('https://api.x.ai')\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseOllamaStream, type RetryOptions } from './utils'\n\nexport interface OllamaConfig {\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function ollama(config: OllamaConfig): AdapterFactory {\n const { model, baseUrl = 'http://localhost:11434', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: false, // varies by model; default 'false' — enable via capabilities.extensions if your model supports it\n multiModal: model.includes('llava') || model.includes('vision'),\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n stream: true,\n messages: request.messages.map(message => ({\n role: message.role,\n content: message.content,\n })),\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/api/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal,\n }),\n parseOllamaStream,\n 'Ollama API',\n retry,\n )\n },\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface DeepSeekConfig extends OpenAICompatibleConfig {}\n\nexport const deepseek = createOpenAICompatibleAdapter('https://api.deepseek.com')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface KimiConfig extends OpenAICompatibleConfig {}\n\nexport const kimi = createOpenAICompatibleAdapter('https://api.moonshot.ai')\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\n\ntype LangChainRunnable = {\n stream?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<unknown> | Promise<AsyncIterable<unknown>>\n streamEvents?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<Record<string, unknown>> | Promise<AsyncIterable<Record<string, unknown>>>\n}\n\nexport interface LangChainConfig {\n runnable: LangChainRunnable\n mode?: 'stream' | 'events'\n}\n\nfunction asText(value: unknown): string {\n if (typeof value === 'string') return value\n if (value && typeof value === 'object' && 'content' in value) {\n const content = (value as { content?: unknown }).content\n if (typeof content === 'string') return content\n }\n return ''\n}\n\nexport function langchain(config: LangChainConfig): AdapterFactory {\n const { runnable, mode = 'stream' } = config\n\n return {\n createSource: (request: AdapterRequest): StreamSource => ({\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n if (mode === 'events' && runnable.streamEvents) {\n const events = await runnable.streamEvents(\n { messages: request.messages },\n { version: 'v2' }\n )\n\n for await (const event of events) {\n const eventName = String(event.event ?? '')\n if (eventName.endsWith('_stream')) {\n const chunk = asText(event.data)\n if (chunk) yield { type: 'text', content: chunk }\n } else if (eventName.endsWith('_start') && event.name) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: String(event.run_id ?? `${event.name}-${Date.now()}`),\n name: String(event.name),\n args: JSON.stringify(event.data ?? {}),\n },\n }\n } else if (eventName.endsWith('_end')) {\n continue\n }\n }\n } else if (runnable.stream) {\n const stream = await runnable.stream({ messages: request.messages })\n for await (const value of stream) {\n const chunk = asText(value)\n if (chunk) yield { type: 'text', content: chunk }\n }\n } else {\n yield { type: 'error', content: 'Runnable does not implement stream() or streamEvents()' }\n return\n }\n\n yield { type: 'done' }\n } catch (error) {\n yield {\n type: 'error',\n content: error instanceof Error ? error.message : String(error),\n }\n }\n },\n abort: () => {},\n }),\n }\n}\n\nexport interface LangGraphConfig {\n graph: LangChainRunnable\n}\n\nexport function langgraph(config: LangGraphConfig): AdapterFactory {\n return langchain({\n runnable: config.graph,\n mode: 'events',\n })\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { createStreamSource, type RetryOptions } from './utils'\n\nexport interface VercelAIConfig {\n api: string\n headers?: Record<string, string>\n retry?: RetryOptions\n}\n\nasync function* parseVercelStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n const text = decoder.decode(value, { stream: true })\n if (text) yield { type: 'text', content: text }\n }\n } finally {\n reader.releaseLock()\n }\n\n yield { type: 'done' }\n}\n\nexport function vercelAI(config: VercelAIConfig): AdapterFactory {\n const { api, headers = {}, retry } = config\n\n return {\n capabilities: {\n // Vercel AI routes can do any of these — whether they do depends on\n // your route handler. Omit the field instead of lying.\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n messages: request.messages.map(message => ({ role: message.role, content: message.content })),\n tools: request.context?.tools,\n systemPrompt: request.context?.systemPrompt,\n }\n\n return createStreamSource(\n (signal) => fetch(api, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...headers },\n body: JSON.stringify(body),\n signal,\n }),\n parseVercelStream,\n 'API',\n retry,\n )\n },\n }\n}\n","import type {\n AdapterFactory,\n AdapterRequest,\n StreamChunk,\n StreamSource,\n} from '@agentskit/core'\n\nexport type MockResponse = StreamChunk[] | ((request: AdapterRequest) => StreamChunk[])\n\nexport interface MockAdapterOptions {\n /**\n * Static chunks, a request-aware function, or a sequence of responses\n * (the i-th call returns the i-th item, looping when exhausted).\n */\n response: MockResponse | MockResponse[]\n /** ms between yielded chunks. Default 0 (synchronous). */\n delayMs?: number\n /** Track every request the adapter received. Useful for assertions. */\n history?: AdapterRequest[]\n}\n\n/**\n * A deterministic adapter for tests, demos, and dry-run experiments.\n *\n * Conforms to ADR 0001 — Adapter contract:\n * - createSource is pure (A1) — no work until stream() runs\n * - Always emits a terminal chunk (A3)\n * - abort() is safe (A6)\n * - Does not mutate input messages (A7)\n *\n * Examples:\n *\n * // Static\n * const adapter = mockAdapter({\n * response: [\n * { type: 'text', content: 'Hello!' },\n * { type: 'done' },\n * ],\n * })\n *\n * // Request-aware\n * const adapter = mockAdapter({\n * response: req => {\n * const last = req.messages[req.messages.length - 1]?.content ?? ''\n * return [\n * { type: 'text', content: 'Echo: ' + last },\n * { type: 'done' },\n * ]\n * },\n * })\n *\n * // Sequenced — different output each call\n * const adapter = mockAdapter({\n * response: [\n * [{ type: 'text', content: 'first' }, { type: 'done' }],\n * [{ type: 'text', content: 'second' }, { type: 'done' }],\n * ],\n * })\n */\nexport function mockAdapter(options: MockAdapterOptions): AdapterFactory {\n const { response, delayMs = 0, history } = options\n let callIndex = 0\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n history?.push(request)\n const myCall = callIndex++\n let cancelled = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n const chunks = resolve(response, myCall, request)\n let endedExplicitly = false\n\n for (const chunk of chunks) {\n if (cancelled) return\n if (delayMs > 0) await new Promise(r => setTimeout(r, delayMs))\n yield chunk\n if (chunk.type === 'done' || chunk.type === 'error') {\n endedExplicitly = true\n }\n }\n\n // ADR 0001 A3 — every stream ends with a terminal chunk.\n if (!endedExplicitly) yield { type: 'done' }\n },\n abort: () => {\n cancelled = true\n },\n }\n },\n }\n}\n\nfunction resolve(\n response: MockResponse | MockResponse[],\n callIndex: number,\n request: AdapterRequest,\n): StreamChunk[] {\n if (Array.isArray(response) && response.length > 0 && Array.isArray(response[0])) {\n // Sequenced responses\n const sequence = response as StreamChunk[][]\n const item = sequence[callIndex % sequence.length]\n return item\n }\n if (Array.isArray(response) && response.length > 0 && typeof response[0] === 'function') {\n // Sequenced functions\n const sequence = response as Array<(req: AdapterRequest) => StreamChunk[]>\n return sequence[callIndex % sequence.length](request)\n }\n if (typeof response === 'function') {\n return response(request)\n }\n return response as StreamChunk[]\n}\n\n// ============================================================================\n// Recording / replay\n// ============================================================================\n\nexport interface RecordedTurn {\n /** ISO timestamp when this turn was recorded. */\n recordedAt: string\n /** The request that produced this turn. */\n request: AdapterRequest\n /** Every chunk yielded by the wrapped adapter. */\n chunks: StreamChunk[]\n}\n\nexport type RecordingFixture = RecordedTurn[]\n\nexport interface RecordingSink {\n push(turn: RecordedTurn): void | Promise<void>\n}\n\n/**\n * Wrap a real adapter so every turn is captured to a sink. Use this in\n * dev to build up a fixture, then replay with replayAdapter() in tests.\n */\nexport function recordingAdapter(\n inner: AdapterFactory,\n sink: RecordingSink,\n): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const innerSource = inner.createSource(request)\n const captured: StreamChunk[] = []\n const recordedAt = new Date().toISOString()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n for await (const chunk of innerSource.stream()) {\n captured.push(chunk)\n yield chunk\n }\n } finally {\n await sink.push({ recordedAt, request, chunks: captured })\n }\n },\n abort: () => innerSource.abort(),\n }\n },\n }\n}\n\n/**\n * In-memory recording sink — useful for tests and ephemeral capture.\n */\nexport function inMemorySink(): RecordingSink & { fixture: RecordingFixture } {\n const fixture: RecordingFixture = []\n return {\n fixture,\n push(turn) {\n fixture.push(turn)\n },\n }\n}\n\n/**\n * Replay an adapter from a recorded fixture. Each turn maps 1:1 to a\n * recorded entry by index — call N replays fixture[N % fixture.length].\n */\nexport function replayAdapter(fixture: RecordingFixture): AdapterFactory {\n if (fixture.length === 0) {\n throw new Error('replayAdapter: fixture is empty')\n }\n return mockAdapter({\n response: fixture.map(turn => turn.chunks),\n })\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OpenAIEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1/models`, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `OpenAI embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `OpenAI embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function openaiEmbedder(config: OpenAIEmbedderConfig): EmbedFn {\n const { apiKey, model = 'text-embedding-3-small', baseUrl = 'https://api.openai.com' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data: Array<{ embedding: number[] }> }\n return data.data[0].embedding\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface GeminiEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1beta/models?key=${apiKey}`)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as {\n models: Array<{ name: string; supportedGenerationMethods: string[] }>\n }\n return data.models\n .filter(m => m.supportedGenerationMethods.includes('embedContent'))\n .map(m => m.name.replace('models/', ''))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `Gemini embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `Gemini embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function geminiEmbedder(config: GeminiEmbedderConfig): EmbedFn {\n const {\n apiKey,\n model = 'text-embedding-004',\n baseUrl = 'https://generativelanguage.googleapis.com',\n } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(\n `${baseUrl}/v1beta/models/${model}:embedContent?key=${apiKey}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: `models/${model}`,\n content: { parts: [{ text }] },\n }),\n },\n )\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { embedding: { values: number[] } }\n return data.embedding.values\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OllamaEmbedderConfig {\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/api/tags`)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { models: Array<{ name: string }> }\n return data.models\n .map(m => m.name)\n .filter(name => name.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `Ollama embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `Ollama embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function ollamaEmbedder(config: OllamaEmbedderConfig): EmbedFn {\n const { model = 'nomic-embed-text', baseUrl = 'http://localhost:11434' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/api/embed`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as { error?: string }\n const message = errorBody.error ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, message)\n }\n\n const data = (await response.json()) as { embeddings: number[][] }\n return data.embeddings[0]\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OpenAICompatibleEmbedderConfig {\n apiKey: string\n model: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1/models`, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n provider: string,\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `${provider} embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `${provider} embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function createOpenAICompatibleEmbedder(provider: string, defaultBaseUrl: string) {\n return function embedder(config: OpenAICompatibleEmbedderConfig): EmbedFn {\n if (!config.model) {\n throw new Error(`Model is required for ${provider}. Pass { model: \"<model-name>\" }.`)\n }\n const { apiKey, model, baseUrl = defaultBaseUrl } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(provider, baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data: Array<{ embedding: number[] }> }\n return data.data[0].embedding\n }\n }\n}\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface DeepSeekEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const deepseekEmbedder = createOpenAICompatibleEmbedder('DeepSeek', 'https://api.deepseek.com')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface GrokEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const grokEmbedder = createOpenAICompatibleEmbedder('Grok', 'https://api.x.ai')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface KimiEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const kimiEmbedder = createOpenAICompatibleEmbedder('Kimi', 'https://api.moonshot.ai')\n"]}
1
+ {"version":3,"sources":["../src/createAdapter.ts","../src/generic.ts","../src/utils.ts","../src/anthropic.ts","../src/openai.ts","../src/gemini.ts","../src/openai-compatible.ts","../src/grok.ts","../src/ollama.ts","../src/deepseek.ts","../src/kimi.ts","../src/langchain.ts","../src/vercel-ai.ts","../src/mock.ts","../src/embedders/openai.ts","../src/embedders/gemini.ts","../src/embedders/ollama.ts","../src/embedders/openai-compatible.ts","../src/embedders/deepseek.ts","../src/embedders/grok.ts","../src/embedders/kimi.ts"],"names":["resolve","fetchAvailableModels","buildModelError"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { CreateAdapterConfig } from './types'\n\nexport function createAdapter(config: CreateAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => ({\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const result = await config.send(request)\n const stream = result instanceof Response\n ? result.body!\n : result\n yield* config.parse(stream)\n } catch (err) {\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n config.abort?.()\n },\n }),\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { GenericAdapterConfig } from './types'\n\nexport function generic(config: GenericAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null\n const decoder = new TextDecoder()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const stream = await config.send(request)\n reader = stream.getReader()\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n const text = decoder.decode(value, { stream: true })\n yield { type: 'text', content: text }\n }\n\n yield { type: 'done' }\n } catch (err) {\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n } finally {\n reader?.releaseLock()\n }\n },\n abort: () => {\n void reader?.cancel()\n },\n }\n },\n }\n}\n","import type { AdapterRequest, Message, StreamChunk, StreamSource } from '@agentskit/core'\n\nexport function toProviderMessages(messages: Message[]) {\n // Track which tool_call ids were declared by preceding assistant turns so\n // we can drop orphan tool messages — the OpenAI Chat Completions API\n // rejects a tool message whose tool_call_id isn't bound to a previous\n // assistant message.\n const knownToolCallIds = new Set<string>()\n const output: Array<Record<string, unknown>> = []\n\n for (const message of messages) {\n if (message.role === 'tool') {\n const id = message.toolCallId\n // Orphan (no id, or id not declared) — skip; it would 400 the API.\n if (!id || !knownToolCallIds.has(id)) continue\n output.push({\n role: 'tool' as const,\n content: message.content,\n tool_call_id: id,\n })\n continue\n }\n\n if (message.role === 'assistant' && message.toolCalls && message.toolCalls.length > 0) {\n for (const tc of message.toolCalls) knownToolCallIds.add(tc.id)\n output.push({\n role: 'assistant' as const,\n content: message.content || null,\n tool_calls: message.toolCalls.map(tc => ({\n id: tc.id,\n type: 'function' as const,\n function: {\n name: tc.name,\n arguments: typeof tc.args === 'string' ? tc.args : JSON.stringify(tc.args ?? {}),\n },\n })),\n })\n continue\n }\n\n // Skip assistant messages with no content AND no tool calls. These\n // happen when a turn was interrupted (Ctrl+C, crashed adapter, etc.)\n // and the placeholder assistant message never received content —\n // sending `{role:'assistant', content:''}` back to the provider either\n // 400s or confuses the model into silence on the next turn.\n if (message.role === 'assistant' && !message.content) continue\n\n output.push({ role: message.role, content: message.content })\n }\n\n return output\n}\n\nexport async function* readSSELines(stream: ReadableStream): AsyncIterableIterator<string> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\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 buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n if (!line.startsWith('data: ')) continue\n const data = line.slice(6).trim()\n if (data) yield data\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nexport async function* readNDJSONLines(stream: ReadableStream): AsyncIterableIterator<string> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\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 buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n const trimmed = line.trim()\n if (trimmed) yield trimmed\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nexport async function* parseOpenAIStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') {\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n\n try {\n const event = JSON.parse(data)\n const delta = event.choices?.[0]?.delta\n\n if (typeof delta?.content === 'string') {\n yield { type: 'text', content: delta.content }\n }\n\n if (Array.isArray(delta?.tool_calls)) {\n for (const toolCall of delta.tool_calls) {\n const index: number = toolCall.index ?? 0\n const existing = pendingToolCalls.get(index)\n\n if (toolCall?.function?.name) {\n // First chunk for this tool call — store it\n pendingToolCalls.set(index, {\n id: toolCall.id ?? existing?.id ?? `tool-${index}-${Date.now()}`,\n name: toolCall.function.name,\n args: (existing?.args ?? '') + (toolCall.function.arguments ?? ''),\n })\n } else if (existing && toolCall?.function?.arguments) {\n // Subsequent chunk — accumulate arguments\n existing.args += toolCall.function.arguments\n }\n }\n }\n\n // Final usage chunk — emitted when `stream_options.include_usage` is set.\n if (event.usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usage.prompt_tokens ?? 0,\n completionTokens: event.usage.completion_tokens ?? 0,\n totalTokens: event.usage.total_tokens ?? 0,\n },\n }\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n // Flush any remaining tool calls if stream ends without [DONE]\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n\n yield { type: 'done' }\n}\n\nexport async function* parseAnthropicStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') continue\n\n try {\n const event = JSON.parse(data)\n if (event.type === 'content_block_delta' && event.delta?.type === 'text_delta' && event.delta?.text) {\n yield { type: 'text', content: event.delta.text }\n } else if (event.type === 'content_block_delta' && event.delta?.type === 'input_json_delta') {\n const index: number = event.index ?? 0\n const existing = pendingToolCalls.get(index)\n if (existing) {\n existing.args += event.delta.partial_json ?? ''\n }\n } else if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {\n const index: number = event.index ?? 0\n pendingToolCalls.set(index, {\n id: event.content_block.id,\n name: event.content_block.name,\n args: '',\n })\n } else if (event.type === 'content_block_stop') {\n const index: number = event.index ?? 0\n const tc = pendingToolCalls.get(index)\n if (tc) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: tc.id,\n name: tc.name,\n args: tc.args || '{}',\n },\n }\n pendingToolCalls.delete(index)\n }\n } else if (event.type === 'message_delta' && event.usage) {\n // Anthropic emits output_tokens on `message_delta`, input_tokens on\n // `message_start`. We publish whatever we have on the delta — the\n // consumer accumulates across turns.\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usage.input_tokens ?? 0,\n completionTokens: event.usage.output_tokens ?? 0,\n totalTokens: (event.usage.input_tokens ?? 0) + (event.usage.output_tokens ?? 0),\n },\n }\n } else if (event.type === 'message_start' && event.message?.usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.message.usage.input_tokens ?? 0,\n completionTokens: 0,\n totalTokens: event.message.usage.input_tokens ?? 0,\n },\n }\n } else if (event.type === 'message_stop') {\n // Flush any remaining tool calls\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n // Flush remaining if stream ends without message_stop\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n\n yield { type: 'done' }\n}\n\nexport async function* parseGeminiStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n for await (const data of readSSELines(stream)) {\n try {\n const event = JSON.parse(data)\n\n if (event.usageMetadata) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usageMetadata.promptTokenCount ?? 0,\n completionTokens: event.usageMetadata.candidatesTokenCount ?? 0,\n totalTokens: event.usageMetadata.totalTokenCount ?? 0,\n },\n }\n }\n\n const parts = event.candidates?.[0]?.content?.parts\n if (!Array.isArray(parts)) continue\n\n for (const part of parts) {\n if (typeof part.text === 'string' && part.text) {\n yield { type: 'text', content: part.text }\n } else if (part.functionCall) {\n const fc = part.functionCall\n yield {\n type: 'tool_call',\n toolCall: {\n id: fc.id ?? `${fc.name}-${Date.now()}`,\n name: fc.name,\n args: JSON.stringify(fc.args ?? {}),\n },\n }\n }\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n yield { type: 'done' }\n}\n\nexport async function* parseOllamaStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n for await (const data of readNDJSONLines(stream)) {\n try {\n const event = JSON.parse(data)\n if (event.message?.content) {\n yield { type: 'text', content: event.message.content }\n }\n if (Array.isArray(event.message?.tool_calls)) {\n for (const tc of event.message.tool_calls) {\n if (tc?.function?.name) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: tc.id ?? `${tc.function.name}-${Date.now()}`,\n name: tc.function.name,\n args: typeof tc.function.arguments === 'string'\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments ?? {}),\n },\n }\n }\n }\n }\n if (event.done) {\n if (typeof event.prompt_eval_count === 'number' || typeof event.eval_count === 'number') {\n const promptTokens = event.prompt_eval_count ?? 0\n const completionTokens = event.eval_count ?? 0\n yield {\n type: 'usage',\n usage: {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n },\n }\n }\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n yield { type: 'done' }\n}\n\n/**\n * Retry knobs for adapter fetches. Tunable per call to createStreamSource.\n *\n * Default behavior:\n * - 3 attempts total (1 initial + 2 retries)\n * - exponential backoff: 500ms, 1000ms, 2000ms ... (capped at maxDelayMs)\n * - full jitter on each delay\n * - retry on HTTP 408, 429, 500, 502, 503, 504\n * - retry on network errors (fetch throws)\n * - DO NOT retry on 4xx other than 408/429 (those are bad requests / auth)\n * - retries only the initial fetch — never mid-stream\n * - respects Retry-After header when present\n */\nexport interface RetryOptions {\n maxAttempts?: number\n baseDelayMs?: number\n maxDelayMs?: number\n jitter?: boolean\n retryOn?: (info: { error?: unknown; response?: Response; attempt: number }) => boolean\n /** Hook for tests + logging. Called after every failed attempt. */\n onRetry?: (info: { attempt: number; delayMs: number; reason: string }) => void\n /** Sleep override for tests. Defaults to setTimeout. */\n sleep?: (ms: number) => Promise<void>\n}\n\nconst DEFAULT_RETRY: Required<Omit<RetryOptions, 'onRetry' | 'sleep' | 'retryOn'>> & {\n retryOn: NonNullable<RetryOptions['retryOn']>\n} = {\n maxAttempts: 3,\n baseDelayMs: 500,\n maxDelayMs: 8000,\n jitter: true,\n retryOn: ({ error, response }) => {\n if (response) {\n return [408, 429, 500, 502, 503, 504].includes(response.status)\n }\n if (error instanceof DOMException && error.name === 'AbortError') return false\n // Network error: TypeError from fetch, AbortError from upstream timeout, etc.\n return true\n },\n}\n\nfunction defaultSleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nfunction computeDelay(attempt: number, opts: Required<Pick<RetryOptions, 'baseDelayMs' | 'maxDelayMs' | 'jitter'>>): number {\n const exp = Math.min(opts.maxDelayMs, opts.baseDelayMs * Math.pow(2, attempt - 1))\n if (!opts.jitter) return exp\n return Math.floor(Math.random() * exp)\n}\n\nfunction parseRetryAfter(value: string | null): number | undefined {\n if (!value) return undefined\n const n = Number(value)\n if (!Number.isNaN(n)) return n * 1000\n const date = Date.parse(value)\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now())\n return undefined\n}\n\n/**\n * Run a fetch with retries on transient failures. Returns the final\n * Response (whether successful or not — caller decides), or throws if\n * the AbortSignal fires or all attempts fail with a thrown error.\n */\nexport async function fetchWithRetry(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n signal: AbortSignal,\n retryOpt: RetryOptions = {},\n): Promise<Response> {\n const opts = {\n ...DEFAULT_RETRY,\n ...retryOpt,\n }\n const sleep = retryOpt.sleep ?? defaultSleep\n let lastError: unknown\n\n for (let attempt = 1; attempt <= opts.maxAttempts; attempt++) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n\n try {\n const response = await doFetch(signal)\n\n // Success or non-retryable failure → return.\n if (response.ok) return response\n if (attempt >= opts.maxAttempts || !opts.retryOn({ response, attempt })) {\n return response\n }\n\n const retryAfterMs = parseRetryAfter(response.headers.get('retry-after'))\n const delay = retryAfterMs ?? computeDelay(attempt, opts)\n retryOpt.onRetry?.({ attempt, delayMs: delay, reason: `HTTP ${response.status}` })\n await sleep(delay)\n // Drain the body so the connection can be reused.\n response.body?.cancel().catch(() => {})\n } catch (err) {\n lastError = err\n if (err instanceof DOMException && err.name === 'AbortError') throw err\n if (attempt >= opts.maxAttempts || !opts.retryOn({ error: err, attempt })) throw err\n\n const delay = computeDelay(attempt, opts)\n retryOpt.onRetry?.({ attempt, delayMs: delay, reason: (err as Error).message })\n await sleep(delay)\n }\n }\n\n // Unreachable, but the TS narrowing needs it.\n throw lastError ?? new Error('fetchWithRetry: exhausted attempts')\n}\n\nexport function createStreamSource(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n parse: (stream: ReadableStream) => AsyncIterableIterator<StreamChunk>,\n errorLabel: string,\n retry?: RetryOptions,\n): StreamSource {\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const response = await fetchWithRetry(doFetch, abortController!.signal, retry ?? {})\n\n if (!response.ok || !response.body) {\n yield { type: 'error', content: `${errorLabel} error: ${response.status}` }\n return\n }\n\n yield* parse(response.body)\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') return\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n\n/**\n * Chunk-splitter that turns one large string into N streamable text chunks.\n * Useful when a provider returns the full response in one shot and you\n * want to feed it to a UI that expects streaming.\n *\n * Default splits by whitespace boundaries with a target chunk size of ~32\n * characters.\n */\nexport function chunkText(text: string, targetSize = 32): string[] {\n if (text.length <= targetSize) return [text]\n const out: string[] = []\n let i = 0\n while (i < text.length) {\n let end = Math.min(text.length, i + targetSize)\n // Prefer to cut on whitespace within the next few chars\n if (end < text.length) {\n const nextSpace = text.indexOf(' ', end)\n if (nextSpace !== -1 && nextSpace - end <= 8) end = nextSpace + 1\n }\n out.push(text.slice(i, end))\n i = end\n }\n return out\n}\n\n/**\n * Build a StreamSource from a non-streaming fetch. The adapter is\n * auto-completing: it fetches once, then yields the text as a sequence\n * of chunks so UIs see the same streaming shape they'd see from a\n * native streaming provider.\n *\n * Use this when you're wiring a provider that only has a non-streaming\n * endpoint but you want consumers (useChat, the runtime) to get\n * identical ergonomics.\n */\nexport function simulateStream(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n extractText: (response: Response) => Promise<string>,\n errorLabel: string,\n options: { chunkSize?: number; delayMs?: number; retry?: RetryOptions } = {},\n): StreamSource {\n const { chunkSize = 32, delayMs = 8, retry } = options\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const response = await fetchWithRetry(doFetch, abortController!.signal, retry ?? {})\n\n if (!response.ok) {\n yield { type: 'error', content: `${errorLabel} error: ${response.status}` }\n return\n }\n\n const text = await extractText(response)\n const chunks = chunkText(text, chunkSize)\n for (const chunk of chunks) {\n if (abortController === null) return\n if (delayMs > 0) {\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, delayMs)\n abortController?.signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer)\n reject(new DOMException('Aborted', 'AbortError'))\n },\n { once: true },\n )\n })\n }\n yield { type: 'text', content: chunk }\n }\n yield { type: 'done' }\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') return\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseAnthropicStream, type RetryOptions } from './utils'\n\nexport interface AnthropicConfig {\n apiKey: string\n model: string\n baseUrl?: string\n maxTokens?: number\n retry?: RetryOptions\n}\n\nexport function anthropic(config: AnthropicConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.anthropic.com', maxTokens = 4096, retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: model.includes('sonnet') || model.includes('opus'),\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n max_tokens: request.context?.maxTokens ?? maxTokens,\n messages: request.messages\n .filter(message => message.role !== 'system')\n .map(message => ({ role: message.role, content: message.content })),\n system: request.messages.find(message => message.role === 'system')?.content,\n tools: request.context?.tools?.map(tool => ({\n name: tool.name,\n description: tool.description,\n input_schema: tool.schema,\n })),\n stream: true,\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/v1/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseAnthropicStream,\n 'Anthropic API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseOpenAIStream, toProviderMessages, type RetryOptions } from './utils'\n\nexport interface OpenAIConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n /**\n * Ask the provider to include token usage in the final stream chunk via\n * `stream_options: { include_usage: true }`. Off by default because some\n * OpenAI-compatible providers (OpenRouter proxies to a long tail of\n * backends) reject unknown params with a 4xx and break the whole stream.\n * Turn this on for vanilla `api.openai.com`.\n */\n includeUsage?: boolean\n}\n\nexport function openai(config: OpenAIConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.openai.com', retry } = config\n // Auto: on for canonical OpenAI, off for every other compatible endpoint\n // where the param is a known source of 4xx surprises.\n const includeUsage = config.includeUsage ?? baseUrl.startsWith('https://api.openai.com')\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n // o1 / o3 models emit reasoning; older models don't. Accurate per-model\n // detection would need a model registry; 'true' is the safer default here.\n reasoning: model.startsWith('o1') || model.startsWith('o3'),\n multiModal: model.startsWith('gpt-4') || model.startsWith('o'),\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body: Record<string, unknown> = {\n model,\n messages: toProviderMessages(request.messages),\n tools: request.context?.tools?.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n },\n })),\n temperature: request.context?.temperature,\n max_tokens: request.context?.maxTokens,\n stream: true,\n }\n if (includeUsage) body.stream_options = { include_usage: true }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/v1/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseOpenAIStream,\n 'OpenAI API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseGeminiStream, type RetryOptions } from './utils'\n\nexport interface GeminiConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function gemini(config: GeminiConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://generativelanguage.googleapis.com', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n contents: request.messages\n .filter(message => message.role !== 'system')\n .map(message => ({\n role: message.role === 'assistant' ? 'model' : 'user',\n parts: [{ text: message.content }],\n })),\n systemInstruction: request.messages.find(message => message.role === 'system')\n ? {\n role: 'system',\n parts: [{ text: request.messages.find(message => message.role === 'system')!.content }],\n }\n : undefined,\n }\n\n return createStreamSource(\n (signal) => fetch(\n `${baseUrl}/v1beta/models/${model}:streamGenerateContent?alt=sse&key=${apiKey}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal,\n },\n ),\n parseGeminiStream,\n 'Gemini API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory } from '@agentskit/core'\nimport { openai, type OpenAIConfig } from './openai'\n\nexport interface OpenAICompatibleConfig extends OpenAIConfig {}\n\nexport function createOpenAICompatibleAdapter(defaultBaseUrl: string) {\n return function openAICompatibleAdapter(config: OpenAICompatibleConfig): AdapterFactory {\n return openai({\n ...config,\n baseUrl: config.baseUrl ?? defaultBaseUrl,\n })\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface GrokConfig extends OpenAICompatibleConfig {}\n\nexport const grok = createOpenAICompatibleAdapter('https://api.x.ai')\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseOllamaStream, type RetryOptions } from './utils'\n\nexport interface OllamaConfig {\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function ollama(config: OllamaConfig): AdapterFactory {\n const { model, baseUrl = 'http://localhost:11434', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: false, // varies by model; default 'false' — enable via capabilities.extensions if your model supports it\n multiModal: model.includes('llava') || model.includes('vision'),\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n stream: true,\n messages: request.messages.map(message => ({\n role: message.role,\n content: message.content,\n })),\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/api/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal,\n }),\n parseOllamaStream,\n 'Ollama API',\n retry,\n )\n },\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface DeepSeekConfig extends OpenAICompatibleConfig {}\n\nexport const deepseek = createOpenAICompatibleAdapter('https://api.deepseek.com')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface KimiConfig extends OpenAICompatibleConfig {}\n\nexport const kimi = createOpenAICompatibleAdapter('https://api.moonshot.ai')\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\n\ntype LangChainRunnable = {\n stream?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<unknown> | Promise<AsyncIterable<unknown>>\n streamEvents?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<Record<string, unknown>> | Promise<AsyncIterable<Record<string, unknown>>>\n}\n\nexport interface LangChainConfig {\n runnable: LangChainRunnable\n mode?: 'stream' | 'events'\n}\n\nfunction asText(value: unknown): string {\n if (typeof value === 'string') return value\n if (value && typeof value === 'object' && 'content' in value) {\n const content = (value as { content?: unknown }).content\n if (typeof content === 'string') return content\n }\n return ''\n}\n\nexport function langchain(config: LangChainConfig): AdapterFactory {\n const { runnable, mode = 'stream' } = config\n\n return {\n createSource: (request: AdapterRequest): StreamSource => ({\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n if (mode === 'events' && runnable.streamEvents) {\n const events = await runnable.streamEvents(\n { messages: request.messages },\n { version: 'v2' }\n )\n\n for await (const event of events) {\n const eventName = String(event.event ?? '')\n if (eventName.endsWith('_stream')) {\n const chunk = asText(event.data)\n if (chunk) yield { type: 'text', content: chunk }\n } else if (eventName.endsWith('_start') && event.name) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: String(event.run_id ?? `${event.name}-${Date.now()}`),\n name: String(event.name),\n args: JSON.stringify(event.data ?? {}),\n },\n }\n } else if (eventName.endsWith('_end')) {\n continue\n }\n }\n } else if (runnable.stream) {\n const stream = await runnable.stream({ messages: request.messages })\n for await (const value of stream) {\n const chunk = asText(value)\n if (chunk) yield { type: 'text', content: chunk }\n }\n } else {\n yield { type: 'error', content: 'Runnable does not implement stream() or streamEvents()' }\n return\n }\n\n yield { type: 'done' }\n } catch (error) {\n yield {\n type: 'error',\n content: error instanceof Error ? error.message : String(error),\n }\n }\n },\n abort: () => {},\n }),\n }\n}\n\nexport interface LangGraphConfig {\n graph: LangChainRunnable\n}\n\nexport function langgraph(config: LangGraphConfig): AdapterFactory {\n return langchain({\n runnable: config.graph,\n mode: 'events',\n })\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { createStreamSource, type RetryOptions } from './utils'\n\nexport interface VercelAIConfig {\n api: string\n headers?: Record<string, string>\n retry?: RetryOptions\n}\n\nasync function* parseVercelStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n const text = decoder.decode(value, { stream: true })\n if (text) yield { type: 'text', content: text }\n }\n } finally {\n reader.releaseLock()\n }\n\n yield { type: 'done' }\n}\n\nexport function vercelAI(config: VercelAIConfig): AdapterFactory {\n const { api, headers = {}, retry } = config\n\n return {\n capabilities: {\n // Vercel AI routes can do any of these — whether they do depends on\n // your route handler. Omit the field instead of lying.\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n messages: request.messages.map(message => ({ role: message.role, content: message.content })),\n tools: request.context?.tools,\n systemPrompt: request.context?.systemPrompt,\n }\n\n return createStreamSource(\n (signal) => fetch(api, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...headers },\n body: JSON.stringify(body),\n signal,\n }),\n parseVercelStream,\n 'API',\n retry,\n )\n },\n }\n}\n","import type {\n AdapterFactory,\n AdapterRequest,\n StreamChunk,\n StreamSource,\n} from '@agentskit/core'\n\nexport type MockResponse = StreamChunk[] | ((request: AdapterRequest) => StreamChunk[])\n\nexport interface MockAdapterOptions {\n /**\n * Static chunks, a request-aware function, or a sequence of responses\n * (the i-th call returns the i-th item, looping when exhausted).\n */\n response: MockResponse | MockResponse[]\n /** ms between yielded chunks. Default 0 (synchronous). */\n delayMs?: number\n /** Track every request the adapter received. Useful for assertions. */\n history?: AdapterRequest[]\n}\n\n/**\n * A deterministic adapter for tests, demos, and dry-run experiments.\n *\n * Conforms to ADR 0001 — Adapter contract:\n * - createSource is pure (A1) — no work until stream() runs\n * - Always emits a terminal chunk (A3)\n * - abort() is safe (A6)\n * - Does not mutate input messages (A7)\n *\n * Examples:\n *\n * // Static\n * const adapter = mockAdapter({\n * response: [\n * { type: 'text', content: 'Hello!' },\n * { type: 'done' },\n * ],\n * })\n *\n * // Request-aware\n * const adapter = mockAdapter({\n * response: req => {\n * const last = req.messages[req.messages.length - 1]?.content ?? ''\n * return [\n * { type: 'text', content: 'Echo: ' + last },\n * { type: 'done' },\n * ]\n * },\n * })\n *\n * // Sequenced — different output each call\n * const adapter = mockAdapter({\n * response: [\n * [{ type: 'text', content: 'first' }, { type: 'done' }],\n * [{ type: 'text', content: 'second' }, { type: 'done' }],\n * ],\n * })\n */\nexport function mockAdapter(options: MockAdapterOptions): AdapterFactory {\n const { response, delayMs = 0, history } = options\n let callIndex = 0\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n history?.push(request)\n const myCall = callIndex++\n let cancelled = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n const chunks = resolve(response, myCall, request)\n let endedExplicitly = false\n\n for (const chunk of chunks) {\n if (cancelled) return\n if (delayMs > 0) await new Promise(r => setTimeout(r, delayMs))\n yield chunk\n if (chunk.type === 'done' || chunk.type === 'error') {\n endedExplicitly = true\n }\n }\n\n // ADR 0001 A3 — every stream ends with a terminal chunk.\n if (!endedExplicitly) yield { type: 'done' }\n },\n abort: () => {\n cancelled = true\n },\n }\n },\n }\n}\n\nfunction resolve(\n response: MockResponse | MockResponse[],\n callIndex: number,\n request: AdapterRequest,\n): StreamChunk[] {\n if (Array.isArray(response) && response.length > 0 && Array.isArray(response[0])) {\n // Sequenced responses\n const sequence = response as StreamChunk[][]\n const item = sequence[callIndex % sequence.length]\n return item\n }\n if (Array.isArray(response) && response.length > 0 && typeof response[0] === 'function') {\n // Sequenced functions\n const sequence = response as Array<(req: AdapterRequest) => StreamChunk[]>\n return sequence[callIndex % sequence.length](request)\n }\n if (typeof response === 'function') {\n return response(request)\n }\n return response as StreamChunk[]\n}\n\n// ============================================================================\n// Recording / replay\n// ============================================================================\n\nexport interface RecordedTurn {\n /** ISO timestamp when this turn was recorded. */\n recordedAt: string\n /** The request that produced this turn. */\n request: AdapterRequest\n /** Every chunk yielded by the wrapped adapter. */\n chunks: StreamChunk[]\n}\n\nexport type RecordingFixture = RecordedTurn[]\n\nexport interface RecordingSink {\n push(turn: RecordedTurn): void | Promise<void>\n}\n\n/**\n * Wrap a real adapter so every turn is captured to a sink. Use this in\n * dev to build up a fixture, then replay with replayAdapter() in tests.\n */\nexport function recordingAdapter(\n inner: AdapterFactory,\n sink: RecordingSink,\n): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const innerSource = inner.createSource(request)\n const captured: StreamChunk[] = []\n const recordedAt = new Date().toISOString()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n for await (const chunk of innerSource.stream()) {\n captured.push(chunk)\n yield chunk\n }\n } finally {\n await sink.push({ recordedAt, request, chunks: captured })\n }\n },\n abort: () => innerSource.abort(),\n }\n },\n }\n}\n\n/**\n * In-memory recording sink — useful for tests and ephemeral capture.\n */\nexport function inMemorySink(): RecordingSink & { fixture: RecordingFixture } {\n const fixture: RecordingFixture = []\n return {\n fixture,\n push(turn) {\n fixture.push(turn)\n },\n }\n}\n\n/**\n * Replay an adapter from a recorded fixture. Each turn maps 1:1 to a\n * recorded entry by index — call N replays fixture[N % fixture.length].\n */\nexport function replayAdapter(fixture: RecordingFixture): AdapterFactory {\n if (fixture.length === 0) {\n throw new Error('replayAdapter: fixture is empty')\n }\n return mockAdapter({\n response: fixture.map(turn => turn.chunks),\n })\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OpenAIEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1/models`, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `OpenAI embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `OpenAI embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function openaiEmbedder(config: OpenAIEmbedderConfig): EmbedFn {\n const { apiKey, model = 'text-embedding-3-small', baseUrl = 'https://api.openai.com' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data: Array<{ embedding: number[] }> }\n return data.data[0].embedding\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface GeminiEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1beta/models?key=${apiKey}`)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as {\n models: Array<{ name: string; supportedGenerationMethods: string[] }>\n }\n return data.models\n .filter(m => m.supportedGenerationMethods.includes('embedContent'))\n .map(m => m.name.replace('models/', ''))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `Gemini embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `Gemini embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function geminiEmbedder(config: GeminiEmbedderConfig): EmbedFn {\n const {\n apiKey,\n model = 'text-embedding-004',\n baseUrl = 'https://generativelanguage.googleapis.com',\n } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(\n `${baseUrl}/v1beta/models/${model}:embedContent?key=${apiKey}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: `models/${model}`,\n content: { parts: [{ text }] },\n }),\n },\n )\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { embedding: { values: number[] } }\n return data.embedding.values\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OllamaEmbedderConfig {\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/api/tags`)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { models: Array<{ name: string }> }\n return data.models\n .map(m => m.name)\n .filter(name => name.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `Ollama embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `Ollama embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function ollamaEmbedder(config: OllamaEmbedderConfig): EmbedFn {\n const { model = 'nomic-embed-text', baseUrl = 'http://localhost:11434' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/api/embed`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as { error?: string }\n const message = errorBody.error ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, message)\n }\n\n const data = (await response.json()) as { embeddings: number[][] }\n return data.embeddings[0]\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OpenAICompatibleEmbedderConfig {\n apiKey: string\n model: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1/models`, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n provider: string,\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `${provider} embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `${provider} embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function createOpenAICompatibleEmbedder(provider: string, defaultBaseUrl: string) {\n return function embedder(config: OpenAICompatibleEmbedderConfig): EmbedFn {\n if (!config.model) {\n throw new Error(`Model is required for ${provider}. Pass { model: \"<model-name>\" }.`)\n }\n const { apiKey, model, baseUrl = defaultBaseUrl } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(provider, baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data: Array<{ embedding: number[] }> }\n return data.data[0].embedding\n }\n }\n}\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface DeepSeekEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const deepseekEmbedder = createOpenAICompatibleEmbedder('DeepSeek', 'https://api.deepseek.com')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface GrokEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const grokEmbedder = createOpenAICompatibleEmbedder('Grok', 'https://api.x.ai')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface KimiEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const kimiEmbedder = createOpenAICompatibleEmbedder('Kimi', 'https://api.moonshot.ai')\n"]}
package/dist/index.d.cts CHANGED
@@ -91,6 +91,14 @@ interface OpenAIConfig {
91
91
  model: string;
92
92
  baseUrl?: string;
93
93
  retry?: RetryOptions;
94
+ /**
95
+ * Ask the provider to include token usage in the final stream chunk via
96
+ * `stream_options: { include_usage: true }`. Off by default because some
97
+ * OpenAI-compatible providers (OpenRouter proxies to a long tail of
98
+ * backends) reject unknown params with a 4xx and break the whole stream.
99
+ * Turn this on for vanilla `api.openai.com`.
100
+ */
101
+ includeUsage?: boolean;
94
102
  }
95
103
  declare function openai(config: OpenAIConfig): AdapterFactory;
96
104
 
package/dist/index.d.ts CHANGED
@@ -91,6 +91,14 @@ interface OpenAIConfig {
91
91
  model: string;
92
92
  baseUrl?: string;
93
93
  retry?: RetryOptions;
94
+ /**
95
+ * Ask the provider to include token usage in the final stream chunk via
96
+ * `stream_options: { include_usage: true }`. Off by default because some
97
+ * OpenAI-compatible providers (OpenRouter proxies to a long tail of
98
+ * backends) reject unknown params with a 4xx and break the whole stream.
99
+ * Turn this on for vanilla `api.openai.com`.
100
+ */
101
+ includeUsage?: boolean;
94
102
  }
95
103
  declare function openai(config: OpenAIConfig): AdapterFactory;
96
104
 
package/dist/index.js CHANGED
@@ -58,16 +58,22 @@ function generic(config) {
58
58
 
59
59
  // src/utils.ts
60
60
  function toProviderMessages(messages) {
61
- return messages.map((message) => {
61
+ const knownToolCallIds = /* @__PURE__ */ new Set();
62
+ const output = [];
63
+ for (const message of messages) {
62
64
  if (message.role === "tool") {
63
- return {
65
+ const id = message.toolCallId;
66
+ if (!id || !knownToolCallIds.has(id)) continue;
67
+ output.push({
64
68
  role: "tool",
65
69
  content: message.content,
66
- tool_call_id: message.toolCallId
67
- };
70
+ tool_call_id: id
71
+ });
72
+ continue;
68
73
  }
69
74
  if (message.role === "assistant" && message.toolCalls && message.toolCalls.length > 0) {
70
- return {
75
+ for (const tc of message.toolCalls) knownToolCallIds.add(tc.id);
76
+ output.push({
71
77
  role: "assistant",
72
78
  content: message.content || null,
73
79
  tool_calls: message.toolCalls.map((tc) => ({
@@ -78,10 +84,13 @@ function toProviderMessages(messages) {
78
84
  arguments: typeof tc.args === "string" ? tc.args : JSON.stringify(tc.args ?? {})
79
85
  }
80
86
  }))
81
- };
87
+ });
88
+ continue;
82
89
  }
83
- return { role: message.role, content: message.content };
84
- });
90
+ if (message.role === "assistant" && !message.content) continue;
91
+ output.push({ role: message.role, content: message.content });
92
+ }
93
+ return output;
85
94
  }
86
95
  async function* readSSELines(stream) {
87
96
  const reader = stream.getReader();
@@ -156,6 +165,16 @@ async function* parseOpenAIStream(stream) {
156
165
  }
157
166
  }
158
167
  }
168
+ if (event.usage) {
169
+ yield {
170
+ type: "usage",
171
+ usage: {
172
+ promptTokens: event.usage.prompt_tokens ?? 0,
173
+ completionTokens: event.usage.completion_tokens ?? 0,
174
+ totalTokens: event.usage.total_tokens ?? 0
175
+ }
176
+ };
177
+ }
159
178
  } catch {
160
179
  }
161
180
  }
@@ -200,6 +219,24 @@ async function* parseAnthropicStream(stream) {
200
219
  };
201
220
  pendingToolCalls.delete(index);
202
221
  }
222
+ } else if (event.type === "message_delta" && event.usage) {
223
+ yield {
224
+ type: "usage",
225
+ usage: {
226
+ promptTokens: event.usage.input_tokens ?? 0,
227
+ completionTokens: event.usage.output_tokens ?? 0,
228
+ totalTokens: (event.usage.input_tokens ?? 0) + (event.usage.output_tokens ?? 0)
229
+ }
230
+ };
231
+ } else if (event.type === "message_start" && event.message?.usage) {
232
+ yield {
233
+ type: "usage",
234
+ usage: {
235
+ promptTokens: event.message.usage.input_tokens ?? 0,
236
+ completionTokens: 0,
237
+ totalTokens: event.message.usage.input_tokens ?? 0
238
+ }
239
+ };
203
240
  } else if (event.type === "message_stop") {
204
241
  for (const [, tc] of pendingToolCalls) {
205
242
  yield { type: "tool_call", toolCall: { id: tc.id, name: tc.name, args: tc.args || "{}" } };
@@ -221,6 +258,16 @@ async function* parseGeminiStream(stream) {
221
258
  for await (const data of readSSELines(stream)) {
222
259
  try {
223
260
  const event = JSON.parse(data);
261
+ if (event.usageMetadata) {
262
+ yield {
263
+ type: "usage",
264
+ usage: {
265
+ promptTokens: event.usageMetadata.promptTokenCount ?? 0,
266
+ completionTokens: event.usageMetadata.candidatesTokenCount ?? 0,
267
+ totalTokens: event.usageMetadata.totalTokenCount ?? 0
268
+ }
269
+ };
270
+ }
224
271
  const parts = event.candidates?.[0]?.content?.parts;
225
272
  if (!Array.isArray(parts)) continue;
226
273
  for (const part of parts) {
@@ -265,6 +312,18 @@ async function* parseOllamaStream(stream) {
265
312
  }
266
313
  }
267
314
  if (event.done) {
315
+ if (typeof event.prompt_eval_count === "number" || typeof event.eval_count === "number") {
316
+ const promptTokens = event.prompt_eval_count ?? 0;
317
+ const completionTokens = event.eval_count ?? 0;
318
+ yield {
319
+ type: "usage",
320
+ usage: {
321
+ promptTokens,
322
+ completionTokens,
323
+ totalTokens: promptTokens + completionTokens
324
+ }
325
+ };
326
+ }
268
327
  yield { type: "done" };
269
328
  return;
270
329
  }
@@ -466,6 +525,7 @@ function anthropic(config) {
466
525
  // src/openai.ts
467
526
  function openai(config) {
468
527
  const { apiKey, model, baseUrl = "https://api.openai.com", retry } = config;
528
+ const includeUsage = config.includeUsage ?? baseUrl.startsWith("https://api.openai.com");
469
529
  return {
470
530
  capabilities: {
471
531
  streaming: true,
@@ -492,6 +552,7 @@ function openai(config) {
492
552
  max_tokens: request.context?.maxTokens,
493
553
  stream: true
494
554
  };
555
+ if (includeUsage) body.stream_options = { include_usage: true };
495
556
  return createStreamSource(
496
557
  (signal) => fetch(`${baseUrl}/v1/chat/completions`, {
497
558
  method: "POST",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/createAdapter.ts","../src/generic.ts","../src/utils.ts","../src/anthropic.ts","../src/openai.ts","../src/gemini.ts","../src/openai-compatible.ts","../src/grok.ts","../src/ollama.ts","../src/deepseek.ts","../src/kimi.ts","../src/langchain.ts","../src/vercel-ai.ts","../src/mock.ts","../src/embedders/openai.ts","../src/embedders/gemini.ts","../src/embedders/ollama.ts","../src/embedders/openai-compatible.ts","../src/embedders/deepseek.ts","../src/embedders/grok.ts","../src/embedders/kimi.ts"],"names":["resolve","fetchAvailableModels","buildModelError"],"mappings":"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","file":"index.js","sourcesContent":["import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { CreateAdapterConfig } from './types'\n\nexport function createAdapter(config: CreateAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => ({\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const result = await config.send(request)\n const stream = result instanceof Response\n ? result.body!\n : result\n yield* config.parse(stream)\n } catch (err) {\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n config.abort?.()\n },\n }),\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { GenericAdapterConfig } from './types'\n\nexport function generic(config: GenericAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null\n const decoder = new TextDecoder()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const stream = await config.send(request)\n reader = stream.getReader()\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n const text = decoder.decode(value, { stream: true })\n yield { type: 'text', content: text }\n }\n\n yield { type: 'done' }\n } catch (err) {\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n } finally {\n reader?.releaseLock()\n }\n },\n abort: () => {\n void reader?.cancel()\n },\n }\n },\n }\n}\n","import type { AdapterRequest, Message, StreamChunk, StreamSource } from '@agentskit/core'\n\nexport function toProviderMessages(messages: Message[]) {\n return messages.map(message => {\n if (message.role === 'tool') {\n return {\n role: 'tool' as const,\n content: message.content,\n tool_call_id: message.toolCallId,\n }\n }\n if (message.role === 'assistant' && message.toolCalls && message.toolCalls.length > 0) {\n return {\n role: 'assistant' as const,\n content: message.content || null,\n tool_calls: message.toolCalls.map(tc => ({\n id: tc.id,\n type: 'function' as const,\n function: {\n name: tc.name,\n arguments: typeof tc.args === 'string' ? tc.args : JSON.stringify(tc.args ?? {}),\n },\n })),\n }\n }\n return { role: message.role, content: message.content }\n })\n}\n\nexport async function* readSSELines(stream: ReadableStream): AsyncIterableIterator<string> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\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 buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n if (!line.startsWith('data: ')) continue\n const data = line.slice(6).trim()\n if (data) yield data\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nexport async function* readNDJSONLines(stream: ReadableStream): AsyncIterableIterator<string> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\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 buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n const trimmed = line.trim()\n if (trimmed) yield trimmed\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nexport async function* parseOpenAIStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') {\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n\n try {\n const event = JSON.parse(data)\n const delta = event.choices?.[0]?.delta\n\n if (typeof delta?.content === 'string') {\n yield { type: 'text', content: delta.content }\n }\n\n if (Array.isArray(delta?.tool_calls)) {\n for (const toolCall of delta.tool_calls) {\n const index: number = toolCall.index ?? 0\n const existing = pendingToolCalls.get(index)\n\n if (toolCall?.function?.name) {\n // First chunk for this tool call — store it\n pendingToolCalls.set(index, {\n id: toolCall.id ?? existing?.id ?? `tool-${index}-${Date.now()}`,\n name: toolCall.function.name,\n args: (existing?.args ?? '') + (toolCall.function.arguments ?? ''),\n })\n } else if (existing && toolCall?.function?.arguments) {\n // Subsequent chunk — accumulate arguments\n existing.args += toolCall.function.arguments\n }\n }\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n // Flush any remaining tool calls if stream ends without [DONE]\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n\n yield { type: 'done' }\n}\n\nexport async function* parseAnthropicStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') continue\n\n try {\n const event = JSON.parse(data)\n if (event.type === 'content_block_delta' && event.delta?.type === 'text_delta' && event.delta?.text) {\n yield { type: 'text', content: event.delta.text }\n } else if (event.type === 'content_block_delta' && event.delta?.type === 'input_json_delta') {\n const index: number = event.index ?? 0\n const existing = pendingToolCalls.get(index)\n if (existing) {\n existing.args += event.delta.partial_json ?? ''\n }\n } else if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {\n const index: number = event.index ?? 0\n pendingToolCalls.set(index, {\n id: event.content_block.id,\n name: event.content_block.name,\n args: '',\n })\n } else if (event.type === 'content_block_stop') {\n const index: number = event.index ?? 0\n const tc = pendingToolCalls.get(index)\n if (tc) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: tc.id,\n name: tc.name,\n args: tc.args || '{}',\n },\n }\n pendingToolCalls.delete(index)\n }\n } else if (event.type === 'message_stop') {\n // Flush any remaining tool calls\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n // Flush remaining if stream ends without message_stop\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n\n yield { type: 'done' }\n}\n\nexport async function* parseGeminiStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n for await (const data of readSSELines(stream)) {\n try {\n const event = JSON.parse(data)\n const parts = event.candidates?.[0]?.content?.parts\n if (!Array.isArray(parts)) continue\n\n for (const part of parts) {\n if (typeof part.text === 'string' && part.text) {\n yield { type: 'text', content: part.text }\n } else if (part.functionCall) {\n const fc = part.functionCall\n yield {\n type: 'tool_call',\n toolCall: {\n id: fc.id ?? `${fc.name}-${Date.now()}`,\n name: fc.name,\n args: JSON.stringify(fc.args ?? {}),\n },\n }\n }\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n yield { type: 'done' }\n}\n\nexport async function* parseOllamaStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n for await (const data of readNDJSONLines(stream)) {\n try {\n const event = JSON.parse(data)\n if (event.message?.content) {\n yield { type: 'text', content: event.message.content }\n }\n if (Array.isArray(event.message?.tool_calls)) {\n for (const tc of event.message.tool_calls) {\n if (tc?.function?.name) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: tc.id ?? `${tc.function.name}-${Date.now()}`,\n name: tc.function.name,\n args: typeof tc.function.arguments === 'string'\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments ?? {}),\n },\n }\n }\n }\n }\n if (event.done) {\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n yield { type: 'done' }\n}\n\n/**\n * Retry knobs for adapter fetches. Tunable per call to createStreamSource.\n *\n * Default behavior:\n * - 3 attempts total (1 initial + 2 retries)\n * - exponential backoff: 500ms, 1000ms, 2000ms ... (capped at maxDelayMs)\n * - full jitter on each delay\n * - retry on HTTP 408, 429, 500, 502, 503, 504\n * - retry on network errors (fetch throws)\n * - DO NOT retry on 4xx other than 408/429 (those are bad requests / auth)\n * - retries only the initial fetch — never mid-stream\n * - respects Retry-After header when present\n */\nexport interface RetryOptions {\n maxAttempts?: number\n baseDelayMs?: number\n maxDelayMs?: number\n jitter?: boolean\n retryOn?: (info: { error?: unknown; response?: Response; attempt: number }) => boolean\n /** Hook for tests + logging. Called after every failed attempt. */\n onRetry?: (info: { attempt: number; delayMs: number; reason: string }) => void\n /** Sleep override for tests. Defaults to setTimeout. */\n sleep?: (ms: number) => Promise<void>\n}\n\nconst DEFAULT_RETRY: Required<Omit<RetryOptions, 'onRetry' | 'sleep' | 'retryOn'>> & {\n retryOn: NonNullable<RetryOptions['retryOn']>\n} = {\n maxAttempts: 3,\n baseDelayMs: 500,\n maxDelayMs: 8000,\n jitter: true,\n retryOn: ({ error, response }) => {\n if (response) {\n return [408, 429, 500, 502, 503, 504].includes(response.status)\n }\n if (error instanceof DOMException && error.name === 'AbortError') return false\n // Network error: TypeError from fetch, AbortError from upstream timeout, etc.\n return true\n },\n}\n\nfunction defaultSleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nfunction computeDelay(attempt: number, opts: Required<Pick<RetryOptions, 'baseDelayMs' | 'maxDelayMs' | 'jitter'>>): number {\n const exp = Math.min(opts.maxDelayMs, opts.baseDelayMs * Math.pow(2, attempt - 1))\n if (!opts.jitter) return exp\n return Math.floor(Math.random() * exp)\n}\n\nfunction parseRetryAfter(value: string | null): number | undefined {\n if (!value) return undefined\n const n = Number(value)\n if (!Number.isNaN(n)) return n * 1000\n const date = Date.parse(value)\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now())\n return undefined\n}\n\n/**\n * Run a fetch with retries on transient failures. Returns the final\n * Response (whether successful or not — caller decides), or throws if\n * the AbortSignal fires or all attempts fail with a thrown error.\n */\nexport async function fetchWithRetry(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n signal: AbortSignal,\n retryOpt: RetryOptions = {},\n): Promise<Response> {\n const opts = {\n ...DEFAULT_RETRY,\n ...retryOpt,\n }\n const sleep = retryOpt.sleep ?? defaultSleep\n let lastError: unknown\n\n for (let attempt = 1; attempt <= opts.maxAttempts; attempt++) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n\n try {\n const response = await doFetch(signal)\n\n // Success or non-retryable failure → return.\n if (response.ok) return response\n if (attempt >= opts.maxAttempts || !opts.retryOn({ response, attempt })) {\n return response\n }\n\n const retryAfterMs = parseRetryAfter(response.headers.get('retry-after'))\n const delay = retryAfterMs ?? computeDelay(attempt, opts)\n retryOpt.onRetry?.({ attempt, delayMs: delay, reason: `HTTP ${response.status}` })\n await sleep(delay)\n // Drain the body so the connection can be reused.\n response.body?.cancel().catch(() => {})\n } catch (err) {\n lastError = err\n if (err instanceof DOMException && err.name === 'AbortError') throw err\n if (attempt >= opts.maxAttempts || !opts.retryOn({ error: err, attempt })) throw err\n\n const delay = computeDelay(attempt, opts)\n retryOpt.onRetry?.({ attempt, delayMs: delay, reason: (err as Error).message })\n await sleep(delay)\n }\n }\n\n // Unreachable, but the TS narrowing needs it.\n throw lastError ?? new Error('fetchWithRetry: exhausted attempts')\n}\n\nexport function createStreamSource(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n parse: (stream: ReadableStream) => AsyncIterableIterator<StreamChunk>,\n errorLabel: string,\n retry?: RetryOptions,\n): StreamSource {\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const response = await fetchWithRetry(doFetch, abortController!.signal, retry ?? {})\n\n if (!response.ok || !response.body) {\n yield { type: 'error', content: `${errorLabel} error: ${response.status}` }\n return\n }\n\n yield* parse(response.body)\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') return\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n\n/**\n * Chunk-splitter that turns one large string into N streamable text chunks.\n * Useful when a provider returns the full response in one shot and you\n * want to feed it to a UI that expects streaming.\n *\n * Default splits by whitespace boundaries with a target chunk size of ~32\n * characters.\n */\nexport function chunkText(text: string, targetSize = 32): string[] {\n if (text.length <= targetSize) return [text]\n const out: string[] = []\n let i = 0\n while (i < text.length) {\n let end = Math.min(text.length, i + targetSize)\n // Prefer to cut on whitespace within the next few chars\n if (end < text.length) {\n const nextSpace = text.indexOf(' ', end)\n if (nextSpace !== -1 && nextSpace - end <= 8) end = nextSpace + 1\n }\n out.push(text.slice(i, end))\n i = end\n }\n return out\n}\n\n/**\n * Build a StreamSource from a non-streaming fetch. The adapter is\n * auto-completing: it fetches once, then yields the text as a sequence\n * of chunks so UIs see the same streaming shape they'd see from a\n * native streaming provider.\n *\n * Use this when you're wiring a provider that only has a non-streaming\n * endpoint but you want consumers (useChat, the runtime) to get\n * identical ergonomics.\n */\nexport function simulateStream(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n extractText: (response: Response) => Promise<string>,\n errorLabel: string,\n options: { chunkSize?: number; delayMs?: number; retry?: RetryOptions } = {},\n): StreamSource {\n const { chunkSize = 32, delayMs = 8, retry } = options\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const response = await fetchWithRetry(doFetch, abortController!.signal, retry ?? {})\n\n if (!response.ok) {\n yield { type: 'error', content: `${errorLabel} error: ${response.status}` }\n return\n }\n\n const text = await extractText(response)\n const chunks = chunkText(text, chunkSize)\n for (const chunk of chunks) {\n if (abortController === null) return\n if (delayMs > 0) {\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, delayMs)\n abortController?.signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer)\n reject(new DOMException('Aborted', 'AbortError'))\n },\n { once: true },\n )\n })\n }\n yield { type: 'text', content: chunk }\n }\n yield { type: 'done' }\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') return\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseAnthropicStream, type RetryOptions } from './utils'\n\nexport interface AnthropicConfig {\n apiKey: string\n model: string\n baseUrl?: string\n maxTokens?: number\n retry?: RetryOptions\n}\n\nexport function anthropic(config: AnthropicConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.anthropic.com', maxTokens = 4096, retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: model.includes('sonnet') || model.includes('opus'),\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n max_tokens: request.context?.maxTokens ?? maxTokens,\n messages: request.messages\n .filter(message => message.role !== 'system')\n .map(message => ({ role: message.role, content: message.content })),\n system: request.messages.find(message => message.role === 'system')?.content,\n tools: request.context?.tools?.map(tool => ({\n name: tool.name,\n description: tool.description,\n input_schema: tool.schema,\n })),\n stream: true,\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/v1/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseAnthropicStream,\n 'Anthropic API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseOpenAIStream, toProviderMessages, type RetryOptions } from './utils'\n\nexport interface OpenAIConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function openai(config: OpenAIConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.openai.com', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n // o1 / o3 models emit reasoning; older models don't. Accurate per-model\n // detection would need a model registry; 'true' is the safer default here.\n reasoning: model.startsWith('o1') || model.startsWith('o3'),\n multiModal: model.startsWith('gpt-4') || model.startsWith('o'),\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n messages: toProviderMessages(request.messages),\n tools: request.context?.tools?.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n },\n })),\n temperature: request.context?.temperature,\n max_tokens: request.context?.maxTokens,\n stream: true,\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/v1/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseOpenAIStream,\n 'OpenAI API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseGeminiStream, type RetryOptions } from './utils'\n\nexport interface GeminiConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function gemini(config: GeminiConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://generativelanguage.googleapis.com', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n contents: request.messages\n .filter(message => message.role !== 'system')\n .map(message => ({\n role: message.role === 'assistant' ? 'model' : 'user',\n parts: [{ text: message.content }],\n })),\n systemInstruction: request.messages.find(message => message.role === 'system')\n ? {\n role: 'system',\n parts: [{ text: request.messages.find(message => message.role === 'system')!.content }],\n }\n : undefined,\n }\n\n return createStreamSource(\n (signal) => fetch(\n `${baseUrl}/v1beta/models/${model}:streamGenerateContent?alt=sse&key=${apiKey}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal,\n },\n ),\n parseGeminiStream,\n 'Gemini API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory } from '@agentskit/core'\nimport { openai, type OpenAIConfig } from './openai'\n\nexport interface OpenAICompatibleConfig extends OpenAIConfig {}\n\nexport function createOpenAICompatibleAdapter(defaultBaseUrl: string) {\n return function openAICompatibleAdapter(config: OpenAICompatibleConfig): AdapterFactory {\n return openai({\n ...config,\n baseUrl: config.baseUrl ?? defaultBaseUrl,\n })\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface GrokConfig extends OpenAICompatibleConfig {}\n\nexport const grok = createOpenAICompatibleAdapter('https://api.x.ai')\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseOllamaStream, type RetryOptions } from './utils'\n\nexport interface OllamaConfig {\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function ollama(config: OllamaConfig): AdapterFactory {\n const { model, baseUrl = 'http://localhost:11434', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: false, // varies by model; default 'false' — enable via capabilities.extensions if your model supports it\n multiModal: model.includes('llava') || model.includes('vision'),\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n stream: true,\n messages: request.messages.map(message => ({\n role: message.role,\n content: message.content,\n })),\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/api/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal,\n }),\n parseOllamaStream,\n 'Ollama API',\n retry,\n )\n },\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface DeepSeekConfig extends OpenAICompatibleConfig {}\n\nexport const deepseek = createOpenAICompatibleAdapter('https://api.deepseek.com')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface KimiConfig extends OpenAICompatibleConfig {}\n\nexport const kimi = createOpenAICompatibleAdapter('https://api.moonshot.ai')\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\n\ntype LangChainRunnable = {\n stream?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<unknown> | Promise<AsyncIterable<unknown>>\n streamEvents?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<Record<string, unknown>> | Promise<AsyncIterable<Record<string, unknown>>>\n}\n\nexport interface LangChainConfig {\n runnable: LangChainRunnable\n mode?: 'stream' | 'events'\n}\n\nfunction asText(value: unknown): string {\n if (typeof value === 'string') return value\n if (value && typeof value === 'object' && 'content' in value) {\n const content = (value as { content?: unknown }).content\n if (typeof content === 'string') return content\n }\n return ''\n}\n\nexport function langchain(config: LangChainConfig): AdapterFactory {\n const { runnable, mode = 'stream' } = config\n\n return {\n createSource: (request: AdapterRequest): StreamSource => ({\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n if (mode === 'events' && runnable.streamEvents) {\n const events = await runnable.streamEvents(\n { messages: request.messages },\n { version: 'v2' }\n )\n\n for await (const event of events) {\n const eventName = String(event.event ?? '')\n if (eventName.endsWith('_stream')) {\n const chunk = asText(event.data)\n if (chunk) yield { type: 'text', content: chunk }\n } else if (eventName.endsWith('_start') && event.name) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: String(event.run_id ?? `${event.name}-${Date.now()}`),\n name: String(event.name),\n args: JSON.stringify(event.data ?? {}),\n },\n }\n } else if (eventName.endsWith('_end')) {\n continue\n }\n }\n } else if (runnable.stream) {\n const stream = await runnable.stream({ messages: request.messages })\n for await (const value of stream) {\n const chunk = asText(value)\n if (chunk) yield { type: 'text', content: chunk }\n }\n } else {\n yield { type: 'error', content: 'Runnable does not implement stream() or streamEvents()' }\n return\n }\n\n yield { type: 'done' }\n } catch (error) {\n yield {\n type: 'error',\n content: error instanceof Error ? error.message : String(error),\n }\n }\n },\n abort: () => {},\n }),\n }\n}\n\nexport interface LangGraphConfig {\n graph: LangChainRunnable\n}\n\nexport function langgraph(config: LangGraphConfig): AdapterFactory {\n return langchain({\n runnable: config.graph,\n mode: 'events',\n })\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { createStreamSource, type RetryOptions } from './utils'\n\nexport interface VercelAIConfig {\n api: string\n headers?: Record<string, string>\n retry?: RetryOptions\n}\n\nasync function* parseVercelStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n const text = decoder.decode(value, { stream: true })\n if (text) yield { type: 'text', content: text }\n }\n } finally {\n reader.releaseLock()\n }\n\n yield { type: 'done' }\n}\n\nexport function vercelAI(config: VercelAIConfig): AdapterFactory {\n const { api, headers = {}, retry } = config\n\n return {\n capabilities: {\n // Vercel AI routes can do any of these — whether they do depends on\n // your route handler. Omit the field instead of lying.\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n messages: request.messages.map(message => ({ role: message.role, content: message.content })),\n tools: request.context?.tools,\n systemPrompt: request.context?.systemPrompt,\n }\n\n return createStreamSource(\n (signal) => fetch(api, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...headers },\n body: JSON.stringify(body),\n signal,\n }),\n parseVercelStream,\n 'API',\n retry,\n )\n },\n }\n}\n","import type {\n AdapterFactory,\n AdapterRequest,\n StreamChunk,\n StreamSource,\n} from '@agentskit/core'\n\nexport type MockResponse = StreamChunk[] | ((request: AdapterRequest) => StreamChunk[])\n\nexport interface MockAdapterOptions {\n /**\n * Static chunks, a request-aware function, or a sequence of responses\n * (the i-th call returns the i-th item, looping when exhausted).\n */\n response: MockResponse | MockResponse[]\n /** ms between yielded chunks. Default 0 (synchronous). */\n delayMs?: number\n /** Track every request the adapter received. Useful for assertions. */\n history?: AdapterRequest[]\n}\n\n/**\n * A deterministic adapter for tests, demos, and dry-run experiments.\n *\n * Conforms to ADR 0001 — Adapter contract:\n * - createSource is pure (A1) — no work until stream() runs\n * - Always emits a terminal chunk (A3)\n * - abort() is safe (A6)\n * - Does not mutate input messages (A7)\n *\n * Examples:\n *\n * // Static\n * const adapter = mockAdapter({\n * response: [\n * { type: 'text', content: 'Hello!' },\n * { type: 'done' },\n * ],\n * })\n *\n * // Request-aware\n * const adapter = mockAdapter({\n * response: req => {\n * const last = req.messages[req.messages.length - 1]?.content ?? ''\n * return [\n * { type: 'text', content: 'Echo: ' + last },\n * { type: 'done' },\n * ]\n * },\n * })\n *\n * // Sequenced — different output each call\n * const adapter = mockAdapter({\n * response: [\n * [{ type: 'text', content: 'first' }, { type: 'done' }],\n * [{ type: 'text', content: 'second' }, { type: 'done' }],\n * ],\n * })\n */\nexport function mockAdapter(options: MockAdapterOptions): AdapterFactory {\n const { response, delayMs = 0, history } = options\n let callIndex = 0\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n history?.push(request)\n const myCall = callIndex++\n let cancelled = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n const chunks = resolve(response, myCall, request)\n let endedExplicitly = false\n\n for (const chunk of chunks) {\n if (cancelled) return\n if (delayMs > 0) await new Promise(r => setTimeout(r, delayMs))\n yield chunk\n if (chunk.type === 'done' || chunk.type === 'error') {\n endedExplicitly = true\n }\n }\n\n // ADR 0001 A3 — every stream ends with a terminal chunk.\n if (!endedExplicitly) yield { type: 'done' }\n },\n abort: () => {\n cancelled = true\n },\n }\n },\n }\n}\n\nfunction resolve(\n response: MockResponse | MockResponse[],\n callIndex: number,\n request: AdapterRequest,\n): StreamChunk[] {\n if (Array.isArray(response) && response.length > 0 && Array.isArray(response[0])) {\n // Sequenced responses\n const sequence = response as StreamChunk[][]\n const item = sequence[callIndex % sequence.length]\n return item\n }\n if (Array.isArray(response) && response.length > 0 && typeof response[0] === 'function') {\n // Sequenced functions\n const sequence = response as Array<(req: AdapterRequest) => StreamChunk[]>\n return sequence[callIndex % sequence.length](request)\n }\n if (typeof response === 'function') {\n return response(request)\n }\n return response as StreamChunk[]\n}\n\n// ============================================================================\n// Recording / replay\n// ============================================================================\n\nexport interface RecordedTurn {\n /** ISO timestamp when this turn was recorded. */\n recordedAt: string\n /** The request that produced this turn. */\n request: AdapterRequest\n /** Every chunk yielded by the wrapped adapter. */\n chunks: StreamChunk[]\n}\n\nexport type RecordingFixture = RecordedTurn[]\n\nexport interface RecordingSink {\n push(turn: RecordedTurn): void | Promise<void>\n}\n\n/**\n * Wrap a real adapter so every turn is captured to a sink. Use this in\n * dev to build up a fixture, then replay with replayAdapter() in tests.\n */\nexport function recordingAdapter(\n inner: AdapterFactory,\n sink: RecordingSink,\n): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const innerSource = inner.createSource(request)\n const captured: StreamChunk[] = []\n const recordedAt = new Date().toISOString()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n for await (const chunk of innerSource.stream()) {\n captured.push(chunk)\n yield chunk\n }\n } finally {\n await sink.push({ recordedAt, request, chunks: captured })\n }\n },\n abort: () => innerSource.abort(),\n }\n },\n }\n}\n\n/**\n * In-memory recording sink — useful for tests and ephemeral capture.\n */\nexport function inMemorySink(): RecordingSink & { fixture: RecordingFixture } {\n const fixture: RecordingFixture = []\n return {\n fixture,\n push(turn) {\n fixture.push(turn)\n },\n }\n}\n\n/**\n * Replay an adapter from a recorded fixture. Each turn maps 1:1 to a\n * recorded entry by index — call N replays fixture[N % fixture.length].\n */\nexport function replayAdapter(fixture: RecordingFixture): AdapterFactory {\n if (fixture.length === 0) {\n throw new Error('replayAdapter: fixture is empty')\n }\n return mockAdapter({\n response: fixture.map(turn => turn.chunks),\n })\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OpenAIEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1/models`, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `OpenAI embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `OpenAI embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function openaiEmbedder(config: OpenAIEmbedderConfig): EmbedFn {\n const { apiKey, model = 'text-embedding-3-small', baseUrl = 'https://api.openai.com' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data: Array<{ embedding: number[] }> }\n return data.data[0].embedding\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface GeminiEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1beta/models?key=${apiKey}`)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as {\n models: Array<{ name: string; supportedGenerationMethods: string[] }>\n }\n return data.models\n .filter(m => m.supportedGenerationMethods.includes('embedContent'))\n .map(m => m.name.replace('models/', ''))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `Gemini embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `Gemini embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function geminiEmbedder(config: GeminiEmbedderConfig): EmbedFn {\n const {\n apiKey,\n model = 'text-embedding-004',\n baseUrl = 'https://generativelanguage.googleapis.com',\n } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(\n `${baseUrl}/v1beta/models/${model}:embedContent?key=${apiKey}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: `models/${model}`,\n content: { parts: [{ text }] },\n }),\n },\n )\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { embedding: { values: number[] } }\n return data.embedding.values\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OllamaEmbedderConfig {\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/api/tags`)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { models: Array<{ name: string }> }\n return data.models\n .map(m => m.name)\n .filter(name => name.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `Ollama embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `Ollama embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function ollamaEmbedder(config: OllamaEmbedderConfig): EmbedFn {\n const { model = 'nomic-embed-text', baseUrl = 'http://localhost:11434' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/api/embed`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as { error?: string }\n const message = errorBody.error ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, message)\n }\n\n const data = (await response.json()) as { embeddings: number[][] }\n return data.embeddings[0]\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OpenAICompatibleEmbedderConfig {\n apiKey: string\n model: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1/models`, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n provider: string,\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `${provider} embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `${provider} embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function createOpenAICompatibleEmbedder(provider: string, defaultBaseUrl: string) {\n return function embedder(config: OpenAICompatibleEmbedderConfig): EmbedFn {\n if (!config.model) {\n throw new Error(`Model is required for ${provider}. Pass { model: \"<model-name>\" }.`)\n }\n const { apiKey, model, baseUrl = defaultBaseUrl } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(provider, baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data: Array<{ embedding: number[] }> }\n return data.data[0].embedding\n }\n }\n}\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface DeepSeekEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const deepseekEmbedder = createOpenAICompatibleEmbedder('DeepSeek', 'https://api.deepseek.com')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface GrokEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const grokEmbedder = createOpenAICompatibleEmbedder('Grok', 'https://api.x.ai')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface KimiEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const kimiEmbedder = createOpenAICompatibleEmbedder('Kimi', 'https://api.moonshot.ai')\n"]}
1
+ {"version":3,"sources":["../src/createAdapter.ts","../src/generic.ts","../src/utils.ts","../src/anthropic.ts","../src/openai.ts","../src/gemini.ts","../src/openai-compatible.ts","../src/grok.ts","../src/ollama.ts","../src/deepseek.ts","../src/kimi.ts","../src/langchain.ts","../src/vercel-ai.ts","../src/mock.ts","../src/embedders/openai.ts","../src/embedders/gemini.ts","../src/embedders/ollama.ts","../src/embedders/openai-compatible.ts","../src/embedders/deepseek.ts","../src/embedders/grok.ts","../src/embedders/kimi.ts"],"names":["resolve","fetchAvailableModels","buildModelError"],"mappings":"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","file":"index.js","sourcesContent":["import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { CreateAdapterConfig } from './types'\n\nexport function createAdapter(config: CreateAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => ({\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const result = await config.send(request)\n const stream = result instanceof Response\n ? result.body!\n : result\n yield* config.parse(stream)\n } catch (err) {\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n config.abort?.()\n },\n }),\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport type { GenericAdapterConfig } from './types'\n\nexport function generic(config: GenericAdapterConfig): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null\n const decoder = new TextDecoder()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const stream = await config.send(request)\n reader = stream.getReader()\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n const text = decoder.decode(value, { stream: true })\n yield { type: 'text', content: text }\n }\n\n yield { type: 'done' }\n } catch (err) {\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n } finally {\n reader?.releaseLock()\n }\n },\n abort: () => {\n void reader?.cancel()\n },\n }\n },\n }\n}\n","import type { AdapterRequest, Message, StreamChunk, StreamSource } from '@agentskit/core'\n\nexport function toProviderMessages(messages: Message[]) {\n // Track which tool_call ids were declared by preceding assistant turns so\n // we can drop orphan tool messages — the OpenAI Chat Completions API\n // rejects a tool message whose tool_call_id isn't bound to a previous\n // assistant message.\n const knownToolCallIds = new Set<string>()\n const output: Array<Record<string, unknown>> = []\n\n for (const message of messages) {\n if (message.role === 'tool') {\n const id = message.toolCallId\n // Orphan (no id, or id not declared) — skip; it would 400 the API.\n if (!id || !knownToolCallIds.has(id)) continue\n output.push({\n role: 'tool' as const,\n content: message.content,\n tool_call_id: id,\n })\n continue\n }\n\n if (message.role === 'assistant' && message.toolCalls && message.toolCalls.length > 0) {\n for (const tc of message.toolCalls) knownToolCallIds.add(tc.id)\n output.push({\n role: 'assistant' as const,\n content: message.content || null,\n tool_calls: message.toolCalls.map(tc => ({\n id: tc.id,\n type: 'function' as const,\n function: {\n name: tc.name,\n arguments: typeof tc.args === 'string' ? tc.args : JSON.stringify(tc.args ?? {}),\n },\n })),\n })\n continue\n }\n\n // Skip assistant messages with no content AND no tool calls. These\n // happen when a turn was interrupted (Ctrl+C, crashed adapter, etc.)\n // and the placeholder assistant message never received content —\n // sending `{role:'assistant', content:''}` back to the provider either\n // 400s or confuses the model into silence on the next turn.\n if (message.role === 'assistant' && !message.content) continue\n\n output.push({ role: message.role, content: message.content })\n }\n\n return output\n}\n\nexport async function* readSSELines(stream: ReadableStream): AsyncIterableIterator<string> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\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 buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n if (!line.startsWith('data: ')) continue\n const data = line.slice(6).trim()\n if (data) yield data\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nexport async function* readNDJSONLines(stream: ReadableStream): AsyncIterableIterator<string> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\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 buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n const trimmed = line.trim()\n if (trimmed) yield trimmed\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nexport async function* parseOpenAIStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') {\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n\n try {\n const event = JSON.parse(data)\n const delta = event.choices?.[0]?.delta\n\n if (typeof delta?.content === 'string') {\n yield { type: 'text', content: delta.content }\n }\n\n if (Array.isArray(delta?.tool_calls)) {\n for (const toolCall of delta.tool_calls) {\n const index: number = toolCall.index ?? 0\n const existing = pendingToolCalls.get(index)\n\n if (toolCall?.function?.name) {\n // First chunk for this tool call — store it\n pendingToolCalls.set(index, {\n id: toolCall.id ?? existing?.id ?? `tool-${index}-${Date.now()}`,\n name: toolCall.function.name,\n args: (existing?.args ?? '') + (toolCall.function.arguments ?? ''),\n })\n } else if (existing && toolCall?.function?.arguments) {\n // Subsequent chunk — accumulate arguments\n existing.args += toolCall.function.arguments\n }\n }\n }\n\n // Final usage chunk — emitted when `stream_options.include_usage` is set.\n if (event.usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usage.prompt_tokens ?? 0,\n completionTokens: event.usage.completion_tokens ?? 0,\n totalTokens: event.usage.total_tokens ?? 0,\n },\n }\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n // Flush any remaining tool calls if stream ends without [DONE]\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n\n yield { type: 'done' }\n}\n\nexport async function* parseAnthropicStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const pendingToolCalls = new Map<number, { id: string; name: string; args: string }>()\n\n for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') continue\n\n try {\n const event = JSON.parse(data)\n if (event.type === 'content_block_delta' && event.delta?.type === 'text_delta' && event.delta?.text) {\n yield { type: 'text', content: event.delta.text }\n } else if (event.type === 'content_block_delta' && event.delta?.type === 'input_json_delta') {\n const index: number = event.index ?? 0\n const existing = pendingToolCalls.get(index)\n if (existing) {\n existing.args += event.delta.partial_json ?? ''\n }\n } else if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {\n const index: number = event.index ?? 0\n pendingToolCalls.set(index, {\n id: event.content_block.id,\n name: event.content_block.name,\n args: '',\n })\n } else if (event.type === 'content_block_stop') {\n const index: number = event.index ?? 0\n const tc = pendingToolCalls.get(index)\n if (tc) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: tc.id,\n name: tc.name,\n args: tc.args || '{}',\n },\n }\n pendingToolCalls.delete(index)\n }\n } else if (event.type === 'message_delta' && event.usage) {\n // Anthropic emits output_tokens on `message_delta`, input_tokens on\n // `message_start`. We publish whatever we have on the delta — the\n // consumer accumulates across turns.\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usage.input_tokens ?? 0,\n completionTokens: event.usage.output_tokens ?? 0,\n totalTokens: (event.usage.input_tokens ?? 0) + (event.usage.output_tokens ?? 0),\n },\n }\n } else if (event.type === 'message_start' && event.message?.usage) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.message.usage.input_tokens ?? 0,\n completionTokens: 0,\n totalTokens: event.message.usage.input_tokens ?? 0,\n },\n }\n } else if (event.type === 'message_stop') {\n // Flush any remaining tool calls\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n // Flush remaining if stream ends without message_stop\n for (const [, tc] of pendingToolCalls) {\n yield { type: 'tool_call', toolCall: { id: tc.id, name: tc.name, args: tc.args || '{}' } }\n }\n pendingToolCalls.clear()\n\n yield { type: 'done' }\n}\n\nexport async function* parseGeminiStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n for await (const data of readSSELines(stream)) {\n try {\n const event = JSON.parse(data)\n\n if (event.usageMetadata) {\n yield {\n type: 'usage',\n usage: {\n promptTokens: event.usageMetadata.promptTokenCount ?? 0,\n completionTokens: event.usageMetadata.candidatesTokenCount ?? 0,\n totalTokens: event.usageMetadata.totalTokenCount ?? 0,\n },\n }\n }\n\n const parts = event.candidates?.[0]?.content?.parts\n if (!Array.isArray(parts)) continue\n\n for (const part of parts) {\n if (typeof part.text === 'string' && part.text) {\n yield { type: 'text', content: part.text }\n } else if (part.functionCall) {\n const fc = part.functionCall\n yield {\n type: 'tool_call',\n toolCall: {\n id: fc.id ?? `${fc.name}-${Date.now()}`,\n name: fc.name,\n args: JSON.stringify(fc.args ?? {}),\n },\n }\n }\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n yield { type: 'done' }\n}\n\nexport async function* parseOllamaStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n for await (const data of readNDJSONLines(stream)) {\n try {\n const event = JSON.parse(data)\n if (event.message?.content) {\n yield { type: 'text', content: event.message.content }\n }\n if (Array.isArray(event.message?.tool_calls)) {\n for (const tc of event.message.tool_calls) {\n if (tc?.function?.name) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: tc.id ?? `${tc.function.name}-${Date.now()}`,\n name: tc.function.name,\n args: typeof tc.function.arguments === 'string'\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments ?? {}),\n },\n }\n }\n }\n }\n if (event.done) {\n if (typeof event.prompt_eval_count === 'number' || typeof event.eval_count === 'number') {\n const promptTokens = event.prompt_eval_count ?? 0\n const completionTokens = event.eval_count ?? 0\n yield {\n type: 'usage',\n usage: {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n },\n }\n }\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n yield { type: 'done' }\n}\n\n/**\n * Retry knobs for adapter fetches. Tunable per call to createStreamSource.\n *\n * Default behavior:\n * - 3 attempts total (1 initial + 2 retries)\n * - exponential backoff: 500ms, 1000ms, 2000ms ... (capped at maxDelayMs)\n * - full jitter on each delay\n * - retry on HTTP 408, 429, 500, 502, 503, 504\n * - retry on network errors (fetch throws)\n * - DO NOT retry on 4xx other than 408/429 (those are bad requests / auth)\n * - retries only the initial fetch — never mid-stream\n * - respects Retry-After header when present\n */\nexport interface RetryOptions {\n maxAttempts?: number\n baseDelayMs?: number\n maxDelayMs?: number\n jitter?: boolean\n retryOn?: (info: { error?: unknown; response?: Response; attempt: number }) => boolean\n /** Hook for tests + logging. Called after every failed attempt. */\n onRetry?: (info: { attempt: number; delayMs: number; reason: string }) => void\n /** Sleep override for tests. Defaults to setTimeout. */\n sleep?: (ms: number) => Promise<void>\n}\n\nconst DEFAULT_RETRY: Required<Omit<RetryOptions, 'onRetry' | 'sleep' | 'retryOn'>> & {\n retryOn: NonNullable<RetryOptions['retryOn']>\n} = {\n maxAttempts: 3,\n baseDelayMs: 500,\n maxDelayMs: 8000,\n jitter: true,\n retryOn: ({ error, response }) => {\n if (response) {\n return [408, 429, 500, 502, 503, 504].includes(response.status)\n }\n if (error instanceof DOMException && error.name === 'AbortError') return false\n // Network error: TypeError from fetch, AbortError from upstream timeout, etc.\n return true\n },\n}\n\nfunction defaultSleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nfunction computeDelay(attempt: number, opts: Required<Pick<RetryOptions, 'baseDelayMs' | 'maxDelayMs' | 'jitter'>>): number {\n const exp = Math.min(opts.maxDelayMs, opts.baseDelayMs * Math.pow(2, attempt - 1))\n if (!opts.jitter) return exp\n return Math.floor(Math.random() * exp)\n}\n\nfunction parseRetryAfter(value: string | null): number | undefined {\n if (!value) return undefined\n const n = Number(value)\n if (!Number.isNaN(n)) return n * 1000\n const date = Date.parse(value)\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now())\n return undefined\n}\n\n/**\n * Run a fetch with retries on transient failures. Returns the final\n * Response (whether successful or not — caller decides), or throws if\n * the AbortSignal fires or all attempts fail with a thrown error.\n */\nexport async function fetchWithRetry(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n signal: AbortSignal,\n retryOpt: RetryOptions = {},\n): Promise<Response> {\n const opts = {\n ...DEFAULT_RETRY,\n ...retryOpt,\n }\n const sleep = retryOpt.sleep ?? defaultSleep\n let lastError: unknown\n\n for (let attempt = 1; attempt <= opts.maxAttempts; attempt++) {\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError')\n\n try {\n const response = await doFetch(signal)\n\n // Success or non-retryable failure → return.\n if (response.ok) return response\n if (attempt >= opts.maxAttempts || !opts.retryOn({ response, attempt })) {\n return response\n }\n\n const retryAfterMs = parseRetryAfter(response.headers.get('retry-after'))\n const delay = retryAfterMs ?? computeDelay(attempt, opts)\n retryOpt.onRetry?.({ attempt, delayMs: delay, reason: `HTTP ${response.status}` })\n await sleep(delay)\n // Drain the body so the connection can be reused.\n response.body?.cancel().catch(() => {})\n } catch (err) {\n lastError = err\n if (err instanceof DOMException && err.name === 'AbortError') throw err\n if (attempt >= opts.maxAttempts || !opts.retryOn({ error: err, attempt })) throw err\n\n const delay = computeDelay(attempt, opts)\n retryOpt.onRetry?.({ attempt, delayMs: delay, reason: (err as Error).message })\n await sleep(delay)\n }\n }\n\n // Unreachable, but the TS narrowing needs it.\n throw lastError ?? new Error('fetchWithRetry: exhausted attempts')\n}\n\nexport function createStreamSource(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n parse: (stream: ReadableStream) => AsyncIterableIterator<StreamChunk>,\n errorLabel: string,\n retry?: RetryOptions,\n): StreamSource {\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const response = await fetchWithRetry(doFetch, abortController!.signal, retry ?? {})\n\n if (!response.ok || !response.body) {\n yield { type: 'error', content: `${errorLabel} error: ${response.status}` }\n return\n }\n\n yield* parse(response.body)\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') return\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n\n/**\n * Chunk-splitter that turns one large string into N streamable text chunks.\n * Useful when a provider returns the full response in one shot and you\n * want to feed it to a UI that expects streaming.\n *\n * Default splits by whitespace boundaries with a target chunk size of ~32\n * characters.\n */\nexport function chunkText(text: string, targetSize = 32): string[] {\n if (text.length <= targetSize) return [text]\n const out: string[] = []\n let i = 0\n while (i < text.length) {\n let end = Math.min(text.length, i + targetSize)\n // Prefer to cut on whitespace within the next few chars\n if (end < text.length) {\n const nextSpace = text.indexOf(' ', end)\n if (nextSpace !== -1 && nextSpace - end <= 8) end = nextSpace + 1\n }\n out.push(text.slice(i, end))\n i = end\n }\n return out\n}\n\n/**\n * Build a StreamSource from a non-streaming fetch. The adapter is\n * auto-completing: it fetches once, then yields the text as a sequence\n * of chunks so UIs see the same streaming shape they'd see from a\n * native streaming provider.\n *\n * Use this when you're wiring a provider that only has a non-streaming\n * endpoint but you want consumers (useChat, the runtime) to get\n * identical ergonomics.\n */\nexport function simulateStream(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n extractText: (response: Response) => Promise<string>,\n errorLabel: string,\n options: { chunkSize?: number; delayMs?: number; retry?: RetryOptions } = {},\n): StreamSource {\n const { chunkSize = 32, delayMs = 8, retry } = options\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const response = await fetchWithRetry(doFetch, abortController!.signal, retry ?? {})\n\n if (!response.ok) {\n yield { type: 'error', content: `${errorLabel} error: ${response.status}` }\n return\n }\n\n const text = await extractText(response)\n const chunks = chunkText(text, chunkSize)\n for (const chunk of chunks) {\n if (abortController === null) return\n if (delayMs > 0) {\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, delayMs)\n abortController?.signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer)\n reject(new DOMException('Aborted', 'AbortError'))\n },\n { once: true },\n )\n })\n }\n yield { type: 'text', content: chunk }\n }\n yield { type: 'done' }\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') return\n yield {\n type: 'error',\n content: err instanceof Error ? err.message : String(err),\n }\n }\n },\n abort: () => {\n abortController?.abort()\n abortController = null\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseAnthropicStream, type RetryOptions } from './utils'\n\nexport interface AnthropicConfig {\n apiKey: string\n model: string\n baseUrl?: string\n maxTokens?: number\n retry?: RetryOptions\n}\n\nexport function anthropic(config: AnthropicConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.anthropic.com', maxTokens = 4096, retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: model.includes('sonnet') || model.includes('opus'),\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n max_tokens: request.context?.maxTokens ?? maxTokens,\n messages: request.messages\n .filter(message => message.role !== 'system')\n .map(message => ({ role: message.role, content: message.content })),\n system: request.messages.find(message => message.role === 'system')?.content,\n tools: request.context?.tools?.map(tool => ({\n name: tool.name,\n description: tool.description,\n input_schema: tool.schema,\n })),\n stream: true,\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/v1/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseAnthropicStream,\n 'Anthropic API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseOpenAIStream, toProviderMessages, type RetryOptions } from './utils'\n\nexport interface OpenAIConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n /**\n * Ask the provider to include token usage in the final stream chunk via\n * `stream_options: { include_usage: true }`. Off by default because some\n * OpenAI-compatible providers (OpenRouter proxies to a long tail of\n * backends) reject unknown params with a 4xx and break the whole stream.\n * Turn this on for vanilla `api.openai.com`.\n */\n includeUsage?: boolean\n}\n\nexport function openai(config: OpenAIConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.openai.com', retry } = config\n // Auto: on for canonical OpenAI, off for every other compatible endpoint\n // where the param is a known source of 4xx surprises.\n const includeUsage = config.includeUsage ?? baseUrl.startsWith('https://api.openai.com')\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n // o1 / o3 models emit reasoning; older models don't. Accurate per-model\n // detection would need a model registry; 'true' is the safer default here.\n reasoning: model.startsWith('o1') || model.startsWith('o3'),\n multiModal: model.startsWith('gpt-4') || model.startsWith('o'),\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body: Record<string, unknown> = {\n model,\n messages: toProviderMessages(request.messages),\n tools: request.context?.tools?.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.schema,\n },\n })),\n temperature: request.context?.temperature,\n max_tokens: request.context?.maxTokens,\n stream: true,\n }\n if (includeUsage) body.stream_options = { include_usage: true }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/v1/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify(body),\n signal,\n }),\n parseOpenAIStream,\n 'OpenAI API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseGeminiStream, type RetryOptions } from './utils'\n\nexport interface GeminiConfig {\n apiKey: string\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function gemini(config: GeminiConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://generativelanguage.googleapis.com', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n contents: request.messages\n .filter(message => message.role !== 'system')\n .map(message => ({\n role: message.role === 'assistant' ? 'model' : 'user',\n parts: [{ text: message.content }],\n })),\n systemInstruction: request.messages.find(message => message.role === 'system')\n ? {\n role: 'system',\n parts: [{ text: request.messages.find(message => message.role === 'system')!.content }],\n }\n : undefined,\n }\n\n return createStreamSource(\n (signal) => fetch(\n `${baseUrl}/v1beta/models/${model}:streamGenerateContent?alt=sse&key=${apiKey}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal,\n },\n ),\n parseGeminiStream,\n 'Gemini API',\n retry,\n )\n },\n }\n}\n","import type { AdapterFactory } from '@agentskit/core'\nimport { openai, type OpenAIConfig } from './openai'\n\nexport interface OpenAICompatibleConfig extends OpenAIConfig {}\n\nexport function createOpenAICompatibleAdapter(defaultBaseUrl: string) {\n return function openAICompatibleAdapter(config: OpenAICompatibleConfig): AdapterFactory {\n return openai({\n ...config,\n baseUrl: config.baseUrl ?? defaultBaseUrl,\n })\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface GrokConfig extends OpenAICompatibleConfig {}\n\nexport const grok = createOpenAICompatibleAdapter('https://api.x.ai')\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseOllamaStream, type RetryOptions } from './utils'\n\nexport interface OllamaConfig {\n model: string\n baseUrl?: string\n retry?: RetryOptions\n}\n\nexport function ollama(config: OllamaConfig): AdapterFactory {\n const { model, baseUrl = 'http://localhost:11434', retry } = config\n\n return {\n capabilities: {\n streaming: true,\n tools: false, // varies by model; default 'false' — enable via capabilities.extensions if your model supports it\n multiModal: model.includes('llava') || model.includes('vision'),\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n model,\n stream: true,\n messages: request.messages.map(message => ({\n role: message.role,\n content: message.content,\n })),\n }\n\n return createStreamSource(\n (signal) => fetch(`${baseUrl}/api/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal,\n }),\n parseOllamaStream,\n 'Ollama API',\n retry,\n )\n },\n }\n}\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface DeepSeekConfig extends OpenAICompatibleConfig {}\n\nexport const deepseek = createOpenAICompatibleAdapter('https://api.deepseek.com')\n","import { createOpenAICompatibleAdapter, type OpenAICompatibleConfig } from './openai-compatible'\n\nexport interface KimiConfig extends OpenAICompatibleConfig {}\n\nexport const kimi = createOpenAICompatibleAdapter('https://api.moonshot.ai')\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\n\ntype LangChainRunnable = {\n stream?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<unknown> | Promise<AsyncIterable<unknown>>\n streamEvents?: (input: unknown, config?: Record<string, unknown>) => AsyncIterable<Record<string, unknown>> | Promise<AsyncIterable<Record<string, unknown>>>\n}\n\nexport interface LangChainConfig {\n runnable: LangChainRunnable\n mode?: 'stream' | 'events'\n}\n\nfunction asText(value: unknown): string {\n if (typeof value === 'string') return value\n if (value && typeof value === 'object' && 'content' in value) {\n const content = (value as { content?: unknown }).content\n if (typeof content === 'string') return content\n }\n return ''\n}\n\nexport function langchain(config: LangChainConfig): AdapterFactory {\n const { runnable, mode = 'stream' } = config\n\n return {\n createSource: (request: AdapterRequest): StreamSource => ({\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n if (mode === 'events' && runnable.streamEvents) {\n const events = await runnable.streamEvents(\n { messages: request.messages },\n { version: 'v2' }\n )\n\n for await (const event of events) {\n const eventName = String(event.event ?? '')\n if (eventName.endsWith('_stream')) {\n const chunk = asText(event.data)\n if (chunk) yield { type: 'text', content: chunk }\n } else if (eventName.endsWith('_start') && event.name) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: String(event.run_id ?? `${event.name}-${Date.now()}`),\n name: String(event.name),\n args: JSON.stringify(event.data ?? {}),\n },\n }\n } else if (eventName.endsWith('_end')) {\n continue\n }\n }\n } else if (runnable.stream) {\n const stream = await runnable.stream({ messages: request.messages })\n for await (const value of stream) {\n const chunk = asText(value)\n if (chunk) yield { type: 'text', content: chunk }\n }\n } else {\n yield { type: 'error', content: 'Runnable does not implement stream() or streamEvents()' }\n return\n }\n\n yield { type: 'done' }\n } catch (error) {\n yield {\n type: 'error',\n content: error instanceof Error ? error.message : String(error),\n }\n }\n },\n abort: () => {},\n }),\n }\n}\n\nexport interface LangGraphConfig {\n graph: LangChainRunnable\n}\n\nexport function langgraph(config: LangGraphConfig): AdapterFactory {\n return langchain({\n runnable: config.graph,\n mode: 'events',\n })\n}\n","import type { AdapterFactory, AdapterRequest, StreamChunk, StreamSource } from '@agentskit/core'\nimport { createStreamSource, type RetryOptions } from './utils'\n\nexport interface VercelAIConfig {\n api: string\n headers?: Record<string, string>\n retry?: RetryOptions\n}\n\nasync function* parseVercelStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n const text = decoder.decode(value, { stream: true })\n if (text) yield { type: 'text', content: text }\n }\n } finally {\n reader.releaseLock()\n }\n\n yield { type: 'done' }\n}\n\nexport function vercelAI(config: VercelAIConfig): AdapterFactory {\n const { api, headers = {}, retry } = config\n\n return {\n capabilities: {\n // Vercel AI routes can do any of these — whether they do depends on\n // your route handler. Omit the field instead of lying.\n },\n createSource: (request: AdapterRequest): StreamSource => {\n const body = {\n messages: request.messages.map(message => ({ role: message.role, content: message.content })),\n tools: request.context?.tools,\n systemPrompt: request.context?.systemPrompt,\n }\n\n return createStreamSource(\n (signal) => fetch(api, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...headers },\n body: JSON.stringify(body),\n signal,\n }),\n parseVercelStream,\n 'API',\n retry,\n )\n },\n }\n}\n","import type {\n AdapterFactory,\n AdapterRequest,\n StreamChunk,\n StreamSource,\n} from '@agentskit/core'\n\nexport type MockResponse = StreamChunk[] | ((request: AdapterRequest) => StreamChunk[])\n\nexport interface MockAdapterOptions {\n /**\n * Static chunks, a request-aware function, or a sequence of responses\n * (the i-th call returns the i-th item, looping when exhausted).\n */\n response: MockResponse | MockResponse[]\n /** ms between yielded chunks. Default 0 (synchronous). */\n delayMs?: number\n /** Track every request the adapter received. Useful for assertions. */\n history?: AdapterRequest[]\n}\n\n/**\n * A deterministic adapter for tests, demos, and dry-run experiments.\n *\n * Conforms to ADR 0001 — Adapter contract:\n * - createSource is pure (A1) — no work until stream() runs\n * - Always emits a terminal chunk (A3)\n * - abort() is safe (A6)\n * - Does not mutate input messages (A7)\n *\n * Examples:\n *\n * // Static\n * const adapter = mockAdapter({\n * response: [\n * { type: 'text', content: 'Hello!' },\n * { type: 'done' },\n * ],\n * })\n *\n * // Request-aware\n * const adapter = mockAdapter({\n * response: req => {\n * const last = req.messages[req.messages.length - 1]?.content ?? ''\n * return [\n * { type: 'text', content: 'Echo: ' + last },\n * { type: 'done' },\n * ]\n * },\n * })\n *\n * // Sequenced — different output each call\n * const adapter = mockAdapter({\n * response: [\n * [{ type: 'text', content: 'first' }, { type: 'done' }],\n * [{ type: 'text', content: 'second' }, { type: 'done' }],\n * ],\n * })\n */\nexport function mockAdapter(options: MockAdapterOptions): AdapterFactory {\n const { response, delayMs = 0, history } = options\n let callIndex = 0\n\n return {\n capabilities: {\n streaming: true,\n tools: true,\n reasoning: true,\n multiModal: true,\n usage: true,\n },\n createSource: (request: AdapterRequest): StreamSource => {\n history?.push(request)\n const myCall = callIndex++\n let cancelled = false\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n const chunks = resolve(response, myCall, request)\n let endedExplicitly = false\n\n for (const chunk of chunks) {\n if (cancelled) return\n if (delayMs > 0) await new Promise(r => setTimeout(r, delayMs))\n yield chunk\n if (chunk.type === 'done' || chunk.type === 'error') {\n endedExplicitly = true\n }\n }\n\n // ADR 0001 A3 — every stream ends with a terminal chunk.\n if (!endedExplicitly) yield { type: 'done' }\n },\n abort: () => {\n cancelled = true\n },\n }\n },\n }\n}\n\nfunction resolve(\n response: MockResponse | MockResponse[],\n callIndex: number,\n request: AdapterRequest,\n): StreamChunk[] {\n if (Array.isArray(response) && response.length > 0 && Array.isArray(response[0])) {\n // Sequenced responses\n const sequence = response as StreamChunk[][]\n const item = sequence[callIndex % sequence.length]\n return item\n }\n if (Array.isArray(response) && response.length > 0 && typeof response[0] === 'function') {\n // Sequenced functions\n const sequence = response as Array<(req: AdapterRequest) => StreamChunk[]>\n return sequence[callIndex % sequence.length](request)\n }\n if (typeof response === 'function') {\n return response(request)\n }\n return response as StreamChunk[]\n}\n\n// ============================================================================\n// Recording / replay\n// ============================================================================\n\nexport interface RecordedTurn {\n /** ISO timestamp when this turn was recorded. */\n recordedAt: string\n /** The request that produced this turn. */\n request: AdapterRequest\n /** Every chunk yielded by the wrapped adapter. */\n chunks: StreamChunk[]\n}\n\nexport type RecordingFixture = RecordedTurn[]\n\nexport interface RecordingSink {\n push(turn: RecordedTurn): void | Promise<void>\n}\n\n/**\n * Wrap a real adapter so every turn is captured to a sink. Use this in\n * dev to build up a fixture, then replay with replayAdapter() in tests.\n */\nexport function recordingAdapter(\n inner: AdapterFactory,\n sink: RecordingSink,\n): AdapterFactory {\n return {\n createSource: (request: AdapterRequest): StreamSource => {\n const innerSource = inner.createSource(request)\n const captured: StreamChunk[] = []\n const recordedAt = new Date().toISOString()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n for await (const chunk of innerSource.stream()) {\n captured.push(chunk)\n yield chunk\n }\n } finally {\n await sink.push({ recordedAt, request, chunks: captured })\n }\n },\n abort: () => innerSource.abort(),\n }\n },\n }\n}\n\n/**\n * In-memory recording sink — useful for tests and ephemeral capture.\n */\nexport function inMemorySink(): RecordingSink & { fixture: RecordingFixture } {\n const fixture: RecordingFixture = []\n return {\n fixture,\n push(turn) {\n fixture.push(turn)\n },\n }\n}\n\n/**\n * Replay an adapter from a recorded fixture. Each turn maps 1:1 to a\n * recorded entry by index — call N replays fixture[N % fixture.length].\n */\nexport function replayAdapter(fixture: RecordingFixture): AdapterFactory {\n if (fixture.length === 0) {\n throw new Error('replayAdapter: fixture is empty')\n }\n return mockAdapter({\n response: fixture.map(turn => turn.chunks),\n })\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OpenAIEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1/models`, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `OpenAI embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `OpenAI embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function openaiEmbedder(config: OpenAIEmbedderConfig): EmbedFn {\n const { apiKey, model = 'text-embedding-3-small', baseUrl = 'https://api.openai.com' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data: Array<{ embedding: number[] }> }\n return data.data[0].embedding\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface GeminiEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1beta/models?key=${apiKey}`)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as {\n models: Array<{ name: string; supportedGenerationMethods: string[] }>\n }\n return data.models\n .filter(m => m.supportedGenerationMethods.includes('embedContent'))\n .map(m => m.name.replace('models/', ''))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `Gemini embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `Gemini embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function geminiEmbedder(config: GeminiEmbedderConfig): EmbedFn {\n const {\n apiKey,\n model = 'text-embedding-004',\n baseUrl = 'https://generativelanguage.googleapis.com',\n } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(\n `${baseUrl}/v1beta/models/${model}:embedContent?key=${apiKey}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: `models/${model}`,\n content: { parts: [{ text }] },\n }),\n },\n )\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { embedding: { values: number[] } }\n return data.embedding.values\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OllamaEmbedderConfig {\n model?: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/api/tags`)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { models: Array<{ name: string }> }\n return data.models\n .map(m => m.name)\n .filter(name => name.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n baseUrl: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `Ollama embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `Ollama embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function ollamaEmbedder(config: OllamaEmbedderConfig): EmbedFn {\n const { model = 'nomic-embed-text', baseUrl = 'http://localhost:11434' } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/api/embed`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as { error?: string }\n const message = errorBody.error ?? `HTTP ${response.status}`\n throw await buildModelError(baseUrl, message)\n }\n\n const data = (await response.json()) as { embeddings: number[][] }\n return data.embeddings[0]\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OpenAICompatibleEmbedderConfig {\n apiKey: string\n model: string\n baseUrl?: string\n}\n\nasync function fetchAvailableModels(baseUrl: string, apiKey: string): Promise<string[]> {\n const response = await fetch(`${baseUrl}/v1/models`, {\n headers: { 'Authorization': `Bearer ${apiKey}` },\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`)\n }\n const data = (await response.json()) as { data: Array<{ id: string }> }\n return data.data\n .map(m => m.id)\n .filter(id => id.includes('embed'))\n .sort()\n}\n\nasync function buildModelError(\n provider: string,\n baseUrl: string,\n apiKey: string,\n originalError: string,\n): Promise<Error> {\n try {\n const models = await fetchAvailableModels(baseUrl, apiKey)\n const list = models.length > 0 ? models.join(', ') : 'none found'\n return new Error(\n `${provider} embedding failed: ${originalError}. Available embedding models: ${list}`,\n )\n } catch (fetchError) {\n return new Error(\n `${provider} embedding failed: ${originalError}. Could not fetch available models: ${(fetchError as Error).message}`,\n )\n }\n}\n\nexport function createOpenAICompatibleEmbedder(provider: string, defaultBaseUrl: string) {\n return function embedder(config: OpenAICompatibleEmbedderConfig): EmbedFn {\n if (!config.model) {\n throw new Error(`Model is required for ${provider}. Pass { model: \"<model-name>\" }.`)\n }\n const { apiKey, model, baseUrl = defaultBaseUrl } = config\n\n return async (text: string): Promise<number[]> => {\n const response = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n\n if (!response.ok) {\n const errorBody = (await response.json().catch(() => ({}))) as {\n error?: { message?: string }\n }\n const message = errorBody.error?.message ?? `HTTP ${response.status}`\n throw await buildModelError(provider, baseUrl, apiKey, message)\n }\n\n const data = (await response.json()) as { data: Array<{ embedding: number[] }> }\n return data.data[0].embedding\n }\n }\n}\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface DeepSeekEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const deepseekEmbedder = createOpenAICompatibleEmbedder('DeepSeek', 'https://api.deepseek.com')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface GrokEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const grokEmbedder = createOpenAICompatibleEmbedder('Grok', 'https://api.x.ai')\n","import { createOpenAICompatibleEmbedder, type OpenAICompatibleEmbedderConfig } from './openai-compatible'\n\nexport interface KimiEmbedderConfig extends OpenAICompatibleEmbedderConfig {}\n\nexport const kimiEmbedder = createOpenAICompatibleEmbedder('Kimi', 'https://api.moonshot.ai')\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentskit/adapters",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "description": "Provider adapters for AgentsKit.",
5
5
  "keywords": [
6
6
  "agentskit",
@@ -39,13 +39,13 @@
39
39
  "dist"
40
40
  ],
41
41
  "dependencies": {
42
- "@agentskit/core": "1.2.0"
42
+ "@agentskit/core": "1.4.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^25.6.0",
46
46
  "msw": "^2.13.4",
47
47
  "tsup": "^8.5.0",
48
- "typescript": "^6.0.2",
48
+ "typescript": "^6.0.3",
49
49
  "vitest": "^4.1.4"
50
50
  },
51
51
  "publishConfig": {