@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.
Files changed (36) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{cron-C7catiH8.d.ts → cron-DY0uC1ng.d.ts} +7 -0
  3. package/dist/{cron-DK1WVZnI.d.cts → cron-ElTj1cSH.d.cts} +7 -0
  4. package/dist/cron.cjs +159 -21
  5. package/dist/cron.cjs.map +1 -1
  6. package/dist/cron.d.cts +1 -1
  7. package/dist/cron.d.ts +1 -1
  8. package/dist/cron.js +159 -21
  9. package/dist/cron.js.map +1 -1
  10. package/dist/eval.cjs +159 -21
  11. package/dist/eval.cjs.map +1 -1
  12. package/dist/eval.js +159 -21
  13. package/dist/eval.js.map +1 -1
  14. package/dist/index.cjs +162 -21
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.cts +2 -2
  17. package/dist/index.d.ts +2 -2
  18. package/dist/index.js +162 -21
  19. package/dist/index.js.map +1 -1
  20. package/dist/internal/llm/openai.d.ts +29 -0
  21. package/dist/internal/providers/builtin/cerebras.d.ts +5 -0
  22. package/dist/internal/providers/builtin/cohere.d.ts +8 -0
  23. package/dist/internal/providers/builtin/deepinfra.d.ts +2 -0
  24. package/dist/internal/providers/builtin/google.d.ts +6 -0
  25. package/dist/internal/providers/builtin/groq.d.ts +2 -0
  26. package/dist/internal/providers/builtin/mistral.d.ts +2 -0
  27. package/dist/internal/providers/builtin/openai-compatible.d.ts +1 -0
  28. package/dist/internal/providers/builtin/perplexity.d.ts +5 -0
  29. package/dist/internal/providers/builtin/together.d.ts +2 -0
  30. package/dist/internal/providers/builtin/xai.d.ts +2 -0
  31. package/dist/models.cjs +124 -5
  32. package/dist/models.cjs.map +1 -1
  33. package/dist/models.js +124 -5
  34. package/dist/models.js.map +1 -1
  35. package/dist/types/provider-profile.d.ts +7 -0
  36. 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,2 @@
1
+ /** M45 — DeepInfra. OpenAI-compat surface under /v1/openai (models.dev `deepinfra`, OpenCode profile map). */
2
+ export declare const DEEPINFRA: 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,2 @@
1
+ /** M45 — Groq. Values per models.dev `groq` (2026-07 snapshot); OpenAI-compat surface under /openai/v1. */
2
+ export declare const GROQ: import("../types.js").ProviderProfile;
@@ -0,0 +1,2 @@
1
+ /** M45 — Mistral (La Plateforme). Values per models.dev `mistral` (2026-07 snapshot). */
2
+ export declare const MISTRAL: import("../types.js").ProviderProfile;
@@ -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;
@@ -0,0 +1,2 @@
1
+ /** M45 — Together AI (models.dev id `togetherai` — kept as an alias). Values per the 2026-07 snapshot. */
2
+ export declare const TOGETHER: import("../types.js").ProviderProfile;
@@ -0,0 +1,2 @@
1
+ /** M45 — xAI (Grok). Values per models.dev `xai` (2026-07 snapshot; grok-2 retired). */
2
+ export declare const XAI: 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
- fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-3-haiku"]
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 registered = false;
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 (registered) return;
851
- registered = true;
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