@agentskit/adapters 0.4.0 → 0.4.2

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.js CHANGED
@@ -105,8 +105,13 @@ async function* readNDJSONLines(stream) {
105
105
  }
106
106
  }
107
107
  async function* parseOpenAIStream(stream) {
108
+ const pendingToolCalls = /* @__PURE__ */ new Map();
108
109
  for await (const data of readSSELines(stream)) {
109
110
  if (data === "[DONE]") {
111
+ for (const [, tc] of pendingToolCalls) {
112
+ yield { type: "tool_call", toolCall: { id: tc.id, name: tc.name, args: tc.args || "{}" } };
113
+ }
114
+ pendingToolCalls.clear();
110
115
  yield { type: "done" };
111
116
  return;
112
117
  }
@@ -115,56 +120,104 @@ async function* parseOpenAIStream(stream) {
115
120
  const delta = event.choices?.[0]?.delta;
116
121
  if (typeof delta?.content === "string") {
117
122
  yield { type: "text", content: delta.content };
118
- } else if (Array.isArray(delta?.tool_calls)) {
123
+ }
124
+ if (Array.isArray(delta?.tool_calls)) {
119
125
  for (const toolCall of delta.tool_calls) {
126
+ const index = toolCall.index ?? 0;
127
+ const existing = pendingToolCalls.get(index);
120
128
  if (toolCall?.function?.name) {
121
- yield {
122
- type: "tool_call",
123
- toolCall: {
124
- id: toolCall.id ?? `${toolCall.function.name}-${Date.now()}`,
125
- name: toolCall.function.name,
126
- args: toolCall.function.arguments ?? "{}"
127
- }
128
- };
129
+ pendingToolCalls.set(index, {
130
+ id: toolCall.id ?? existing?.id ?? `tool-${index}-${Date.now()}`,
131
+ name: toolCall.function.name,
132
+ args: (existing?.args ?? "") + (toolCall.function.arguments ?? "")
133
+ });
134
+ } else if (existing && toolCall?.function?.arguments) {
135
+ existing.args += toolCall.function.arguments;
129
136
  }
130
137
  }
131
138
  }
132
139
  } catch {
133
140
  }
134
141
  }
142
+ for (const [, tc] of pendingToolCalls) {
143
+ yield { type: "tool_call", toolCall: { id: tc.id, name: tc.name, args: tc.args || "{}" } };
144
+ }
145
+ pendingToolCalls.clear();
135
146
  yield { type: "done" };
136
147
  }
137
148
  async function* parseAnthropicStream(stream) {
149
+ const pendingToolCalls = /* @__PURE__ */ new Map();
138
150
  for await (const data of readSSELines(stream)) {
139
151
  if (data === "[DONE]") continue;
140
152
  try {
141
153
  const event = JSON.parse(data);
142
- if (event.type === "content_block_delta" && event.delta?.text) {
154
+ if (event.type === "content_block_delta" && event.delta?.type === "text_delta" && event.delta?.text) {
143
155
  yield { type: "text", content: event.delta.text };
156
+ } else if (event.type === "content_block_delta" && event.delta?.type === "input_json_delta") {
157
+ const index = event.index ?? 0;
158
+ const existing = pendingToolCalls.get(index);
159
+ if (existing) {
160
+ existing.args += event.delta.partial_json ?? "";
161
+ }
144
162
  } else if (event.type === "content_block_start" && event.content_block?.type === "tool_use") {
145
- yield {
146
- type: "tool_call",
147
- toolCall: {
148
- id: event.content_block.id,
149
- name: event.content_block.name,
150
- args: JSON.stringify(event.content_block.input ?? {})
151
- }
152
- };
163
+ const index = event.index ?? 0;
164
+ pendingToolCalls.set(index, {
165
+ id: event.content_block.id,
166
+ name: event.content_block.name,
167
+ args: ""
168
+ });
169
+ } else if (event.type === "content_block_stop") {
170
+ const index = event.index ?? 0;
171
+ const tc = pendingToolCalls.get(index);
172
+ if (tc) {
173
+ yield {
174
+ type: "tool_call",
175
+ toolCall: {
176
+ id: tc.id,
177
+ name: tc.name,
178
+ args: tc.args || "{}"
179
+ }
180
+ };
181
+ pendingToolCalls.delete(index);
182
+ }
153
183
  } else if (event.type === "message_stop") {
184
+ for (const [, tc] of pendingToolCalls) {
185
+ yield { type: "tool_call", toolCall: { id: tc.id, name: tc.name, args: tc.args || "{}" } };
186
+ }
187
+ pendingToolCalls.clear();
154
188
  yield { type: "done" };
155
189
  return;
156
190
  }
157
191
  } catch {
158
192
  }
159
193
  }
194
+ for (const [, tc] of pendingToolCalls) {
195
+ yield { type: "tool_call", toolCall: { id: tc.id, name: tc.name, args: tc.args || "{}" } };
196
+ }
197
+ pendingToolCalls.clear();
160
198
  yield { type: "done" };
161
199
  }
162
200
  async function* parseGeminiStream(stream) {
163
201
  for await (const data of readSSELines(stream)) {
164
202
  try {
165
203
  const event = JSON.parse(data);
166
- const text = event.candidates?.[0]?.content?.parts?.map((part) => part.text ?? "").join("");
167
- if (text) yield { type: "text", content: text };
204
+ const parts = event.candidates?.[0]?.content?.parts;
205
+ if (!Array.isArray(parts)) continue;
206
+ for (const part of parts) {
207
+ if (typeof part.text === "string" && part.text) {
208
+ yield { type: "text", content: part.text };
209
+ } else if (part.functionCall) {
210
+ const fc = part.functionCall;
211
+ yield {
212
+ type: "tool_call",
213
+ toolCall: {
214
+ id: fc.id ?? `${fc.name}-${Date.now()}`,
215
+ name: fc.name,
216
+ args: JSON.stringify(fc.args ?? {})
217
+ }
218
+ };
219
+ }
220
+ }
168
221
  } catch {
169
222
  }
170
223
  }
@@ -177,6 +230,20 @@ async function* parseOllamaStream(stream) {
177
230
  if (event.message?.content) {
178
231
  yield { type: "text", content: event.message.content };
179
232
  }
233
+ if (Array.isArray(event.message?.tool_calls)) {
234
+ for (const tc of event.message.tool_calls) {
235
+ if (tc?.function?.name) {
236
+ yield {
237
+ type: "tool_call",
238
+ toolCall: {
239
+ id: tc.id ?? `${tc.function.name}-${Date.now()}`,
240
+ name: tc.function.name,
241
+ args: typeof tc.function.arguments === "string" ? tc.function.arguments : JSON.stringify(tc.function.arguments ?? {})
242
+ }
243
+ };
244
+ }
245
+ }
246
+ }
180
247
  if (event.done) {
181
248
  yield { type: "done" };
182
249
  return;
@@ -469,6 +536,200 @@ function vercelAI(config) {
469
536
  };
470
537
  }
471
538
 
472
- export { anthropic, createAdapter, deepseek, gemini, generic, grok, kimi, langchain, langgraph, ollama, openai, vercelAI };
539
+ // src/embedders/openai.ts
540
+ async function fetchAvailableModels(baseUrl, apiKey) {
541
+ const response = await fetch(`${baseUrl}/v1/models`, {
542
+ headers: { "Authorization": `Bearer ${apiKey}` }
543
+ });
544
+ if (!response.ok) {
545
+ throw new Error(`HTTP ${response.status}`);
546
+ }
547
+ const data = await response.json();
548
+ return data.data.map((m) => m.id).filter((id) => id.includes("embed")).sort();
549
+ }
550
+ async function buildModelError(baseUrl, apiKey, originalError) {
551
+ try {
552
+ const models = await fetchAvailableModels(baseUrl, apiKey);
553
+ const list = models.length > 0 ? models.join(", ") : "none found";
554
+ return new Error(
555
+ `OpenAI embedding failed: ${originalError}. Available embedding models: ${list}`
556
+ );
557
+ } catch (fetchError) {
558
+ return new Error(
559
+ `OpenAI embedding failed: ${originalError}. Could not fetch available models: ${fetchError.message}`
560
+ );
561
+ }
562
+ }
563
+ function openaiEmbedder(config) {
564
+ const { apiKey, model = "text-embedding-3-small", baseUrl = "https://api.openai.com" } = config;
565
+ return async (text) => {
566
+ const response = await fetch(`${baseUrl}/v1/embeddings`, {
567
+ method: "POST",
568
+ headers: {
569
+ "Content-Type": "application/json",
570
+ "Authorization": `Bearer ${apiKey}`
571
+ },
572
+ body: JSON.stringify({ model, input: text })
573
+ });
574
+ if (!response.ok) {
575
+ const errorBody = await response.json().catch(() => ({}));
576
+ const message = errorBody.error?.message ?? `HTTP ${response.status}`;
577
+ throw await buildModelError(baseUrl, apiKey, message);
578
+ }
579
+ const data = await response.json();
580
+ return data.data[0].embedding;
581
+ };
582
+ }
583
+
584
+ // src/embedders/gemini.ts
585
+ async function fetchAvailableModels2(baseUrl, apiKey) {
586
+ const response = await fetch(`${baseUrl}/v1beta/models?key=${apiKey}`);
587
+ if (!response.ok) {
588
+ throw new Error(`HTTP ${response.status}`);
589
+ }
590
+ const data = await response.json();
591
+ return data.models.filter((m) => m.supportedGenerationMethods.includes("embedContent")).map((m) => m.name.replace("models/", "")).sort();
592
+ }
593
+ async function buildModelError2(baseUrl, apiKey, originalError) {
594
+ try {
595
+ const models = await fetchAvailableModels2(baseUrl, apiKey);
596
+ const list = models.length > 0 ? models.join(", ") : "none found";
597
+ return new Error(
598
+ `Gemini embedding failed: ${originalError}. Available embedding models: ${list}`
599
+ );
600
+ } catch (fetchError) {
601
+ return new Error(
602
+ `Gemini embedding failed: ${originalError}. Could not fetch available models: ${fetchError.message}`
603
+ );
604
+ }
605
+ }
606
+ function geminiEmbedder(config) {
607
+ const {
608
+ apiKey,
609
+ model = "text-embedding-004",
610
+ baseUrl = "https://generativelanguage.googleapis.com"
611
+ } = config;
612
+ return async (text) => {
613
+ const response = await fetch(
614
+ `${baseUrl}/v1beta/models/${model}:embedContent?key=${apiKey}`,
615
+ {
616
+ method: "POST",
617
+ headers: { "Content-Type": "application/json" },
618
+ body: JSON.stringify({
619
+ model: `models/${model}`,
620
+ content: { parts: [{ text }] }
621
+ })
622
+ }
623
+ );
624
+ if (!response.ok) {
625
+ const errorBody = await response.json().catch(() => ({}));
626
+ const message = errorBody.error?.message ?? `HTTP ${response.status}`;
627
+ throw await buildModelError2(baseUrl, apiKey, message);
628
+ }
629
+ const data = await response.json();
630
+ return data.embedding.values;
631
+ };
632
+ }
633
+
634
+ // src/embedders/ollama.ts
635
+ async function fetchAvailableModels3(baseUrl) {
636
+ const response = await fetch(`${baseUrl}/api/tags`);
637
+ if (!response.ok) {
638
+ throw new Error(`HTTP ${response.status}`);
639
+ }
640
+ const data = await response.json();
641
+ return data.models.map((m) => m.name).filter((name) => name.includes("embed")).sort();
642
+ }
643
+ async function buildModelError3(baseUrl, originalError) {
644
+ try {
645
+ const models = await fetchAvailableModels3(baseUrl);
646
+ const list = models.length > 0 ? models.join(", ") : "none found";
647
+ return new Error(
648
+ `Ollama embedding failed: ${originalError}. Available embedding models: ${list}`
649
+ );
650
+ } catch (fetchError) {
651
+ return new Error(
652
+ `Ollama embedding failed: ${originalError}. Could not fetch available models: ${fetchError.message}`
653
+ );
654
+ }
655
+ }
656
+ function ollamaEmbedder(config) {
657
+ const { model = "nomic-embed-text", baseUrl = "http://localhost:11434" } = config;
658
+ return async (text) => {
659
+ const response = await fetch(`${baseUrl}/api/embed`, {
660
+ method: "POST",
661
+ headers: { "Content-Type": "application/json" },
662
+ body: JSON.stringify({ model, input: text })
663
+ });
664
+ if (!response.ok) {
665
+ const errorBody = await response.json().catch(() => ({}));
666
+ const message = errorBody.error ?? `HTTP ${response.status}`;
667
+ throw await buildModelError3(baseUrl, message);
668
+ }
669
+ const data = await response.json();
670
+ return data.embeddings[0];
671
+ };
672
+ }
673
+
674
+ // src/embedders/openai-compatible.ts
675
+ async function fetchAvailableModels4(baseUrl, apiKey) {
676
+ const response = await fetch(`${baseUrl}/v1/models`, {
677
+ headers: { "Authorization": `Bearer ${apiKey}` }
678
+ });
679
+ if (!response.ok) {
680
+ throw new Error(`HTTP ${response.status}`);
681
+ }
682
+ const data = await response.json();
683
+ return data.data.map((m) => m.id).filter((id) => id.includes("embed")).sort();
684
+ }
685
+ async function buildModelError4(provider, baseUrl, apiKey, originalError) {
686
+ try {
687
+ const models = await fetchAvailableModels4(baseUrl, apiKey);
688
+ const list = models.length > 0 ? models.join(", ") : "none found";
689
+ return new Error(
690
+ `${provider} embedding failed: ${originalError}. Available embedding models: ${list}`
691
+ );
692
+ } catch (fetchError) {
693
+ return new Error(
694
+ `${provider} embedding failed: ${originalError}. Could not fetch available models: ${fetchError.message}`
695
+ );
696
+ }
697
+ }
698
+ function createOpenAICompatibleEmbedder(provider, defaultBaseUrl) {
699
+ return function embedder(config) {
700
+ if (!config.model) {
701
+ throw new Error(`Model is required for ${provider}. Pass { model: "<model-name>" }.`);
702
+ }
703
+ const { apiKey, model, baseUrl = defaultBaseUrl } = config;
704
+ return async (text) => {
705
+ const response = await fetch(`${baseUrl}/v1/embeddings`, {
706
+ method: "POST",
707
+ headers: {
708
+ "Content-Type": "application/json",
709
+ "Authorization": `Bearer ${apiKey}`
710
+ },
711
+ body: JSON.stringify({ model, input: text })
712
+ });
713
+ if (!response.ok) {
714
+ const errorBody = await response.json().catch(() => ({}));
715
+ const message = errorBody.error?.message ?? `HTTP ${response.status}`;
716
+ throw await buildModelError4(provider, baseUrl, apiKey, message);
717
+ }
718
+ const data = await response.json();
719
+ return data.data[0].embedding;
720
+ };
721
+ };
722
+ }
723
+
724
+ // src/embedders/deepseek.ts
725
+ var deepseekEmbedder = createOpenAICompatibleEmbedder("DeepSeek", "https://api.deepseek.com");
726
+
727
+ // src/embedders/grok.ts
728
+ var grokEmbedder = createOpenAICompatibleEmbedder("Grok", "https://api.x.ai");
729
+
730
+ // src/embedders/kimi.ts
731
+ var kimiEmbedder = createOpenAICompatibleEmbedder("Kimi", "https://api.moonshot.ai");
732
+
733
+ export { anthropic, createAdapter, createOpenAICompatibleEmbedder, deepseek, deepseekEmbedder, gemini, geminiEmbedder, generic, grok, grokEmbedder, kimi, kimiEmbedder, langchain, langgraph, ollama, ollamaEmbedder, openai, openaiEmbedder, vercelAI };
473
734
  //# sourceMappingURL=index.js.map
474
735
  //# sourceMappingURL=index.js.map
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"],"names":[],"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 role: message.role,\n 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 for await (const data of readSSELines(stream)) {\n if (data === '[DONE]') {\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 } else if (Array.isArray(delta?.tool_calls)) {\n for (const toolCall of delta.tool_calls) {\n if (toolCall?.function?.name) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: toolCall.id ?? `${toolCall.function.name}-${Date.now()}`,\n name: toolCall.function.name,\n args: toolCall.function.arguments ?? '{}',\n },\n }\n }\n }\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n yield { type: 'done' }\n}\n\nexport async function* parseAnthropicStream(stream: ReadableStream): AsyncIterableIterator<StreamChunk> {\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?.text) {\n yield { type: 'text', content: event.delta.text }\n } else if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {\n yield {\n type: 'tool_call',\n toolCall: {\n id: event.content_block.id,\n name: event.content_block.name,\n args: JSON.stringify(event.content_block.input ?? {}),\n },\n }\n } else if (event.type === 'message_stop') {\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\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 text = event.candidates?.[0]?.content?.parts\n ?.map((part: { text?: string }) => part.text ?? '')\n .join('')\n if (text) yield { type: 'text', content: text }\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 (event.done) {\n yield { type: 'done' }\n return\n }\n } catch {\n // Ignore malformed events.\n }\n }\n\n yield { type: 'done' }\n}\n\nexport function createStreamSource(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n parse: (stream: ReadableStream) => AsyncIterableIterator<StreamChunk>,\n errorLabel: string,\n): StreamSource {\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const response = await doFetch(abortController!.signal)\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","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseAnthropicStream } from './utils'\n\nexport interface AnthropicConfig {\n apiKey: string\n model: string\n baseUrl?: string\n maxTokens?: number\n}\n\nexport function anthropic(config: AnthropicConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.anthropic.com', maxTokens = 4096 } = config\n\n return {\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 )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseOpenAIStream, toProviderMessages } from './utils'\n\nexport interface OpenAIConfig {\n apiKey: string\n model: string\n baseUrl?: string\n}\n\nexport function openai(config: OpenAIConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.openai.com' } = config\n\n return {\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 )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseGeminiStream } from './utils'\n\nexport interface GeminiConfig {\n apiKey: string\n model: string\n baseUrl?: string\n}\n\nexport function gemini(config: GeminiConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://generativelanguage.googleapis.com' } = config\n\n return {\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 )\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 } from './utils'\n\nexport interface OllamaConfig {\n model: string\n baseUrl?: string\n}\n\nexport function ollama(config: OllamaConfig): AdapterFactory {\n const { model, baseUrl = 'http://localhost:11434' } = config\n\n return {\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 )\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 } from './utils'\n\nexport interface VercelAIConfig {\n api: string\n headers?: Record<string, string>\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 = {} } = config\n\n return {\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 )\n },\n }\n}\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/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":["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 role: message.role,\n 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\nexport function createStreamSource(\n doFetch: (signal: AbortSignal) => Promise<Response>,\n parse: (stream: ReadableStream) => AsyncIterableIterator<StreamChunk>,\n errorLabel: string,\n): StreamSource {\n let abortController: AbortController | null = new AbortController()\n\n return {\n stream: async function* (): AsyncIterableIterator<StreamChunk> {\n try {\n const response = await doFetch(abortController!.signal)\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","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseAnthropicStream } from './utils'\n\nexport interface AnthropicConfig {\n apiKey: string\n model: string\n baseUrl?: string\n maxTokens?: number\n}\n\nexport function anthropic(config: AnthropicConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.anthropic.com', maxTokens = 4096 } = config\n\n return {\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 )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseOpenAIStream, toProviderMessages } from './utils'\n\nexport interface OpenAIConfig {\n apiKey: string\n model: string\n baseUrl?: string\n}\n\nexport function openai(config: OpenAIConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://api.openai.com' } = config\n\n return {\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 )\n },\n }\n}\n","import type { AdapterFactory, AdapterRequest, StreamSource } from '@agentskit/core'\nimport { createStreamSource, parseGeminiStream } from './utils'\n\nexport interface GeminiConfig {\n apiKey: string\n model: string\n baseUrl?: string\n}\n\nexport function gemini(config: GeminiConfig): AdapterFactory {\n const { apiKey, model, baseUrl = 'https://generativelanguage.googleapis.com' } = config\n\n return {\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 )\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 } from './utils'\n\nexport interface OllamaConfig {\n model: string\n baseUrl?: string\n}\n\nexport function ollama(config: OllamaConfig): AdapterFactory {\n const { model, baseUrl = 'http://localhost:11434' } = config\n\n return {\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 )\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 } from './utils'\n\nexport interface VercelAIConfig {\n api: string\n headers?: Record<string, string>\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 = {} } = config\n\n return {\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 )\n },\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,7 +1,19 @@
1
1
  {
2
2
  "name": "@agentskit/adapters",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Provider adapters for AgentsKit.",
5
+ "keywords": [
6
+ "agentskit",
7
+ "ai",
8
+ "agents",
9
+ "llm",
10
+ "chat",
11
+ "typescript",
12
+ "openai",
13
+ "anthropic",
14
+ "embeddings",
15
+ "providers"
16
+ ],
5
17
  "type": "module",
6
18
  "main": "./dist/index.cjs",
7
19
  "module": "./dist/index.js",
@@ -17,12 +29,13 @@
17
29
  "dist"
18
30
  ],
19
31
  "dependencies": {
20
- "@agentskit/core": "0.4.0"
32
+ "@agentskit/core": "0.4.2"
21
33
  },
22
34
  "devDependencies": {
23
- "@types/node": "^24.0.0",
35
+ "@types/node": "^25.5.2",
36
+ "msw": "^2.8.4",
24
37
  "tsup": "^8.5.0",
25
- "typescript": "^5.9.2",
38
+ "typescript": "^6.0.2",
26
39
  "vitest": "^4.1.2"
27
40
  },
28
41
  "publishConfig": {