@propio-ai/providers 0.1.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/LICENSE +21 -0
- package/README.md +85 -0
- package/dist/config.d.ts +91 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/configFile.d.ts +22 -0
- package/dist/configFile.d.ts.map +1 -0
- package/dist/configFile.js +33 -0
- package/dist/configFile.js.map +1 -0
- package/dist/configValidation.d.ts +34 -0
- package/dist/configValidation.d.ts.map +1 -0
- package/dist/configValidation.js +185 -0
- package/dist/configValidation.js.map +1 -0
- package/dist/diagnostics.d.ts +29 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +9 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/factory.d.ts +56 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +162 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/interface.d.ts +36 -0
- package/dist/interface.d.ts.map +1 -0
- package/dist/interface.js +2 -0
- package/dist/interface.js.map +1 -0
- package/dist/internal/baseProvider.d.ts +20 -0
- package/dist/internal/baseProvider.d.ts.map +1 -0
- package/dist/internal/baseProvider.js +13 -0
- package/dist/internal/baseProvider.js.map +1 -0
- package/dist/internal/capabilities.d.ts +4 -0
- package/dist/internal/capabilities.d.ts.map +1 -0
- package/dist/internal/capabilities.js +12 -0
- package/dist/internal/capabilities.js.map +1 -0
- package/dist/internal/jsonFile.d.ts +11 -0
- package/dist/internal/jsonFile.d.ts.map +1 -0
- package/dist/internal/jsonFile.js +78 -0
- package/dist/internal/jsonFile.js.map +1 -0
- package/dist/internal/openAiCompatibleProvider.d.ts +44 -0
- package/dist/internal/openAiCompatibleProvider.d.ts.map +1 -0
- package/dist/internal/openAiCompatibleProvider.js +93 -0
- package/dist/internal/openAiCompatibleProvider.js.map +1 -0
- package/dist/internal/openAiStream.d.ts +13 -0
- package/dist/internal/openAiStream.d.ts.map +1 -0
- package/dist/internal/openAiStream.js +85 -0
- package/dist/internal/openAiStream.js.map +1 -0
- package/dist/internal/shared.d.ts +79 -0
- package/dist/internal/shared.d.ts.map +1 -0
- package/dist/internal/shared.js +250 -0
- package/dist/internal/shared.js.map +1 -0
- package/dist/internal/withRetry.d.ts +25 -0
- package/dist/internal/withRetry.d.ts.map +1 -0
- package/dist/internal/withRetry.js +46 -0
- package/dist/internal/withRetry.js.map +1 -0
- package/dist/providers/anthropic.d.ts +32 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +435 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/bedrock.d.ts +67 -0
- package/dist/providers/bedrock.d.ts.map +1 -0
- package/dist/providers/bedrock.js +442 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/cloudflare.d.ts +40 -0
- package/dist/providers/cloudflare.d.ts.map +1 -0
- package/dist/providers/cloudflare.js +115 -0
- package/dist/providers/cloudflare.js.map +1 -0
- package/dist/providers/gemini.d.ts +57 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +359 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/ollama.d.ts +67 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +241 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openrouter.d.ts +76 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +571 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/xai.d.ts +45 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +371 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/types.d.ts +166 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +60 -0
- package/dist/types.js.map +1 -0
- package/package.json +70 -0
package/dist/factory.js
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { OllamaProvider } from "./providers/ollama.js";
|
|
2
|
+
import { BedrockProvider } from "./providers/bedrock.js";
|
|
3
|
+
import { OpenRouterProvider } from "./providers/openrouter.js";
|
|
4
|
+
import { GeminiProvider } from "./providers/gemini.js";
|
|
5
|
+
import { XaiProvider } from "./providers/xai.js";
|
|
6
|
+
import { CloudflareProvider } from "./providers/cloudflare.js";
|
|
7
|
+
import { AnthropicProvider } from "./providers/anthropic.js";
|
|
8
|
+
/**
|
|
9
|
+
* Factory function to create LLM provider instances from configuration.
|
|
10
|
+
*
|
|
11
|
+
* This factory encapsulates provider instantiation logic, allowing new providers to be added
|
|
12
|
+
* without modifying the Agent class. The factory uses a switch statement on type field
|
|
13
|
+
* to determine which provider class to instantiate.
|
|
14
|
+
*
|
|
15
|
+
* @param config - Provider configuration containing type field and provider-specific settings
|
|
16
|
+
* @param modelKey - Optional model key override. If provided, uses this instead of config.defaultModel
|
|
17
|
+
* @returns An LLMProvider interface instance configured according to the provided config
|
|
18
|
+
* @throws Error if the provider type is unknown or unsupported
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // Create an Ollama provider
|
|
22
|
+
* const ollamaProvider = createProvider({
|
|
23
|
+
* name: 'local-ollama',
|
|
24
|
+
* type: 'ollama',
|
|
25
|
+
* models: [{ name: 'Llama', key: 'llama3.2', contextWindowTokens: 8192 }],
|
|
26
|
+
* defaultModel: 'llama3.2',
|
|
27
|
+
* host: 'http://localhost:11434'
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* // Create a Bedrock provider with specific model
|
|
32
|
+
* const bedrockProvider = createProvider({
|
|
33
|
+
* name: 'bedrock',
|
|
34
|
+
* type: 'bedrock',
|
|
35
|
+
* models: [{ name: 'Claude 3.5', key: 'anthropic.claude-3-5-sonnet-20241022-v2:0', contextWindowTokens: 200000 }],
|
|
36
|
+
* defaultModel: 'anthropic.claude-3-5-sonnet-20241022-v2:0',
|
|
37
|
+
* region: 'us-west-2'
|
|
38
|
+
* }, 'anthropic.claude-3-5-sonnet-20241022-v2:0');
|
|
39
|
+
*/
|
|
40
|
+
export function createProvider(config, modelKey, onDiagnosticEvent, debugLoggingEnabled = false, retryConfig) {
|
|
41
|
+
const model = modelKey || config.defaultModel;
|
|
42
|
+
const resolveModelConfig = () => {
|
|
43
|
+
const modelConfig = config.models.find((entry) => entry.key === model);
|
|
44
|
+
if (!modelConfig) {
|
|
45
|
+
const availableModels = config.models
|
|
46
|
+
.map((entry) => entry.key)
|
|
47
|
+
.join(", ");
|
|
48
|
+
throw new Error(`Model "${model}" not found in provider "${config.name}". Available: ${availableModels}`);
|
|
49
|
+
}
|
|
50
|
+
return modelConfig;
|
|
51
|
+
};
|
|
52
|
+
// Switch statement pattern for mapping provider type to implementation.
|
|
53
|
+
// Each case instantiates the appropriate provider class with extracted config.
|
|
54
|
+
switch (config.type) {
|
|
55
|
+
case "ollama": {
|
|
56
|
+
const modelConfig = resolveModelConfig();
|
|
57
|
+
return new OllamaProvider({
|
|
58
|
+
model: model,
|
|
59
|
+
contextWindowTokens: modelConfig.contextWindowTokens,
|
|
60
|
+
host: config.host,
|
|
61
|
+
retryConfig,
|
|
62
|
+
onDiagnosticEvent,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
case "bedrock": {
|
|
66
|
+
const modelConfig = resolveModelConfig();
|
|
67
|
+
return new BedrockProvider({
|
|
68
|
+
model: model,
|
|
69
|
+
contextWindowTokens: modelConfig.contextWindowTokens,
|
|
70
|
+
region: config.region,
|
|
71
|
+
retryConfig,
|
|
72
|
+
onDiagnosticEvent,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
case "openrouter": {
|
|
76
|
+
const openRouterConfig = config;
|
|
77
|
+
const modelConfig = resolveModelConfig();
|
|
78
|
+
return new OpenRouterProvider({
|
|
79
|
+
model,
|
|
80
|
+
contextWindowTokens: modelConfig.contextWindowTokens,
|
|
81
|
+
apiKey: openRouterConfig.apiKey,
|
|
82
|
+
httpReferer: openRouterConfig.httpReferer,
|
|
83
|
+
xTitle: openRouterConfig.xTitle,
|
|
84
|
+
provider: openRouterConfig.provider,
|
|
85
|
+
fallbackModels: openRouterConfig.fallbackModels,
|
|
86
|
+
debugEchoUpstreamBody: openRouterConfig.debugEchoUpstreamBody,
|
|
87
|
+
debugLoggingEnabled,
|
|
88
|
+
onDiagnosticEvent,
|
|
89
|
+
retryConfig,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
case "gemini": {
|
|
93
|
+
const geminiConfig = config;
|
|
94
|
+
const modelConfig = resolveModelConfig();
|
|
95
|
+
return new GeminiProvider({
|
|
96
|
+
model,
|
|
97
|
+
contextWindowTokens: modelConfig.contextWindowTokens,
|
|
98
|
+
apiKey: geminiConfig.apiKey,
|
|
99
|
+
retryConfig,
|
|
100
|
+
onDiagnosticEvent,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
case "xai": {
|
|
104
|
+
const xaiConfig = config;
|
|
105
|
+
const modelConfig = resolveModelConfig();
|
|
106
|
+
return new XaiProvider({
|
|
107
|
+
model,
|
|
108
|
+
contextWindowTokens: modelConfig.contextWindowTokens,
|
|
109
|
+
apiKey: xaiConfig.apiKey,
|
|
110
|
+
retryConfig,
|
|
111
|
+
onDiagnosticEvent,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
case "cloudflare": {
|
|
115
|
+
const cloudflareConfig = config;
|
|
116
|
+
const modelConfig = resolveModelConfig();
|
|
117
|
+
return new CloudflareProvider({
|
|
118
|
+
model,
|
|
119
|
+
contextWindowTokens: modelConfig.contextWindowTokens,
|
|
120
|
+
apiKey: cloudflareConfig.apiKey,
|
|
121
|
+
accountId: cloudflareConfig.accountId,
|
|
122
|
+
retryConfig,
|
|
123
|
+
onDiagnosticEvent,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
case "anthropic": {
|
|
127
|
+
const anthropicConfig = config;
|
|
128
|
+
const modelConfig = resolveModelConfig();
|
|
129
|
+
return new AnthropicProvider({
|
|
130
|
+
model,
|
|
131
|
+
contextWindowTokens: modelConfig.contextWindowTokens,
|
|
132
|
+
apiKey: anthropicConfig.apiKey,
|
|
133
|
+
retryConfig,
|
|
134
|
+
onDiagnosticEvent,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
default:
|
|
138
|
+
throw new Error(`Unknown provider type: "${config.type}". Valid providers: ollama, bedrock, openrouter, gemini, xai, cloudflare, anthropic`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Extract the default model name from a provider configuration.
|
|
143
|
+
*
|
|
144
|
+
* This utility function provides a centralized way to extract the default model name from any
|
|
145
|
+
* provider configuration type. All provider configs now have a top-level defaultModel field.
|
|
146
|
+
*
|
|
147
|
+
* @param config - The provider configuration object
|
|
148
|
+
* @returns The default model key string
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* const model = extractModelFromConfig({
|
|
152
|
+
* name: 'ollama',
|
|
153
|
+
* type: 'ollama',
|
|
154
|
+
* models: [{ name: 'Llama', key: 'llama3.2', contextWindowTokens: 8192 }],
|
|
155
|
+
* defaultModel: 'llama3.2'
|
|
156
|
+
* });
|
|
157
|
+
* console.log(model); // 'llama3.2'
|
|
158
|
+
*/
|
|
159
|
+
export function extractModelFromConfig(config) {
|
|
160
|
+
return config.defaultModel;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { createProvider, extractModelFromConfig } from "./factory.js";
|
|
2
|
+
export type { LLMProvider, ProviderCapabilities } from "./interface.js";
|
|
3
|
+
export { ProviderError, ProviderAuthenticationError, ProviderRateLimitError, ProviderCapacityError, ProviderModelNotFoundError, ProviderContextLengthError, } from "./types.js";
|
|
4
|
+
export type { ToolResult, ChatMessage, ChatToolCall, ChatTool, ChatRequest, ChatResponse, ChatChunk, ChatStreamEvent, StopReason, ProviderReasoningSummarySource, AssistantTextStreamEvent, ThinkingDeltaStreamEvent, ToolCallsStreamEvent, StatusStreamEvent, ReasoningSummaryStreamEvent, StreamTerminalEvent, } from "./types.js";
|
|
5
|
+
export type { Model, BaseProviderConfig, OllamaProviderConfig, BedrockProviderConfig, OpenRouterRoutingConfig, OpenRouterProviderConfig, XaiProviderConfig, CloudflareProviderConfig, GeminiProviderConfig, AnthropicProviderConfig, ProviderConfig, ProvidersConfig, } from "./config.js";
|
|
6
|
+
export { validateProvidersConfig, resolveProvider, resolveModelKey, getDefaultProviderModelSelection, updateDefaultProviderModelSelection, } from "./configValidation.js";
|
|
7
|
+
export type { ProviderModelSelection } from "./configValidation.js";
|
|
8
|
+
export { loadProvidersConfig, loadProvidersConfigAsync, writeProvidersConfig, updateDefaultProviderModelSelectionInFile, } from "./configFile.js";
|
|
9
|
+
export type { LoadProvidersConfigOptions } from "./configFile.js";
|
|
10
|
+
export type { ProviderDiagnosticEvent, ProviderRetryDiagnosticEvent, ProviderDiagnosticListener, ProviderRetryConfig, } from "./diagnostics.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAGtE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,eAAe,EACf,UAAU,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,KAAK,EACL,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,gCAAgC,EAChC,mCAAmC,GACpC,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,yCAAyC,GAC1C,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAGlE,YAAY,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Provider factory
|
|
2
|
+
export { createProvider, extractModelFromConfig } from "./factory.js";
|
|
3
|
+
// Wire types and error classes
|
|
4
|
+
export { ProviderError, ProviderAuthenticationError, ProviderRateLimitError, ProviderCapacityError, ProviderModelNotFoundError, ProviderContextLengthError, } from "./types.js";
|
|
5
|
+
// Config validation (pure)
|
|
6
|
+
export { validateProvidersConfig, resolveProvider, resolveModelKey, getDefaultProviderModelSelection, updateDefaultProviderModelSelection, } from "./configValidation.js";
|
|
7
|
+
// Config file helpers (explicit paths)
|
|
8
|
+
export { loadProvidersConfig, loadProvidersConfigAsync, writeProvidersConfig, updateDefaultProviderModelSelectionInFile, } from "./configFile.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAKtE,+BAA+B;AAC/B,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AAoCpB,2BAA2B;AAC3B,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,gCAAgC,EAChC,mCAAmC,GACpC,MAAM,uBAAuB,CAAC;AAG/B,uCAAuC;AACvC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,yCAAyC,GAC1C,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ChatRequest, ChatStreamEvent } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Provider capability information for the currently configured model.
|
|
4
|
+
*/
|
|
5
|
+
export interface ProviderCapabilities {
|
|
6
|
+
readonly contextWindowTokens: number;
|
|
7
|
+
/**
|
|
8
|
+
* Whether the provider accepts synthetic (caller-fabricated) assistant
|
|
9
|
+
* tool-call history that was never produced by the model. Providers that
|
|
10
|
+
* verify tool-call provenance (e.g. Gemini's thought signatures) reject
|
|
11
|
+
* such history; callers should inline that content into a user message
|
|
12
|
+
* instead. undefined/true = supported.
|
|
13
|
+
*/
|
|
14
|
+
readonly supportsSyntheticToolCallHistory?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* LLMProvider interface defining the contract for all LLM provider implementations
|
|
18
|
+
*/
|
|
19
|
+
export interface LLMProvider {
|
|
20
|
+
/**
|
|
21
|
+
* Provider identifier
|
|
22
|
+
*/
|
|
23
|
+
readonly name: string;
|
|
24
|
+
/**
|
|
25
|
+
* Return capability info for the active model. Implementations may use
|
|
26
|
+
* internal lookup tables; callers can override via per-model config.
|
|
27
|
+
*/
|
|
28
|
+
getCapabilities(): ProviderCapabilities;
|
|
29
|
+
/**
|
|
30
|
+
* Streaming chat completion
|
|
31
|
+
* @param request - The chat request with messages, model, and optional tools
|
|
32
|
+
* @returns AsyncIterable yielding ChatStreamEvent objects for assistant text/tool calls/status updates
|
|
33
|
+
*/
|
|
34
|
+
streamChat(request: ChatRequest): AsyncIterable<ChatStreamEvent>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../src/interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,gCAAgC,CAAC,EAAE,OAAO,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,eAAe,IAAI,oBAAoB,CAAC;IAExC;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;CAClE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../src/interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { LLMProvider, ProviderCapabilities } from "../interface.js";
|
|
2
|
+
import { ChatRequest, ChatStreamEvent } from "../types.js";
|
|
3
|
+
import type { ProviderDiagnosticListener, ProviderRetryConfig } from "../diagnostics.js";
|
|
4
|
+
export interface BaseProviderOptions {
|
|
5
|
+
model: string;
|
|
6
|
+
contextWindowTokens: number;
|
|
7
|
+
retryConfig?: ProviderRetryConfig;
|
|
8
|
+
onDiagnosticEvent?: ProviderDiagnosticListener;
|
|
9
|
+
}
|
|
10
|
+
export declare abstract class BaseProvider implements LLMProvider {
|
|
11
|
+
abstract readonly name: string;
|
|
12
|
+
protected model: string;
|
|
13
|
+
protected capabilities: ProviderCapabilities;
|
|
14
|
+
protected retryConfig?: ProviderRetryConfig;
|
|
15
|
+
protected onDiagnosticEvent?: ProviderDiagnosticListener;
|
|
16
|
+
constructor(options: BaseProviderOptions);
|
|
17
|
+
getCapabilities(): ProviderCapabilities;
|
|
18
|
+
abstract streamChat(request: ChatRequest): AsyncIterable<ChatStreamEvent>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=baseProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseProvider.d.ts","sourceRoot":"","sources":["../../src/internal/baseProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;CAChD;AAED,8BAAsB,YAAa,YAAW,WAAW;IACvD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC7C,SAAS,CAAC,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAC5C,SAAS,CAAC,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;gBAE7C,OAAO,EAAE,mBAAmB;IAOxC,eAAe,IAAI,oBAAoB;IAIvC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC;CAC1E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createProviderCapabilities } from "./capabilities.js";
|
|
2
|
+
export class BaseProvider {
|
|
3
|
+
constructor(options) {
|
|
4
|
+
this.model = options.model;
|
|
5
|
+
this.capabilities = createProviderCapabilities(options.contextWindowTokens);
|
|
6
|
+
this.retryConfig = options.retryConfig;
|
|
7
|
+
this.onDiagnosticEvent = options.onDiagnosticEvent;
|
|
8
|
+
}
|
|
9
|
+
getCapabilities() {
|
|
10
|
+
return this.capabilities;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=baseProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseProvider.js","sourceRoot":"","sources":["../../src/internal/baseProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAc/D,MAAM,OAAgB,YAAY;IAOhC,YAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,0BAA0B,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC5E,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACrD,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CAGF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ProviderCapabilities } from "../interface.js";
|
|
2
|
+
export declare function validateContextWindowTokens(value: unknown, label: string): number;
|
|
3
|
+
export declare function createProviderCapabilities(contextWindowTokens: number): ProviderCapabilities;
|
|
4
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/internal/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAMR;AAED,wBAAgB,0BAA0B,CACxC,mBAAmB,EAAE,MAAM,GAC1B,oBAAoB,CAOtB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function validateContextWindowTokens(value, label) {
|
|
2
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
3
|
+
throw new Error(`${label} must be a positive integer`);
|
|
4
|
+
}
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
export function createProviderCapabilities(contextWindowTokens) {
|
|
8
|
+
return {
|
|
9
|
+
contextWindowTokens: validateContextWindowTokens(contextWindowTokens, "contextWindowTokens"),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/internal/capabilities.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,2BAA2B,CACzC,KAAc,EACd,KAAa;IAEb,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAK,KAAgB,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,KAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,mBAA2B;IAE3B,OAAO;QACL,mBAAmB,EAAE,2BAA2B,CAC9C,mBAAmB,EACnB,qBAAqB,CACtB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface ReadJsonFileOptions {
|
|
2
|
+
readonly invalidJsonPrefix: string;
|
|
3
|
+
readonly missingMessage?: string;
|
|
4
|
+
readonly onMissing?: () => unknown;
|
|
5
|
+
readonly readErrorPrefix: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function readJsonFile(filePath: string, options: ReadJsonFileOptions): unknown;
|
|
8
|
+
export declare function readJsonFileAsync(filePath: string, options: ReadJsonFileOptions): Promise<unknown>;
|
|
9
|
+
export declare function writeJsonFileAtomic(filePath: string, tempFilePrefix: string, config: unknown): void;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=jsonFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonFile.d.ts","sourceRoot":"","sources":["../../src/internal/jsonFile.ts"],"names":[],"mappings":"AAGA,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAeD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAuBT;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,OAAO,GACd,IAAI,CAsBN"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
function getErrorMessage(error) {
|
|
4
|
+
return error instanceof Error ? error.message : String(error);
|
|
5
|
+
}
|
|
6
|
+
function isFileNotFound(error) {
|
|
7
|
+
return (typeof error === "object" &&
|
|
8
|
+
error !== null &&
|
|
9
|
+
"code" in error &&
|
|
10
|
+
error.code === "ENOENT");
|
|
11
|
+
}
|
|
12
|
+
export function readJsonFile(filePath, options) {
|
|
13
|
+
let fileContent;
|
|
14
|
+
try {
|
|
15
|
+
fileContent = fs.readFileSync(filePath, "utf8");
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (isFileNotFound(error)) {
|
|
19
|
+
if (options.onMissing) {
|
|
20
|
+
return options.onMissing();
|
|
21
|
+
}
|
|
22
|
+
if (options.missingMessage) {
|
|
23
|
+
throw new Error(options.missingMessage);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
throw new Error(`${options.readErrorPrefix}: ${getErrorMessage(error)}`);
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
return JSON.parse(fileContent);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
throw new Error(`${options.invalidJsonPrefix}: ${getErrorMessage(error)}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export async function readJsonFileAsync(filePath, options) {
|
|
36
|
+
let fileContent;
|
|
37
|
+
try {
|
|
38
|
+
fileContent = await fs.promises.readFile(filePath, "utf8");
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
if (isFileNotFound(error)) {
|
|
42
|
+
if (options.onMissing) {
|
|
43
|
+
return options.onMissing();
|
|
44
|
+
}
|
|
45
|
+
if (options.missingMessage) {
|
|
46
|
+
throw new Error(options.missingMessage);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
throw new Error(`${options.readErrorPrefix}: ${getErrorMessage(error)}`);
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
return JSON.parse(fileContent);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
throw new Error(`${options.invalidJsonPrefix}: ${getErrorMessage(error)}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function writeJsonFileAtomic(filePath, tempFilePrefix, config) {
|
|
59
|
+
const directory = path.dirname(filePath);
|
|
60
|
+
fs.mkdirSync(directory, { recursive: true });
|
|
61
|
+
const tempFilePath = path.join(directory, `.${tempFilePrefix}.${process.pid}.${Date.now()}.tmp`);
|
|
62
|
+
try {
|
|
63
|
+
fs.writeFileSync(tempFilePath, `${JSON.stringify(config, null, 2)}\n`, {
|
|
64
|
+
encoding: "utf8",
|
|
65
|
+
});
|
|
66
|
+
fs.renameSync(tempFilePath, filePath);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
try {
|
|
70
|
+
fs.rmSync(tempFilePath, { force: true });
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Best-effort cleanup only.
|
|
74
|
+
}
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=jsonFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonFile.js","sourceRoot":"","sources":["../../src/internal/jsonFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ProviderDiagnosticListener } from "../diagnostics.js";
|
|
2
|
+
import type { LLMProvider, ProviderCapabilities } from "../interface.js";
|
|
3
|
+
import type { ChatMessage, ChatRequest, ChatStreamEvent, ChatTool } from "../types.js";
|
|
4
|
+
import type { WithRetryOptions } from "./withRetry.js";
|
|
5
|
+
import { ProviderError } from "../types.js";
|
|
6
|
+
import { OpenAIMessageCore, OpenAIToolDefinition } from "./shared.js";
|
|
7
|
+
export interface OpenAiCompatibleRetryConfig {
|
|
8
|
+
readonly maxRetries: number;
|
|
9
|
+
readonly consecutive529Limit: number;
|
|
10
|
+
readonly baseDelayMs?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface OpenAiCompatibleProviderOptions {
|
|
13
|
+
readonly model: string;
|
|
14
|
+
readonly contextWindowTokens: number;
|
|
15
|
+
readonly apiKey?: string;
|
|
16
|
+
readonly retryConfig?: OpenAiCompatibleRetryConfig;
|
|
17
|
+
readonly onDiagnosticEvent?: ProviderDiagnosticListener;
|
|
18
|
+
}
|
|
19
|
+
interface StandardOpenAiErrorOptions {
|
|
20
|
+
readonly model: string;
|
|
21
|
+
readonly authenticationMessage: string;
|
|
22
|
+
readonly rateLimitMessage: string;
|
|
23
|
+
readonly serviceErrorMessage: string;
|
|
24
|
+
readonly connectionErrorMessage: string;
|
|
25
|
+
readonly requestFailedMessage: string;
|
|
26
|
+
}
|
|
27
|
+
export declare abstract class OpenAiCompatibleProvider implements LLMProvider {
|
|
28
|
+
abstract readonly name: string;
|
|
29
|
+
private capabilities?;
|
|
30
|
+
abstract streamChat(request: ChatRequest): AsyncIterable<ChatStreamEvent>;
|
|
31
|
+
protected abstract translateError(error: unknown, response?: Response, responseBody?: string): ProviderError;
|
|
32
|
+
protected chatMessageToOpenAIMessage(msg: ChatMessage): OpenAIMessageCore;
|
|
33
|
+
protected chatToolToOpenAITool(tool: ChatTool): OpenAIToolDefinition;
|
|
34
|
+
getCapabilities(): ProviderCapabilities;
|
|
35
|
+
protected configureCapabilities(contextWindowTokens: number): void;
|
|
36
|
+
protected createOriginalError(error: unknown): Error;
|
|
37
|
+
protected buildRetryOptions(request: ChatRequest, model: string, retryConfig: OpenAiCompatibleRetryConfig | undefined, onDiagnosticEvent?: ProviderDiagnosticListener): WithRetryOptions;
|
|
38
|
+
protected translateCommonMessageError(msg: string | undefined, originalError: Error, connectionErrorMessage: string): ProviderError | null;
|
|
39
|
+
protected translateStandardOpenAiError(error: unknown, response: Response | undefined, options: StandardOpenAiErrorOptions): ProviderError;
|
|
40
|
+
private translateStandardOpenAiResponseError;
|
|
41
|
+
protected isRetryableError(err: unknown): boolean;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=openAiCompatibleProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openAiCompatibleProvider.d.ts","sourceRoot":"","sources":["../../src/internal/openAiCompatibleProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,QAAQ,EACT,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,aAAa,EAKd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EAQrB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,2BAA2B,CAAC;IACnD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;CACzD;AAED,UAAU,0BAA0B;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,8BAAsB,wBAAyB,YAAW,WAAW;IACnE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAuB;IAE5C,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC;IACzE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAC/B,KAAK,EAAE,OAAO,EACd,QAAQ,CAAC,EAAE,QAAQ,EACnB,YAAY,CAAC,EAAE,MAAM,GACpB,aAAa;IAEhB,SAAS,CAAC,0BAA0B,CAAC,GAAG,EAAE,WAAW,GAAG,iBAAiB;IAMzE,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,oBAAoB;IAIpE,eAAe,IAAI,oBAAoB;IAOvC,SAAS,CAAC,qBAAqB,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI;IAIlE,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK;IAIpD,SAAS,CAAC,iBAAiB,CACzB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,2BAA2B,GAAG,SAAS,EACpD,iBAAiB,CAAC,EAAE,0BAA0B,GAC7C,gBAAgB;IAWnB,SAAS,CAAC,2BAA2B,CACnC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,aAAa,EAAE,KAAK,EACpB,sBAAsB,EAAE,MAAM,GAC7B,aAAa,GAAG,IAAI;IAuBvB,SAAS,CAAC,4BAA4B,CACpC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,OAAO,EAAE,0BAA0B,GAClC,aAAa;IA6BhB,OAAO,CAAC,oCAAoC;IAmD5C,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;CAMlD"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { createProviderCapabilities } from "./capabilities.js";
|
|
2
|
+
import { ProviderError, ProviderAuthenticationError, ProviderContextLengthError, ProviderModelNotFoundError, ProviderRateLimitError, } from "../types.js";
|
|
3
|
+
import { applyOpenAIMessageCore, createOpenAIToolDefinition, createProviderRetryOptions, isAbortOrTransportError, isContextLengthError, normalizeErrorMessage, parseRetryAfterSeconds, } from "./shared.js";
|
|
4
|
+
export class OpenAiCompatibleProvider {
|
|
5
|
+
chatMessageToOpenAIMessage(msg) {
|
|
6
|
+
const role = msg.role;
|
|
7
|
+
const out = { role, content: msg.content ?? "" };
|
|
8
|
+
return applyOpenAIMessageCore(out, msg);
|
|
9
|
+
}
|
|
10
|
+
chatToolToOpenAITool(tool) {
|
|
11
|
+
return createOpenAIToolDefinition(tool);
|
|
12
|
+
}
|
|
13
|
+
getCapabilities() {
|
|
14
|
+
if (!this.capabilities) {
|
|
15
|
+
throw new ProviderError("Provider capabilities were not configured");
|
|
16
|
+
}
|
|
17
|
+
return this.capabilities;
|
|
18
|
+
}
|
|
19
|
+
configureCapabilities(contextWindowTokens) {
|
|
20
|
+
this.capabilities = createProviderCapabilities(contextWindowTokens);
|
|
21
|
+
}
|
|
22
|
+
createOriginalError(error) {
|
|
23
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
24
|
+
}
|
|
25
|
+
buildRetryOptions(request, model, retryConfig, onDiagnosticEvent) {
|
|
26
|
+
return createProviderRetryOptions({
|
|
27
|
+
request,
|
|
28
|
+
model,
|
|
29
|
+
provider: this.name,
|
|
30
|
+
retryConfig,
|
|
31
|
+
isRetryable: (err) => this.isRetryableError(err),
|
|
32
|
+
onDiagnosticEvent,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
translateCommonMessageError(msg, originalError, connectionErrorMessage) {
|
|
36
|
+
if (!msg) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
if (isContextLengthError(msg)) {
|
|
40
|
+
return new ProviderContextLengthError(`Context length exceeded: ${msg}`, originalError);
|
|
41
|
+
}
|
|
42
|
+
if (msg.includes("AbortError") || msg.includes("aborted")) {
|
|
43
|
+
return new ProviderError("Request cancelled", originalError);
|
|
44
|
+
}
|
|
45
|
+
if (isAbortOrTransportError(msg)) {
|
|
46
|
+
return new ProviderError(connectionErrorMessage, originalError);
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
translateStandardOpenAiError(error, response, options) {
|
|
51
|
+
const originalError = this.createOriginalError(error);
|
|
52
|
+
const normalizedMessage = normalizeErrorMessage(originalError.message);
|
|
53
|
+
if (response) {
|
|
54
|
+
const responseError = this.translateStandardOpenAiResponseError(response, normalizedMessage, originalError, options);
|
|
55
|
+
if (responseError) {
|
|
56
|
+
return responseError;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return (this.translateCommonMessageError(normalizedMessage || originalError.message, originalError, options.connectionErrorMessage) ??
|
|
60
|
+
new ProviderError(originalError.message || options.requestFailedMessage, originalError));
|
|
61
|
+
}
|
|
62
|
+
translateStandardOpenAiResponseError(response, normalizedMessage, originalError, options) {
|
|
63
|
+
if (response.status === 400 && isContextLengthError(normalizedMessage)) {
|
|
64
|
+
return new ProviderContextLengthError(`Context length exceeded: ${normalizedMessage}`, originalError);
|
|
65
|
+
}
|
|
66
|
+
if (response.status === 401) {
|
|
67
|
+
return new ProviderAuthenticationError(options.authenticationMessage, originalError);
|
|
68
|
+
}
|
|
69
|
+
if (response.status === 429) {
|
|
70
|
+
const retryAfterSeconds = parseRetryAfterSeconds(response.headers.get("retry-after"));
|
|
71
|
+
return new ProviderRateLimitError(options.rateLimitMessage, retryAfterSeconds, originalError);
|
|
72
|
+
}
|
|
73
|
+
if (response.status === 404) {
|
|
74
|
+
return new ProviderModelNotFoundError(options.model, `Model not found: ${options.model}`, originalError);
|
|
75
|
+
}
|
|
76
|
+
if (response.status >= 500 && response.status < 600) {
|
|
77
|
+
return new ProviderError(normalizedMessage
|
|
78
|
+
? `${options.serviceErrorMessage}: ${normalizedMessage}`
|
|
79
|
+
: options.serviceErrorMessage, originalError);
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
isRetryableError(err) {
|
|
84
|
+
if (err instanceof ProviderAuthenticationError)
|
|
85
|
+
return false;
|
|
86
|
+
if (err instanceof ProviderContextLengthError)
|
|
87
|
+
return false;
|
|
88
|
+
if (err instanceof ProviderModelNotFoundError)
|
|
89
|
+
return false;
|
|
90
|
+
return err instanceof ProviderError;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=openAiCompatibleProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openAiCompatibleProvider.js","sourceRoot":"","sources":["../../src/internal/openAiCompatibleProvider.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAyBrB,MAAM,OAAgB,wBAAwB;IAWlC,0BAA0B,CAAC,GAAgB;QACnD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAiC,CAAC;QACnD,MAAM,GAAG,GAAsB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QACpE,OAAO,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAES,oBAAoB,CAAC,IAAc;QAC3C,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,aAAa,CAAC,2CAA2C,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAES,qBAAqB,CAAC,mBAA2B;QACzD,IAAI,CAAC,YAAY,GAAG,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;IACtE,CAAC;IAES,mBAAmB,CAAC,KAAc;QAC1C,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IAES,iBAAiB,CACzB,OAAoB,EACpB,KAAa,EACb,WAAoD,EACpD,iBAA8C;QAE9C,OAAO,0BAA0B,CAAC;YAChC,OAAO;YACP,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,WAAW;YACX,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;YAChD,iBAAiB;SAClB,CAAC,CAAC;IACL,CAAC;IAES,2BAA2B,CACnC,GAAuB,EACvB,aAAoB,EACpB,sBAA8B;QAE9B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,0BAA0B,CACnC,4BAA4B,GAAG,EAAE,EACjC,aAAa,CACd,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,aAAa,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,aAAa,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAES,4BAA4B,CACpC,KAAc,EACd,QAA8B,EAC9B,OAAmC;QAEnC,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEvE,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,IAAI,CAAC,oCAAoC,CAC7D,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,OAAO,CACR,CAAC;YACF,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,aAAa,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,CACL,IAAI,CAAC,2BAA2B,CAC9B,iBAAiB,IAAI,aAAa,CAAC,OAAO,EAC1C,aAAa,EACb,OAAO,CAAC,sBAAsB,CAC/B;YACD,IAAI,aAAa,CACf,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC,oBAAoB,EACrD,aAAa,CACd,CACF,CAAC;IACJ,CAAC;IAEO,oCAAoC,CAC1C,QAAkB,EAClB,iBAAyB,EACzB,aAAoB,EACpB,OAAmC;QAEnC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,0BAA0B,CACnC,4BAA4B,iBAAiB,EAAE,EAC/C,aAAa,CACd,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,2BAA2B,CACpC,OAAO,CAAC,qBAAqB,EAC7B,aAAa,CACd,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,iBAAiB,GAAG,sBAAsB,CAC9C,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CACpC,CAAC;YACF,OAAO,IAAI,sBAAsB,CAC/B,OAAO,CAAC,gBAAgB,EACxB,iBAAiB,EACjB,aAAa,CACd,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,0BAA0B,CACnC,OAAO,CAAC,KAAK,EACb,oBAAoB,OAAO,CAAC,KAAK,EAAE,EACnC,aAAa,CACd,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACpD,OAAO,IAAI,aAAa,CACtB,iBAAiB;gBACf,CAAC,CAAC,GAAG,OAAO,CAAC,mBAAmB,KAAK,iBAAiB,EAAE;gBACxD,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAC/B,aAAa,CACd,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAES,gBAAgB,CAAC,GAAY;QACrC,IAAI,GAAG,YAAY,2BAA2B;YAAE,OAAO,KAAK,CAAC;QAC7D,IAAI,GAAG,YAAY,0BAA0B;YAAE,OAAO,KAAK,CAAC;QAC5D,IAAI,GAAG,YAAY,0BAA0B;YAAE,OAAO,KAAK,CAAC;QAC5D,OAAO,GAAG,YAAY,aAAa,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { WithRetryOptions } from "./withRetry.js";
|
|
2
|
+
import type { ProviderError } from "../types.js";
|
|
3
|
+
import { type OpenAIStreamToolCallAccumulator } from "./shared.js";
|
|
4
|
+
import type { ChatStreamEvent } from "../types.js";
|
|
5
|
+
export declare function consumeOpenAiChatCompletionsStream(reader: ReadableStreamDefaultReader<Uint8Array>, toolCallsByIndex: Map<number, OpenAIStreamToolCallAccumulator>): AsyncIterable<ChatStreamEvent>;
|
|
6
|
+
export declare function fetchOpenAiCompatibleStreamReader(options: {
|
|
7
|
+
body: Record<string, unknown>;
|
|
8
|
+
signal: AbortSignal | undefined;
|
|
9
|
+
fetchStream: (body: Record<string, unknown>, signal: AbortSignal | undefined) => Promise<Response>;
|
|
10
|
+
retryOptions: WithRetryOptions;
|
|
11
|
+
translateError: (error: unknown) => ProviderError;
|
|
12
|
+
}): Promise<ReadableStreamDefaultReader<Uint8Array>>;
|
|
13
|
+
//# sourceMappingURL=openAiStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openAiStream.d.ts","sourceRoot":"","sources":["../../src/internal/openAiStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAML,KAAK,+BAA+B,EACrC,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,aAAa,CAAC;AAyG/D,wBAAuB,kCAAkC,CACvD,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,+BAA+B,CAAC,GAC7D,aAAa,CAAC,eAAe,CAAC,CAchC;AAED,wBAAsB,iCAAiC,CAAC,OAAO,EAAE;IAC/D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,CACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,WAAW,GAAG,SAAS,KAC5B,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,aAAa,CAAC;CACnD,GAAG,OAAO,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAUnD"}
|