@caeliq/llms 1.0.56 → 1.0.57
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 +91 -10
- package/dist/api/middleware.d.ts +9 -0
- package/dist/api/routes.d.ts +15 -0
- package/dist/cjs/server.cjs +234 -227
- package/dist/cjs/server.cjs.map +4 -4
- package/dist/cursor-sdk/events-to-sse.d.ts +113 -0
- package/dist/cursor-sdk/hooks-template.d.ts +1 -0
- package/dist/cursor-sdk/prompt.d.ts +29 -0
- package/dist/cursor-sdk/runner.d.ts +11 -0
- package/dist/cursor-sdk/send.d.ts +9 -0
- package/dist/cursor-sdk/session.d.ts +146 -0
- package/dist/cursor-sdk/shared.d.ts +14 -0
- package/dist/cursor-sdk/tools.d.ts +4 -0
- package/dist/cursor-sdk/usage.d.ts +28 -0
- package/dist/esm/server.mjs +235 -228
- package/dist/esm/server.mjs.map +4 -4
- package/dist/index.d.ts +2 -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 +110 -0
- package/dist/plugins/output/temp-file-handler.d.ts +53 -0
- package/dist/plugins/output/types.d.ts +157 -0
- package/dist/plugins/output/webhook-handler.d.ts +37 -0
- package/dist/plugins/plugin-manager.d.ts +62 -0
- package/dist/plugins/token-speed.d.ts +22 -0
- package/dist/plugins/types.d.ts +25 -0
- package/dist/server.d.ts +60 -0
- package/dist/services/config.d.ts +32 -0
- package/dist/services/provider.d.ts +34 -0
- package/dist/services/tokenizer.d.ts +44 -0
- package/dist/services/transformer.d.ts +28 -0
- package/dist/tests/anthropic.stream-boundaries.d.ts +1 -0
- package/dist/tests/anthropic.stream-cancel.d.ts +1 -0
- package/dist/tests/antigravity.claude-tool-schema.d.ts +1 -0
- package/dist/tests/antigravity.endpoint-fallback.d.ts +1 -0
- package/dist/tests/cache-control.strip.d.ts +1 -0
- package/dist/tests/cache-paths.integration.d.ts +1 -0
- package/dist/tests/claude-auth.beta-headers.d.ts +1 -0
- package/dist/tests/codex-auth.reliability.d.ts +1 -0
- package/dist/tests/cursor-sdk.cancel.d.ts +1 -0
- package/dist/tests/cursor-sdk.on-delta-thinking.d.ts +1 -0
- package/dist/tests/cursor-sdk.progress-only.d.ts +1 -0
- package/dist/tests/cursor-sdk.runner-recovery.d.ts +1 -0
- package/dist/tests/cursor-sdk.send.d.ts +1 -0
- package/dist/tests/cursor-sdk.stream-error.d.ts +1 -0
- package/dist/tests/cursor-sdk.thinking-signature.d.ts +1 -0
- package/dist/tests/cursor-sdk.usage.d.ts +1 -0
- package/dist/tests/deepseek.reasoning.d.ts +1 -0
- package/dist/tests/gemini.abnormal-finish.d.ts +1 -0
- package/dist/tests/gemini.dual-dialect-request.d.ts +1 -0
- package/dist/tests/gemini.function-call-signatures.d.ts +1 -0
- package/dist/tests/gemini.parity.d.ts +1 -0
- package/dist/tests/gemini.thinking-effort.d.ts +1 -0
- package/dist/tests/gemini.thought-signature-roundtrip.d.ts +1 -0
- package/dist/tests/opencode-headers.no-provider-retry.d.ts +1 -0
- package/dist/tests/thinking-sequencer.dual-dialect.d.ts +1 -0
- package/dist/tests/transformer-service.endpoints.d.ts +1 -0
- package/dist/tests/upstream-ports.smoke.d.ts +1 -0
- package/dist/tokenizer/api-tokenizer.d.ts +45 -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 +22 -0
- package/dist/transformer/antigravity-auth.transformer.d.ts +15 -0
- package/dist/transformer/cerebras.transformer.d.ts +16 -0
- package/dist/transformer/chrome-on-device.transformer.d.ts +7 -0
- package/dist/transformer/claude-auth.transformer.d.ts +25 -0
- package/dist/transformer/cleancache.transformer.d.ts +6 -0
- package/dist/transformer/codex.transformer.d.ts +61 -0
- package/dist/transformer/cursor-sdk.transformer.d.ts +23 -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 +6 -0
- package/dist/transformer/extrathinktag.transformer.d.ts +10 -0
- package/dist/transformer/forcereasoning.transformer.d.ts +8 -0
- package/dist/transformer/gemini.transformer.d.ts +15 -0
- package/dist/transformer/groq.transformer.d.ts +7 -0
- package/dist/transformer/index.d.ts +65 -0
- package/dist/transformer/maxcompletiontokens.transformer.d.ts +6 -0
- package/dist/transformer/maxtoken.transformer.d.ts +9 -0
- package/dist/transformer/mistral.transformer.d.ts +25 -0
- package/dist/transformer/openai.responses.transformer.d.ts +13 -0
- package/dist/transformer/openai.transformer.d.ts +52 -0
- package/dist/transformer/opencode-headers.transformer.d.ts +30 -0
- package/dist/transformer/openrouter.transformer.d.ts +10 -0
- package/dist/transformer/qwen-auth.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 +11 -0
- package/dist/transformer/vertex-claude.transformer.d.ts +9 -0
- package/dist/transformer/vertex-gemini.transformer.d.ts +12 -0
- package/dist/transformer/vertex-openai.transformer.d.ts +19 -0
- package/dist/types/llm.d.ts +255 -0
- package/dist/types/transformer.d.ts +23 -0
- package/dist/utils/antigravity-auth.d.ts +75 -0
- package/dist/utils/auth-recovery.d.ts +2 -0
- package/dist/utils/cache.d.ts +14 -0
- package/dist/utils/cacheControl.d.ts +44 -0
- package/dist/utils/claude-auth.d.ts +22 -0
- package/dist/utils/codex-auth.d.ts +33 -0
- package/dist/utils/converter.d.ts +11 -0
- package/dist/utils/cursor-auth.d.ts +3 -0
- package/dist/utils/deepseek.util.d.ts +28 -0
- package/dist/utils/gemini-cache.d.ts +8 -0
- package/dist/utils/gemini-thinking.d.ts +66 -0
- package/dist/utils/gemini.util.d.ts +43 -0
- package/dist/utils/google.util.d.ts +160 -0
- package/dist/utils/image.d.ts +1 -0
- package/dist/utils/mistral.util.d.ts +14 -0
- package/dist/utils/openai.util.d.ts +17 -0
- package/dist/utils/qwen-auth.d.ts +13 -0
- package/dist/utils/redact.d.ts +30 -0
- package/dist/utils/request.d.ts +4 -0
- package/dist/utils/retry.d.ts +27 -0
- package/dist/utils/router.d.ts +42 -0
- package/dist/utils/schema.d.ts +46 -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/stream.d.ts +11 -0
- package/dist/utils/thinking.d.ts +33 -0
- package/dist/utils/thought-signature-cache.d.ts +34 -0
- package/dist/utils/toolArgumentsParser.d.ts +8 -0
- package/dist/utils/vertex-claude.util.d.ts +47 -0
- package/package.json +3 -3
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ConfigService } from "./config";
|
|
2
|
+
import { ITokenizer, TokenizeRequest, TokenizerConfig, TokenizerResult, TokenizerOptions } from "../types/tokenizer";
|
|
3
|
+
/**
|
|
4
|
+
* TokenizerService - Manages tokenization for different model types
|
|
5
|
+
*
|
|
6
|
+
* Supports three types of tokenizers:
|
|
7
|
+
* - tiktoken: Fast, OpenAI-compatible tokenizer (default)
|
|
8
|
+
* - huggingface: Local model-based tokenizer for open-source models
|
|
9
|
+
* - api: API-based tokenizer for closed-source models
|
|
10
|
+
*
|
|
11
|
+
* Features:
|
|
12
|
+
* - Automatic fallback to tiktoken on errors
|
|
13
|
+
* - Config-driven tokenizer selection
|
|
14
|
+
* - Per-provider and per-model configuration
|
|
15
|
+
*/
|
|
16
|
+
export declare class TokenizerService {
|
|
17
|
+
private tokenizers;
|
|
18
|
+
private configService;
|
|
19
|
+
private logger;
|
|
20
|
+
private options;
|
|
21
|
+
private fallbackTokenizer?;
|
|
22
|
+
constructor(configService: ConfigService, logger: any, options?: TokenizerOptions);
|
|
23
|
+
initialize(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Get or create a tokenizer for specific configuration
|
|
26
|
+
*/
|
|
27
|
+
getTokenizer(config: TokenizerConfig): Promise<ITokenizer>;
|
|
28
|
+
/**
|
|
29
|
+
* Count tokens for a request using the specified tokenizer configuration
|
|
30
|
+
*/
|
|
31
|
+
countTokens(request: TokenizeRequest, config?: TokenizerConfig): Promise<TokenizerResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Get tokenizer configuration for a specific model/provider
|
|
34
|
+
*/
|
|
35
|
+
getTokenizerConfigForModel(providerName: string, modelName: string): TokenizerConfig | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Dispose all tokenizers
|
|
38
|
+
*/
|
|
39
|
+
dispose(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Generate cache key from tokenizer config
|
|
42
|
+
*/
|
|
43
|
+
private getCacheKey;
|
|
44
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Transformer, TransformerConstructor } from "../types/transformer";
|
|
2
|
+
import { ConfigService } from "./config";
|
|
3
|
+
export declare class TransformerService {
|
|
4
|
+
private readonly configService;
|
|
5
|
+
private readonly logger;
|
|
6
|
+
private transformers;
|
|
7
|
+
constructor(configService: ConfigService, logger: any);
|
|
8
|
+
registerTransformer(name: string, transformer: Transformer): void;
|
|
9
|
+
getTransformer(name: string): Transformer | TransformerConstructor | undefined;
|
|
10
|
+
getAllTransformers(): Map<string, Transformer | TransformerConstructor>;
|
|
11
|
+
getTransformersWithEndpoint(): {
|
|
12
|
+
name: string;
|
|
13
|
+
transformer: Transformer;
|
|
14
|
+
}[];
|
|
15
|
+
getTransformersWithoutEndpoint(): {
|
|
16
|
+
name: string;
|
|
17
|
+
transformer: Transformer;
|
|
18
|
+
}[];
|
|
19
|
+
removeTransformer(name: string): boolean;
|
|
20
|
+
hasTransformer(name: string): boolean;
|
|
21
|
+
registerTransformerFromConfig(config: {
|
|
22
|
+
path?: string;
|
|
23
|
+
options?: any;
|
|
24
|
+
}): Promise<boolean>;
|
|
25
|
+
initialize(): Promise<void>;
|
|
26
|
+
private registerDefaultTransformersInternal;
|
|
27
|
+
private loadFromConfig;
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ITokenizer, TokenizeRequest, TokenizerConfig } from "../types/tokenizer";
|
|
2
|
+
/**
|
|
3
|
+
* Options for API tokenizer
|
|
4
|
+
*/
|
|
5
|
+
interface ApiTokenizerOptions {
|
|
6
|
+
timeout?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* API-based tokenizer implementation
|
|
10
|
+
* Calls provider's tokenization API to get token counts
|
|
11
|
+
* Supports flexible configuration for different API formats
|
|
12
|
+
*/
|
|
13
|
+
export declare class ApiTokenizer implements ITokenizer {
|
|
14
|
+
readonly type = "api";
|
|
15
|
+
readonly name: string;
|
|
16
|
+
private config;
|
|
17
|
+
private logger;
|
|
18
|
+
private options;
|
|
19
|
+
constructor(config: TokenizerConfig, logger: any, options?: ApiTokenizerOptions);
|
|
20
|
+
initialize(): Promise<void>;
|
|
21
|
+
countTokens(request: TokenizeRequest): Promise<number>;
|
|
22
|
+
isInitialized(): boolean;
|
|
23
|
+
dispose(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Format request body based on requestFormat
|
|
26
|
+
*/
|
|
27
|
+
private formatRequestBody;
|
|
28
|
+
/**
|
|
29
|
+
* Extract messages in OpenAI format
|
|
30
|
+
*/
|
|
31
|
+
private extractMessagesAsOpenAIFormat;
|
|
32
|
+
/**
|
|
33
|
+
* Extract text from a message
|
|
34
|
+
*/
|
|
35
|
+
private extractTextFromMessage;
|
|
36
|
+
/**
|
|
37
|
+
* Extract all text from request
|
|
38
|
+
*/
|
|
39
|
+
private extractConcatenatedText;
|
|
40
|
+
/**
|
|
41
|
+
* Extract token count from response using the configured field path
|
|
42
|
+
*/
|
|
43
|
+
private extractTokenCount;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ITokenizer, TokenizeRequest } from "../types/tokenizer";
|
|
2
|
+
/**
|
|
3
|
+
* Options for HuggingFace tokenizer
|
|
4
|
+
*/
|
|
5
|
+
interface HFTokenizerOptions {
|
|
6
|
+
timeout?: number;
|
|
7
|
+
cacheDir?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* HuggingFace tokenizer implementation
|
|
11
|
+
* Uses @huggingface/tokenizers library for lightweight tokenization
|
|
12
|
+
*/
|
|
13
|
+
export declare class HuggingFaceTokenizer implements ITokenizer {
|
|
14
|
+
readonly type = "huggingface";
|
|
15
|
+
readonly name: string;
|
|
16
|
+
private readonly modelId;
|
|
17
|
+
private readonly logger;
|
|
18
|
+
private readonly options;
|
|
19
|
+
private tokenizer;
|
|
20
|
+
private readonly cacheDir;
|
|
21
|
+
private readonly safeModelName;
|
|
22
|
+
constructor(modelId: string, logger: any, options?: HFTokenizerOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Get cache file paths for tokenizer files
|
|
25
|
+
*/
|
|
26
|
+
private getCachePaths;
|
|
27
|
+
/**
|
|
28
|
+
* Ensure directory exists
|
|
29
|
+
*/
|
|
30
|
+
private ensureDir;
|
|
31
|
+
/**
|
|
32
|
+
* Load tokenizer files from local cache
|
|
33
|
+
*/
|
|
34
|
+
private loadFromCache;
|
|
35
|
+
/**
|
|
36
|
+
* Download tokenizer files from Hugging Face Hub and save to cache
|
|
37
|
+
*/
|
|
38
|
+
private downloadAndCache;
|
|
39
|
+
initialize(): Promise<void>;
|
|
40
|
+
countTokens(request: TokenizeRequest): Promise<number>;
|
|
41
|
+
isInitialized(): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Encode text to tokens (for simple text tokenization)
|
|
44
|
+
*/
|
|
45
|
+
encodeText(text: string): number[];
|
|
46
|
+
dispose(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Extract text from tokenize request
|
|
49
|
+
*/
|
|
50
|
+
private extractTextFromRequest;
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TiktokenEncoding } from "tiktoken";
|
|
2
|
+
import type { ITokenizer, TokenizeRequest } from "../types/tokenizer";
|
|
3
|
+
/**
|
|
4
|
+
* Tiktoken-based tokenizer implementation
|
|
5
|
+
* Uses tiktoken library for fast token counting (OpenAI compatible)
|
|
6
|
+
*/
|
|
7
|
+
export declare class TiktokenTokenizer implements ITokenizer {
|
|
8
|
+
readonly type = "tiktoken";
|
|
9
|
+
readonly name: string;
|
|
10
|
+
private encoding?;
|
|
11
|
+
constructor(encodingName?: TiktokenEncoding);
|
|
12
|
+
initialize(): Promise<void>;
|
|
13
|
+
countTokens(request: TokenizeRequest): Promise<number>;
|
|
14
|
+
isInitialized(): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Encode text to tokens (for simple text tokenization)
|
|
17
|
+
*/
|
|
18
|
+
encodeText(text: string): number[];
|
|
19
|
+
dispose(): void;
|
|
20
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { LLMProvider, UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer, TransformerContext, TransformerOptions } from "../types/transformer";
|
|
3
|
+
export declare class AnthropicTransformer implements Transformer {
|
|
4
|
+
private readonly options?;
|
|
5
|
+
name: string;
|
|
6
|
+
endPoint: string;
|
|
7
|
+
private useBearer;
|
|
8
|
+
logger?: any;
|
|
9
|
+
constructor(options?: TransformerOptions | undefined);
|
|
10
|
+
auth(request: any, provider: LLMProvider, _context?: any): Promise<any>;
|
|
11
|
+
transformRequestOut(request: Record<string, any>, context?: any): Promise<UnifiedChatRequest>;
|
|
12
|
+
transformResponseIn(response: Response, context?: TransformerContext): Promise<Response>;
|
|
13
|
+
/**
|
|
14
|
+
* Rebuild an Anthropic-format request body from a UnifiedChatRequest.
|
|
15
|
+
* Used by claude-auth.transformRequestIn() to reconstruct the body before
|
|
16
|
+
* sending to Anthropic, preserving all original parameters.
|
|
17
|
+
*/
|
|
18
|
+
static buildAnthropicBody(request: UnifiedChatRequest, logger?: any): Record<string, any>;
|
|
19
|
+
private convertAnthropicToolsToUnified;
|
|
20
|
+
private convertOpenAIStreamToAnthropic;
|
|
21
|
+
private convertOpenAIResponseToAnthropic;
|
|
22
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Transformer } from "../types/transformer";
|
|
2
|
+
export declare class AntigravityAuthTransformer implements Transformer {
|
|
3
|
+
name: string;
|
|
4
|
+
logger?: any;
|
|
5
|
+
private buildAuthAndEnvelope;
|
|
6
|
+
private buildHeaders;
|
|
7
|
+
/**
|
|
8
|
+
* Own the upstream fetch so we can refresh on 401, walk endpoint fallbacks,
|
|
9
|
+
* and surface 429 RetryInfo without leaking into the generic pipeline.
|
|
10
|
+
*/
|
|
11
|
+
private sendWithFallback;
|
|
12
|
+
transformRequestIn(request: any, provider: any, context: any): Promise<Record<string, any>>;
|
|
13
|
+
auth(_request: any, provider: any, context: any): Promise<any>;
|
|
14
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LLMProvider, UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
/**
|
|
4
|
+
* Transformer class for Cerebras
|
|
5
|
+
*/
|
|
6
|
+
export declare class CerebrasTransformer implements Transformer {
|
|
7
|
+
name: string;
|
|
8
|
+
/**
|
|
9
|
+
* Transform the request from Claude Code format to Cerebras format
|
|
10
|
+
* @param request - The incoming request
|
|
11
|
+
* @param provider - The LLM provider information
|
|
12
|
+
* @returns The transformed request
|
|
13
|
+
*/
|
|
14
|
+
transformRequestIn(request: UnifiedChatRequest, provider: LLMProvider, context?: any): Promise<Record<string, unknown>>;
|
|
15
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class ChromeOnDeviceTransformer implements Transformer {
|
|
4
|
+
name: string;
|
|
5
|
+
transformRequestIn(request: UnifiedChatRequest, provider: any, context?: any): Promise<Record<string, any>>;
|
|
6
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer, TransformerContext } from "../types/transformer";
|
|
3
|
+
/** Anthropic beta required for Claude subscription / Claude Code OAuth Bearer auth. */
|
|
4
|
+
export declare const CLAUDE_OAUTH_REQUIRED_BETA = "oauth-2025-04-20";
|
|
5
|
+
export declare function mergeAnthropicBetaValues(...values: Array<string | undefined | null>): string;
|
|
6
|
+
/** Read a named header value from a Fastify/Node headers object (case-insensitive). */
|
|
7
|
+
export declare function readHeaderValue(headers: Record<string, unknown> | undefined, name: string): string | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Build outbound anthropic-beta for Claude subscription OAuth.
|
|
10
|
+
*
|
|
11
|
+
* - If the client sent anthropic-beta (e.g. Claude Code), merge with
|
|
12
|
+
* oauth-2025-04-20 (deduped, case-insensitive).
|
|
13
|
+
* - Otherwise, send only oauth-2025-04-20. Do not synthesise Claude Code
|
|
14
|
+
* betas — Anthropic validates the attestation on claude-code-20250219
|
|
15
|
+
* and subscription OAuth works without it for non-Claude-Code clients.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveClaudeAuthAnthropicBeta(input: {
|
|
18
|
+
clientBeta?: string;
|
|
19
|
+
}): string;
|
|
20
|
+
export declare class ClaudeAuthTransformer implements Transformer {
|
|
21
|
+
name: string;
|
|
22
|
+
logger?: any;
|
|
23
|
+
transformRequestIn(request: UnifiedChatRequest, provider: any, context?: TransformerContext): Promise<Record<string, any>>;
|
|
24
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class CleancacheTransformer implements Transformer {
|
|
4
|
+
name: string;
|
|
5
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class CodexTransformer implements Transformer {
|
|
4
|
+
name: string;
|
|
5
|
+
logger?: any;
|
|
6
|
+
private streamIntent;
|
|
7
|
+
transformRequestIn(request: UnifiedChatRequest, provider: any, context?: any): Promise<Record<string, any>>;
|
|
8
|
+
auth(request: any, provider: any): Promise<any>;
|
|
9
|
+
private resolveAuth;
|
|
10
|
+
private buildAuthHeaders;
|
|
11
|
+
private recoverUnauthorizedAuth;
|
|
12
|
+
private resolvePatAuth;
|
|
13
|
+
private requestPatAuth;
|
|
14
|
+
transformResponseOut(response: Response, context?: {
|
|
15
|
+
req?: {
|
|
16
|
+
id?: string;
|
|
17
|
+
};
|
|
18
|
+
}): Promise<Response>;
|
|
19
|
+
private transformResponseOutInner;
|
|
20
|
+
private convertStreamEvent;
|
|
21
|
+
/**
|
|
22
|
+
* Consume a Codex SSE response fully and return a single OpenAI
|
|
23
|
+
* ChatCompletion JSON. Used for non-streaming Anthropic SDK calls
|
|
24
|
+
* (e.g. client.beta.messages.create with stream:false) where the
|
|
25
|
+
* SDK expects a flat BetaMessage. The SDK accumulates the response
|
|
26
|
+
* by reading a single JSON object, not by parsing SSE, so we
|
|
27
|
+
* have to materialize the response here.
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Re-emit a single OpenAI ChatCompletion JSON as a one-shot SSE stream of
|
|
31
|
+
* `chat.completion.chunk` events, so a streaming caller (which expects SSE)
|
|
32
|
+
* still receives the content when codex returned a flat JSON instead of a
|
|
33
|
+
* stream. The downstream anthropic transformer's stream reader parses each
|
|
34
|
+
* `data:` line as a chunk, so we split the full message into proper delta
|
|
35
|
+
* chunks (text content first, then a final chunk with finish_reason + usage)
|
|
36
|
+
* — emitting the raw chat.completion would put the text under `message`
|
|
37
|
+
* instead of `delta` and the content would be dropped.
|
|
38
|
+
*/
|
|
39
|
+
private jsonToSseStream;
|
|
40
|
+
/**
|
|
41
|
+
* Peek at the first non-whitespace character of a cloned response body to
|
|
42
|
+
* distinguish a real SSE stream (starts with `data:` or `event:`, first
|
|
43
|
+
* char `d` or `e`) from a flat JSON body (first char `{` or `[`) that the
|
|
44
|
+
* codex API sometimes returns even with text/event-stream Content-Type.
|
|
45
|
+
*
|
|
46
|
+
* - **For flat JSON** (`{` / `[`): reads the full clone body and returns
|
|
47
|
+
* `{ firstChar, text }` so the caller can parse and handle it.
|
|
48
|
+
* - **For SSE** (anything else): returns `null` immediately after reading
|
|
49
|
+
* only the first chunk from the clone. The original `response.body` on
|
|
50
|
+
* the other side of the tee is untouched and can still be streamed live
|
|
51
|
+
* by the SSE reader — avoiding buffering the entire response.
|
|
52
|
+
*
|
|
53
|
+
* Callers must pass `response.clone().body!` so the original body is not
|
|
54
|
+
* consumed by the peek.
|
|
55
|
+
*/
|
|
56
|
+
private readBodyAndPeek;
|
|
57
|
+
private collectSseIntoChatCompletion;
|
|
58
|
+
private normalizeRequestContent;
|
|
59
|
+
private convertResponseToChat;
|
|
60
|
+
private buildImageContent;
|
|
61
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import type { Transformer, TransformerOptions } from "../types/transformer";
|
|
3
|
+
import { type CursorSdkMode } from "../cursor-sdk/shared";
|
|
4
|
+
export interface CursorSdkTransformerOptions extends TransformerOptions {
|
|
5
|
+
cursorMode?: CursorSdkMode;
|
|
6
|
+
cursorCwd?: string;
|
|
7
|
+
/** Opt-in only; forced off in Docker. Default false. */
|
|
8
|
+
sandboxEnabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Thin CCR transformer that owns the full upstream call via @cursor/sdk.
|
|
12
|
+
* Returns OpenAI-compatible SSE/JSON through config.__providerResponse so
|
|
13
|
+
* AnthropicTransformer can convert to Claude Code's wire format unchanged.
|
|
14
|
+
*/
|
|
15
|
+
export declare class CursorSdkTransformer implements Transformer {
|
|
16
|
+
static TransformerName: string;
|
|
17
|
+
name: string;
|
|
18
|
+
logger?: any;
|
|
19
|
+
private options;
|
|
20
|
+
constructor(options?: CursorSdkTransformerOptions);
|
|
21
|
+
transformRequestIn(request: UnifiedChatRequest, provider: any, context?: any): Promise<Record<string, any>>;
|
|
22
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
23
|
+
}
|
|
@@ -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, provider?: any, context?: any): Promise<UnifiedChatRequest>;
|
|
6
|
+
transformResponseOut(response: Response, context?: any): Promise<Response>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Transformer } from "../types/transformer";
|
|
2
|
+
/**
|
|
3
|
+
* Extracts <think>...</think> blocks from OpenAI-compatible responses into
|
|
4
|
+
* thinking.content (and streaming thinking deltas).
|
|
5
|
+
*/
|
|
6
|
+
export declare class ExtraThinkTagTransformer implements Transformer {
|
|
7
|
+
name: string;
|
|
8
|
+
transformRequestIn(request: any): Promise<any>;
|
|
9
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer } from "../types/transformer";
|
|
3
|
+
export declare class ForceReasoningTransformer implements Transformer {
|
|
4
|
+
logger?: any;
|
|
5
|
+
name: string;
|
|
6
|
+
transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
|
|
7
|
+
transformResponseOut(response: Response): Promise<Response>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { LLMProvider, UnifiedChatRequest } from "../types/llm";
|
|
2
|
+
import { Transformer, TransformerContext, TransformerOptions } from "../types/transformer";
|
|
3
|
+
export declare class GeminiTransformer implements Transformer {
|
|
4
|
+
private readonly options?;
|
|
5
|
+
static TransformerName: string;
|
|
6
|
+
logger?: any;
|
|
7
|
+
name: string;
|
|
8
|
+
endPoint: string;
|
|
9
|
+
private readonly cachedContent;
|
|
10
|
+
private readonly thoughtSignatureFallback;
|
|
11
|
+
constructor(options?: TransformerOptions | undefined);
|
|
12
|
+
transformRequestIn(request: UnifiedChatRequest, provider: LLMProvider, context: any): Promise<Record<string, any>>;
|
|
13
|
+
transformRequestOut(request: any): Promise<UnifiedChatRequest>;
|
|
14
|
+
transformResponseOut(response: Response, context?: TransformerContext): Promise<Response>;
|
|
15
|
+
}
|
|
@@ -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,65 @@
|
|
|
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 { VertexOpenaiTransformer } from "./vertex-openai.transformer";
|
|
16
|
+
import { CerebrasTransformer } from "./cerebras.transformer";
|
|
17
|
+
import { StreamOptionsTransformer } from "./streamoptions.transformer";
|
|
18
|
+
import { OpenAITransformer } from "./openai.transformer";
|
|
19
|
+
import { CustomParamsTransformer } from "./customparams.transformer";
|
|
20
|
+
import { VercelTransformer } from "./vercel.transformer";
|
|
21
|
+
import { OpenAIResponsesTransformer } from "./openai.responses.transformer";
|
|
22
|
+
import { CodexTransformer } from "./codex.transformer";
|
|
23
|
+
import { QwenAuthTransformer } from "./qwen-auth.transformer";
|
|
24
|
+
import { ForceReasoningTransformer } from "./forcereasoning.transformer";
|
|
25
|
+
import { ExtraThinkTagTransformer } from "./extrathinktag.transformer";
|
|
26
|
+
import { MistralTransformer } from "./mistral.transformer";
|
|
27
|
+
import { ChromeOnDeviceTransformer } from "./chrome-on-device.transformer";
|
|
28
|
+
import { OpencodeHeadersTransformer } from "./opencode-headers.transformer";
|
|
29
|
+
import { ClaudeAuthTransformer } from "./claude-auth.transformer";
|
|
30
|
+
import { CursorSdkTransformer } from "./cursor-sdk.transformer";
|
|
31
|
+
import { AntigravityAuthTransformer } from "./antigravity-auth.transformer";
|
|
32
|
+
declare const _default: {
|
|
33
|
+
AnthropicTransformer: typeof AnthropicTransformer;
|
|
34
|
+
GeminiTransformer: typeof GeminiTransformer;
|
|
35
|
+
VertexGeminiTransformer: typeof VertexGeminiTransformer;
|
|
36
|
+
VertexClaudeTransformer: typeof VertexClaudeTransformer;
|
|
37
|
+
VertexOpenaiTransformer: typeof VertexOpenaiTransformer;
|
|
38
|
+
DeepseekTransformer: typeof DeepseekTransformer;
|
|
39
|
+
TooluseTransformer: typeof TooluseTransformer;
|
|
40
|
+
OpenrouterTransformer: typeof OpenrouterTransformer;
|
|
41
|
+
OpenAITransformer: typeof OpenAITransformer;
|
|
42
|
+
MaxTokenTransformer: typeof MaxTokenTransformer;
|
|
43
|
+
GroqTransformer: typeof GroqTransformer;
|
|
44
|
+
CleancacheTransformer: typeof CleancacheTransformer;
|
|
45
|
+
EnhanceToolTransformer: typeof EnhanceToolTransformer;
|
|
46
|
+
ReasoningTransformer: typeof ReasoningTransformer;
|
|
47
|
+
SamplingTransformer: typeof SamplingTransformer;
|
|
48
|
+
MaxCompletionTokens: typeof MaxCompletionTokens;
|
|
49
|
+
CerebrasTransformer: typeof CerebrasTransformer;
|
|
50
|
+
StreamOptionsTransformer: typeof StreamOptionsTransformer;
|
|
51
|
+
CustomParamsTransformer: typeof CustomParamsTransformer;
|
|
52
|
+
VercelTransformer: typeof VercelTransformer;
|
|
53
|
+
OpenAIResponsesTransformer: typeof OpenAIResponsesTransformer;
|
|
54
|
+
CodexTransformer: typeof CodexTransformer;
|
|
55
|
+
QwenAuthTransformer: typeof QwenAuthTransformer;
|
|
56
|
+
ForceReasoningTransformer: typeof ForceReasoningTransformer;
|
|
57
|
+
ExtraThinkTagTransformer: typeof ExtraThinkTagTransformer;
|
|
58
|
+
MistralTransformer: typeof MistralTransformer;
|
|
59
|
+
ChromeOnDeviceTransformer: typeof ChromeOnDeviceTransformer;
|
|
60
|
+
OpencodeHeadersTransformer: typeof OpencodeHeadersTransformer;
|
|
61
|
+
ClaudeAuthTransformer: typeof ClaudeAuthTransformer;
|
|
62
|
+
CursorSdkTransformer: typeof CursorSdkTransformer;
|
|
63
|
+
AntigravityAuthTransformer: typeof AntigravityAuthTransformer;
|
|
64
|
+
};
|
|
65
|
+
export default _default;
|
|
@@ -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
|
+
}
|