@clinebot/llms 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +198 -0
- package/dist/config-browser.d.ts +3 -0
- package/dist/config.d.ts +3 -0
- package/dist/index.browser.d.ts +4 -0
- package/dist/index.browser.js +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +7 -0
- package/dist/models/generated-access.d.ts +4 -0
- package/dist/models/generated-provider-loaders.d.ts +13 -0
- package/dist/models/generated.d.ts +14 -0
- package/dist/models/index.d.ts +43 -0
- package/dist/models/models-dev-catalog.d.ts +32 -0
- package/dist/models/providers/aihubmix.d.ts +5 -0
- package/dist/models/providers/anthropic.d.ts +53 -0
- package/dist/models/providers/asksage.d.ts +5 -0
- package/dist/models/providers/baseten.d.ts +5 -0
- package/dist/models/providers/bedrock.d.ts +7 -0
- package/dist/models/providers/cerebras.d.ts +7 -0
- package/dist/models/providers/claude-code.d.ts +4 -0
- package/dist/models/providers/cline.d.ts +34 -0
- package/dist/models/providers/deepseek.d.ts +8 -0
- package/dist/models/providers/dify.d.ts +5 -0
- package/dist/models/providers/doubao.d.ts +7 -0
- package/dist/models/providers/fireworks.d.ts +8 -0
- package/dist/models/providers/gemini.d.ts +9 -0
- package/dist/models/providers/groq.d.ts +8 -0
- package/dist/models/providers/hicap.d.ts +5 -0
- package/dist/models/providers/huawei-cloud-maas.d.ts +5 -0
- package/dist/models/providers/huggingface.d.ts +6 -0
- package/dist/models/providers/index.d.ts +45 -0
- package/dist/models/providers/litellm.d.ts +5 -0
- package/dist/models/providers/lmstudio.d.ts +5 -0
- package/dist/models/providers/minimax.d.ts +7 -0
- package/dist/models/providers/mistral.d.ts +5 -0
- package/dist/models/providers/moonshot.d.ts +7 -0
- package/dist/models/providers/nebius.d.ts +7 -0
- package/dist/models/providers/nous-research.d.ts +7 -0
- package/dist/models/providers/oca.d.ts +9 -0
- package/dist/models/providers/ollama.d.ts +5 -0
- package/dist/models/providers/openai-codex.d.ts +10 -0
- package/dist/models/providers/openai.d.ts +9 -0
- package/dist/models/providers/opencode.d.ts +10 -0
- package/dist/models/providers/openrouter.d.ts +7 -0
- package/dist/models/providers/qwen-code.d.ts +7 -0
- package/dist/models/providers/qwen.d.ts +7 -0
- package/dist/models/providers/requesty.d.ts +6 -0
- package/dist/models/providers/sambanova.d.ts +7 -0
- package/dist/models/providers/sapaicore.d.ts +7 -0
- package/dist/models/providers/together.d.ts +8 -0
- package/dist/models/providers/vercel-ai-gateway.d.ts +5 -0
- package/dist/models/providers/vertex.d.ts +7 -0
- package/dist/models/providers/xai.d.ts +8 -0
- package/dist/models/providers/zai.d.ts +7 -0
- package/dist/models/query.d.ts +181 -0
- package/dist/models/registry.d.ts +123 -0
- package/dist/models/schemas/index.d.ts +7 -0
- package/dist/models/schemas/model.d.ts +340 -0
- package/dist/models/schemas/query.d.ts +191 -0
- package/dist/providers/handlers/ai-sdk-community.d.ts +46 -0
- package/dist/providers/handlers/ai-sdk-provider-base.d.ts +32 -0
- package/dist/providers/handlers/anthropic-base.d.ts +26 -0
- package/dist/providers/handlers/asksage.d.ts +12 -0
- package/dist/providers/handlers/auth.d.ts +5 -0
- package/dist/providers/handlers/base.d.ts +55 -0
- package/dist/providers/handlers/bedrock-base.d.ts +23 -0
- package/dist/providers/handlers/bedrock-client.d.ts +4 -0
- package/dist/providers/handlers/community-sdk.d.ts +97 -0
- package/dist/providers/handlers/fetch-base.d.ts +18 -0
- package/dist/providers/handlers/gemini-base.d.ts +25 -0
- package/dist/providers/handlers/index.d.ts +19 -0
- package/dist/providers/handlers/openai-base.d.ts +54 -0
- package/dist/providers/handlers/openai-responses.d.ts +64 -0
- package/dist/providers/handlers/providers.d.ts +43 -0
- package/dist/providers/handlers/r1-base.d.ts +62 -0
- package/dist/providers/handlers/registry.d.ts +106 -0
- package/dist/providers/handlers/vertex.d.ts +32 -0
- package/dist/providers/index.d.ts +100 -0
- package/dist/providers/public.browser.d.ts +2 -0
- package/dist/providers/public.d.ts +3 -0
- package/dist/providers/shared/openai-compatible.d.ts +10 -0
- package/dist/providers/transform/ai-sdk-community-format.d.ts +9 -0
- package/dist/providers/transform/anthropic-format.d.ts +24 -0
- package/dist/providers/transform/content-format.d.ts +3 -0
- package/dist/providers/transform/gemini-format.d.ts +19 -0
- package/dist/providers/transform/index.d.ts +10 -0
- package/dist/providers/transform/openai-format.d.ts +36 -0
- package/dist/providers/transform/r1-format.d.ts +26 -0
- package/dist/providers/types/config.d.ts +261 -0
- package/dist/providers/types/handler.d.ts +71 -0
- package/dist/providers/types/index.d.ts +11 -0
- package/dist/providers/types/messages.d.ts +139 -0
- package/dist/providers/types/model-info.d.ts +32 -0
- package/dist/providers/types/provider-ids.d.ts +63 -0
- package/dist/providers/types/settings.d.ts +308 -0
- package/dist/providers/types/stream.d.ts +106 -0
- package/dist/providers/utils/index.d.ts +7 -0
- package/dist/providers/utils/retry.d.ts +38 -0
- package/dist/providers/utils/stream-processor.d.ts +110 -0
- package/dist/providers/utils/tool-processor.d.ts +34 -0
- package/dist/sdk.d.ts +18 -0
- package/dist/types.d.ts +60 -0
- package/package.json +66 -0
- package/src/catalog.ts +20 -0
- package/src/config-browser.ts +11 -0
- package/src/config.ts +49 -0
- package/src/index.browser.ts +9 -0
- package/src/index.ts +10 -0
- package/src/live-providers.test.ts +137 -0
- package/src/models/generated-access.ts +41 -0
- package/src/models/generated-provider-loaders.ts +166 -0
- package/src/models/generated.ts +11997 -0
- package/src/models/index.ts +271 -0
- package/src/models/models-dev-catalog.test.ts +161 -0
- package/src/models/models-dev-catalog.ts +161 -0
- package/src/models/providers/aihubmix.ts +19 -0
- package/src/models/providers/anthropic.ts +60 -0
- package/src/models/providers/asksage.ts +19 -0
- package/src/models/providers/baseten.ts +21 -0
- package/src/models/providers/bedrock.ts +30 -0
- package/src/models/providers/cerebras.ts +24 -0
- package/src/models/providers/claude-code.ts +51 -0
- package/src/models/providers/cline.ts +25 -0
- package/src/models/providers/deepseek.ts +33 -0
- package/src/models/providers/dify.ts +17 -0
- package/src/models/providers/doubao.ts +33 -0
- package/src/models/providers/fireworks.ts +34 -0
- package/src/models/providers/gemini.ts +43 -0
- package/src/models/providers/groq.ts +33 -0
- package/src/models/providers/hicap.ts +18 -0
- package/src/models/providers/huawei-cloud-maas.ts +18 -0
- package/src/models/providers/huggingface.ts +22 -0
- package/src/models/providers/index.ts +162 -0
- package/src/models/providers/litellm.ts +19 -0
- package/src/models/providers/lmstudio.ts +22 -0
- package/src/models/providers/minimax.ts +34 -0
- package/src/models/providers/mistral.ts +19 -0
- package/src/models/providers/moonshot.ts +34 -0
- package/src/models/providers/nebius.ts +24 -0
- package/src/models/providers/nous-research.ts +21 -0
- package/src/models/providers/oca.ts +30 -0
- package/src/models/providers/ollama.ts +18 -0
- package/src/models/providers/openai-codex.ts +30 -0
- package/src/models/providers/openai.ts +43 -0
- package/src/models/providers/opencode.ts +28 -0
- package/src/models/providers/openrouter.ts +24 -0
- package/src/models/providers/qwen-code.ts +33 -0
- package/src/models/providers/qwen.ts +34 -0
- package/src/models/providers/requesty.ts +23 -0
- package/src/models/providers/sambanova.ts +23 -0
- package/src/models/providers/sapaicore.ts +34 -0
- package/src/models/providers/together.ts +35 -0
- package/src/models/providers/vercel-ai-gateway.ts +23 -0
- package/src/models/providers/vertex.ts +36 -0
- package/src/models/providers/xai.ts +34 -0
- package/src/models/providers/zai.ts +25 -0
- package/src/models/query.ts +407 -0
- package/src/models/registry.ts +511 -0
- package/src/models/schemas/index.ts +62 -0
- package/src/models/schemas/model.ts +308 -0
- package/src/models/schemas/query.ts +336 -0
- package/src/providers/browser.ts +4 -0
- package/src/providers/handlers/ai-sdk-community.ts +226 -0
- package/src/providers/handlers/ai-sdk-provider-base.ts +193 -0
- package/src/providers/handlers/anthropic-base.ts +372 -0
- package/src/providers/handlers/asksage.test.ts +103 -0
- package/src/providers/handlers/asksage.ts +138 -0
- package/src/providers/handlers/auth.test.ts +19 -0
- package/src/providers/handlers/auth.ts +121 -0
- package/src/providers/handlers/base.test.ts +46 -0
- package/src/providers/handlers/base.ts +160 -0
- package/src/providers/handlers/bedrock-base.ts +390 -0
- package/src/providers/handlers/bedrock-client.ts +100 -0
- package/src/providers/handlers/codex.test.ts +123 -0
- package/src/providers/handlers/community-sdk.test.ts +288 -0
- package/src/providers/handlers/community-sdk.ts +392 -0
- package/src/providers/handlers/fetch-base.ts +68 -0
- package/src/providers/handlers/gemini-base.ts +302 -0
- package/src/providers/handlers/index.ts +67 -0
- package/src/providers/handlers/openai-base.ts +277 -0
- package/src/providers/handlers/openai-responses.ts +598 -0
- package/src/providers/handlers/providers.test.ts +120 -0
- package/src/providers/handlers/providers.ts +563 -0
- package/src/providers/handlers/r1-base.ts +280 -0
- package/src/providers/handlers/registry.ts +185 -0
- package/src/providers/handlers/vertex.test.ts +124 -0
- package/src/providers/handlers/vertex.ts +292 -0
- package/src/providers/index.ts +534 -0
- package/src/providers/public.browser.ts +20 -0
- package/src/providers/public.ts +51 -0
- package/src/providers/shared/openai-compatible.ts +63 -0
- package/src/providers/transform/ai-sdk-community-format.test.ts +73 -0
- package/src/providers/transform/ai-sdk-community-format.ts +115 -0
- package/src/providers/transform/anthropic-format.ts +218 -0
- package/src/providers/transform/content-format.ts +34 -0
- package/src/providers/transform/format-conversion.test.ts +310 -0
- package/src/providers/transform/gemini-format.ts +167 -0
- package/src/providers/transform/index.ts +22 -0
- package/src/providers/transform/openai-format.ts +247 -0
- package/src/providers/transform/r1-format.ts +287 -0
- package/src/providers/types/config.ts +388 -0
- package/src/providers/types/handler.ts +87 -0
- package/src/providers/types/index.ts +120 -0
- package/src/providers/types/messages.ts +158 -0
- package/src/providers/types/model-info.test.ts +57 -0
- package/src/providers/types/model-info.ts +65 -0
- package/src/providers/types/provider-ids.test.ts +12 -0
- package/src/providers/types/provider-ids.ts +89 -0
- package/src/providers/types/settings.test.ts +49 -0
- package/src/providers/types/settings.ts +533 -0
- package/src/providers/types/stream.ts +117 -0
- package/src/providers/utils/index.ts +27 -0
- package/src/providers/utils/retry.test.ts +140 -0
- package/src/providers/utils/retry.ts +188 -0
- package/src/providers/utils/stream-processor.test.ts +232 -0
- package/src/providers/utils/stream-processor.ts +472 -0
- package/src/providers/utils/tool-processor.test.ts +34 -0
- package/src/providers/utils/tool-processor.ts +111 -0
- package/src/sdk.ts +264 -0
- package/src/types.ts +79 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Responses API Handler
|
|
3
|
+
*
|
|
4
|
+
* Handler for OpenAI's Responses API format, which is used by newer models
|
|
5
|
+
* that require native tool calling (e.g., GPT-5, o3, codex).
|
|
6
|
+
*
|
|
7
|
+
* The Responses API has a different structure than Chat Completions:
|
|
8
|
+
* - Uses `instructions` instead of system messages
|
|
9
|
+
* - Uses `input` instead of messages array
|
|
10
|
+
* - Has different streaming event types (response.*, not choices.delta)
|
|
11
|
+
* - Supports reasoning with encrypted content
|
|
12
|
+
*/
|
|
13
|
+
import OpenAI from "openai";
|
|
14
|
+
import type { ApiStream, HandlerModelInfo, ModelInfo, ProviderConfig } from "../types";
|
|
15
|
+
import type { Message, ToolDefinition } from "../types/messages";
|
|
16
|
+
import { BaseHandler } from "./base";
|
|
17
|
+
/**
|
|
18
|
+
* Convert messages to Responses API input format
|
|
19
|
+
*/
|
|
20
|
+
declare function convertToResponsesInput(messages: Message[]): {
|
|
21
|
+
type: "message";
|
|
22
|
+
role: "user" | "assistant";
|
|
23
|
+
content: string | Array<{
|
|
24
|
+
type: "input_text" | "output_text";
|
|
25
|
+
text: string;
|
|
26
|
+
}>;
|
|
27
|
+
}[];
|
|
28
|
+
/**
|
|
29
|
+
* Handler for OpenAI Responses API
|
|
30
|
+
*
|
|
31
|
+
* Uses ProviderConfig fields:
|
|
32
|
+
* - baseUrl: Base URL for the API
|
|
33
|
+
* - modelId: Model ID
|
|
34
|
+
* - knownModels: Known models with their info
|
|
35
|
+
* - headers: Custom headers
|
|
36
|
+
*/
|
|
37
|
+
export declare class OpenAIResponsesHandler extends BaseHandler {
|
|
38
|
+
protected client: OpenAI | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Ensure the OpenAI client is initialized
|
|
41
|
+
*/
|
|
42
|
+
protected ensureClient(): OpenAI;
|
|
43
|
+
/**
|
|
44
|
+
* Get model info, falling back to provider defaults
|
|
45
|
+
*/
|
|
46
|
+
getModel(): HandlerModelInfo;
|
|
47
|
+
protected getDefaultModelInfo(): ModelInfo;
|
|
48
|
+
getMessages(_systemPrompt: string, messages: Message[]): ReturnType<typeof convertToResponsesInput>;
|
|
49
|
+
/**
|
|
50
|
+
* Create a streaming message using the Responses API
|
|
51
|
+
*/
|
|
52
|
+
createMessage(systemPrompt: string, messages: Message[], tools?: ToolDefinition[]): ApiStream;
|
|
53
|
+
private createMessageInternal;
|
|
54
|
+
/**
|
|
55
|
+
* Process a single chunk from the Responses API stream
|
|
56
|
+
*/
|
|
57
|
+
protected processResponseChunk(chunk: any, _modelInfo: ModelInfo, responseId: string): Generator<import("../types").ApiStreamChunk>;
|
|
58
|
+
private getApiResponseId;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create an OpenAI Responses API handler
|
|
62
|
+
*/
|
|
63
|
+
export declare function createOpenAIResponsesHandler(config: ProviderConfig): OpenAIResponsesHandler;
|
|
64
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Configurations
|
|
3
|
+
*
|
|
4
|
+
* Pre-configured settings for all supported OpenAI-compatible providers.
|
|
5
|
+
* Model data is sourced from @clinebot/models (the single registry).
|
|
6
|
+
*/
|
|
7
|
+
/** biome-ignore-all lint/style/noNonNullAssertion: static */
|
|
8
|
+
import type { ModelCatalogConfig, ModelInfo, ProviderCapability, ProviderConfig } from "../types/index";
|
|
9
|
+
/**
|
|
10
|
+
* Provider defaults for OpenAI-compatible providers
|
|
11
|
+
*/
|
|
12
|
+
export interface ProviderDefaults {
|
|
13
|
+
/** Base URL for the API */
|
|
14
|
+
baseUrl: string;
|
|
15
|
+
/** Default model ID */
|
|
16
|
+
modelId: string;
|
|
17
|
+
/** Known models with their info */
|
|
18
|
+
knownModels?: Record<string, ModelInfo>;
|
|
19
|
+
/** Capabilities this provider supports */
|
|
20
|
+
capabilities?: ProviderCapability[];
|
|
21
|
+
}
|
|
22
|
+
export declare const DEFAULT_MODELS_CATALOG_URL = "https://models.dev/api.json";
|
|
23
|
+
export declare function getLiveModelsCatalog(options?: Pick<ModelCatalogConfig, "url" | "cacheTtlMs">): Promise<Record<string, Record<string, ModelInfo>>>;
|
|
24
|
+
export declare function clearLiveModelsCatalogCache(url?: string): void;
|
|
25
|
+
export declare function clearPrivateModelsCatalogCache(): void;
|
|
26
|
+
/**
|
|
27
|
+
* All OpenAI-compatible provider configurations
|
|
28
|
+
*
|
|
29
|
+
* Model data is sourced from @clinebot/models to maintain a single source of truth.
|
|
30
|
+
*/
|
|
31
|
+
export declare const OPENAI_COMPATIBLE_PROVIDERS: Record<string, ProviderDefaults>;
|
|
32
|
+
/**
|
|
33
|
+
* Get provider configuration by ID
|
|
34
|
+
*/
|
|
35
|
+
export declare function getProviderConfig(providerId: string): ProviderDefaults | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Resolve provider configuration and optionally merge live catalog metadata
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveProviderConfig(providerId: string, modelCatalog?: ModelCatalogConfig, config?: ProviderConfig): Promise<ProviderDefaults | undefined>;
|
|
40
|
+
/**
|
|
41
|
+
* Check if a provider is OpenAI-compatible
|
|
42
|
+
*/
|
|
43
|
+
export declare function isOpenAICompatibleProvider(providerId: string): boolean;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* R1 Base Handler
|
|
3
|
+
*
|
|
4
|
+
* Handler for R1-based reasoning models (DeepSeek Reasoner, etc.)
|
|
5
|
+
* These models have special requirements:
|
|
6
|
+
* 1. Consecutive messages with the same role must be merged
|
|
7
|
+
* 2. reasoning_content field for tool calling continuations
|
|
8
|
+
* 3. No temperature parameter
|
|
9
|
+
* 4. Response includes reasoning_content in the delta
|
|
10
|
+
*/
|
|
11
|
+
import OpenAI from "openai";
|
|
12
|
+
import type { ChatCompletionChunk } from "openai/resources/chat/completions";
|
|
13
|
+
import type { ApiStream, ApiStreamChunk, HandlerModelInfo, ModelInfo, ProviderConfig } from "../types";
|
|
14
|
+
import type { Message, ToolDefinition } from "../types/messages";
|
|
15
|
+
import { ToolCallProcessor } from "../utils/tool-processor";
|
|
16
|
+
import { BaseHandler } from "./base";
|
|
17
|
+
/**
|
|
18
|
+
* Base handler for R1-based reasoning models
|
|
19
|
+
*
|
|
20
|
+
* Uses ProviderConfig fields:
|
|
21
|
+
* - baseUrl: Base URL for the API
|
|
22
|
+
* - modelId: Model ID
|
|
23
|
+
* - knownModels: Known models with their info
|
|
24
|
+
* - headers: Custom headers
|
|
25
|
+
*/
|
|
26
|
+
export declare class R1BaseHandler extends BaseHandler {
|
|
27
|
+
protected client: OpenAI | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Ensure the OpenAI client is initialized
|
|
30
|
+
*/
|
|
31
|
+
protected ensureClient(): OpenAI;
|
|
32
|
+
/**
|
|
33
|
+
* Get model info, falling back to provider defaults
|
|
34
|
+
*/
|
|
35
|
+
getModel(): HandlerModelInfo;
|
|
36
|
+
protected getDefaultModelInfo(): ModelInfo;
|
|
37
|
+
/**
|
|
38
|
+
* Check if this model is a reasoner model (no temperature allowed)
|
|
39
|
+
*/
|
|
40
|
+
protected isReasonerModel(modelId: string): boolean;
|
|
41
|
+
getMessages(systemPrompt: string, messages: Message[]): OpenAI.Chat.ChatCompletionMessageParam[];
|
|
42
|
+
/**
|
|
43
|
+
* Create a streaming message
|
|
44
|
+
*/
|
|
45
|
+
createMessage(systemPrompt: string, messages: Message[], tools?: ToolDefinition[]): ApiStream;
|
|
46
|
+
private createMessageInternal;
|
|
47
|
+
/**
|
|
48
|
+
* Process a single chunk from the stream
|
|
49
|
+
*/
|
|
50
|
+
protected processChunk(chunk: ChatCompletionChunk, toolCallProcessor: ToolCallProcessor, modelInfo: ModelInfo, responseId: string): Generator<ApiStreamChunk>;
|
|
51
|
+
/**
|
|
52
|
+
* Process usage information with R1-specific cache handling
|
|
53
|
+
*
|
|
54
|
+
* DeepSeek reports total input AND cache reads/writes,
|
|
55
|
+
* where the input tokens is the sum of the cache hits/misses.
|
|
56
|
+
*/
|
|
57
|
+
protected processUsage(usage: OpenAI.CompletionUsage, _modelInfo: ModelInfo, responseId: string): Generator<ApiStreamChunk>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create an R1-compatible handler
|
|
61
|
+
*/
|
|
62
|
+
export declare function createR1Handler(config: ProviderConfig): R1BaseHandler;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom Handler Registry
|
|
3
|
+
*
|
|
4
|
+
* Allows users to register their own custom handlers that extend BaseHandler.
|
|
5
|
+
* This is useful for providers that require dependencies not included in this package
|
|
6
|
+
* (e.g., VSCode LM handler that requires the vscode package).
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { registerHandler, BaseHandler, type ProviderConfig, type ApiStream, type Message } from "@clinebot/providers"
|
|
11
|
+
* import * as vscode from "vscode"
|
|
12
|
+
*
|
|
13
|
+
* class VSCodeLmHandler extends BaseHandler {
|
|
14
|
+
* async *createMessage(systemPrompt: string, messages: Message[]): ApiStream {
|
|
15
|
+
* // Implementation using vscode.lm API
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* // Register the handler
|
|
20
|
+
* registerHandler("vscode-lm", (config) => new VSCodeLmHandler(config))
|
|
21
|
+
*
|
|
22
|
+
* // Now createHandler will use your custom handler for "vscode-lm"
|
|
23
|
+
* const handler = createHandler({ providerId: "vscode-lm", modelId: "copilot" })
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import type { ApiHandler, HandlerFactory, LazyHandlerFactory, ProviderConfig } from "../types";
|
|
27
|
+
/**
|
|
28
|
+
* Register a custom handler factory for a provider ID
|
|
29
|
+
*
|
|
30
|
+
* Use this to add handlers for providers that require external dependencies
|
|
31
|
+
* not bundled with this package, or to override built-in handlers.
|
|
32
|
+
*
|
|
33
|
+
* @param providerId - The provider ID to register (can be existing or new)
|
|
34
|
+
* @param factory - Factory function that creates the handler
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* // Simple registration
|
|
39
|
+
* registerHandler("my-provider", (config) => new MyHandler(config))
|
|
40
|
+
*
|
|
41
|
+
* // Override built-in handler
|
|
42
|
+
* registerHandler("anthropic", (config) => new MyCustomAnthropicHandler(config))
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function registerHandler(providerId: string, factory: HandlerFactory<ProviderConfig>): void;
|
|
46
|
+
/**
|
|
47
|
+
* Register an async handler factory for lazy loading
|
|
48
|
+
*
|
|
49
|
+
* Use this when your handler has heavy dependencies that should be
|
|
50
|
+
* loaded only when needed.
|
|
51
|
+
*
|
|
52
|
+
* @param providerId - The provider ID to register
|
|
53
|
+
* @param factory - Async factory function that creates the handler
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* registerAsyncHandler("heavy-provider", async (config) => {
|
|
58
|
+
* const { HeavyHandler } = await import("./heavy-handler")
|
|
59
|
+
* return new HeavyHandler(config)
|
|
60
|
+
* })
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare function registerAsyncHandler(providerId: string, factory: LazyHandlerFactory<ProviderConfig>): void;
|
|
64
|
+
/**
|
|
65
|
+
* Unregister a custom handler
|
|
66
|
+
*
|
|
67
|
+
* @param providerId - The provider ID to unregister
|
|
68
|
+
* @returns true if a handler was removed, false if none existed
|
|
69
|
+
*/
|
|
70
|
+
export declare function unregisterHandler(providerId: string): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Check if a custom handler is registered for a provider ID
|
|
73
|
+
*
|
|
74
|
+
* @param providerId - The provider ID to check
|
|
75
|
+
*/
|
|
76
|
+
export declare function hasRegisteredHandler(providerId: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Get a registered handler (internal use)
|
|
79
|
+
*
|
|
80
|
+
* @param providerId - The provider ID to get
|
|
81
|
+
* @param config - The config to pass to the factory
|
|
82
|
+
* @returns The handler instance, or undefined if not registered
|
|
83
|
+
*/
|
|
84
|
+
export declare function getRegisteredHandler(providerId: string, config: ProviderConfig): ApiHandler | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* Get a registered handler asynchronously (internal use)
|
|
87
|
+
*
|
|
88
|
+
* @param providerId - The provider ID to get
|
|
89
|
+
* @param config - The config to pass to the factory
|
|
90
|
+
* @returns The handler instance, or undefined if not registered
|
|
91
|
+
*/
|
|
92
|
+
export declare function getRegisteredHandlerAsync(providerId: string, config: ProviderConfig): Promise<ApiHandler | undefined>;
|
|
93
|
+
/**
|
|
94
|
+
* Check if a registered handler is async
|
|
95
|
+
*
|
|
96
|
+
* @param providerId - The provider ID to check
|
|
97
|
+
*/
|
|
98
|
+
export declare function isRegisteredHandlerAsync(providerId: string): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Get all registered provider IDs
|
|
101
|
+
*/
|
|
102
|
+
export declare function getRegisteredProviderIds(): string[];
|
|
103
|
+
/**
|
|
104
|
+
* Clear all registered handlers (mainly for testing)
|
|
105
|
+
*/
|
|
106
|
+
export declare function clearRegistry(): void;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vertex Handler
|
|
3
|
+
*
|
|
4
|
+
* Routes Vertex models by family:
|
|
5
|
+
* - Gemini models -> Google GenAI Vertex path via GeminiHandler
|
|
6
|
+
* - Claude models -> AI SDK Google Vertex Anthropic provider
|
|
7
|
+
*/
|
|
8
|
+
import { type ApiStream, type HandlerModelInfo, type ProviderConfig } from "../types";
|
|
9
|
+
import type { Message, ToolDefinition } from "../types/messages";
|
|
10
|
+
import { BaseHandler } from "./base";
|
|
11
|
+
/**
|
|
12
|
+
* Handler for Vertex AI that supports both Gemini and Claude models.
|
|
13
|
+
*/
|
|
14
|
+
export declare class VertexHandler extends BaseHandler {
|
|
15
|
+
private geminiHandler;
|
|
16
|
+
private vertexAnthropicModelFactory;
|
|
17
|
+
private vertexAnthropicModelFactoryPromise;
|
|
18
|
+
private getProjectId;
|
|
19
|
+
private getConfiguredRegion;
|
|
20
|
+
private getRequiredClaudeRegion;
|
|
21
|
+
private getGeminiRegion;
|
|
22
|
+
private ensureGeminiHandler;
|
|
23
|
+
private ensureVertexAnthropicModelFactory;
|
|
24
|
+
getModel(): HandlerModelInfo;
|
|
25
|
+
getMessages(systemPrompt: string, messages: Message[]): unknown;
|
|
26
|
+
createMessage(systemPrompt: string, messages: Message[], tools?: ToolDefinition[]): ApiStream;
|
|
27
|
+
private createMessageInternal;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a Vertex handler
|
|
31
|
+
*/
|
|
32
|
+
export declare function createVertexHandler(config: ProviderConfig): VertexHandler;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @clinebot/providers
|
|
3
|
+
*
|
|
4
|
+
* SDK-like package for creating and managing LLM provider handlers.
|
|
5
|
+
*
|
|
6
|
+
* This package provides a unified interface for interacting with various LLM providers.
|
|
7
|
+
* It standardizes configuration, message formats, and streaming responses.
|
|
8
|
+
*
|
|
9
|
+
* ## Quick Start
|
|
10
|
+
*
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { createHandler, type ProviderConfig } from "@clinebot/providers"
|
|
13
|
+
*
|
|
14
|
+
* const config: ProviderConfig = {
|
|
15
|
+
* providerId: "anthropic",
|
|
16
|
+
* apiKey: process.env.ANTHROPIC_API_KEY,
|
|
17
|
+
* modelId: "claude-sonnet-4-20250514",
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* const handler = createHandler(config)
|
|
21
|
+
* const stream = handler.createMessage("You are a helpful assistant.", messages)
|
|
22
|
+
*
|
|
23
|
+
* for await (const chunk of stream) {
|
|
24
|
+
* if (chunk.type === "text") {
|
|
25
|
+
* process.stdout.write(chunk.text)
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* ## Supported Providers
|
|
31
|
+
*
|
|
32
|
+
* - **anthropic**: Anthropic's Claude models
|
|
33
|
+
* - **claude-code**: Claude Code local subscription provider
|
|
34
|
+
* - **gemini**: Google's Gemini models (including Vertex AI)
|
|
35
|
+
* - **openai**: OpenAI's GPT models
|
|
36
|
+
* - **openai-compat**: Any OpenAI-compatible API (DeepSeek, xAI, Together, etc.)
|
|
37
|
+
*
|
|
38
|
+
* @module
|
|
39
|
+
*/
|
|
40
|
+
export { ApiFormat, type ApiHandler, type ApiStream, type ApiStreamChunk, type ApiStreamReasoningChunk, type ApiStreamTextChunk, type ApiStreamToolCall, type ApiStreamToolCallsChunk, type ApiStreamUsageChunk, type AuthConfig, type AuthSettings, AuthSettingsSchema, type AwsConfig, type AwsSettings, AwsSettingsSchema, type AzureConfig, type AzureSettings, AzureSettingsSchema, type BuiltInProviderId, type CloudConfig, type ContentBlock, createConfig, createProviderConfig, type EndpointConfig, type FileContent, type GcpConfig, type GcpSettings, GcpSettingsSchema, getModelPricing, type HandlerFactory, type HandlerModelInfo, hasCapability, hasModelCapability, type ImageContent, type LazyHandlerFactory, type Message, type MessageRole, type MessageWithMetadata, type ModelCapability, type ModelCatalogConfig, type ModelCatalogSettings, ModelCatalogSettingsSchema, type ModelConfig, type ModelInfo, type ModelPricing, type ModelWithId, type OcaConfig, type OcaSettings, OcaSettingsSchema, type OpenAICompatibleModelInfo, type ProviderCapability, type ProviderCategory, type ProviderConfig, type ProviderDefaultsConfig, type ProviderId, ProviderIdSchema, type ProviderOptions, type ProviderSettings, ProviderSettingsSchema, type ProviderSpecificConfig, parseSettings, type ReasoningConfig, type ReasoningSettings, ReasoningSettingsSchema, type RedactedThinkingContent, type RegionConfig, type SapConfig, type SapSettings, SapSettingsSchema, type SimpleProviderConfig, type SingleCompletionHandler, safeCreateProviderConfig, safeParseSettings, supportsPromptCache, supportsReasoning, type TextContent, type ThinkingConfig, type ThinkingContent, type TokenConfig, type ToolDefinition, type ToolResultContent, type ToolUseContent, toProviderConfig, } from "./types";
|
|
41
|
+
export { AnthropicHandler, AskSageHandler, BaseHandler, ClaudeCodeHandler, CodexHandler, clearLiveModelsCatalogCache, clearPrivateModelsCatalogCache, clearRegistry, createAnthropicHandler, createAskSageHandler, createClaudeCodeHandler, createCodexHandler, createDifyHandler, createGeminiHandler, createMistralHandler, createOpenAIHandler, createOpenAIResponsesHandler, createOpenCodeHandler, createR1Handler, createSapAiCoreHandler, createVertexHandler, DEFAULT_MODELS_CATALOG_URL, DifyHandler, GeminiHandler, getLiveModelsCatalog, getMissingApiKeyError, getProviderConfig, getRegisteredHandler, getRegisteredHandlerAsync, getRegisteredProviderIds, hasRegisteredHandler, isOpenAICompatibleProvider, isRegisteredHandlerAsync, MistralHandler, normalizeProviderId, OPENAI_COMPATIBLE_PROVIDERS, OpenAIBaseHandler, OpenAIResponsesHandler, OpenCodeHandler, R1BaseHandler, registerAsyncHandler, registerHandler, resolveProviderConfig, SapAiCoreHandler, unregisterHandler, VertexHandler, } from "./handlers";
|
|
42
|
+
export { convertToAnthropicMessages, convertToGeminiMessages, convertToOpenAIMessages, convertToolsToAnthropic, convertToolsToGemini, convertToolsToOpenAI, convertToR1Messages, getOpenAIToolParams, type R1Message, } from "./transform";
|
|
43
|
+
export { type AssistantContentBlock, type AssistantRedactedThinkingBlock, type AssistantTextBlock, type AssistantThinkingBlock, type AssistantToolUseBlock, calculateRetryDelay, isRetriableError, type ProcessedResponse, type ReasoningDetailParam, RetriableError, type RetryOptions, retryAsync, retryStream, StreamResponseProcessor, sleep, ToolCallProcessor, type UsageInfo, } from "./utils";
|
|
44
|
+
import { type ApiHandler, type ProviderConfig, type ProviderId } from "./types";
|
|
45
|
+
/**
|
|
46
|
+
* Create an API handler for the specified provider
|
|
47
|
+
*
|
|
48
|
+
* This is the main entry point for creating handlers. It automatically
|
|
49
|
+
* selects the appropriate handler class based on the provider ID.
|
|
50
|
+
*
|
|
51
|
+
* Custom handlers registered via `registerHandler()` take precedence over
|
|
52
|
+
* built-in handlers.
|
|
53
|
+
*
|
|
54
|
+
* @param config - Provider configuration
|
|
55
|
+
* @returns An API handler instance
|
|
56
|
+
* @throws Error if the provider has an async handler - use `createHandlerAsync()` instead
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const handler = createHandler({
|
|
61
|
+
* providerId: "anthropic",
|
|
62
|
+
* apiKey: "sk-...",
|
|
63
|
+
* modelId: "claude-sonnet-4-20250514",
|
|
64
|
+
* })
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function createHandler(config: ProviderConfig): ApiHandler;
|
|
68
|
+
/**
|
|
69
|
+
* Create an API handler asynchronously
|
|
70
|
+
*
|
|
71
|
+
* Use this when you have handlers registered with `registerAsyncHandler()`.
|
|
72
|
+
* This function works with both sync and async registered handlers.
|
|
73
|
+
*
|
|
74
|
+
* @param config - Provider configuration
|
|
75
|
+
* @returns Promise resolving to an API handler instance
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* // Register an async handler for lazy loading
|
|
80
|
+
* registerAsyncHandler("my-provider", async (config) => {
|
|
81
|
+
* const { MyHandler } = await import("./my-handler")
|
|
82
|
+
* return new MyHandler(config)
|
|
83
|
+
* })
|
|
84
|
+
*
|
|
85
|
+
* // Use createHandlerAsync to get the handler
|
|
86
|
+
* const handler = await createHandlerAsync({
|
|
87
|
+
* providerId: "my-provider",
|
|
88
|
+
* modelId: "my-model",
|
|
89
|
+
* })
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export declare function createHandlerAsync(config: ProviderConfig): Promise<ApiHandler>;
|
|
93
|
+
/**
|
|
94
|
+
* List of all built-in provider IDs
|
|
95
|
+
*/
|
|
96
|
+
export declare const BUILT_IN_PROVIDERS: ProviderId[];
|
|
97
|
+
/**
|
|
98
|
+
* Check if a provider ID is supported (built-in or registered)
|
|
99
|
+
*/
|
|
100
|
+
export declare function isProviderSupported(providerId: string): boolean;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { OPENAI_COMPATIBLE_PROVIDERS, type ProviderDefaults, } from "./handlers/providers";
|
|
2
|
+
export { getModelPricing, hasModelCapability, type ModelCapability, type ModelInfo, type ModelPricing, normalizeProviderId, type ProviderCapability, type ProviderId, type ProviderSettings, ProviderSettingsSchema, parseSettings, supportsModelThinking, toProviderConfig, } from "./types/index";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { OPENAI_COMPATIBLE_PROVIDERS, type ProviderDefaults, resolveProviderConfig, } from "./handlers/providers";
|
|
2
|
+
export { BUILT_IN_PROVIDERS, createHandler, createHandlerAsync, isProviderSupported, } from "./index";
|
|
3
|
+
export { type ApiHandler, type ApiStream, type ApiStreamChunk, type ApiStreamReasoningChunk, type ApiStreamTextChunk, type ApiStreamToolCall, type ApiStreamToolCallsChunk, type ApiStreamUsageChunk, type ContentBlock, type FileContent, getModelPricing, type HandlerFactory, type HandlerModelInfo, hasModelCapability, type ImageContent, type LazyHandlerFactory, type Message, type MessageRole, type MessageWithMetadata, type ModelCapability, type ModelInfo, type ModelPricing, normalizeProviderId, type ProviderCapability, type ProviderConfig, type ProviderId, type ProviderSettings, ProviderSettingsSchema, parseSettings, type RedactedThinkingContent, supportsModelThinking, type TextContent, type ThinkingContent, type ToolDefinition, type ToolResultContent, type ToolUseContent, toProviderConfig, } from "./types/index";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ModelInfo, ProviderCapability } from "../../models/schemas/index";
|
|
2
|
+
export interface OpenAICompatibleProviderDefaults {
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
modelId: string;
|
|
5
|
+
knownModels?: Record<string, ModelInfo>;
|
|
6
|
+
capabilities?: ProviderCapability[];
|
|
7
|
+
}
|
|
8
|
+
export declare function buildOpenAICompatibleProviderDefaults(options?: {
|
|
9
|
+
includeKnownModels?: boolean;
|
|
10
|
+
}): Record<string, OpenAICompatibleProviderDefaults>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Message } from "../types/messages";
|
|
2
|
+
export type AiSdkMessagePart = Record<string, unknown>;
|
|
3
|
+
export type AiSdkMessage = {
|
|
4
|
+
role: "system" | "user" | "assistant" | "tool";
|
|
5
|
+
content: string | AiSdkMessagePart[];
|
|
6
|
+
};
|
|
7
|
+
export declare function toAiSdkMessages(systemContent: string | AiSdkMessagePart[], messages: Message[], options?: {
|
|
8
|
+
assistantToolCallArgKey?: "args" | "input";
|
|
9
|
+
}): AiSdkMessage[];
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic Message Format Converter
|
|
3
|
+
*
|
|
4
|
+
* Converts our unified Message format to Anthropic's MessageParam format.
|
|
5
|
+
*/
|
|
6
|
+
import type { Anthropic } from "@anthropic-ai/sdk";
|
|
7
|
+
import type { Message } from "../types/messages";
|
|
8
|
+
type AnthropicMessage = Anthropic.MessageParam;
|
|
9
|
+
/**
|
|
10
|
+
* Convert messages to Anthropic format
|
|
11
|
+
*
|
|
12
|
+
* @param messages - Messages to convert
|
|
13
|
+
* @param enableCaching - Whether to add cache control markers
|
|
14
|
+
*/
|
|
15
|
+
export declare function convertToAnthropicMessages(messages: Message[], enableCaching?: boolean): AnthropicMessage[];
|
|
16
|
+
/**
|
|
17
|
+
* Convert tool definitions to Anthropic format
|
|
18
|
+
*/
|
|
19
|
+
export declare function convertToolsToAnthropic(tools: Array<{
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
inputSchema: unknown;
|
|
23
|
+
}>): Anthropic.Tool[];
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { FileContent, ImageContent, TextContent } from "../types/messages";
|
|
2
|
+
export declare function normalizeToolUseInput(input: Record<string, unknown>): Record<string, unknown>;
|
|
3
|
+
export declare function serializeToolResultContent(content: string | Array<TextContent | ImageContent | FileContent>): string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini Message Format Converter
|
|
3
|
+
*
|
|
4
|
+
* Converts our unified Message format to Google Gemini's Content format.
|
|
5
|
+
*/
|
|
6
|
+
import type { Content, FunctionDeclaration } from "@google/genai";
|
|
7
|
+
import type { Message } from "../types/messages";
|
|
8
|
+
/**
|
|
9
|
+
* Convert messages to Gemini format
|
|
10
|
+
*/
|
|
11
|
+
export declare function convertToGeminiMessages(messages: Message[]): Content[];
|
|
12
|
+
/**
|
|
13
|
+
* Convert tool definitions to Gemini format
|
|
14
|
+
*/
|
|
15
|
+
export declare function convertToolsToGemini(tools: Array<{
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
inputSchema: unknown;
|
|
19
|
+
}>): FunctionDeclaration[];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transform Module Index
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all message format converters.
|
|
5
|
+
*/
|
|
6
|
+
export { type AiSdkMessage, type AiSdkMessagePart, toAiSdkMessages, } from "./ai-sdk-community-format";
|
|
7
|
+
export { convertToAnthropicMessages, convertToolsToAnthropic, } from "./anthropic-format";
|
|
8
|
+
export { convertToGeminiMessages, convertToolsToGemini } from "./gemini-format";
|
|
9
|
+
export { convertToOpenAIMessages, convertToolsToOpenAI, getOpenAIToolParams, } from "./openai-format";
|
|
10
|
+
export { convertToR1Messages, type R1Message } from "./r1-format";
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Message Format Converter
|
|
3
|
+
*
|
|
4
|
+
* Converts our unified Message format to OpenAI's ChatCompletionMessageParam format.
|
|
5
|
+
*/
|
|
6
|
+
import type OpenAI from "openai";
|
|
7
|
+
import type { Message } from "../types/messages";
|
|
8
|
+
type OpenAIMessage = OpenAI.Chat.ChatCompletionMessageParam;
|
|
9
|
+
/**
|
|
10
|
+
* Convert messages to OpenAI format
|
|
11
|
+
*/
|
|
12
|
+
export declare function convertToOpenAIMessages(messages: Message[]): OpenAIMessage[];
|
|
13
|
+
/**
|
|
14
|
+
* Convert tool definitions to OpenAI format
|
|
15
|
+
*/
|
|
16
|
+
export declare function convertToolsToOpenAI(tools: Array<{
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
inputSchema: unknown;
|
|
20
|
+
}>, options?: {
|
|
21
|
+
strict?: boolean;
|
|
22
|
+
}): OpenAI.Chat.ChatCompletionTool[];
|
|
23
|
+
/**
|
|
24
|
+
* Build tool params for OpenAI request
|
|
25
|
+
*/
|
|
26
|
+
export declare function getOpenAIToolParams(tools?: Array<{
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
inputSchema: unknown;
|
|
30
|
+
}>, options?: {
|
|
31
|
+
strict?: boolean;
|
|
32
|
+
}): {
|
|
33
|
+
tools?: OpenAI.Chat.ChatCompletionTool[];
|
|
34
|
+
tool_choice?: OpenAI.Chat.ChatCompletionToolChoiceOption;
|
|
35
|
+
};
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* R1 Message Format Converter
|
|
3
|
+
*
|
|
4
|
+
* Handles the special message format required by DeepSeek Reasoner and other R1-based models.
|
|
5
|
+
* Key requirements:
|
|
6
|
+
* 1. Consecutive messages with the same role must be merged
|
|
7
|
+
* 2. reasoning_content should be passed back during tool calling in the same turn
|
|
8
|
+
* 3. No temperature parameter for reasoner models
|
|
9
|
+
*/
|
|
10
|
+
import type OpenAI from "openai";
|
|
11
|
+
import type { Message } from "../types/messages";
|
|
12
|
+
/**
|
|
13
|
+
* DeepSeek Reasoner message format with reasoning_content support
|
|
14
|
+
*/
|
|
15
|
+
export type R1Message = OpenAI.Chat.ChatCompletionMessageParam & {
|
|
16
|
+
reasoning_content?: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Convert messages to R1 format
|
|
20
|
+
*
|
|
21
|
+
* This handles:
|
|
22
|
+
* 1. Converting content blocks to OpenAI format
|
|
23
|
+
* 2. Merging consecutive messages with the same role
|
|
24
|
+
* 3. Adding reasoning_content for tool calling continuations
|
|
25
|
+
*/
|
|
26
|
+
export declare function convertToR1Messages(messages: Message[]): R1Message[];
|