@wengine-ai/llms 2.3.231 → 2.3.234
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 +10 -5
- package/dist/api/middleware.d.ts +9 -0
- package/dist/api/routes.d.ts +24 -0
- package/dist/ccr/admin-routes.d.ts +6 -0
- package/dist/ccr/agents/image.agent.d.ts +10 -0
- package/dist/ccr/agents/index.d.ts +28 -0
- package/dist/ccr/agents/type.d.ts +13 -0
- package/dist/ccr/auth.d.ts +8 -0
- package/dist/ccr/claude-config-init.d.ts +1 -0
- package/dist/ccr/codex-accounts.d.ts +9 -0
- package/dist/ccr/codex-usage-cache.d.ts +2 -0
- package/dist/ccr/config.d.ts +6 -0
- package/dist/ccr/create-server.d.ts +6 -0
- package/dist/ccr/health-reconcile.d.ts +22 -0
- package/dist/ccr/models.d.ts +26 -0
- package/dist/ccr/pino-retention.d.ts +1 -0
- package/dist/ccr/plugin-registration.d.ts +6 -0
- package/dist/ccr/request-pipeline.d.ts +37 -0
- package/dist/ccr/usage-merge.d.ts +32 -0
- package/dist/ccr/usage-store.d.ts +109 -0
- package/dist/cjs/server.cjs +337 -350
- package/dist/cjs/server.cjs.map +4 -4
- package/dist/clients/adapters.d.ts +22 -0
- package/dist/esm/server.mjs +338 -350
- package/dist/esm/server.mjs.map +4 -4
- package/dist/index.html +227 -0
- package/dist/plugins/index.d.ts +4 -0
- package/dist/plugins/output/console-handler.d.ts +23 -0
- package/dist/plugins/output/index.d.ts +29 -0
- package/dist/plugins/output/output-manager.d.ts +108 -0
- package/dist/plugins/output/temp-file-handler.d.ts +48 -0
- package/dist/plugins/output/types.d.ts +157 -0
- package/dist/plugins/output/webhook-handler.d.ts +35 -0
- package/dist/plugins/plugin-manager.d.ts +62 -0
- package/dist/plugins/token-speed.d.ts +5 -0
- package/dist/plugins/types.d.ts +25 -0
- package/dist/server.d.ts +110 -0
- package/dist/services/active-probe.d.ts +96 -0
- package/dist/services/config.d.ts +30 -0
- package/dist/services/provider-health.d.ts +135 -0
- package/dist/services/provider.d.ts +32 -0
- package/dist/services/proxy.d.ts +58 -0
- package/dist/services/quota-adapters.d.ts +16 -0
- package/dist/services/quota-store.d.ts +12 -0
- package/dist/services/rate-limit.d.ts +26 -0
- package/dist/services/tokenizer.d.ts +45 -0
- package/dist/services/transformer.d.ts +28 -0
- package/dist/tiktoken_bg.wasm +0 -0
- package/dist/tokenizer/api-tokenizer.d.ts +46 -0
- package/dist/tokenizer/huggingface-tokenizer.d.ts +52 -0
- package/dist/tokenizer/tiktoken-tokenizer.d.ts +20 -0
- package/dist/transformer/anthropic.transformer.d.ts +18 -0
- package/dist/transformer/cerebras.transformer.d.ts +16 -0
- package/dist/transformer/cleancache.transformer.d.ts +6 -0
- package/dist/transformer/customparams.transformer.d.ts +30 -0
- package/dist/transformer/deepseek.transformer.d.ts +7 -0
- package/dist/transformer/enhancetool.transformer.d.ts +5 -0
- package/dist/transformer/forcereasoning.transformer.d.ts +7 -0
- package/dist/transformer/gemini.transformer.d.ts +10 -0
- package/dist/transformer/groq.transformer.d.ts +7 -0
- package/dist/transformer/index.d.ts +49 -0
- package/dist/transformer/kimi.transformer.d.ts +17 -0
- package/dist/transformer/maxcompletiontokens.transformer.d.ts +6 -0
- package/dist/transformer/maxtoken.transformer.d.ts +9 -0
- package/dist/transformer/openai.responses.transformer.d.ts +28 -0
- package/dist/transformer/openai.transformer.d.ts +5 -0
- package/dist/transformer/opencode.transformer.d.ts +29 -0
- package/dist/transformer/openrouter.transformer.d.ts +9 -0
- package/dist/transformer/reasoning.transformer.d.ts +10 -0
- package/dist/transformer/sampling.transformer.d.ts +13 -0
- package/dist/transformer/streamoptions.transformer.d.ts +6 -0
- package/dist/transformer/tooluse.transformer.d.ts +7 -0
- package/dist/transformer/vercel.transformer.d.ts +10 -0
- package/dist/transformer/vertex-claude.transformer.d.ts +8 -0
- package/dist/transformer/vertex-gemini.transformer.d.ts +8 -0
- package/dist/types/llm.d.ts +233 -0
- package/dist/types/transformer.d.ts +23 -0
- package/dist/utils/cache.d.ts +17 -0
- package/dist/utils/converter.d.ts +12 -0
- package/dist/utils/debug-log.d.ts +24 -0
- package/dist/utils/fallback-promotion.d.ts +65 -0
- package/dist/utils/gemini.util.d.ts +11 -0
- package/dist/utils/image.d.ts +1 -0
- package/dist/utils/request.d.ts +2 -0
- package/dist/utils/router.d.ts +84 -0
- package/dist/utils/session-id.d.ts +2 -0
- package/dist/utils/sse/SSEParser.transform.d.ts +6 -0
- package/dist/utils/sse/SSESerializer.transform.d.ts +3 -0
- package/dist/utils/sse/index.d.ts +3 -0
- package/dist/utils/sse/rewriteStream.d.ts +9 -0
- package/dist/utils/thinking.d.ts +2 -0
- package/dist/utils/toolArgumentsParser.d.ts +8 -0
- package/dist/utils/vertex-claude.util.d.ts +42 -0
- package/package.json +13 -6
- package/vitest.config.ts +1 -0
- package/dist/index.d.ts +0 -175
- package/dist/plugins.d.ts +0 -42
- package/dist/provider-health.d.ts +0 -39
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer, TransformerOptions } from "../types/transformer";
|
|
3
|
+
export interface CustomParamsOptions extends TransformerOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Custom parameters to inject into the request body
|
|
6
|
+
* Any key-value pairs will be added to the request
|
|
7
|
+
* Supports: string, number, boolean, object, array
|
|
8
|
+
*/
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Transformer for injecting dynamic custom parameters into LLM requests
|
|
13
|
+
* Allows runtime configuration of arbitrary parameters that get merged
|
|
14
|
+
* into the request body using deep merge strategy
|
|
15
|
+
*/
|
|
16
|
+
export declare class CustomParamsTransformer implements Transformer {
|
|
17
|
+
static TransformerName: string;
|
|
18
|
+
private options;
|
|
19
|
+
constructor(options?: CustomParamsOptions);
|
|
20
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
21
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
22
|
+
/**
|
|
23
|
+
* Deep merge two objects recursively
|
|
24
|
+
*/
|
|
25
|
+
private deepMergeObjects;
|
|
26
|
+
/**
|
|
27
|
+
* Clone a value to prevent reference issues
|
|
28
|
+
*/
|
|
29
|
+
private cloneValue;
|
|
30
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class DeepseekTransformer implements Transformer {
|
|
4
|
+
name: string;
|
|
5
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
6
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class ForceReasoningTransformer implements Transformer {
|
|
4
|
+
name: string;
|
|
5
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
6
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LLMProvider, UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
import { transformRequestOut } from "../utils/gemini.util";
|
|
4
|
+
export declare class GeminiTransformer implements Transformer {
|
|
5
|
+
name: string;
|
|
6
|
+
endPoint: string;
|
|
7
|
+
transformRequestIn(request: UnifiedChatRequest, provider: LLMProvider): Promise<Record<string, any>>;
|
|
8
|
+
transformRequestOut: typeof transformRequestOut;
|
|
9
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class GroqTransformer implements Transformer {
|
|
4
|
+
name: string;
|
|
5
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
6
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { AnthropicTransformer } from "./anthropic.transformer";
|
|
2
|
+
import { GeminiTransformer } from "./gemini.transformer";
|
|
3
|
+
import { VertexGeminiTransformer } from "./vertex-gemini.transformer";
|
|
4
|
+
import { DeepseekTransformer } from "./deepseek.transformer";
|
|
5
|
+
import { TooluseTransformer } from "./tooluse.transformer";
|
|
6
|
+
import { OpenrouterTransformer } from "./openrouter.transformer";
|
|
7
|
+
import { MaxTokenTransformer } from "./maxtoken.transformer";
|
|
8
|
+
import { GroqTransformer } from "./groq.transformer";
|
|
9
|
+
import { CleancacheTransformer } from "./cleancache.transformer";
|
|
10
|
+
import { EnhanceToolTransformer } from "./enhancetool.transformer";
|
|
11
|
+
import { ReasoningTransformer } from "./reasoning.transformer";
|
|
12
|
+
import { SamplingTransformer } from "./sampling.transformer";
|
|
13
|
+
import { MaxCompletionTokens } from "./maxcompletiontokens.transformer";
|
|
14
|
+
import { VertexClaudeTransformer } from "./vertex-claude.transformer";
|
|
15
|
+
import { CerebrasTransformer } from "./cerebras.transformer";
|
|
16
|
+
import { StreamOptionsTransformer } from "./streamoptions.transformer";
|
|
17
|
+
import { OpenAITransformer } from "./openai.transformer";
|
|
18
|
+
import { CustomParamsTransformer } from "./customparams.transformer";
|
|
19
|
+
import { VercelTransformer } from "./vercel.transformer";
|
|
20
|
+
import { OpenAIResponsesTransformer } from "./openai.responses.transformer";
|
|
21
|
+
import { ForceReasoningTransformer } from "./forcereasoning.transformer";
|
|
22
|
+
import { KimiTransformer } from "./kimi.transformer";
|
|
23
|
+
import { OpenCodeTransformer } from "./opencode.transformer";
|
|
24
|
+
declare const _default: {
|
|
25
|
+
AnthropicTransformer: typeof AnthropicTransformer;
|
|
26
|
+
GeminiTransformer: typeof GeminiTransformer;
|
|
27
|
+
VertexGeminiTransformer: typeof VertexGeminiTransformer;
|
|
28
|
+
VertexClaudeTransformer: typeof VertexClaudeTransformer;
|
|
29
|
+
DeepseekTransformer: typeof DeepseekTransformer;
|
|
30
|
+
TooluseTransformer: typeof TooluseTransformer;
|
|
31
|
+
OpenrouterTransformer: typeof OpenrouterTransformer;
|
|
32
|
+
OpenAITransformer: typeof OpenAITransformer;
|
|
33
|
+
MaxTokenTransformer: typeof MaxTokenTransformer;
|
|
34
|
+
GroqTransformer: typeof GroqTransformer;
|
|
35
|
+
CleancacheTransformer: typeof CleancacheTransformer;
|
|
36
|
+
EnhanceToolTransformer: typeof EnhanceToolTransformer;
|
|
37
|
+
ReasoningTransformer: typeof ReasoningTransformer;
|
|
38
|
+
SamplingTransformer: typeof SamplingTransformer;
|
|
39
|
+
MaxCompletionTokens: typeof MaxCompletionTokens;
|
|
40
|
+
CerebrasTransformer: typeof CerebrasTransformer;
|
|
41
|
+
StreamOptionsTransformer: typeof StreamOptionsTransformer;
|
|
42
|
+
CustomParamsTransformer: typeof CustomParamsTransformer;
|
|
43
|
+
VercelTransformer: typeof VercelTransformer;
|
|
44
|
+
OpenAIResponsesTransformer: typeof OpenAIResponsesTransformer;
|
|
45
|
+
ForceReasoningTransformer: typeof ForceReasoningTransformer;
|
|
46
|
+
KimiTransformer: typeof KimiTransformer;
|
|
47
|
+
OpenCodeTransformer: typeof OpenCodeTransformer;
|
|
48
|
+
};
|
|
49
|
+
export default _default;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
/**
|
|
4
|
+
* Kimi (Moonshot AI) Transformer
|
|
5
|
+
*
|
|
6
|
+
* Handles Kimi-specific requirements for thinking mode:
|
|
7
|
+
* - When thinking is enabled, assistant messages with tool_calls must have reasoning_content
|
|
8
|
+
* - Preserves reasoning_content_signature for multi-turn conversations
|
|
9
|
+
*
|
|
10
|
+
* Kimi API requires reasoning_content in assistant tool call messages when thinking mode is active.
|
|
11
|
+
* Without this, the API returns: "thinking is enabled but reasoning_content is missing in assistant tool call message"
|
|
12
|
+
*/
|
|
13
|
+
export declare class KimiTransformer implements Transformer {
|
|
14
|
+
name: string;
|
|
15
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
16
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class MaxCompletionTokens implements Transformer {
|
|
4
|
+
static TransformerName: string;
|
|
5
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer, TransformerOptions } from "../types/transformer";
|
|
3
|
+
export declare class MaxTokenTransformer implements Transformer {
|
|
4
|
+
private readonly options?;
|
|
5
|
+
static TransformerName: string;
|
|
6
|
+
max_tokens: number;
|
|
7
|
+
constructor(options?: TransformerOptions | undefined);
|
|
8
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class OpenAIResponsesTransformer implements Transformer {
|
|
4
|
+
name: string;
|
|
5
|
+
endPoint: string;
|
|
6
|
+
private getCacheReadInputTokens;
|
|
7
|
+
private getCacheCreationInputTokens;
|
|
8
|
+
private buildResponsesUsage;
|
|
9
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
10
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
11
|
+
private normalizeRequestContent;
|
|
12
|
+
transformResponseIn(response: Response, context?: any): Promise<Response>;
|
|
13
|
+
/**
|
|
14
|
+
* Prepend a string chunk to the beginning of an existing ReadableStream.
|
|
15
|
+
* Used when we've peeked at the first chunk and need to feed it back into
|
|
16
|
+
* the converter along with the rest of the stream.
|
|
17
|
+
*/
|
|
18
|
+
private prependToStream;
|
|
19
|
+
/**
|
|
20
|
+
* Convert an OpenAI Chat SSE stream to Responses API SSE events.
|
|
21
|
+
* Handles choices[0].delta.content, choices[0].delta.tool_calls, and finish_reason.
|
|
22
|
+
*/
|
|
23
|
+
private convertOpenAIChatStreamToResponsesAPI;
|
|
24
|
+
private convertAnthropicStreamToResponsesAPI;
|
|
25
|
+
private wrapChatInResponses;
|
|
26
|
+
private convertResponseToChat;
|
|
27
|
+
private buildImageContent;
|
|
28
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer, TransformerOptions } from "../types/transformer";
|
|
3
|
+
/**
|
|
4
|
+
* OpenCode Transformer
|
|
5
|
+
*
|
|
6
|
+
* Handles requests to OpenCode (opencode.ai) providers which expose an
|
|
7
|
+
* OpenAI-compatible /v1/chat/completions endpoint backed by GLM/Zhipu models.
|
|
8
|
+
*
|
|
9
|
+
* Key responsibilities:
|
|
10
|
+
* - Declares endPoint="/v1/chat/completions" so CCR does NOT bypass the
|
|
11
|
+
* transformer chain. Without this declaration, a provider whose only
|
|
12
|
+
* resolved transformer is AnthropicTransformer would trigger bypass mode,
|
|
13
|
+
* sending Anthropic-format tools ({name,description,input_schema}) to an
|
|
14
|
+
* OpenAI-compatible API that requires {type:"function",function:{…}}.
|
|
15
|
+
* - Cleans cache_control and Anthropic-specific image_url fields that GLM
|
|
16
|
+
* does not understand.
|
|
17
|
+
* - Converts reasoning_content in streaming/non-streaming responses to the
|
|
18
|
+
* thinking format expected by Claude Code.
|
|
19
|
+
* - Replaces purely-numeric tool_call IDs with UUID-based IDs to avoid
|
|
20
|
+
* downstream parsing issues.
|
|
21
|
+
*/
|
|
22
|
+
export declare class OpenCodeTransformer implements Transformer {
|
|
23
|
+
private readonly options?;
|
|
24
|
+
static TransformerName: string;
|
|
25
|
+
endPoint: string;
|
|
26
|
+
constructor(options?: TransformerOptions | undefined);
|
|
27
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
28
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer, TransformerOptions } from "../types/transformer";
|
|
3
|
+
export declare class OpenrouterTransformer implements Transformer {
|
|
4
|
+
private readonly options?;
|
|
5
|
+
static TransformerName: string;
|
|
6
|
+
constructor(options?: TransformerOptions | undefined);
|
|
7
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
8
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer, TransformerOptions } from "../types/transformer";
|
|
3
|
+
export declare class ReasoningTransformer implements Transformer {
|
|
4
|
+
private readonly options?;
|
|
5
|
+
static TransformerName: string;
|
|
6
|
+
enable: any;
|
|
7
|
+
constructor(options?: TransformerOptions | undefined);
|
|
8
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
9
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer, TransformerOptions } from "../types/transformer";
|
|
3
|
+
export declare class SamplingTransformer implements Transformer {
|
|
4
|
+
private readonly options?;
|
|
5
|
+
static TransformerName: string;
|
|
6
|
+
max_tokens: number;
|
|
7
|
+
temperature: number;
|
|
8
|
+
top_p: number;
|
|
9
|
+
top_k: number;
|
|
10
|
+
repetition_penalty: number;
|
|
11
|
+
constructor(options?: TransformerOptions | undefined);
|
|
12
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class StreamOptionsTransformer implements Transformer {
|
|
4
|
+
name: string;
|
|
5
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class TooluseTransformer implements Transformer {
|
|
4
|
+
name: string;
|
|
5
|
+
transformRequestIn(request: UnifiedChatRequest): UnifiedChatRequest;
|
|
6
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer, TransformerOptions } from "../types/transformer";
|
|
3
|
+
export declare class VercelTransformer implements Transformer {
|
|
4
|
+
private readonly options?;
|
|
5
|
+
static TransformerName: string;
|
|
6
|
+
endPoint: string;
|
|
7
|
+
constructor(options?: TransformerOptions | undefined);
|
|
8
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
9
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LLMProvider, UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class VertexClaudeTransformer implements Transformer {
|
|
4
|
+
name: string;
|
|
5
|
+
transformRequestIn(request: UnifiedChatRequest, provider: LLMProvider): Promise<Record<string, any>>;
|
|
6
|
+
transformRequestOut(request: Record<string, any>): Promise<UnifiedChatRequest>;
|
|
7
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LLMProvider, UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class VertexGeminiTransformer implements Transformer {
|
|
4
|
+
name: string;
|
|
5
|
+
transformRequestIn(request: UnifiedChatRequest, provider: LLMProvider): Promise<Record<string, any>>;
|
|
6
|
+
transformRequestOut(request: Record<string, any>): Promise<UnifiedChatRequest>;
|
|
7
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import type { ChatCompletionMessageParam as OpenAIMessage } from "openai/resources/chat/completions";
|
|
2
|
+
import type { MessageParam as AnthropicMessage } from "@anthropic-ai/sdk/resources/messages";
|
|
3
|
+
import type { ChatCompletionChunk } from "openai/resources/chat/completions";
|
|
4
|
+
import type { MessageStreamEvent } from "@anthropic-ai/sdk/resources/messages";
|
|
5
|
+
import type { ChatCompletionTool } from "openai/resources/chat/completions";
|
|
6
|
+
import type { Tool as AnthropicTool } from "@anthropic-ai/sdk/resources/messages";
|
|
7
|
+
import { Transformer } from "./transformer";
|
|
8
|
+
import type { ProviderTokenizerConfig } from "./tokenizer";
|
|
9
|
+
export interface UrlCitation {
|
|
10
|
+
url: string;
|
|
11
|
+
title: string;
|
|
12
|
+
content: string;
|
|
13
|
+
start_index: number;
|
|
14
|
+
end_index: number;
|
|
15
|
+
}
|
|
16
|
+
export interface Annotation {
|
|
17
|
+
type: "url_citation";
|
|
18
|
+
url_citation?: UrlCitation;
|
|
19
|
+
}
|
|
20
|
+
export interface TextContent {
|
|
21
|
+
type: "text";
|
|
22
|
+
text: string;
|
|
23
|
+
cache_control?: {
|
|
24
|
+
type?: string;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface ImageContent {
|
|
28
|
+
type: "image_url";
|
|
29
|
+
image_url: {
|
|
30
|
+
url: string;
|
|
31
|
+
};
|
|
32
|
+
media_type: string;
|
|
33
|
+
}
|
|
34
|
+
export type MessageContent = TextContent | ImageContent;
|
|
35
|
+
export interface UnifiedMessage {
|
|
36
|
+
role: "user" | "assistant" | "system" | "tool";
|
|
37
|
+
content: string | null | MessageContent[];
|
|
38
|
+
tool_calls?: Array<{
|
|
39
|
+
id: string;
|
|
40
|
+
type: "function";
|
|
41
|
+
function: {
|
|
42
|
+
name: string;
|
|
43
|
+
arguments: string;
|
|
44
|
+
};
|
|
45
|
+
}>;
|
|
46
|
+
tool_call_id?: string;
|
|
47
|
+
cache_control?: {
|
|
48
|
+
type?: string;
|
|
49
|
+
};
|
|
50
|
+
thinking?: {
|
|
51
|
+
content: string;
|
|
52
|
+
signature?: string;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export interface UnifiedTool {
|
|
56
|
+
type: "function";
|
|
57
|
+
function: {
|
|
58
|
+
name: string;
|
|
59
|
+
description: string;
|
|
60
|
+
parameters: {
|
|
61
|
+
type: "object";
|
|
62
|
+
properties: Record<string, any>;
|
|
63
|
+
required?: string[];
|
|
64
|
+
additionalProperties?: boolean;
|
|
65
|
+
$schema?: string;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export type ThinkLevel = "none" | "low" | "medium" | "high";
|
|
70
|
+
export interface UnifiedChatRequest {
|
|
71
|
+
messages: UnifiedMessage[];
|
|
72
|
+
model: string;
|
|
73
|
+
max_tokens?: number;
|
|
74
|
+
temperature?: number;
|
|
75
|
+
stream?: boolean;
|
|
76
|
+
tools?: UnifiedTool[];
|
|
77
|
+
tool_choice?: "auto" | "none" | "required" | string | {
|
|
78
|
+
type: "function";
|
|
79
|
+
function: {
|
|
80
|
+
name: string;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
reasoning?: {
|
|
84
|
+
effort?: ThinkLevel;
|
|
85
|
+
max_tokens?: number;
|
|
86
|
+
enabled?: boolean;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export interface UnifiedChatResponse {
|
|
90
|
+
id: string;
|
|
91
|
+
model: string;
|
|
92
|
+
content: string | null;
|
|
93
|
+
usage?: {
|
|
94
|
+
prompt_tokens: number;
|
|
95
|
+
completion_tokens: number;
|
|
96
|
+
total_tokens: number;
|
|
97
|
+
};
|
|
98
|
+
tool_calls?: Array<{
|
|
99
|
+
id: string;
|
|
100
|
+
type: "function";
|
|
101
|
+
function: {
|
|
102
|
+
name: string;
|
|
103
|
+
arguments: string;
|
|
104
|
+
};
|
|
105
|
+
}>;
|
|
106
|
+
annotations?: Annotation[];
|
|
107
|
+
}
|
|
108
|
+
export interface StreamChunk {
|
|
109
|
+
id: string;
|
|
110
|
+
object: string;
|
|
111
|
+
created: number;
|
|
112
|
+
model: string;
|
|
113
|
+
choices?: Array<{
|
|
114
|
+
index: number;
|
|
115
|
+
delta: {
|
|
116
|
+
role?: string;
|
|
117
|
+
content?: string;
|
|
118
|
+
thinking?: {
|
|
119
|
+
content?: string;
|
|
120
|
+
signature?: string;
|
|
121
|
+
};
|
|
122
|
+
tool_calls?: Array<{
|
|
123
|
+
id?: string;
|
|
124
|
+
type?: "function";
|
|
125
|
+
function?: {
|
|
126
|
+
name?: string;
|
|
127
|
+
arguments?: string;
|
|
128
|
+
};
|
|
129
|
+
}>;
|
|
130
|
+
annotations?: Annotation[];
|
|
131
|
+
};
|
|
132
|
+
finish_reason?: string | null;
|
|
133
|
+
}>;
|
|
134
|
+
}
|
|
135
|
+
export type AnthropicStreamEvent = MessageStreamEvent;
|
|
136
|
+
export type OpenAIStreamChunk = ChatCompletionChunk;
|
|
137
|
+
export interface OpenAIChatRequest {
|
|
138
|
+
messages: OpenAIMessage[];
|
|
139
|
+
model: string;
|
|
140
|
+
max_tokens?: number;
|
|
141
|
+
temperature?: number;
|
|
142
|
+
stream?: boolean;
|
|
143
|
+
tools?: ChatCompletionTool[];
|
|
144
|
+
tool_choice?: "auto" | "none" | {
|
|
145
|
+
type: "function";
|
|
146
|
+
function: {
|
|
147
|
+
name: string;
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export interface AnthropicChatRequest {
|
|
152
|
+
messages: AnthropicMessage[];
|
|
153
|
+
model: string;
|
|
154
|
+
max_tokens: number;
|
|
155
|
+
temperature?: number;
|
|
156
|
+
stream?: boolean;
|
|
157
|
+
system?: string | Array<Record<string, any>>;
|
|
158
|
+
tools?: AnthropicTool[];
|
|
159
|
+
tool_choice?: {
|
|
160
|
+
type: "auto";
|
|
161
|
+
} | {
|
|
162
|
+
type: "tool";
|
|
163
|
+
name: string;
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
export interface ConversionOptions {
|
|
167
|
+
targetProvider: "openai" | "anthropic";
|
|
168
|
+
sourceProvider: "openai" | "anthropic";
|
|
169
|
+
}
|
|
170
|
+
export interface LLMProvider {
|
|
171
|
+
name: string;
|
|
172
|
+
baseUrl: string;
|
|
173
|
+
apiKey: string;
|
|
174
|
+
models: string[];
|
|
175
|
+
/** Optional token for quota/billing APIs that require separate authentication (e.g. Zhipu web console JWT) */
|
|
176
|
+
quotaToken?: string;
|
|
177
|
+
transformer?: {
|
|
178
|
+
[key: string]: {
|
|
179
|
+
use?: Transformer[];
|
|
180
|
+
};
|
|
181
|
+
} & {
|
|
182
|
+
use?: Transformer[];
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* How the provider reports input_tokens in usage responses.
|
|
186
|
+
* - 'exclusive' (default): input_tokens is net of cache, total = input + cache_read + cache_creation + output
|
|
187
|
+
* - 'inclusive': input_tokens already includes cache tokens, total = input + output
|
|
188
|
+
*/
|
|
189
|
+
cacheMode?: 'exclusive' | 'inclusive';
|
|
190
|
+
enabled?: boolean;
|
|
191
|
+
proxyEnabled?: boolean;
|
|
192
|
+
wakeupEnabled?: boolean;
|
|
193
|
+
wakeupTime?: string;
|
|
194
|
+
wakeupModel?: string;
|
|
195
|
+
}
|
|
196
|
+
export type RegisterProviderRequest = LLMProvider;
|
|
197
|
+
export interface ModelRoute {
|
|
198
|
+
provider: string;
|
|
199
|
+
model: string;
|
|
200
|
+
fullModel: string;
|
|
201
|
+
}
|
|
202
|
+
export interface RequestRouteInfo {
|
|
203
|
+
provider: LLMProvider;
|
|
204
|
+
originalModel: string;
|
|
205
|
+
targetModel: string;
|
|
206
|
+
}
|
|
207
|
+
export interface ConfigProvider {
|
|
208
|
+
name: string;
|
|
209
|
+
api_base_url: string;
|
|
210
|
+
api_key: string;
|
|
211
|
+
models: string[];
|
|
212
|
+
/** Optional token for quota/billing APIs that require separate authentication */
|
|
213
|
+
quota_token?: string;
|
|
214
|
+
transformer: {
|
|
215
|
+
use?: string[] | Array<any>[];
|
|
216
|
+
} & {
|
|
217
|
+
[key: string]: {
|
|
218
|
+
use?: string[] | Array<any>[];
|
|
219
|
+
};
|
|
220
|
+
};
|
|
221
|
+
tokenizer?: ProviderTokenizerConfig;
|
|
222
|
+
/**
|
|
223
|
+
* How the provider reports input_tokens in usage responses.
|
|
224
|
+
* - 'exclusive' (default): input_tokens is net of cache, total = input + cache_read + cache_creation + output
|
|
225
|
+
* - 'inclusive': input_tokens already includes cache tokens, total = input + output
|
|
226
|
+
*/
|
|
227
|
+
cache_mode?: 'exclusive' | 'inclusive';
|
|
228
|
+
enabled?: boolean;
|
|
229
|
+
proxy_enabled?: boolean;
|
|
230
|
+
wakeup_enabled?: boolean;
|
|
231
|
+
wakeup_time?: string;
|
|
232
|
+
wakeup_model?: string;
|
|
233
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { LLMProvider, UnifiedChatRequest } from "./llm";
|
|
2
|
+
export interface TransformerOptions {
|
|
3
|
+
[key: string]: any;
|
|
4
|
+
}
|
|
5
|
+
interface TransformerWithStaticName {
|
|
6
|
+
new (options?: TransformerOptions): Transformer;
|
|
7
|
+
TransformerName?: string;
|
|
8
|
+
}
|
|
9
|
+
export type TransformerConstructor = TransformerWithStaticName;
|
|
10
|
+
export interface TransformerContext {
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
}
|
|
13
|
+
export type Transformer = {
|
|
14
|
+
transformRequestIn?: (request: UnifiedChatRequest, provider: LLMProvider, context: TransformerContext) => Promise<Record<string, any>>;
|
|
15
|
+
transformResponseIn?: (response: Response, context?: TransformerContext) => Promise<Response>;
|
|
16
|
+
transformRequestOut?: (request: any, context: TransformerContext) => Promise<UnifiedChatRequest>;
|
|
17
|
+
transformResponseOut?: (response: Response, context: TransformerContext) => Promise<Response>;
|
|
18
|
+
endPoint?: string;
|
|
19
|
+
name?: string;
|
|
20
|
+
auth?: (request: any, provider: LLMProvider, context: TransformerContext) => Promise<any>;
|
|
21
|
+
logger?: any;
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface Usage {
|
|
2
|
+
input_tokens: number;
|
|
3
|
+
output_tokens: number;
|
|
4
|
+
cache_read_input_tokens: number;
|
|
5
|
+
cache_creation_input_tokens: number;
|
|
6
|
+
}
|
|
7
|
+
declare class LRUCache<K, V> {
|
|
8
|
+
private capacity;
|
|
9
|
+
private cache;
|
|
10
|
+
constructor(capacity: number);
|
|
11
|
+
get(key: K): V | undefined;
|
|
12
|
+
put(key: K, value: V): void;
|
|
13
|
+
values(): V[];
|
|
14
|
+
delete(key: K): boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const sessionUsageCache: LRUCache<string, Usage>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ChatCompletionTool } from "openai/resources/chat/completions";
|
|
2
|
+
import type { Tool as AnthropicTool } from "@anthropic-ai/sdk/resources/messages";
|
|
3
|
+
import { UnifiedChatRequest, UnifiedTool, OpenAIChatRequest, AnthropicChatRequest, ConversionOptions } from "../types/llm";
|
|
4
|
+
export declare function convertToolsToOpenAI(tools: UnifiedTool[]): ChatCompletionTool[];
|
|
5
|
+
export declare function convertToolsToAnthropic(tools: UnifiedTool[]): AnthropicTool[];
|
|
6
|
+
export declare function convertToolsFromOpenAI(tools: ChatCompletionTool[]): UnifiedTool[];
|
|
7
|
+
export declare function convertToolsFromAnthropic(tools: AnthropicTool[]): UnifiedTool[];
|
|
8
|
+
export declare function convertToOpenAI(request: UnifiedChatRequest): OpenAIChatRequest;
|
|
9
|
+
export declare function convertFromOpenAI(request: OpenAIChatRequest): UnifiedChatRequest;
|
|
10
|
+
export declare function convertFromAnthropic(request: AnthropicChatRequest): UnifiedChatRequest;
|
|
11
|
+
export declare function convertToAnthropic(request: UnifiedChatRequest): AnthropicChatRequest;
|
|
12
|
+
export declare function convertRequest(request: OpenAIChatRequest | AnthropicChatRequest | UnifiedChatRequest, options: ConversionOptions): OpenAIChatRequest | AnthropicChatRequest;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface DebugLogOptions {
|
|
2
|
+
maxBodyLength: number;
|
|
3
|
+
maxStreamChunks: number;
|
|
4
|
+
}
|
|
5
|
+
export declare function setRuntimeDebugLog(enabled: boolean): void;
|
|
6
|
+
export declare function getRuntimeDebugLog(): boolean;
|
|
7
|
+
export declare function isDebugLogEnabled(configService: any): boolean;
|
|
8
|
+
export declare function getDebugLogOptions(configService: any): DebugLogOptions;
|
|
9
|
+
export declare function maskHeaders(headers: Record<string, string>): Record<string, string>;
|
|
10
|
+
export declare function truncateBody(body: string, maxLen: number): string;
|
|
11
|
+
export declare function logProviderRequest(logger: any, reqId: string, data: {
|
|
12
|
+
url: string;
|
|
13
|
+
headers: Record<string, string>;
|
|
14
|
+
body: any;
|
|
15
|
+
}): void;
|
|
16
|
+
export declare function logProviderResponse(logger: any, reqId: string, data: {
|
|
17
|
+
status: number;
|
|
18
|
+
headers: Record<string, string>;
|
|
19
|
+
body?: string;
|
|
20
|
+
}): void;
|
|
21
|
+
export declare function logStreamChunk(logger: any, reqId: string, chunkIndex: number, chunkStr: string): void;
|
|
22
|
+
export declare function logStreamEnd(logger: any, reqId: string, totalChunks: number): void;
|
|
23
|
+
export declare function readStreamForDebug(stream: ReadableStream<Uint8Array>, logger: any, reqId: string, options: DebugLogOptions): void;
|
|
24
|
+
export {};
|