@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/README.md +63 -0
- package/dist/index.cjs +288 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +41 -2
- package/dist/index.d.ts +41 -2
- package/dist/index.js +282 -21
- package/dist/index.js.map +1 -1
- package/package.json +17 -4
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
|
-
}
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
|
167
|
-
if (
|
|
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
|
-
|
|
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.
|
|
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.
|
|
32
|
+
"@agentskit/core": "0.4.2"
|
|
21
33
|
},
|
|
22
34
|
"devDependencies": {
|
|
23
|
-
"@types/node": "^
|
|
35
|
+
"@types/node": "^25.5.2",
|
|
36
|
+
"msw": "^2.8.4",
|
|
24
37
|
"tsup": "^8.5.0",
|
|
25
|
-
"typescript": "^
|
|
38
|
+
"typescript": "^6.0.2",
|
|
26
39
|
"vitest": "^4.1.2"
|
|
27
40
|
},
|
|
28
41
|
"publishConfig": {
|