@theokit/sdk 4.14.0 → 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.
@@ -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;
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * M45 — Cohere via its OpenAI-compatibility surface (`api.cohere.ai/compatibility/v1` — the native v2 API
3
3
  * is NOT chat_completions; the discovery flagged the old catalog baseUrl as doubly wrong). Models per
4
- * models.dev `cohere` (2026-07 snapshot).
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.
5
7
  */
6
8
  export declare const COHERE: import("../types.js").ProviderProfile;
package/dist/models.cjs CHANGED
@@ -445,11 +445,22 @@ var DEEPINFRA = openAiCompatibleProfile({
445
445
  hostname: "api.deepinfra.com"
446
446
  });
447
447
 
448
+ // src/internal/providers/builtin/gemini.ts
449
+ var GEMINI = {
450
+ name: "gemini",
451
+ apiMode: "chat_completions",
452
+ envVars: ["OPENROUTER_API_KEY"],
453
+ authType: "api_key",
454
+ baseUrl: "https://openrouter.ai/api",
455
+ hostname: "openrouter.ai",
456
+ fallbackModels: ["google/gemini-2.0-flash-001"]
457
+ };
458
+
448
459
  // src/internal/providers/builtin/google.ts
449
460
  var GOOGLE = openAiCompatibleProfile({
450
461
  name: "google",
451
462
  baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
452
- envVars: ["GOOGLE_API_KEY", "GEMINI_API_KEY"],
463
+ envVars: ["GOOGLE_API_KEY", "GEMINI_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"],
453
464
  fallbackModels: ["gemini-2.5-pro", "gemini-2.5-flash"],
454
465
  hostname: "generativelanguage.googleapis.com"
455
466
  });
@@ -463,56 +474,6 @@ var GROQ = openAiCompatibleProfile({
463
474
  hostname: "api.groq.com"
464
475
  });
465
476
 
466
- // src/internal/providers/builtin/mistral.ts
467
- var MISTRAL = openAiCompatibleProfile({
468
- name: "mistral",
469
- baseUrl: "https://api.mistral.ai/v1",
470
- envVars: ["MISTRAL_API_KEY"],
471
- fallbackModels: ["mistral-large-latest", "codestral-latest"],
472
- hostname: "api.mistral.ai"
473
- });
474
-
475
- // src/internal/providers/builtin/perplexity.ts
476
- var PERPLEXITY = openAiCompatibleProfile({
477
- name: "perplexity",
478
- baseUrl: "https://api.perplexity.ai",
479
- chatCompletionsPath: "/chat/completions",
480
- envVars: ["PERPLEXITY_API_KEY"],
481
- fallbackModels: ["sonar-pro", "sonar"],
482
- hostname: "api.perplexity.ai"
483
- });
484
-
485
- // src/internal/providers/builtin/together.ts
486
- var TOGETHER = openAiCompatibleProfile({
487
- name: "together",
488
- aliases: ["togetherai"],
489
- baseUrl: "https://api.together.xyz/v1",
490
- envVars: ["TOGETHER_API_KEY"],
491
- fallbackModels: ["Qwen/Qwen2.5-7B-Instruct-Turbo"],
492
- hostname: "api.together.xyz"
493
- });
494
-
495
- // src/internal/providers/builtin/xai.ts
496
- var XAI = openAiCompatibleProfile({
497
- name: "xai",
498
- aliases: ["grok"],
499
- baseUrl: "https://api.x.ai/v1",
500
- envVars: ["XAI_API_KEY"],
501
- fallbackModels: ["grok-4.5", "grok-4.3"],
502
- hostname: "api.x.ai"
503
- });
504
-
505
- // src/internal/providers/builtin/gemini.ts
506
- var GEMINI = {
507
- name: "gemini",
508
- apiMode: "chat_completions",
509
- envVars: ["OPENROUTER_API_KEY"],
510
- authType: "api_key",
511
- baseUrl: "https://openrouter.ai/api",
512
- hostname: "openrouter.ai",
513
- fallbackModels: ["google/gemini-2.0-flash-001"]
514
- };
515
-
516
477
  // src/internal/providers/builtin/llamacpp.ts
517
478
  var LLAMACPP = {
518
479
  name: "llamacpp",
@@ -539,6 +500,15 @@ var LMSTUDIO = {
539
500
  fallbackModels: ["loaded-model"]
540
501
  };
541
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
+
542
512
  // src/internal/providers/builtin/ollama.ts
543
513
  var OLLAMA = {
544
514
  name: "ollama",
@@ -933,6 +903,26 @@ var OPENROUTER = {
933
903
  extraHeaders: { "HTTP-Referer": "https://usetheo.dev", "X-Title": "theokit" }
934
904
  };
935
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
+
936
926
  // src/internal/providers/builtin/vertex.ts
937
927
  var VERTEX = {
938
928
  name: "vertex",
@@ -949,11 +939,26 @@ var VERTEX = {
949
939
  ]
950
940
  };
951
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
+
952
952
  // src/internal/providers/builtin/index.ts
953
- 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
+ })();
954
959
  function registerBuiltins() {
955
- if (registered) return;
956
- registered = true;
960
+ if (_registeredState.done) return;
961
+ _registeredState.done = true;
957
962
  registerProvider(ANTHROPIC);
958
963
  registerProvider(OPENAI);
959
964
  registerProvider(OPENAI_CHATGPT);