@falai/agent 3.4.2 → 3.4.3
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/package.json +1 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts +0 -47
- package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MemoryAdapter.js +0 -208
- package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts +0 -97
- package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/MongoAdapter.js +0 -200
- package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts +0 -169
- package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +0 -475
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +0 -85
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +0 -312
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts +0 -115
- package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/PrismaAdapter.js +0 -410
- package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts +0 -72
- package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/RedisAdapter.js +0 -290
- package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +0 -86
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +0 -341
- package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
- package/dist/cjs/adapters/index.d.ts +0 -17
- package/dist/cjs/adapters/index.d.ts.map +0 -1
- package/dist/cjs/adapters/index.js +0 -21
- package/dist/cjs/adapters/index.js.map +0 -1
- package/dist/cjs/adapters/sessionRow.d.ts +0 -22
- package/dist/cjs/adapters/sessionRow.d.ts.map +0 -1
- package/dist/cjs/adapters/sessionRow.js +0 -52
- package/dist/cjs/adapters/sessionRow.js.map +0 -1
- package/dist/cjs/constants/index.d.ts +0 -1
- package/dist/cjs/constants/index.d.ts.map +0 -1
- package/dist/cjs/constants/index.js +0 -4
- package/dist/cjs/constants/index.js.map +0 -1
- package/dist/cjs/core/Agent.d.ts +0 -382
- package/dist/cjs/core/Agent.d.ts.map +0 -1
- package/dist/cjs/core/Agent.js +0 -1198
- package/dist/cjs/core/Agent.js.map +0 -1
- package/dist/cjs/core/ResponseModal.d.ts +0 -305
- package/dist/cjs/core/ResponseModal.d.ts.map +0 -1
- package/dist/cjs/core/ResponseModal.js +0 -1414
- package/dist/cjs/core/ResponseModal.js.map +0 -1
- package/dist/cjs/core/ToolLoopExecutor.d.ts +0 -133
- package/dist/cjs/core/ToolLoopExecutor.d.ts.map +0 -1
- package/dist/cjs/core/ToolLoopExecutor.js +0 -568
- package/dist/cjs/core/ToolLoopExecutor.js.map +0 -1
- package/dist/cjs/core/createAgent.d.ts +0 -35
- package/dist/cjs/core/createAgent.d.ts.map +0 -1
- package/dist/cjs/core/createAgent.js +0 -39
- package/dist/cjs/core/createAgent.js.map +0 -1
- package/dist/cjs/index.d.ts +0 -61
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js +0 -113
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/package.json +0 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts +0 -46
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
- package/dist/cjs/providers/AnthropicProvider.js +0 -50
- package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
- package/dist/cjs/providers/DeepSeekProvider.d.ts +0 -47
- package/dist/cjs/providers/DeepSeekProvider.d.ts.map +0 -1
- package/dist/cjs/providers/DeepSeekProvider.js +0 -42
- package/dist/cjs/providers/DeepSeekProvider.js.map +0 -1
- package/dist/cjs/providers/FallbackAiProvider.d.ts +0 -26
- package/dist/cjs/providers/FallbackAiProvider.d.ts.map +0 -1
- package/dist/cjs/providers/FallbackAiProvider.js +0 -54
- package/dist/cjs/providers/FallbackAiProvider.js.map +0 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +0 -51
- package/dist/cjs/providers/GeminiProvider.d.ts.map +0 -1
- package/dist/cjs/providers/GeminiProvider.js +0 -53
- package/dist/cjs/providers/GeminiProvider.js.map +0 -1
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts +0 -80
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts.map +0 -1
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.js +0 -89
- package/dist/cjs/providers/GenericOpenAICompatibleProvider.js.map +0 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +0 -61
- package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +0 -1
- package/dist/cjs/providers/OpenAICompatibleProvider.js +0 -58
- package/dist/cjs/providers/OpenAICompatibleProvider.js.map +0 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts +0 -40
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/cjs/providers/OpenAIProvider.js +0 -42
- package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
- package/dist/cjs/providers/OpenRouterProvider.d.ts +0 -56
- package/dist/cjs/providers/OpenRouterProvider.d.ts.map +0 -1
- package/dist/cjs/providers/OpenRouterProvider.js +0 -45
- package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
- package/dist/cjs/providers/ProviderAdapter.d.ts +0 -126
- package/dist/cjs/providers/ProviderAdapter.d.ts.map +0 -1
- package/dist/cjs/providers/ProviderAdapter.js +0 -313
- package/dist/cjs/providers/ProviderAdapter.js.map +0 -1
- package/dist/cjs/providers/ZaiProvider.d.ts +0 -45
- package/dist/cjs/providers/ZaiProvider.d.ts.map +0 -1
- package/dist/cjs/providers/ZaiProvider.js +0 -51
- package/dist/cjs/providers/ZaiProvider.js.map +0 -1
- package/dist/cjs/providers/index.d.ts +0 -26
- package/dist/cjs/providers/index.d.ts.map +0 -1
- package/dist/cjs/providers/index.js +0 -30
- package/dist/cjs/providers/index.js.map +0 -1
- package/dist/cjs/utils/streamingMessage.d.ts +0 -48
- package/dist/cjs/utils/streamingMessage.d.ts.map +0 -1
- package/dist/cjs/utils/streamingMessage.js +0 -210
- package/dist/cjs/utils/streamingMessage.js.map +0 -1
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Google Gemini.
|
|
4
|
-
*
|
|
5
|
-
* Thought signatures, the `functionResponse`-by-name pairing, implicit cache
|
|
6
|
-
* hits and the thinking levels are all in `@providerkit/core`, written against
|
|
7
|
-
* the REST API rather than the SDK.
|
|
8
|
-
*
|
|
9
|
-
* v3 sends a response schema alongside tools when a caller asks for both. v2
|
|
10
|
-
* dropped the schema in that case, from a 2024-era constraint that no longer
|
|
11
|
-
* holds — a sibling codebase runs the combination in production today.
|
|
12
|
-
*/
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.GeminiProvider = void 0;
|
|
15
|
-
const core_1 = require("@providerkit/core");
|
|
16
|
-
const ProviderAdapter_js_1 = require("./ProviderAdapter.js");
|
|
17
|
-
class GeminiProvider extends ProviderAdapter_js_1.ProviderAdapter {
|
|
18
|
-
constructor(options) {
|
|
19
|
-
if (!options.apiKey)
|
|
20
|
-
throw new Error("Gemini API key is required");
|
|
21
|
-
if (!options.model) {
|
|
22
|
-
throw new Error("Model is required. Example: 'gemini-3.1-pro-preview'");
|
|
23
|
-
}
|
|
24
|
-
super({
|
|
25
|
-
provider: (0, core_1.createGeminiProvider)({
|
|
26
|
-
apiKey: options.apiKey,
|
|
27
|
-
model: options.model,
|
|
28
|
-
id: "gemini",
|
|
29
|
-
...(options.baseUrl ? { baseUrl: options.baseUrl } : {}),
|
|
30
|
-
...(options.jsonWithTools ? { jsonWithTools: options.jsonWithTools } : {}),
|
|
31
|
-
...(options.config?.maxTokens ? { maxTokens: options.config.maxTokens } : {}),
|
|
32
|
-
...(options.config?.effort ? { effort: options.config.effort } : {}),
|
|
33
|
-
...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
|
|
34
|
-
}),
|
|
35
|
-
model: options.model,
|
|
36
|
-
...(options.config ? { defaults: options.config } : {}),
|
|
37
|
-
...(options.backupModels ? { backupModels: options.backupModels } : {}),
|
|
38
|
-
...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
|
|
39
|
-
...(options.fallbackOptions ? { fallbackOptions: options.fallbackOptions } : {}),
|
|
40
|
-
...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
|
|
41
|
-
});
|
|
42
|
-
this.name = "gemini";
|
|
43
|
-
this.capabilities = {
|
|
44
|
-
supportsTools: true,
|
|
45
|
-
supportsNativeJsonSchema: true,
|
|
46
|
-
supportsStreaming: true,
|
|
47
|
-
supportsStreamingToolCalls: true,
|
|
48
|
-
supportsPromptCaching: true,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
exports.GeminiProvider = GeminiProvider;
|
|
53
|
-
//# sourceMappingURL=GeminiProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../../src/providers/GeminiProvider.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAEH,4CAA8F;AAI9F,6DAA2E;AA8B3E,MAAa,cAAe,SAAQ,oCAAe;IAUjD,YAAY,OAA8B;QACxC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,KAAK,CAAC;YACJ,QAAQ,EAAE,IAAA,2BAAoB,EAAC;gBAC7B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,EAAE,EAAE,QAAQ;gBACZ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC;YACF,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;QAhCW,SAAI,GAAG,QAAQ,CAAC;QAChB,iBAAY,GAAyB;YACnD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI;YAChC,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IA0BF,CAAC;CACF;AAnCD,wCAmCC"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generic OpenAI-compatible provider + factory.
|
|
3
|
-
*
|
|
4
|
-
* Most "OpenAI-compatible" endpoints (Azure OpenAI, Groq, Together, Fireworks,
|
|
5
|
-
* vLLM, LM Studio, Ollama, a self-hosted gateway…) differ from OpenAI only in
|
|
6
|
-
* base URL, headers, and how structured output is requested. `createOpenAICompatibleProvider`
|
|
7
|
-
* builds a working provider from that config alone — no subclass required — so
|
|
8
|
-
* adding one ("fake" provider, same wire protocol, different base URL) is a few lines:
|
|
9
|
-
*
|
|
10
|
-
* const ollama = createOpenAICompatibleProvider({
|
|
11
|
-
* name: "ollama",
|
|
12
|
-
* baseURL: "http://localhost:11434/v1",
|
|
13
|
-
* apiKey: "ollama", // local servers ignore it; pass any non-empty string
|
|
14
|
-
* model: "llama3.3",
|
|
15
|
-
* });
|
|
16
|
-
*
|
|
17
|
-
* const azure = createOpenAICompatibleProvider({
|
|
18
|
-
* name: "azure",
|
|
19
|
-
* baseURL: `https://${resource}.openai.azure.com/openai/deployments/${deployment}`,
|
|
20
|
-
* apiKey: process.env.AZURE_OPENAI_KEY!,
|
|
21
|
-
* model: deployment,
|
|
22
|
-
* defaultHeaders: { "api-key": process.env.AZURE_OPENAI_KEY! },
|
|
23
|
-
* });
|
|
24
|
-
*
|
|
25
|
-
* For OpenAI, OpenRouter, Anthropic and Gemini, prefer their dedicated
|
|
26
|
-
* provider classes.
|
|
27
|
-
*/
|
|
28
|
-
import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
|
|
29
|
-
import { OpenAICompatibleProvider, type JsonWithTools, type StructuredOutputMode } from "./OpenAICompatibleProvider.js";
|
|
30
|
-
import type { RequestConfig } from "./ProviderAdapter.js";
|
|
31
|
-
import type { Provider } from "@providerkit/core";
|
|
32
|
-
export interface OpenAICompatibleOptions {
|
|
33
|
-
/** Provider identifier, e.g. "azure", "ollama", "groq". */
|
|
34
|
-
name: string;
|
|
35
|
-
/** Base URL of the OpenAI-compatible endpoint. */
|
|
36
|
-
baseURL: string;
|
|
37
|
-
/** API key. Local servers often ignore it — pass any non-empty string. */
|
|
38
|
-
apiKey: string;
|
|
39
|
-
/** Primary model / deployment name. */
|
|
40
|
-
model: string;
|
|
41
|
-
/** Backup models to try if the primary fails. */
|
|
42
|
-
backupModels?: string[];
|
|
43
|
-
/**
|
|
44
|
-
* Fallback providers, tried in order after this one fails or exhausts.
|
|
45
|
-
* Accepts both @falai/agent AiProviders (like ZaiProvider) and
|
|
46
|
-
* @providerkit/core Providers.
|
|
47
|
-
*/
|
|
48
|
-
fallbacks?: Array<AiProvider | Provider>;
|
|
49
|
-
/** Capability overrides, merged over the defaults (all true except caching). */
|
|
50
|
-
capabilities?: Partial<ProviderCapabilities>;
|
|
51
|
-
/** Extra request headers (e.g. Azure's `api-key`, a gateway's auth header). */
|
|
52
|
-
defaultHeaders?: Record<string, string>;
|
|
53
|
-
/**
|
|
54
|
-
* How structured output is requested. Defaults to `"json_schema"` — the
|
|
55
|
-
* broadest enforced mode for arbitrary compatible endpoints (`responses.parse`
|
|
56
|
-
* is OpenAI-only). See {@link StructuredOutputMode}.
|
|
57
|
-
*/
|
|
58
|
-
structuredOutput?: StructuredOutputMode;
|
|
59
|
-
/**
|
|
60
|
-
* See {@link JsonWithTools}. Only affects calls that carry tools, and the
|
|
61
|
-
* answer is the model's, not the endpoint's — measure the one you serve.
|
|
62
|
-
*/
|
|
63
|
-
jsonWithTools?: JsonWithTools;
|
|
64
|
-
/** Default request parameters merged into every call. */
|
|
65
|
-
config?: RequestConfig;
|
|
66
|
-
/** Idle-stream deadline (ms) and retry count. */
|
|
67
|
-
retryConfig?: {
|
|
68
|
-
timeout?: number;
|
|
69
|
-
retries?: number;
|
|
70
|
-
};
|
|
71
|
-
/** Replacement `fetch`, for tests that script the wire. */
|
|
72
|
-
fetchImpl?: typeof fetch;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Build an `AiProvider` for any OpenAI-compatible endpoint from config alone.
|
|
76
|
-
* See {@link OpenAICompatibleOptions} for the knobs and the file header for
|
|
77
|
-
* Azure/Ollama examples.
|
|
78
|
-
*/
|
|
79
|
-
export declare function createOpenAICompatibleProvider(options: OpenAICompatibleOptions): OpenAICompatibleProvider;
|
|
80
|
-
//# sourceMappingURL=GenericOpenAICompatibleProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GenericOpenAICompatibleProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/GenericOpenAICompatibleProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACL,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACtC,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACzC,gFAAgF;IAChF,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7C,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yDAAyD;IACzD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,iDAAiD;IACjD,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AA4DD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,uBAAuB,GAC/B,wBAAwB,CAE1B"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Generic OpenAI-compatible provider + factory.
|
|
4
|
-
*
|
|
5
|
-
* Most "OpenAI-compatible" endpoints (Azure OpenAI, Groq, Together, Fireworks,
|
|
6
|
-
* vLLM, LM Studio, Ollama, a self-hosted gateway…) differ from OpenAI only in
|
|
7
|
-
* base URL, headers, and how structured output is requested. `createOpenAICompatibleProvider`
|
|
8
|
-
* builds a working provider from that config alone — no subclass required — so
|
|
9
|
-
* adding one ("fake" provider, same wire protocol, different base URL) is a few lines:
|
|
10
|
-
*
|
|
11
|
-
* const ollama = createOpenAICompatibleProvider({
|
|
12
|
-
* name: "ollama",
|
|
13
|
-
* baseURL: "http://localhost:11434/v1",
|
|
14
|
-
* apiKey: "ollama", // local servers ignore it; pass any non-empty string
|
|
15
|
-
* model: "llama3.3",
|
|
16
|
-
* });
|
|
17
|
-
*
|
|
18
|
-
* const azure = createOpenAICompatibleProvider({
|
|
19
|
-
* name: "azure",
|
|
20
|
-
* baseURL: `https://${resource}.openai.azure.com/openai/deployments/${deployment}`,
|
|
21
|
-
* apiKey: process.env.AZURE_OPENAI_KEY!,
|
|
22
|
-
* model: deployment,
|
|
23
|
-
* defaultHeaders: { "api-key": process.env.AZURE_OPENAI_KEY! },
|
|
24
|
-
* });
|
|
25
|
-
*
|
|
26
|
-
* For OpenAI, OpenRouter, Anthropic and Gemini, prefer their dedicated
|
|
27
|
-
* provider classes.
|
|
28
|
-
*/
|
|
29
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.createOpenAICompatibleProvider = createOpenAICompatibleProvider;
|
|
31
|
-
const OpenAICompatibleProvider_js_1 = require("./OpenAICompatibleProvider.js");
|
|
32
|
-
/** Sensible defaults for a modern OpenAI-compatible endpoint. */
|
|
33
|
-
const DEFAULT_CAPABILITIES = {
|
|
34
|
-
supportsTools: true,
|
|
35
|
-
supportsNativeJsonSchema: true,
|
|
36
|
-
supportsStreaming: true,
|
|
37
|
-
supportsStreamingToolCalls: true,
|
|
38
|
-
supportsPromptCaching: false,
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Concrete OpenAI-compatible provider configured entirely from
|
|
42
|
-
* {@link OpenAICompatibleOptions}. Kept private — construct via
|
|
43
|
-
* {@link createOpenAICompatibleProvider}; subclass {@link OpenAICompatibleProvider}
|
|
44
|
-
* directly if you need behavior beyond these knobs (e.g. provider-specific
|
|
45
|
-
* error classification or streaming hooks).
|
|
46
|
-
*/
|
|
47
|
-
class GenericOpenAICompatibleProvider extends OpenAICompatibleProvider_js_1.OpenAICompatibleProvider {
|
|
48
|
-
constructor(options) {
|
|
49
|
-
if (!options.name) {
|
|
50
|
-
throw new Error("An OpenAI-compatible provider needs a `name`.");
|
|
51
|
-
}
|
|
52
|
-
if (!options.baseURL) {
|
|
53
|
-
throw new Error(`[${options.name}] A \`baseURL\` is required.`);
|
|
54
|
-
}
|
|
55
|
-
if (!options.apiKey) {
|
|
56
|
-
throw new Error(`[${options.name}] An \`apiKey\` is required — use any non-empty string for servers that ignore it.`);
|
|
57
|
-
}
|
|
58
|
-
if (!options.model) {
|
|
59
|
-
throw new Error(`[${options.name}] A \`model\` is required.`);
|
|
60
|
-
}
|
|
61
|
-
super({
|
|
62
|
-
id: options.name,
|
|
63
|
-
apiKey: options.apiKey,
|
|
64
|
-
baseUrl: options.baseURL,
|
|
65
|
-
model: options.model,
|
|
66
|
-
// Arbitrary compatible endpoints rarely serve the Responses API; default
|
|
67
|
-
// to the broadly-supported chat json_schema strategy.
|
|
68
|
-
structuredOutput: options.structuredOutput ?? "json_schema",
|
|
69
|
-
...(options.jsonWithTools ? { jsonWithTools: options.jsonWithTools } : {}),
|
|
70
|
-
...(options.defaultHeaders ? { headers: options.defaultHeaders } : {}),
|
|
71
|
-
...(options.backupModels ? { backupModels: options.backupModels } : {}),
|
|
72
|
-
...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
|
|
73
|
-
...(options.config ? { config: options.config } : {}),
|
|
74
|
-
...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
|
|
75
|
-
...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
|
|
76
|
-
});
|
|
77
|
-
this.name = options.name;
|
|
78
|
-
this.capabilities = { ...DEFAULT_CAPABILITIES, ...options.capabilities };
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Build an `AiProvider` for any OpenAI-compatible endpoint from config alone.
|
|
83
|
-
* See {@link OpenAICompatibleOptions} for the knobs and the file header for
|
|
84
|
-
* Azure/Ollama examples.
|
|
85
|
-
*/
|
|
86
|
-
function createOpenAICompatibleProvider(options) {
|
|
87
|
-
return new GenericOpenAICompatibleProvider(options);
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=GenericOpenAICompatibleProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GenericOpenAICompatibleProvider.js","sourceRoot":"","sources":["../../../src/providers/GenericOpenAICompatibleProvider.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;AAkHH,wEAIC;AAnHD,+EAIuC;AA4CvC,iEAAiE;AACjE,MAAM,oBAAoB,GAAyB;IACjD,aAAa,EAAE,IAAI;IACnB,wBAAwB,EAAE,IAAI;IAC9B,iBAAiB,EAAE,IAAI;IACvB,0BAA0B,EAAE,IAAI;IAChC,qBAAqB,EAAE,KAAK;CAC7B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,+BAAgC,SAAQ,sDAAwB;IAIpE,YAAY,OAAgC;QAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,8BAA8B,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,IAAI,OAAO,CAAC,IAAI,oFAAoF,CACrG,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,4BAA4B,CAAC,CAAC;QAChE,CAAC;QAED,KAAK,CAAC;YACJ,EAAE,EAAE,OAAO,CAAC,IAAI;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,yEAAyE;YACzE,sDAAsD;YACtD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,aAAa;YAC3D,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,oBAAoB,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAC3E,CAAC;CACF;AAED;;;;GAIG;AACH,SAAgB,8BAA8B,CAC5C,OAAgC;IAEhC,OAAO,IAAI,+BAA+B,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared base for OpenAI-compatible chat-completions providers (OpenAI,
|
|
3
|
-
* DeepSeek, OpenRouter, and anything else speaking the dialect).
|
|
4
|
-
*
|
|
5
|
-
* Everything that used to live here — message building, tool-call assembly,
|
|
6
|
-
* streaming, retry, backup models, error wrapping — is now in
|
|
7
|
-
* `@providerkit/core` and `ProviderAdapter`. What is left is the one decision
|
|
8
|
-
* this layer still owns: which wire a structured request goes out on.
|
|
9
|
-
*/
|
|
10
|
-
import { ProviderAdapter, type ProviderAdapterInit, type RequestConfig } from "./ProviderAdapter.js";
|
|
11
|
-
/**
|
|
12
|
-
* How structured (JSON-schema) output is requested from the endpoint:
|
|
13
|
-
* - `"responses_parse"` — OpenAI's Responses API, which enforces the schema
|
|
14
|
-
* natively. Most compatible endpoints do not implement it.
|
|
15
|
-
* - `"json_schema"` — chat completions with a `json_schema` response format.
|
|
16
|
-
* The broadest enforced mode (DeepSeek, Groq, Together, Fireworks, vLLM…).
|
|
17
|
-
* - `"json_object"` — chat completions with plain JSON mode, for servers with
|
|
18
|
-
* no schema enforcement at all. The caller validates.
|
|
19
|
-
*/
|
|
20
|
-
export type StructuredOutputMode = "responses_parse" | "json_schema" | "json_object";
|
|
21
|
-
/**
|
|
22
|
-
* How the schema rides on a call that ALSO carries tools — the one turn shape
|
|
23
|
-
* an agent makes constantly and a provider seam cannot get right by itself.
|
|
24
|
-
*
|
|
25
|
-
* `"response_format"` sends both, which every shape documents and most models
|
|
26
|
-
* honour. `"prompt"` leaves the response format off those calls and sends the
|
|
27
|
-
* schema as prompt instead.
|
|
28
|
-
*
|
|
29
|
-
* Set it to `"prompt"` when the model answers a tool-worthy turn by NARRATING
|
|
30
|
-
* the tool — "let me look that up for you" — and then stopping. That is not a
|
|
31
|
-
* model without initiative: its decoder is pinned to the schema, so the tool
|
|
32
|
-
* call has nowhere to go, and no instruction can make it emit one. Nothing is
|
|
33
|
-
* logged, because from the wire's point of view nothing failed.
|
|
34
|
-
*
|
|
35
|
-
* Measured 2026-09-07, one request, sampled: `z-ai/glm-5.3-flash` called its
|
|
36
|
-
* tool 0/10 under a response format and 8/8 without one, `deepseek-v4-flash`
|
|
37
|
-
* 0/5, `gemini-3.8-flash` 3/10. It stays a setting rather than a default
|
|
38
|
-
* because the reverse is just as real — `qwen3.8-flash` went 10/10 → 1/6 the
|
|
39
|
-
* other way. Measure the model you ship; one call answers it.
|
|
40
|
-
*/
|
|
41
|
-
export type JsonWithTools = "response_format" | "prompt";
|
|
42
|
-
export interface OpenAICompatibleProviderInit extends Omit<ProviderAdapterInit, "provider"> {
|
|
43
|
-
apiKey: string;
|
|
44
|
-
baseUrl?: string;
|
|
45
|
-
/** Names the provider in errors, and picks core's effort dialect. */
|
|
46
|
-
id: string;
|
|
47
|
-
headers?: Record<string, string>;
|
|
48
|
-
config?: RequestConfig;
|
|
49
|
-
structuredOutput?: StructuredOutputMode;
|
|
50
|
-
/** See {@link JsonWithTools}. Only affects calls that carry tools. */
|
|
51
|
-
jsonWithTools?: JsonWithTools;
|
|
52
|
-
/** OpenRouter upstream-host pin, to keep a conversation's prompt cache warm. */
|
|
53
|
-
providerOrder?: string[];
|
|
54
|
-
/** Replacement `fetch`, for tests that script the wire. */
|
|
55
|
-
fetchImpl?: typeof fetch;
|
|
56
|
-
}
|
|
57
|
-
export declare abstract class OpenAICompatibleProvider extends ProviderAdapter {
|
|
58
|
-
protected readonly config?: RequestConfig;
|
|
59
|
-
protected constructor(init: OpenAICompatibleProviderInit);
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=OpenAICompatibleProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAICompatibleProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/OpenAICompatibleProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErG;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,aAAa,GAAG,aAAa,CAAC;AAErF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,4BACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,sEAAsE;IACtE,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,8BAAsB,wBAAyB,SAAQ,eAAe;IACpE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAE1C,SAAS,aAAa,IAAI,EAAE,4BAA4B;CAazD"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Shared base for OpenAI-compatible chat-completions providers (OpenAI,
|
|
4
|
-
* DeepSeek, OpenRouter, and anything else speaking the dialect).
|
|
5
|
-
*
|
|
6
|
-
* Everything that used to live here — message building, tool-call assembly,
|
|
7
|
-
* streaming, retry, backup models, error wrapping — is now in
|
|
8
|
-
* `@providerkit/core` and `ProviderAdapter`. What is left is the one decision
|
|
9
|
-
* this layer still owns: which wire a structured request goes out on.
|
|
10
|
-
*/
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.OpenAICompatibleProvider = void 0;
|
|
13
|
-
const core_1 = require("@providerkit/core");
|
|
14
|
-
const ProviderAdapter_js_1 = require("./ProviderAdapter.js");
|
|
15
|
-
class OpenAICompatibleProvider extends ProviderAdapter_js_1.ProviderAdapter {
|
|
16
|
-
constructor(init) {
|
|
17
|
-
const mode = init.structuredOutput ?? "responses_parse";
|
|
18
|
-
super({
|
|
19
|
-
provider: buildProvider(init, mode),
|
|
20
|
-
model: init.model,
|
|
21
|
-
...(init.config ? { defaults: init.config } : {}),
|
|
22
|
-
...(init.backupModels ? { backupModels: init.backupModels } : {}),
|
|
23
|
-
...(init.fallbacks ? { fallbacks: init.fallbacks } : {}),
|
|
24
|
-
...(init.fallbackOptions ? { fallbackOptions: init.fallbackOptions } : {}),
|
|
25
|
-
...(init.retryConfig ? { retryConfig: init.retryConfig } : {}),
|
|
26
|
-
});
|
|
27
|
-
this.config = init.config;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
exports.OpenAICompatibleProvider = OpenAICompatibleProvider;
|
|
31
|
-
function buildProvider(init, mode) {
|
|
32
|
-
if (mode === "responses_parse") {
|
|
33
|
-
return (0, core_1.createResponsesProvider)({
|
|
34
|
-
apiKey: init.apiKey,
|
|
35
|
-
model: init.model,
|
|
36
|
-
id: init.id,
|
|
37
|
-
...(init.baseUrl ? { baseUrl: `${init.baseUrl}` } : {}),
|
|
38
|
-
...(init.headers ? { headers: init.headers } : {}),
|
|
39
|
-
...(init.config?.maxTokens ? { maxTokens: init.config.maxTokens } : {}),
|
|
40
|
-
...(init.config?.effort ? { effort: init.config.effort } : {}),
|
|
41
|
-
...(init.fetchImpl ? { fetchImpl: init.fetchImpl } : {}),
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
return (0, core_1.createOpenAIProvider)({
|
|
45
|
-
apiKey: init.apiKey,
|
|
46
|
-
model: init.model,
|
|
47
|
-
id: init.id,
|
|
48
|
-
jsonMode: mode === "json_schema" ? "schema" : "object",
|
|
49
|
-
...(init.jsonWithTools ? { jsonWithTools: init.jsonWithTools } : {}),
|
|
50
|
-
...(init.baseUrl ? { baseUrl: init.baseUrl } : {}),
|
|
51
|
-
...(init.headers ? { headers: init.headers } : {}),
|
|
52
|
-
...(init.config?.maxTokens ? { maxTokens: init.config.maxTokens } : {}),
|
|
53
|
-
...(init.config?.effort ? { effort: init.config.effort } : {}),
|
|
54
|
-
...(init.providerOrder ? { providerOrder: init.providerOrder } : {}),
|
|
55
|
-
...(init.fetchImpl ? { fetchImpl: init.fetchImpl } : {}),
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=OpenAICompatibleProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAICompatibleProvider.js","sourceRoot":"","sources":["../../../src/providers/OpenAICompatibleProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenAI provider. Structured output goes out on the Responses API, which
|
|
3
|
-
* enforces the schema natively.
|
|
4
|
-
*/
|
|
5
|
-
import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
|
|
6
|
-
import { OpenAICompatibleProvider } from "./OpenAICompatibleProvider.js";
|
|
7
|
-
import type { Provider } from "@providerkit/core";
|
|
8
|
-
import type { RequestConfig } from "./ProviderAdapter.js";
|
|
9
|
-
export interface OpenAIProviderOptions {
|
|
10
|
-
/** OpenAI API key */
|
|
11
|
-
apiKey: string;
|
|
12
|
-
/** Model to use (required) — e.g. "gpt-5.6", "gpt-5.4-mini" */
|
|
13
|
-
model: string;
|
|
14
|
-
/** Backup models to try if the primary fails (default: []) */
|
|
15
|
-
backupModels?: string[];
|
|
16
|
-
/**
|
|
17
|
-
* Fallback providers, tried in order after this one fails or exhausts.
|
|
18
|
-
* Accepts both @falai/agent AiProviders (like ZaiProvider) and
|
|
19
|
-
* @providerkit/core Providers — the seam that makes a coding-plan primary
|
|
20
|
-
* degrade to anything else rather than fail the turn.
|
|
21
|
-
*/
|
|
22
|
-
fallbacks?: Array<AiProvider | Provider>;
|
|
23
|
-
/** Organization id, sent as the `OpenAI-Organization` header */
|
|
24
|
-
organization?: string;
|
|
25
|
-
/** Request defaults sent with every call */
|
|
26
|
-
config?: RequestConfig;
|
|
27
|
-
/** Idle-stream deadline and retry budget */
|
|
28
|
-
retryConfig?: {
|
|
29
|
-
timeout?: number;
|
|
30
|
-
retries?: number;
|
|
31
|
-
};
|
|
32
|
-
/** Replacement `fetch`, for tests that script the wire. */
|
|
33
|
-
fetchImpl?: typeof fetch;
|
|
34
|
-
}
|
|
35
|
-
export declare class OpenAIProvider extends OpenAICompatibleProvider {
|
|
36
|
-
readonly name = "openai";
|
|
37
|
-
readonly capabilities: ProviderCapabilities;
|
|
38
|
-
constructor(options: OpenAIProviderOptions);
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=OpenAIProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACzC,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,4CAA4C;IAC5C,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,cAAe,SAAQ,wBAAwB;IAC1D,SAAgB,IAAI,YAAY;IAChC,SAAgB,YAAY,EAAE,oBAAoB,CAQhD;gBAEU,OAAO,EAAE,qBAAqB;CAmB3C"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* OpenAI provider. Structured output goes out on the Responses API, which
|
|
4
|
-
* enforces the schema natively.
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.OpenAIProvider = void 0;
|
|
8
|
-
const OpenAICompatibleProvider_js_1 = require("./OpenAICompatibleProvider.js");
|
|
9
|
-
class OpenAIProvider extends OpenAICompatibleProvider_js_1.OpenAICompatibleProvider {
|
|
10
|
-
constructor(options) {
|
|
11
|
-
if (!options.apiKey)
|
|
12
|
-
throw new Error("OpenAI API key is required");
|
|
13
|
-
if (!options.model)
|
|
14
|
-
throw new Error("Model is required. Example: 'gpt-5.6' or 'gpt-5.5'");
|
|
15
|
-
super({
|
|
16
|
-
id: "openai",
|
|
17
|
-
apiKey: options.apiKey,
|
|
18
|
-
model: options.model,
|
|
19
|
-
structuredOutput: "responses_parse",
|
|
20
|
-
...(options.organization
|
|
21
|
-
? { headers: { "OpenAI-Organization": options.organization } }
|
|
22
|
-
: {}),
|
|
23
|
-
...(options.backupModels ? { backupModels: options.backupModels } : {}),
|
|
24
|
-
...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
|
|
25
|
-
...(options.config ? { config: options.config } : {}),
|
|
26
|
-
...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
|
|
27
|
-
...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
|
|
28
|
-
});
|
|
29
|
-
this.name = "openai";
|
|
30
|
-
this.capabilities = {
|
|
31
|
-
supportsTools: true,
|
|
32
|
-
supportsNativeJsonSchema: true,
|
|
33
|
-
supportsStreaming: true,
|
|
34
|
-
supportsStreamingToolCalls: true,
|
|
35
|
-
// v3: the shape auto-caches repeated prefixes and now reports the hit
|
|
36
|
-
// count, which the old adapter never read.
|
|
37
|
-
supportsPromptCaching: true,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
exports.OpenAIProvider = OpenAIProvider;
|
|
42
|
-
//# sourceMappingURL=OpenAIProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIProvider.js","sourceRoot":"","sources":["../../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,+EAAyE;AA4BzE,MAAa,cAAe,SAAQ,sDAAwB;IAY1D,YAAY,OAA8B;QACxC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAE1F,KAAK,CAAC;YACJ,EAAE,EAAE,QAAQ;YACZ,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,gBAAgB,EAAE,iBAAiB;YACnC,GAAG,CAAC,OAAO,CAAC,YAAY;gBACtB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,qBAAqB,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE;gBAC9D,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QA5BW,SAAI,GAAG,QAAQ,CAAC;QAChB,iBAAY,GAAyB;YACnD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI;YAChC,sEAAsE;YACtE,2CAA2C;YAC3C,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IAoBF,CAAC;CACF;AA/BD,wCA+BC"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenRouter — one OpenAI-compatible endpoint in front of many models.
|
|
3
|
-
*/
|
|
4
|
-
import type { AiProvider, ProviderCapabilities } from "../types/ai.js";
|
|
5
|
-
import { OpenAICompatibleProvider, type JsonWithTools } from "./OpenAICompatibleProvider.js";
|
|
6
|
-
import type { RequestConfig } from "./ProviderAdapter.js";
|
|
7
|
-
import type { Provider } from "@providerkit/core";
|
|
8
|
-
export interface OpenRouterProviderOptions {
|
|
9
|
-
/** OpenRouter API key */
|
|
10
|
-
apiKey: string;
|
|
11
|
-
/** Model to use (required) — see https://openrouter.ai/models */
|
|
12
|
-
model: string;
|
|
13
|
-
/** Backup models to try if the primary fails (default: []) */
|
|
14
|
-
backupModels?: string[];
|
|
15
|
-
/**
|
|
16
|
-
* Fallback providers, tried in order after this one fails or exhausts.
|
|
17
|
-
* Accepts both @falai/agent AiProviders (like ZaiProvider) and
|
|
18
|
-
* @providerkit/core Providers — the seam that makes a coding-plan primary
|
|
19
|
-
* degrade to anything else rather than fail the turn.
|
|
20
|
-
*/
|
|
21
|
-
fallbacks?: Array<AiProvider | Provider>;
|
|
22
|
-
/** Site URL for OpenRouter's rankings */
|
|
23
|
-
siteUrl?: string;
|
|
24
|
-
/** App name for OpenRouter's rankings */
|
|
25
|
-
siteName?: string;
|
|
26
|
-
/**
|
|
27
|
-
* Preferred upstream hosts, in order. OpenRouter's prompt cache lives on the
|
|
28
|
-
* upstream host's account and default routing hops between them, so every hop
|
|
29
|
-
* is a cold cache — worse latency and a higher effective input cost across a
|
|
30
|
-
* conversation's rounds. Fallbacks stay on: this is a preference, not a lock.
|
|
31
|
-
*/
|
|
32
|
-
providerOrder?: string[];
|
|
33
|
-
/**
|
|
34
|
-
* See {@link JsonWithTools} — and reach for it here first. One gateway serves
|
|
35
|
-
* hundreds of models and they do not agree: measured through this provider,
|
|
36
|
-
* `z-ai/glm-5.3-flash` called a tool 0/10 with the schema on the response
|
|
37
|
-
* format and 8/8 with it in the prompt, while `qwen3.8-flash` went the other
|
|
38
|
-
* way, 10/10 → 1/6. Changing `model` can change the right answer here.
|
|
39
|
-
*/
|
|
40
|
-
jsonWithTools?: JsonWithTools;
|
|
41
|
-
/** Request defaults sent with every call */
|
|
42
|
-
config?: RequestConfig;
|
|
43
|
-
/** Idle-stream deadline and retry budget */
|
|
44
|
-
retryConfig?: {
|
|
45
|
-
timeout?: number;
|
|
46
|
-
retries?: number;
|
|
47
|
-
};
|
|
48
|
-
/** Replacement `fetch`, for tests that script the wire. */
|
|
49
|
-
fetchImpl?: typeof fetch;
|
|
50
|
-
}
|
|
51
|
-
export declare class OpenRouterProvider extends OpenAICompatibleProvider {
|
|
52
|
-
readonly name = "openrouter";
|
|
53
|
-
readonly capabilities: ProviderCapabilities;
|
|
54
|
-
constructor(options: OpenRouterProviderOptions);
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=OpenRouterProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OpenRouterProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,yBAAyB;IACxC,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACzC,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,4CAA4C;IAC5C,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,kBAAmB,SAAQ,wBAAwB;IAC9D,SAAgB,IAAI,gBAAgB;IACpC,SAAgB,YAAY,EAAE,oBAAoB,CAMhD;gBAEU,OAAO,EAAE,yBAAyB;CAyB/C"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* OpenRouter — one OpenAI-compatible endpoint in front of many models.
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.OpenRouterProvider = void 0;
|
|
7
|
-
const OpenAICompatibleProvider_js_1 = require("./OpenAICompatibleProvider.js");
|
|
8
|
-
class OpenRouterProvider extends OpenAICompatibleProvider_js_1.OpenAICompatibleProvider {
|
|
9
|
-
constructor(options) {
|
|
10
|
-
if (!options.apiKey)
|
|
11
|
-
throw new Error("OpenRouter API key is required");
|
|
12
|
-
if (!options.model)
|
|
13
|
-
throw new Error("Model is required. See https://openrouter.ai/models");
|
|
14
|
-
super({
|
|
15
|
-
id: "openrouter",
|
|
16
|
-
apiKey: options.apiKey,
|
|
17
|
-
baseUrl: "https://openrouter.ai/api",
|
|
18
|
-
model: options.model,
|
|
19
|
-
// Chat completions rather than the Responses API: this gateway's
|
|
20
|
-
// json_schema passthrough is what its models actually support.
|
|
21
|
-
structuredOutput: "json_schema",
|
|
22
|
-
...(options.jsonWithTools ? { jsonWithTools: options.jsonWithTools } : {}),
|
|
23
|
-
headers: {
|
|
24
|
-
...(options.siteUrl ? { "HTTP-Referer": options.siteUrl } : {}),
|
|
25
|
-
...(options.siteName ? { "X-Title": options.siteName } : {}),
|
|
26
|
-
},
|
|
27
|
-
...(options.providerOrder ? { providerOrder: options.providerOrder } : {}),
|
|
28
|
-
...(options.backupModels ? { backupModels: options.backupModels } : {}),
|
|
29
|
-
...(options.fallbacks ? { fallbacks: options.fallbacks } : {}),
|
|
30
|
-
...(options.config ? { config: options.config } : {}),
|
|
31
|
-
...(options.retryConfig ? { retryConfig: options.retryConfig } : {}),
|
|
32
|
-
...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
|
|
33
|
-
});
|
|
34
|
-
this.name = "openrouter";
|
|
35
|
-
this.capabilities = {
|
|
36
|
-
supportsTools: true,
|
|
37
|
-
supportsNativeJsonSchema: true,
|
|
38
|
-
supportsStreaming: true,
|
|
39
|
-
supportsStreamingToolCalls: true,
|
|
40
|
-
supportsPromptCaching: true,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
exports.OpenRouterProvider = OpenRouterProvider;
|
|
45
|
-
//# sourceMappingURL=OpenRouterProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OpenRouterProvider.js","sourceRoot":"","sources":["../../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,+EAA6F;AA6C7F,MAAa,kBAAmB,SAAQ,sDAAwB;IAU9D,YAAY,OAAkC;QAC5C,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAE3F,KAAK,CAAC;YACJ,EAAE,EAAE,YAAY;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,2BAA2B;YACpC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,iEAAiE;YACjE,+DAA+D;YAC/D,gBAAgB,EAAE,aAAa;YAC/B,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,OAAO,EAAE;gBACP,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D;YACD,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QAhCW,SAAI,GAAG,YAAY,CAAC;QACpB,iBAAY,GAAyB;YACnD,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI;YAChC,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IA0BF,CAAC;CACF;AAnCD,gDAmCC"}
|