@clinebot/llms 0.0.20 → 0.0.21
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/config-browser.d.ts +1 -0
- package/dist/config-browser.d.ts.map +1 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/index.browser.d.ts +1 -0
- package/dist/index.browser.d.ts.map +1 -0
- package/dist/index.browser.js +5 -5
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -12
- package/dist/models/generated-access.d.ts +1 -0
- package/dist/models/generated-access.d.ts.map +1 -0
- package/dist/models/generated-provider-loaders.d.ts +1 -0
- package/dist/models/generated-provider-loaders.d.ts.map +1 -0
- package/dist/models/generated.d.ts +1 -0
- package/dist/models/generated.d.ts.map +1 -0
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/models-dev-catalog.d.ts +1 -0
- package/dist/models/models-dev-catalog.d.ts.map +1 -0
- package/dist/models/providers/aihubmix.d.ts +1 -0
- package/dist/models/providers/aihubmix.d.ts.map +1 -0
- package/dist/models/providers/anthropic.d.ts +1 -0
- package/dist/models/providers/anthropic.d.ts.map +1 -0
- package/dist/models/providers/asksage.d.ts +1 -0
- package/dist/models/providers/asksage.d.ts.map +1 -0
- package/dist/models/providers/baseten.d.ts +1 -0
- package/dist/models/providers/baseten.d.ts.map +1 -0
- package/dist/models/providers/bedrock.d.ts +1 -0
- package/dist/models/providers/bedrock.d.ts.map +1 -0
- package/dist/models/providers/cerebras.d.ts +1 -0
- package/dist/models/providers/cerebras.d.ts.map +1 -0
- package/dist/models/providers/claude-code.d.ts +1 -0
- package/dist/models/providers/claude-code.d.ts.map +1 -0
- package/dist/models/providers/cline.d.ts +1 -0
- package/dist/models/providers/cline.d.ts.map +1 -0
- package/dist/models/providers/deepseek.d.ts +1 -0
- package/dist/models/providers/deepseek.d.ts.map +1 -0
- package/dist/models/providers/dify.d.ts +1 -0
- package/dist/models/providers/dify.d.ts.map +1 -0
- package/dist/models/providers/doubao.d.ts +1 -0
- package/dist/models/providers/doubao.d.ts.map +1 -0
- package/dist/models/providers/fireworks.d.ts +1 -0
- package/dist/models/providers/fireworks.d.ts.map +1 -0
- package/dist/models/providers/gemini.d.ts +1 -0
- package/dist/models/providers/gemini.d.ts.map +1 -0
- package/dist/models/providers/groq.d.ts +1 -0
- package/dist/models/providers/groq.d.ts.map +1 -0
- package/dist/models/providers/hicap.d.ts +1 -0
- package/dist/models/providers/hicap.d.ts.map +1 -0
- package/dist/models/providers/huawei-cloud-maas.d.ts +1 -0
- package/dist/models/providers/huawei-cloud-maas.d.ts.map +1 -0
- package/dist/models/providers/huggingface.d.ts +1 -0
- package/dist/models/providers/huggingface.d.ts.map +1 -0
- package/dist/models/providers/index.d.ts +1 -0
- package/dist/models/providers/index.d.ts.map +1 -0
- package/dist/models/providers/litellm.d.ts +1 -0
- package/dist/models/providers/litellm.d.ts.map +1 -0
- package/dist/models/providers/lmstudio.d.ts +1 -0
- package/dist/models/providers/lmstudio.d.ts.map +1 -0
- package/dist/models/providers/minimax.d.ts +1 -0
- package/dist/models/providers/minimax.d.ts.map +1 -0
- package/dist/models/providers/mistral.d.ts +1 -0
- package/dist/models/providers/mistral.d.ts.map +1 -0
- package/dist/models/providers/moonshot.d.ts +1 -0
- package/dist/models/providers/moonshot.d.ts.map +1 -0
- package/dist/models/providers/nebius.d.ts +1 -0
- package/dist/models/providers/nebius.d.ts.map +1 -0
- package/dist/models/providers/nous-research.d.ts +1 -0
- package/dist/models/providers/nous-research.d.ts.map +1 -0
- package/dist/models/providers/oca.d.ts +1 -0
- package/dist/models/providers/oca.d.ts.map +1 -0
- package/dist/models/providers/ollama.d.ts +1 -0
- package/dist/models/providers/ollama.d.ts.map +1 -0
- package/dist/models/providers/openai-codex.d.ts +1 -0
- package/dist/models/providers/openai-codex.d.ts.map +1 -0
- package/dist/models/providers/openai.d.ts +1 -0
- package/dist/models/providers/openai.d.ts.map +1 -0
- package/dist/models/providers/opencode.d.ts +1 -0
- package/dist/models/providers/opencode.d.ts.map +1 -0
- package/dist/models/providers/openrouter.d.ts +1 -0
- package/dist/models/providers/openrouter.d.ts.map +1 -0
- package/dist/models/providers/qwen-code.d.ts +1 -0
- package/dist/models/providers/qwen-code.d.ts.map +1 -0
- package/dist/models/providers/qwen.d.ts +1 -0
- package/dist/models/providers/qwen.d.ts.map +1 -0
- package/dist/models/providers/requesty.d.ts +1 -0
- package/dist/models/providers/requesty.d.ts.map +1 -0
- package/dist/models/providers/sambanova.d.ts +1 -0
- package/dist/models/providers/sambanova.d.ts.map +1 -0
- package/dist/models/providers/sapaicore.d.ts +1 -0
- package/dist/models/providers/sapaicore.d.ts.map +1 -0
- package/dist/models/providers/together.d.ts +1 -0
- package/dist/models/providers/together.d.ts.map +1 -0
- package/dist/models/providers/vercel-ai-gateway.d.ts +1 -0
- package/dist/models/providers/vercel-ai-gateway.d.ts.map +1 -0
- package/dist/models/providers/vertex.d.ts +1 -0
- package/dist/models/providers/vertex.d.ts.map +1 -0
- package/dist/models/providers/xai.d.ts +1 -0
- package/dist/models/providers/xai.d.ts.map +1 -0
- package/dist/models/providers/zai.d.ts +1 -0
- package/dist/models/providers/zai.d.ts.map +1 -0
- package/dist/models/query.d.ts +1 -0
- package/dist/models/query.d.ts.map +1 -0
- package/dist/models/registry.d.ts +1 -0
- package/dist/models/registry.d.ts.map +1 -0
- package/dist/models/schemas/index.d.ts +1 -0
- package/dist/models/schemas/index.d.ts.map +1 -0
- package/dist/models/schemas/model.d.ts +1 -0
- package/dist/models/schemas/model.d.ts.map +1 -0
- package/dist/models/schemas/query.d.ts +1 -0
- package/dist/models/schemas/query.d.ts.map +1 -0
- package/dist/providers/handlers/ai-sdk-community.d.ts +1 -0
- package/dist/providers/handlers/ai-sdk-community.d.ts.map +1 -0
- package/dist/providers/handlers/ai-sdk-provider-base.d.ts +1 -0
- package/dist/providers/handlers/ai-sdk-provider-base.d.ts.map +1 -0
- package/dist/providers/handlers/anthropic-base.d.ts +1 -0
- package/dist/providers/handlers/anthropic-base.d.ts.map +1 -0
- package/dist/providers/handlers/asksage.d.ts +1 -0
- package/dist/providers/handlers/asksage.d.ts.map +1 -0
- package/dist/providers/handlers/auth.d.ts +1 -0
- package/dist/providers/handlers/auth.d.ts.map +1 -0
- package/dist/providers/handlers/base.d.ts +1 -0
- package/dist/providers/handlers/base.d.ts.map +1 -0
- package/dist/providers/handlers/bedrock-base.d.ts +1 -0
- package/dist/providers/handlers/bedrock-base.d.ts.map +1 -0
- package/dist/providers/handlers/bedrock-client.d.ts +1 -0
- package/dist/providers/handlers/bedrock-client.d.ts.map +1 -0
- package/dist/providers/handlers/community-sdk.d.ts +1 -0
- package/dist/providers/handlers/community-sdk.d.ts.map +1 -0
- package/dist/providers/handlers/fetch-base.d.ts +1 -0
- package/dist/providers/handlers/fetch-base.d.ts.map +1 -0
- package/dist/providers/handlers/gemini-base.d.ts +1 -0
- package/dist/providers/handlers/gemini-base.d.ts.map +1 -0
- package/dist/providers/handlers/index.d.ts +1 -0
- package/dist/providers/handlers/index.d.ts.map +1 -0
- package/dist/providers/handlers/openai-base.d.ts +1 -0
- package/dist/providers/handlers/openai-base.d.ts.map +1 -0
- package/dist/providers/handlers/openai-responses.d.ts +1 -0
- package/dist/providers/handlers/openai-responses.d.ts.map +1 -0
- package/dist/providers/handlers/providers.d.ts +1 -0
- package/dist/providers/handlers/providers.d.ts.map +1 -0
- package/dist/providers/handlers/r1-base.d.ts +1 -0
- package/dist/providers/handlers/r1-base.d.ts.map +1 -0
- package/dist/providers/handlers/registry.d.ts +1 -0
- package/dist/providers/handlers/registry.d.ts.map +1 -0
- package/dist/providers/handlers/vertex.d.ts +1 -0
- package/dist/providers/handlers/vertex.d.ts.map +1 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/public.browser.d.ts +1 -0
- package/dist/providers/public.browser.d.ts.map +1 -0
- package/dist/providers/public.d.ts +1 -0
- package/dist/providers/public.d.ts.map +1 -0
- package/dist/providers/shared/openai-compatible.d.ts +1 -0
- package/dist/providers/shared/openai-compatible.d.ts.map +1 -0
- package/dist/providers/transform/ai-sdk-community-format.d.ts +1 -0
- package/dist/providers/transform/ai-sdk-community-format.d.ts.map +1 -0
- package/dist/providers/transform/anthropic-format.d.ts +1 -0
- package/dist/providers/transform/anthropic-format.d.ts.map +1 -0
- package/dist/providers/transform/content-format.d.ts +1 -0
- package/dist/providers/transform/content-format.d.ts.map +1 -0
- package/dist/providers/transform/gemini-format.d.ts +1 -0
- package/dist/providers/transform/gemini-format.d.ts.map +1 -0
- package/dist/providers/transform/index.d.ts +1 -0
- package/dist/providers/transform/index.d.ts.map +1 -0
- package/dist/providers/transform/openai-format.d.ts +1 -0
- package/dist/providers/transform/openai-format.d.ts.map +1 -0
- package/dist/providers/transform/r1-format.d.ts +1 -0
- package/dist/providers/transform/r1-format.d.ts.map +1 -0
- package/dist/providers/types/config.d.ts +1 -0
- package/dist/providers/types/config.d.ts.map +1 -0
- package/dist/providers/types/handler.d.ts +1 -0
- package/dist/providers/types/handler.d.ts.map +1 -0
- package/dist/providers/types/index.d.ts +1 -0
- package/dist/providers/types/index.d.ts.map +1 -0
- package/dist/providers/types/messages.d.ts +1 -0
- package/dist/providers/types/messages.d.ts.map +1 -0
- package/dist/providers/types/model-info.d.ts +1 -0
- package/dist/providers/types/model-info.d.ts.map +1 -0
- package/dist/providers/types/provider-ids.d.ts +1 -1
- package/dist/providers/types/provider-ids.d.ts.map +1 -0
- package/dist/providers/types/settings.d.ts +1 -0
- package/dist/providers/types/settings.d.ts.map +1 -0
- package/dist/providers/types/stream.d.ts +1 -0
- package/dist/providers/types/stream.d.ts.map +1 -0
- package/dist/providers/utils/index.d.ts +1 -0
- package/dist/providers/utils/index.d.ts.map +1 -0
- package/dist/providers/utils/retry.d.ts +1 -0
- package/dist/providers/utils/retry.d.ts.map +1 -0
- package/dist/providers/utils/stream-processor.d.ts +1 -0
- package/dist/providers/utils/stream-processor.d.ts.map +1 -0
- package/dist/providers/utils/tool-processor.d.ts +1 -0
- package/dist/providers/utils/tool-processor.d.ts.map +1 -0
- package/dist/sdk.d.ts +1 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +2 -3
- package/src/catalog.ts +0 -20
- package/src/config-browser.ts +0 -11
- package/src/config.ts +0 -49
- package/src/index.browser.ts +0 -9
- package/src/index.ts +0 -10
- package/src/live-providers.test.ts +0 -138
- package/src/models/generated-access.ts +0 -41
- package/src/models/generated-provider-loaders.ts +0 -166
- package/src/models/generated.ts +0 -11785
- package/src/models/index.ts +0 -271
- package/src/models/models-dev-catalog.test.ts +0 -161
- package/src/models/models-dev-catalog.ts +0 -168
- package/src/models/providers/aihubmix.ts +0 -19
- package/src/models/providers/anthropic.ts +0 -60
- package/src/models/providers/asksage.ts +0 -19
- package/src/models/providers/baseten.ts +0 -21
- package/src/models/providers/bedrock.ts +0 -30
- package/src/models/providers/cerebras.ts +0 -24
- package/src/models/providers/claude-code.ts +0 -51
- package/src/models/providers/cline.ts +0 -25
- package/src/models/providers/deepseek.ts +0 -33
- package/src/models/providers/dify.ts +0 -17
- package/src/models/providers/doubao.ts +0 -33
- package/src/models/providers/fireworks.ts +0 -34
- package/src/models/providers/gemini.ts +0 -43
- package/src/models/providers/groq.ts +0 -33
- package/src/models/providers/hicap.ts +0 -18
- package/src/models/providers/huawei-cloud-maas.ts +0 -18
- package/src/models/providers/huggingface.ts +0 -22
- package/src/models/providers/index.ts +0 -162
- package/src/models/providers/litellm.ts +0 -19
- package/src/models/providers/lmstudio.ts +0 -22
- package/src/models/providers/minimax.ts +0 -34
- package/src/models/providers/mistral.ts +0 -19
- package/src/models/providers/moonshot.ts +0 -34
- package/src/models/providers/nebius.ts +0 -24
- package/src/models/providers/nous-research.ts +0 -21
- package/src/models/providers/oca.ts +0 -30
- package/src/models/providers/ollama.ts +0 -18
- package/src/models/providers/openai-codex.ts +0 -46
- package/src/models/providers/openai.ts +0 -43
- package/src/models/providers/opencode.ts +0 -28
- package/src/models/providers/openrouter.ts +0 -24
- package/src/models/providers/qwen-code.ts +0 -33
- package/src/models/providers/qwen.ts +0 -34
- package/src/models/providers/requesty.ts +0 -23
- package/src/models/providers/sambanova.ts +0 -23
- package/src/models/providers/sapaicore.ts +0 -34
- package/src/models/providers/together.ts +0 -35
- package/src/models/providers/vercel-ai-gateway.ts +0 -23
- package/src/models/providers/vertex.ts +0 -36
- package/src/models/providers/xai.ts +0 -34
- package/src/models/providers/zai.ts +0 -25
- package/src/models/query.ts +0 -407
- package/src/models/registry.ts +0 -511
- package/src/models/schemas/index.ts +0 -62
- package/src/models/schemas/model.ts +0 -308
- package/src/models/schemas/query.ts +0 -336
- package/src/providers/browser.ts +0 -4
- package/src/providers/handlers/ai-sdk-community.ts +0 -229
- package/src/providers/handlers/ai-sdk-provider-base.ts +0 -203
- package/src/providers/handlers/anthropic-base.test.ts +0 -30
- package/src/providers/handlers/anthropic-base.ts +0 -387
- package/src/providers/handlers/asksage.test.ts +0 -103
- package/src/providers/handlers/asksage.ts +0 -138
- package/src/providers/handlers/auth.test.ts +0 -19
- package/src/providers/handlers/auth.ts +0 -121
- package/src/providers/handlers/base.test.ts +0 -230
- package/src/providers/handlers/base.ts +0 -310
- package/src/providers/handlers/bedrock-base.ts +0 -390
- package/src/providers/handlers/bedrock-client.ts +0 -100
- package/src/providers/handlers/codex.test.ts +0 -160
- package/src/providers/handlers/community-sdk.test.ts +0 -321
- package/src/providers/handlers/community-sdk.ts +0 -391
- package/src/providers/handlers/fetch-base.ts +0 -68
- package/src/providers/handlers/gemini-base.test.ts +0 -261
- package/src/providers/handlers/gemini-base.ts +0 -307
- package/src/providers/handlers/index.ts +0 -67
- package/src/providers/handlers/openai-base.ts +0 -341
- package/src/providers/handlers/openai-responses.test.ts +0 -259
- package/src/providers/handlers/openai-responses.ts +0 -634
- package/src/providers/handlers/providers.test.ts +0 -120
- package/src/providers/handlers/providers.ts +0 -563
- package/src/providers/handlers/r1-base.ts +0 -283
- package/src/providers/handlers/registry.ts +0 -185
- package/src/providers/handlers/vertex.test.ts +0 -124
- package/src/providers/handlers/vertex.ts +0 -302
- package/src/providers/index.ts +0 -534
- package/src/providers/public.browser.ts +0 -20
- package/src/providers/public.ts +0 -51
- package/src/providers/shared/openai-compatible.ts +0 -63
- package/src/providers/transform/ai-sdk-community-format.test.ts +0 -73
- package/src/providers/transform/ai-sdk-community-format.ts +0 -115
- package/src/providers/transform/anthropic-format.ts +0 -230
- package/src/providers/transform/content-format.ts +0 -34
- package/src/providers/transform/format-conversion.test.ts +0 -413
- package/src/providers/transform/gemini-format.ts +0 -262
- package/src/providers/transform/index.ts +0 -22
- package/src/providers/transform/openai-format.ts +0 -290
- package/src/providers/transform/r1-format.ts +0 -287
- package/src/providers/types/config.ts +0 -396
- package/src/providers/types/handler.ts +0 -92
- package/src/providers/types/index.ts +0 -120
- package/src/providers/types/messages.ts +0 -162
- package/src/providers/types/model-info.test.ts +0 -57
- package/src/providers/types/model-info.ts +0 -65
- package/src/providers/types/provider-ids.test.ts +0 -12
- package/src/providers/types/provider-ids.ts +0 -89
- package/src/providers/types/settings.test.ts +0 -49
- package/src/providers/types/settings.ts +0 -533
- package/src/providers/types/stream.ts +0 -117
- package/src/providers/utils/index.ts +0 -27
- package/src/providers/utils/retry.test.ts +0 -140
- package/src/providers/utils/retry.ts +0 -188
- package/src/providers/utils/stream-processor.test.ts +0 -232
- package/src/providers/utils/stream-processor.ts +0 -472
- package/src/providers/utils/tool-processor.test.ts +0 -235
- package/src/providers/utils/tool-processor.ts +0 -146
- package/src/sdk.ts +0 -264
- package/src/types.ts +0 -79
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool Call Processor
|
|
3
|
-
*
|
|
4
|
-
* Handles incremental assembly of tool calls from streaming responses.
|
|
5
|
-
* Tool calls can arrive in chunks that need to be accumulated.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type {
|
|
9
|
-
ApiStreamToolCall,
|
|
10
|
-
ApiStreamToolCallsChunk,
|
|
11
|
-
} from "../types/stream";
|
|
12
|
-
|
|
13
|
-
// Re-export to satisfy linter (type is used in generator return type)
|
|
14
|
-
export type { ApiStreamToolCallsChunk };
|
|
15
|
-
|
|
16
|
-
interface ToolCallDelta {
|
|
17
|
-
index: number;
|
|
18
|
-
id?: string;
|
|
19
|
-
function?: {
|
|
20
|
-
name?: string;
|
|
21
|
-
arguments?: unknown;
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Processes tool call deltas from streaming API responses
|
|
27
|
-
*/
|
|
28
|
-
export class ToolCallProcessor {
|
|
29
|
-
private toolCalls: Map<
|
|
30
|
-
number,
|
|
31
|
-
{
|
|
32
|
-
id: string;
|
|
33
|
-
name: string;
|
|
34
|
-
arguments: string;
|
|
35
|
-
}
|
|
36
|
-
> = new Map();
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Process tool call deltas and yield complete tool calls
|
|
40
|
-
*/
|
|
41
|
-
processToolCallDeltas(
|
|
42
|
-
deltas: ToolCallDelta[],
|
|
43
|
-
responseId: string,
|
|
44
|
-
): ApiStreamToolCallsChunk[] {
|
|
45
|
-
const results: ApiStreamToolCallsChunk[] = [];
|
|
46
|
-
for (const delta of deltas) {
|
|
47
|
-
const { index, id } = delta;
|
|
48
|
-
const fn = delta.function;
|
|
49
|
-
|
|
50
|
-
// Get or create tool call state
|
|
51
|
-
let toolCall = this.toolCalls.get(index);
|
|
52
|
-
if (!toolCall) {
|
|
53
|
-
toolCall = { id: "", name: "", arguments: "" };
|
|
54
|
-
this.toolCalls.set(index, toolCall);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Update with delta values
|
|
58
|
-
if (id) {
|
|
59
|
-
toolCall.id = id;
|
|
60
|
-
}
|
|
61
|
-
if (fn?.name) {
|
|
62
|
-
toolCall.name = fn.name;
|
|
63
|
-
}
|
|
64
|
-
const rawArguments = fn?.arguments;
|
|
65
|
-
const deltaArguments = this.normalizeArgumentsDelta(
|
|
66
|
-
toolCall.arguments,
|
|
67
|
-
rawArguments,
|
|
68
|
-
);
|
|
69
|
-
if (deltaArguments) {
|
|
70
|
-
toolCall.arguments += deltaArguments;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Add the current state as a chunk
|
|
74
|
-
// This allows streaming of partial tool calls
|
|
75
|
-
if (toolCall.id && toolCall.name) {
|
|
76
|
-
results.push({
|
|
77
|
-
type: "tool_calls",
|
|
78
|
-
id: responseId,
|
|
79
|
-
tool_call: {
|
|
80
|
-
call_id: toolCall.id,
|
|
81
|
-
function: {
|
|
82
|
-
id: toolCall.id,
|
|
83
|
-
name: toolCall.name,
|
|
84
|
-
// Emit only the current delta arguments; the agent layer already
|
|
85
|
-
// performs accumulation for streaming tool arguments.
|
|
86
|
-
arguments: deltaArguments,
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return results;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Get all accumulated tool calls
|
|
97
|
-
*/
|
|
98
|
-
getToolCalls(): ApiStreamToolCall[] {
|
|
99
|
-
return Array.from(this.toolCalls.values()).map((tc) => ({
|
|
100
|
-
call_id: tc.id,
|
|
101
|
-
function: {
|
|
102
|
-
id: tc.id,
|
|
103
|
-
name: tc.name,
|
|
104
|
-
arguments: tc.arguments,
|
|
105
|
-
},
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Reset the processor state
|
|
111
|
-
*/
|
|
112
|
-
reset(): void {
|
|
113
|
-
this.toolCalls.clear();
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
private normalizeArgumentsDelta(
|
|
117
|
-
accumulatedArguments: string,
|
|
118
|
-
rawArguments: unknown,
|
|
119
|
-
): string {
|
|
120
|
-
if (rawArguments == null) {
|
|
121
|
-
return "";
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const nextArguments =
|
|
125
|
-
typeof rawArguments === "string"
|
|
126
|
-
? rawArguments
|
|
127
|
-
: JSON.stringify(rawArguments);
|
|
128
|
-
|
|
129
|
-
if (!nextArguments) {
|
|
130
|
-
return "";
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// Some OpenAI-compatible providers emit cumulative argument snapshots
|
|
134
|
-
// instead of true deltas. Convert those snapshots back into a suffix so
|
|
135
|
-
// downstream accumulation only happens once.
|
|
136
|
-
if (
|
|
137
|
-
accumulatedArguments &&
|
|
138
|
-
nextArguments.length >= accumulatedArguments.length &&
|
|
139
|
-
nextArguments.startsWith(accumulatedArguments)
|
|
140
|
-
) {
|
|
141
|
-
return nextArguments.slice(accumulatedArguments.length);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
return nextArguments;
|
|
145
|
-
}
|
|
146
|
-
}
|
package/src/sdk.ts
DELETED
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
hasProvider,
|
|
3
|
-
registerModel as registerModelInCatalog,
|
|
4
|
-
registerProvider as registerProviderInCatalog,
|
|
5
|
-
} from "./models/index";
|
|
6
|
-
import {
|
|
7
|
-
type ApiHandler,
|
|
8
|
-
createHandler as createProviderHandler,
|
|
9
|
-
createHandlerAsync as createProviderHandlerAsync,
|
|
10
|
-
registerAsyncHandler,
|
|
11
|
-
registerHandler,
|
|
12
|
-
} from "./providers/index";
|
|
13
|
-
import type {
|
|
14
|
-
CreateHandlerInput,
|
|
15
|
-
LlmsConfig,
|
|
16
|
-
LlmsSdk,
|
|
17
|
-
ProviderConfigDefaults,
|
|
18
|
-
RegisteredProviderSummary,
|
|
19
|
-
RegisterModelInput,
|
|
20
|
-
RegisterProviderInput,
|
|
21
|
-
} from "./types";
|
|
22
|
-
|
|
23
|
-
interface InternalProviderConfig {
|
|
24
|
-
id: string;
|
|
25
|
-
models: Set<string>;
|
|
26
|
-
defaultModel: string;
|
|
27
|
-
defaults: ProviderConfigDefaults;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function cloneDefaults(
|
|
31
|
-
defaults: ProviderConfigDefaults | undefined,
|
|
32
|
-
): ProviderConfigDefaults {
|
|
33
|
-
return defaults ? { ...defaults } : {};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function resolveApiKey(
|
|
37
|
-
apiKey?: string,
|
|
38
|
-
apiKeyEnv?: string,
|
|
39
|
-
): string | undefined {
|
|
40
|
-
if (apiKey) {
|
|
41
|
-
return apiKey;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (!apiKeyEnv) {
|
|
45
|
-
return undefined;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const runtimeProcess = globalThis.process;
|
|
49
|
-
if (!runtimeProcess?.env) {
|
|
50
|
-
return undefined;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return runtimeProcess.env[apiKeyEnv];
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function assertNonEmptyModels(providerId: string, models: string[]): void {
|
|
57
|
-
if (!models.length) {
|
|
58
|
-
throw new Error(
|
|
59
|
-
`Provider "${providerId}" must include at least one model.`,
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export class DefaultLlmsSdk implements LlmsSdk {
|
|
65
|
-
private readonly providerConfigs = new Map<string, InternalProviderConfig>();
|
|
66
|
-
|
|
67
|
-
constructor(config: LlmsConfig) {
|
|
68
|
-
this.applyConfig(config);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
createHandler(input: CreateHandlerInput): ApiHandler {
|
|
72
|
-
return createProviderHandler(this.toProviderHandlerConfig(input));
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
async createHandlerAsync(input: CreateHandlerInput): Promise<ApiHandler> {
|
|
76
|
-
return createProviderHandlerAsync(this.toProviderHandlerConfig(input));
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
private toProviderHandlerConfig(input: CreateHandlerInput) {
|
|
80
|
-
const providerConfig = this.requireConfiguredProvider(input.providerId);
|
|
81
|
-
const modelId = input.modelId ?? providerConfig.defaultModel;
|
|
82
|
-
|
|
83
|
-
if (!providerConfig.models.has(modelId)) {
|
|
84
|
-
throw new Error(
|
|
85
|
-
`Model "${modelId}" is not configured for provider "${input.providerId}".`,
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return {
|
|
90
|
-
providerId: input.providerId,
|
|
91
|
-
modelId,
|
|
92
|
-
...providerConfig.defaults,
|
|
93
|
-
...input.overrides,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
registerProvider(input: RegisterProviderInput): void {
|
|
98
|
-
registerProviderInCatalog(input.collection);
|
|
99
|
-
|
|
100
|
-
if (input.handlerFactory && input.asyncHandlerFactory) {
|
|
101
|
-
throw new Error(
|
|
102
|
-
`Provider "${input.collection.provider.id}" cannot register both sync and async handlers.`,
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (input.handlerFactory) {
|
|
107
|
-
registerHandler(input.collection.provider.id, input.handlerFactory);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
if (input.asyncHandlerFactory) {
|
|
111
|
-
registerAsyncHandler(
|
|
112
|
-
input.collection.provider.id,
|
|
113
|
-
input.asyncHandlerFactory,
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
const exposedModels =
|
|
118
|
-
input.exposeModels ?? Object.keys(input.collection.models);
|
|
119
|
-
assertNonEmptyModels(input.collection.provider.id, exposedModels);
|
|
120
|
-
|
|
121
|
-
const existing = this.providerConfigs.get(input.collection.provider.id);
|
|
122
|
-
const defaultModel =
|
|
123
|
-
input.defaultModel ??
|
|
124
|
-
input.collection.provider.defaultModelId ??
|
|
125
|
-
exposedModels[0];
|
|
126
|
-
|
|
127
|
-
if (!defaultModel) {
|
|
128
|
-
throw new Error(
|
|
129
|
-
`Provider "${input.collection.provider.id}" must define a default model.`,
|
|
130
|
-
);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
if (!exposedModels.includes(defaultModel)) {
|
|
134
|
-
throw new Error(
|
|
135
|
-
`Default model "${defaultModel}" is not included in configured models for "${input.collection.provider.id}".`,
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
const mergedModels = new Set<string>([
|
|
140
|
-
...(existing?.models ?? []),
|
|
141
|
-
...exposedModels,
|
|
142
|
-
]);
|
|
143
|
-
const mergedDefaults = {
|
|
144
|
-
...(existing?.defaults ?? {}),
|
|
145
|
-
...cloneDefaults(input.defaults),
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
this.providerConfigs.set(input.collection.provider.id, {
|
|
149
|
-
id: input.collection.provider.id,
|
|
150
|
-
models: mergedModels,
|
|
151
|
-
defaultModel,
|
|
152
|
-
defaults: mergedDefaults,
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
registerModel(input: RegisterModelInput): void {
|
|
157
|
-
registerModelInCatalog(input.providerId, input.modelId, input.info);
|
|
158
|
-
|
|
159
|
-
const existing = this.providerConfigs.get(input.providerId);
|
|
160
|
-
if (!existing) {
|
|
161
|
-
this.providerConfigs.set(input.providerId, {
|
|
162
|
-
id: input.providerId,
|
|
163
|
-
models: new Set([input.modelId]),
|
|
164
|
-
defaultModel: input.modelId,
|
|
165
|
-
defaults: {},
|
|
166
|
-
});
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
existing.models.add(input.modelId);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
getProviders(): RegisteredProviderSummary[] {
|
|
174
|
-
return Array.from(this.providerConfigs.values()).map((provider) => ({
|
|
175
|
-
id: provider.id,
|
|
176
|
-
models: Array.from(provider.models),
|
|
177
|
-
defaultModel: provider.defaultModel,
|
|
178
|
-
}));
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
getModels(providerId: string): string[] {
|
|
182
|
-
return Array.from(this.requireConfiguredProvider(providerId).models);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
isProviderConfigured(providerId: string): boolean {
|
|
186
|
-
return this.providerConfigs.has(providerId);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
isModelConfigured(providerId: string, modelId: string): boolean {
|
|
190
|
-
return this.providerConfigs.get(providerId)?.models.has(modelId) ?? false;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
private applyConfig(config: LlmsConfig): void {
|
|
194
|
-
for (const provider of config.providers) {
|
|
195
|
-
assertNonEmptyModels(provider.id, provider.models);
|
|
196
|
-
|
|
197
|
-
if (
|
|
198
|
-
provider.defaultModel &&
|
|
199
|
-
!provider.models.includes(provider.defaultModel)
|
|
200
|
-
) {
|
|
201
|
-
throw new Error(
|
|
202
|
-
`Default model "${provider.defaultModel}" is not included in configured models for "${provider.id}".`,
|
|
203
|
-
);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
const defaultModel = provider.defaultModel ?? provider.models[0];
|
|
207
|
-
if (!defaultModel) {
|
|
208
|
-
throw new Error(
|
|
209
|
-
`Provider "${provider.id}" must define a default model.`,
|
|
210
|
-
);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
const apiKey = resolveApiKey(provider.apiKey, provider.apiKeyEnv);
|
|
214
|
-
|
|
215
|
-
this.providerConfigs.set(provider.id, {
|
|
216
|
-
id: provider.id,
|
|
217
|
-
models: new Set(provider.models),
|
|
218
|
-
defaultModel,
|
|
219
|
-
defaults: {
|
|
220
|
-
apiKey,
|
|
221
|
-
baseUrl: provider.baseUrl,
|
|
222
|
-
headers: provider.headers,
|
|
223
|
-
timeoutMs: provider.timeoutMs,
|
|
224
|
-
capabilities: provider.capabilities,
|
|
225
|
-
...cloneDefaults(provider.settings),
|
|
226
|
-
},
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
for (const model of config.models ?? []) {
|
|
231
|
-
this.registerModel(model);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
for (const provider of config.customProviders ?? []) {
|
|
235
|
-
this.registerProvider(provider);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
for (const providerConfig of this.providerConfigs.values()) {
|
|
239
|
-
const providerExists = hasProvider(providerConfig.id);
|
|
240
|
-
if (!providerExists) {
|
|
241
|
-
throw new Error(
|
|
242
|
-
`Provider "${providerConfig.id}" is not known. Register it through customProviders/registerProvider or use a built-in provider ID.`,
|
|
243
|
-
);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
private requireConfiguredProvider(
|
|
249
|
-
providerId: string,
|
|
250
|
-
): InternalProviderConfig {
|
|
251
|
-
const providerConfig = this.providerConfigs.get(providerId);
|
|
252
|
-
if (!providerConfig) {
|
|
253
|
-
throw new Error(
|
|
254
|
-
`Provider "${providerId}" is not configured in this SDK instance.`,
|
|
255
|
-
);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
return providerConfig;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
export function createLlmsSdk(config: LlmsConfig): LlmsSdk {
|
|
263
|
-
return new DefaultLlmsSdk(config);
|
|
264
|
-
}
|
package/src/types.ts
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import type { ModelCollection, ModelInfo } from "./models/index";
|
|
2
|
-
import type {
|
|
3
|
-
ApiHandler,
|
|
4
|
-
HandlerFactory,
|
|
5
|
-
LazyHandlerFactory,
|
|
6
|
-
ProviderCapability,
|
|
7
|
-
ProviderConfig,
|
|
8
|
-
} from "./providers/index";
|
|
9
|
-
|
|
10
|
-
export type ProviderConfigDefaults = Omit<
|
|
11
|
-
ProviderConfig,
|
|
12
|
-
"providerId" | "modelId"
|
|
13
|
-
>;
|
|
14
|
-
|
|
15
|
-
export interface ProviderSelectionConfig {
|
|
16
|
-
id: string;
|
|
17
|
-
models: string[];
|
|
18
|
-
defaultModel?: string;
|
|
19
|
-
apiKey?: string;
|
|
20
|
-
apiKeyEnv?: string;
|
|
21
|
-
baseUrl?: string;
|
|
22
|
-
headers?: Record<string, string>;
|
|
23
|
-
timeoutMs?: number;
|
|
24
|
-
capabilities?: ProviderCapability[];
|
|
25
|
-
settings?: ProviderConfigDefaults;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface AdditionalModelConfig {
|
|
29
|
-
providerId: string;
|
|
30
|
-
modelId: string;
|
|
31
|
-
info: ModelInfo;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface CustomProviderConfig {
|
|
35
|
-
collection: ModelCollection;
|
|
36
|
-
defaults?: ProviderConfigDefaults;
|
|
37
|
-
handlerFactory?: HandlerFactory;
|
|
38
|
-
asyncHandlerFactory?: LazyHandlerFactory;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface LlmsConfig {
|
|
42
|
-
providers: ProviderSelectionConfig[];
|
|
43
|
-
models?: AdditionalModelConfig[];
|
|
44
|
-
customProviders?: CustomProviderConfig[];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface CreateHandlerInput {
|
|
48
|
-
providerId: string;
|
|
49
|
-
modelId?: string;
|
|
50
|
-
overrides?: ProviderConfigDefaults;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export interface RegisteredProviderSummary {
|
|
54
|
-
id: string;
|
|
55
|
-
models: string[];
|
|
56
|
-
defaultModel: string;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export interface RegisterProviderInput extends CustomProviderConfig {
|
|
60
|
-
exposeModels?: string[];
|
|
61
|
-
defaultModel?: string;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export interface RegisterModelInput {
|
|
65
|
-
providerId: string;
|
|
66
|
-
modelId: string;
|
|
67
|
-
info: ModelInfo;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export interface LlmsSdk {
|
|
71
|
-
createHandler(input: CreateHandlerInput): ApiHandler;
|
|
72
|
-
createHandlerAsync(input: CreateHandlerInput): Promise<ApiHandler>;
|
|
73
|
-
registerProvider(input: RegisterProviderInput): void;
|
|
74
|
-
registerModel(input: RegisterModelInput): void;
|
|
75
|
-
getProviders(): RegisteredProviderSummary[];
|
|
76
|
-
getModels(providerId: string): string[];
|
|
77
|
-
isProviderConfigured(providerId: string): boolean;
|
|
78
|
-
isModelConfigured(providerId: string, modelId: string): boolean;
|
|
79
|
-
}
|