@theokit/sdk 4.13.1 → 4.14.1
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/CHANGELOG.md +12 -0
- package/dist/{cron-C7catiH8.d.ts → cron-DY0uC1ng.d.ts} +7 -0
- package/dist/{cron-DK1WVZnI.d.cts → cron-ElTj1cSH.d.cts} +7 -0
- package/dist/cron.cjs +159 -21
- package/dist/cron.cjs.map +1 -1
- package/dist/cron.d.cts +1 -1
- package/dist/cron.d.ts +1 -1
- package/dist/cron.js +159 -21
- package/dist/cron.js.map +1 -1
- package/dist/eval.cjs +159 -21
- package/dist/eval.cjs.map +1 -1
- package/dist/eval.js +159 -21
- package/dist/eval.js.map +1 -1
- package/dist/index.cjs +162 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +162 -21
- package/dist/index.js.map +1 -1
- package/dist/internal/llm/openai.d.ts +29 -0
- package/dist/internal/providers/builtin/cerebras.d.ts +5 -0
- package/dist/internal/providers/builtin/cohere.d.ts +8 -0
- package/dist/internal/providers/builtin/deepinfra.d.ts +2 -0
- package/dist/internal/providers/builtin/google.d.ts +6 -0
- package/dist/internal/providers/builtin/groq.d.ts +2 -0
- package/dist/internal/providers/builtin/mistral.d.ts +2 -0
- package/dist/internal/providers/builtin/openai-compatible.d.ts +1 -0
- package/dist/internal/providers/builtin/perplexity.d.ts +5 -0
- package/dist/internal/providers/builtin/together.d.ts +2 -0
- package/dist/internal/providers/builtin/xai.d.ts +2 -0
- package/dist/models.cjs +124 -5
- package/dist/models.cjs.map +1 -1
- package/dist/models.js +124 -5
- package/dist/models.js.map +1 -1
- package/dist/types/provider-profile.d.ts +7 -0
- package/package.json +1 -1
|
@@ -1,4 +1,32 @@
|
|
|
1
1
|
import type { LlmClient, LlmEvent, LlmFinish, LlmRequest } from "./types.js";
|
|
2
|
+
export interface OpenAIClientOptions {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
baseUrl?: string;
|
|
5
|
+
organization?: string;
|
|
6
|
+
fetch?: typeof fetch;
|
|
7
|
+
/**
|
|
8
|
+
* Provider name for error mapping dispatch (T1.1, ADR D185). When set
|
|
9
|
+
* to `"ollama"`, transport and HTTP errors go through `mapOllamaTransportError`
|
|
10
|
+
* / `mapOllamaHttpError` for actionable messages before falling back to
|
|
11
|
+
* the generic OpenAI-compatible mapper. Default `"openai"`.
|
|
12
|
+
*/
|
|
13
|
+
providerName?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Opt-in leaked-dialect safe-parse (theokit#58 follow-up). When `true`, a finish that carries
|
|
16
|
+
* ZERO native `tool_calls` has its assistant text scanned for the Hermes `<function=…></tool_call>`
|
|
17
|
+
* dialect; any recovered calls are surfaced as real `tool_calls` so the loop executes them.
|
|
18
|
+
* Default `false` — a code assistant can legitimately print a literal `<function=` in code text.
|
|
19
|
+
*/
|
|
20
|
+
extractToolCallsFromContent?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* M41 — extra HTTP headers merged into the request (the profile's static `extraHeaders` + a provider
|
|
23
|
+
* `transform.headers(ctx)`). Spread AFTER the base `authorization`/`content-type`, so a provider that owns
|
|
24
|
+
* its auth CAN override them by design (document this on `ProviderTransform.headers`).
|
|
25
|
+
*/
|
|
26
|
+
extraHeaders?: Record<string, string>;
|
|
27
|
+
/** M45 — explicit chat-completions path (from `ProviderProfile.chatCompletionsPath`). */
|
|
28
|
+
chatCompletionsPath?: string;
|
|
29
|
+
}
|
|
2
30
|
interface OpenAIDeltaChunk {
|
|
3
31
|
choices?: Array<{
|
|
4
32
|
index: number;
|
|
@@ -59,6 +87,7 @@ export declare class OpenAIClient implements LlmClient {
|
|
|
59
87
|
private readonly options;
|
|
60
88
|
readonly name = "openai";
|
|
61
89
|
private readonly baseUrl;
|
|
90
|
+
private readonly chatPath;
|
|
62
91
|
private readonly fetchImpl;
|
|
63
92
|
constructor(options: OpenAIClientOptions);
|
|
64
93
|
stream(request: LlmRequest, signal: AbortSignal): AsyncGenerator<LlmEvent, LlmFinish, void>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M45 — Cerebras. Integration header adapted from OpenCode's `cerebras.ts` (MIT — value changed to
|
|
3
|
+
* `theokit`, never `opencode`: the header attributes TRAFFIC). Models per models.dev (2026-07 snapshot).
|
|
4
|
+
*/
|
|
5
|
+
export declare const CEREBRAS: import("../types.js").ProviderProfile;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M45 — Cohere via its OpenAI-compatibility surface (`api.cohere.ai/compatibility/v1` — the native v2 API
|
|
3
|
+
* is NOT chat_completions; the discovery flagged the old catalog baseUrl as doubly wrong). Models per
|
|
4
|
+
* models.dev `cohere` (2026-07 snapshot). SOURCE NOTE (review L2): the compatibility endpoint + `CO_API_KEY`
|
|
5
|
+
* come from Cohere's own docs/python-SDK convention (not vendored in this repo's references) — verify with a
|
|
6
|
+
* live smoke when a key is available.
|
|
7
|
+
*/
|
|
8
|
+
export declare const COHERE: import("../types.js").ProviderProfile;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M45 — Google Gemini via the DIRECT OpenAI-compat endpoint (a Google API key, not OpenRouter). Distinct
|
|
3
|
+
* from the `gemini` builtin (an OpenRouter passthrough) by ADR D3 — two routes, two names. Endpoint + env
|
|
4
|
+
* vars per Google's OpenAI-compatibility docs (mirrored by models.dev `google` + the M44 catalog entry).
|
|
5
|
+
*/
|
|
6
|
+
export declare const GOOGLE: import("../types.js").ProviderProfile;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M45 — Perplexity. Its endpoint is UNVERSIONED (`/chat/completions`) — the explicit `chatCompletionsPath`
|
|
3
|
+
* escape expresses it (the sonar-online model family was retired; models per models.dev `perplexity`).
|
|
4
|
+
*/
|
|
5
|
+
export declare const PERPLEXITY: import("../types.js").ProviderProfile;
|
package/dist/models.cjs
CHANGED
|
@@ -382,7 +382,13 @@ var ANTHROPIC = {
|
|
|
382
382
|
baseUrl: "https://api.anthropic.com",
|
|
383
383
|
modelsUrl: "https://api.anthropic.com/v1/models",
|
|
384
384
|
hostname: "api.anthropic.com",
|
|
385
|
-
fallbackModels: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"]
|
|
385
|
+
fallbackModels: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"],
|
|
386
|
+
// M45 — the Anthropic beta-features header (interleaved thinking + fine-grained tool streaming). An
|
|
387
|
+
// Anthropic API constant, adapted verbatim from OpenCode's anthropic plugin (MIT © 2025 opencode). The
|
|
388
|
+
// SANCTIONED behavior delta of M45 (ADR D4) — consumed by the anthropic transport's extraHeaders wiring.
|
|
389
|
+
extraHeaders: {
|
|
390
|
+
"anthropic-beta": "interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"
|
|
391
|
+
}
|
|
386
392
|
};
|
|
387
393
|
|
|
388
394
|
// src/internal/providers/builtin/bedrock.ts
|
|
@@ -401,6 +407,44 @@ var BEDROCK = {
|
|
|
401
407
|
]
|
|
402
408
|
};
|
|
403
409
|
|
|
410
|
+
// src/internal/providers/builtin/openai-compatible.ts
|
|
411
|
+
function openAiCompatibleProfile(p) {
|
|
412
|
+
return {
|
|
413
|
+
apiMode: "chat_completions",
|
|
414
|
+
authType: "api_key",
|
|
415
|
+
fallbackModels: [],
|
|
416
|
+
...p
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// src/internal/providers/builtin/cerebras.ts
|
|
421
|
+
var CEREBRAS = openAiCompatibleProfile({
|
|
422
|
+
name: "cerebras",
|
|
423
|
+
baseUrl: "https://api.cerebras.ai/v1",
|
|
424
|
+
envVars: ["CEREBRAS_API_KEY"],
|
|
425
|
+
fallbackModels: ["gpt-oss-120b", "zai-glm-4.7"],
|
|
426
|
+
extraHeaders: { "X-Cerebras-3rd-Party-Integration": "theokit" },
|
|
427
|
+
hostname: "api.cerebras.ai"
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
// src/internal/providers/builtin/cohere.ts
|
|
431
|
+
var COHERE = openAiCompatibleProfile({
|
|
432
|
+
name: "cohere",
|
|
433
|
+
baseUrl: "https://api.cohere.ai/compatibility/v1",
|
|
434
|
+
envVars: ["COHERE_API_KEY", "CO_API_KEY"],
|
|
435
|
+
fallbackModels: ["command-a-03-2025"],
|
|
436
|
+
hostname: "api.cohere.ai"
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
// src/internal/providers/builtin/deepinfra.ts
|
|
440
|
+
var DEEPINFRA = openAiCompatibleProfile({
|
|
441
|
+
name: "deepinfra",
|
|
442
|
+
baseUrl: "https://api.deepinfra.com/v1/openai",
|
|
443
|
+
envVars: ["DEEPINFRA_API_KEY"],
|
|
444
|
+
fallbackModels: ["Qwen/Qwen3-32B"],
|
|
445
|
+
hostname: "api.deepinfra.com"
|
|
446
|
+
});
|
|
447
|
+
|
|
404
448
|
// src/internal/providers/builtin/gemini.ts
|
|
405
449
|
var GEMINI = {
|
|
406
450
|
name: "gemini",
|
|
@@ -412,6 +456,24 @@ var GEMINI = {
|
|
|
412
456
|
fallbackModels: ["google/gemini-2.0-flash-001"]
|
|
413
457
|
};
|
|
414
458
|
|
|
459
|
+
// src/internal/providers/builtin/google.ts
|
|
460
|
+
var GOOGLE = openAiCompatibleProfile({
|
|
461
|
+
name: "google",
|
|
462
|
+
baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
|
|
463
|
+
envVars: ["GOOGLE_API_KEY", "GEMINI_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"],
|
|
464
|
+
fallbackModels: ["gemini-2.5-pro", "gemini-2.5-flash"],
|
|
465
|
+
hostname: "generativelanguage.googleapis.com"
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
// src/internal/providers/builtin/groq.ts
|
|
469
|
+
var GROQ = openAiCompatibleProfile({
|
|
470
|
+
name: "groq",
|
|
471
|
+
baseUrl: "https://api.groq.com/openai/v1",
|
|
472
|
+
envVars: ["GROQ_API_KEY"],
|
|
473
|
+
fallbackModels: ["llama-3.3-70b-versatile", "llama-3.1-8b-instant"],
|
|
474
|
+
hostname: "api.groq.com"
|
|
475
|
+
});
|
|
476
|
+
|
|
415
477
|
// src/internal/providers/builtin/llamacpp.ts
|
|
416
478
|
var LLAMACPP = {
|
|
417
479
|
name: "llamacpp",
|
|
@@ -438,6 +500,15 @@ var LMSTUDIO = {
|
|
|
438
500
|
fallbackModels: ["loaded-model"]
|
|
439
501
|
};
|
|
440
502
|
|
|
503
|
+
// src/internal/providers/builtin/mistral.ts
|
|
504
|
+
var MISTRAL = openAiCompatibleProfile({
|
|
505
|
+
name: "mistral",
|
|
506
|
+
baseUrl: "https://api.mistral.ai/v1",
|
|
507
|
+
envVars: ["MISTRAL_API_KEY"],
|
|
508
|
+
fallbackModels: ["mistral-large-latest", "codestral-latest"],
|
|
509
|
+
hostname: "api.mistral.ai"
|
|
510
|
+
});
|
|
511
|
+
|
|
441
512
|
// src/internal/providers/builtin/ollama.ts
|
|
442
513
|
var OLLAMA = {
|
|
443
514
|
name: "ollama",
|
|
@@ -825,9 +896,33 @@ var OPENROUTER = {
|
|
|
825
896
|
baseUrl: "https://openrouter.ai/api",
|
|
826
897
|
modelsUrl: "https://openrouter.ai/api/v1/models",
|
|
827
898
|
hostname: "openrouter.ai",
|
|
828
|
-
|
|
899
|
+
// M45 — models refreshed (claude-3-haiku retired upstream).
|
|
900
|
+
fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-haiku-4-5"],
|
|
901
|
+
// M45 — OpenRouter app-attribution headers (mechanism from OpenCode's openrouter plugin, MIT; VALUES are
|
|
902
|
+
// theokit's own — copying another app's referer would misattribute traffic).
|
|
903
|
+
extraHeaders: { "HTTP-Referer": "https://usetheo.dev", "X-Title": "theokit" }
|
|
829
904
|
};
|
|
830
905
|
|
|
906
|
+
// src/internal/providers/builtin/perplexity.ts
|
|
907
|
+
var PERPLEXITY = openAiCompatibleProfile({
|
|
908
|
+
name: "perplexity",
|
|
909
|
+
baseUrl: "https://api.perplexity.ai",
|
|
910
|
+
chatCompletionsPath: "/chat/completions",
|
|
911
|
+
envVars: ["PERPLEXITY_API_KEY"],
|
|
912
|
+
fallbackModels: ["sonar-pro", "sonar"],
|
|
913
|
+
hostname: "api.perplexity.ai"
|
|
914
|
+
});
|
|
915
|
+
|
|
916
|
+
// src/internal/providers/builtin/together.ts
|
|
917
|
+
var TOGETHER = openAiCompatibleProfile({
|
|
918
|
+
name: "together",
|
|
919
|
+
aliases: ["togetherai"],
|
|
920
|
+
baseUrl: "https://api.together.xyz/v1",
|
|
921
|
+
envVars: ["TOGETHER_API_KEY"],
|
|
922
|
+
fallbackModels: ["Qwen/Qwen2.5-7B-Instruct-Turbo"],
|
|
923
|
+
hostname: "api.together.xyz"
|
|
924
|
+
});
|
|
925
|
+
|
|
831
926
|
// src/internal/providers/builtin/vertex.ts
|
|
832
927
|
var VERTEX = {
|
|
833
928
|
name: "vertex",
|
|
@@ -844,11 +939,26 @@ var VERTEX = {
|
|
|
844
939
|
]
|
|
845
940
|
};
|
|
846
941
|
|
|
942
|
+
// src/internal/providers/builtin/xai.ts
|
|
943
|
+
var XAI = openAiCompatibleProfile({
|
|
944
|
+
name: "xai",
|
|
945
|
+
aliases: ["grok"],
|
|
946
|
+
baseUrl: "https://api.x.ai/v1",
|
|
947
|
+
envVars: ["XAI_API_KEY"],
|
|
948
|
+
fallbackModels: ["grok-4.5", "grok-4.3"],
|
|
949
|
+
hostname: "api.x.ai"
|
|
950
|
+
});
|
|
951
|
+
|
|
847
952
|
// src/internal/providers/builtin/index.ts
|
|
848
|
-
var
|
|
953
|
+
var _registeredState = (() => {
|
|
954
|
+
const g = globalThis;
|
|
955
|
+
const sym = /* @__PURE__ */ Symbol.for("theokit-sdk.providers.builtins-registered");
|
|
956
|
+
if (g[sym] === void 0) g[sym] = { done: false };
|
|
957
|
+
return g[sym];
|
|
958
|
+
})();
|
|
849
959
|
function registerBuiltins() {
|
|
850
|
-
if (
|
|
851
|
-
|
|
960
|
+
if (_registeredState.done) return;
|
|
961
|
+
_registeredState.done = true;
|
|
852
962
|
registerProvider(ANTHROPIC);
|
|
853
963
|
registerProvider(OPENAI);
|
|
854
964
|
registerProvider(OPENAI_CHATGPT);
|
|
@@ -859,6 +969,15 @@ function registerBuiltins() {
|
|
|
859
969
|
registerProvider(LLAMACPP);
|
|
860
970
|
registerProvider(BEDROCK);
|
|
861
971
|
registerProvider(VERTEX);
|
|
972
|
+
registerProvider(GOOGLE);
|
|
973
|
+
registerProvider(MISTRAL);
|
|
974
|
+
registerProvider(GROQ);
|
|
975
|
+
registerProvider(COHERE);
|
|
976
|
+
registerProvider(DEEPINFRA);
|
|
977
|
+
registerProvider(TOGETHER);
|
|
978
|
+
registerProvider(XAI);
|
|
979
|
+
registerProvider(PERPLEXITY);
|
|
980
|
+
registerProvider(CEREBRAS);
|
|
862
981
|
registerCatalogProviders();
|
|
863
982
|
}
|
|
864
983
|
|