@deepstrike/sdk 0.2.10 → 0.2.12

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 (41) hide show
  1. package/README.md +38 -0
  2. package/dist/harness/harness.d.ts +5 -0
  3. package/dist/harness/harness.js +12 -1
  4. package/dist/index.d.ts +7 -4
  5. package/dist/index.js +6 -4
  6. package/dist/providers/anthropic.d.ts +7 -0
  7. package/dist/providers/anthropic.js +129 -10
  8. package/dist/providers/base.d.ts +38 -0
  9. package/dist/providers/base.js +0 -0
  10. package/dist/providers/catalog.js +20 -8
  11. package/dist/providers/deepseek.d.ts +12 -0
  12. package/dist/providers/deepseek.js +23 -4
  13. package/dist/providers/gemini.js +23 -4
  14. package/dist/providers/glm.d.ts +12 -0
  15. package/dist/providers/glm.js +19 -2
  16. package/dist/providers/kimi.d.ts +12 -0
  17. package/dist/providers/kimi.js +19 -2
  18. package/dist/providers/minimax.js +4 -2
  19. package/dist/providers/ollama.js +2 -2
  20. package/dist/providers/openai-chat.js +3 -2
  21. package/dist/providers/openai-responses.js +13 -0
  22. package/dist/providers/openai.d.ts +7 -0
  23. package/dist/providers/openai.js +15 -2
  24. package/dist/providers/profiles.d.ts +52 -28
  25. package/dist/providers/profiles.js +52 -28
  26. package/dist/providers/qwen.d.ts +12 -0
  27. package/dist/providers/qwen.js +23 -4
  28. package/dist/runtime/output-schema.d.ts +14 -0
  29. package/dist/runtime/output-schema.js +113 -0
  30. package/dist/runtime/reducers.d.ts +15 -0
  31. package/dist/runtime/reducers.js +57 -0
  32. package/dist/runtime/runner.d.ts +24 -1
  33. package/dist/runtime/runner.js +185 -15
  34. package/dist/runtime/session-log.d.ts +9 -1
  35. package/dist/runtime/session-repair.d.ts +14 -0
  36. package/dist/runtime/session-repair.js +15 -0
  37. package/dist/runtime/sub-agent-orchestrator.js +14 -1
  38. package/dist/types/agent.d.ts +43 -1
  39. package/dist/types/agent.js +105 -18
  40. package/dist/types.d.ts +42 -1
  41. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  import { GoogleGenerativeAI } from "@google/generative-ai";
2
2
  import { withServerRuntimeGuard } from "../runtime/server.js";
3
- import { CircuitBreaker, normalizeToolCall } from "./base.js";
3
+ import { CircuitBreaker, normalizeToolCall, turnsWithStateAppended } from "./base.js";
4
4
  import { endpointProfiles } from "./profiles.js";
5
5
  const GEMINI_BASE = endpointProfiles["gemini.google"].baseURL;
6
6
  const GEMINI_POLICIES = {
@@ -56,8 +56,23 @@ export function buildContents(turns) {
56
56
  parts.push({ functionCall: { name: tc.name, args } });
57
57
  }
58
58
  }
59
- if (msg.content)
59
+ // Multimodal: render contentParts (text + image) when present, else the plain
60
+ // text body. Without this, image inputs to Gemini were silently dropped.
61
+ if (msg.contentParts?.length) {
62
+ for (const p of msg.contentParts) {
63
+ if (p.type === "text")
64
+ parts.push({ text: p.text });
65
+ else if (p.type === "image") {
66
+ if (p.data)
67
+ parts.push({ inlineData: { mimeType: p.mediaType ?? "image/png", data: p.data } });
68
+ else if (p.url)
69
+ parts.push({ fileData: { mimeType: p.mediaType ?? "image/png", fileUri: p.url } });
70
+ }
71
+ }
72
+ }
73
+ else if (msg.content) {
60
74
  parts.push({ text: msg.content });
75
+ }
61
76
  if (parts.length)
62
77
  contents.push({ role, parts });
63
78
  }
@@ -96,7 +111,7 @@ export class GeminiProvider {
96
111
  if (this.circuit.isOpen())
97
112
  throw new Error("Circuit breaker open");
98
113
  const system = context.systemText || undefined;
99
- const contents = buildContents(context.turns);
114
+ const contents = buildContents(turnsWithStateAppended(context));
100
115
  const geminiTools = buildTools(tools);
101
116
  let lastErr;
102
117
  for (let i = 0; i < this.maxRetries; i++) {
@@ -140,7 +155,7 @@ export class GeminiProvider {
140
155
  }
141
156
  async *stream(context, tools, extensions) {
142
157
  const system = context.systemText || undefined;
143
- const contents = buildContents(context.turns);
158
+ const contents = buildContents(turnsWithStateAppended(context));
144
159
  const geminiTools = buildTools(tools);
145
160
  const m = this.genAI.getGenerativeModel({
146
161
  ...this.modelExtensions(extensions),
@@ -165,11 +180,15 @@ export class GeminiProvider {
165
180
  }
166
181
  const usage = (await result.response).usageMetadata;
167
182
  if (usage?.totalTokenCount) {
183
+ // Gemini implicit/explicit cache hits are reported as cachedContentTokenCount,
184
+ // a subset of promptTokenCount (which stays the full prompt for accounting).
185
+ const cachedTokens = usage.cachedContentTokenCount ?? 0;
168
186
  yield {
169
187
  type: "usage",
170
188
  totalTokens: usage.totalTokenCount,
171
189
  inputTokens: usage.promptTokenCount ?? 0,
172
190
  outputTokens: usage.candidatesTokenCount ?? 0,
191
+ ...(cachedTokens > 0 ? { cacheReadInputTokens: cachedTokens } : {}),
173
192
  };
174
193
  }
175
194
  }
@@ -1,5 +1,17 @@
1
1
  import type { ProviderDescriptor, RuntimePolicy } from "../types.js";
2
+ import { AnthropicProvider } from "./anthropic.js";
2
3
  import { OpenAIChatProvider } from "./openai.js";
4
+ /**
5
+ * GLM over its Anthropic-compatible endpoint.
6
+ */
7
+ export declare class GLMAnthropicProvider extends AnthropicProvider {
8
+ constructor(apiKey: string, model?: string, retry?: {
9
+ maxRetries: number;
10
+ baseDelay: number;
11
+ }, baseURL?: string);
12
+ protected providerName(): string;
13
+ runtimePolicy(): RuntimePolicy;
14
+ }
3
15
  export declare class GLMProvider extends OpenAIChatProvider {
4
16
  constructor(apiKey: string, model?: string, retry?: {
5
17
  maxRetries: number;
@@ -1,6 +1,6 @@
1
+ import { AnthropicProvider } from "./anthropic.js";
1
2
  import { OpenAIChatProvider } from "./openai.js";
2
3
  import { endpointProfiles } from "./profiles.js";
3
- const GLM_BASE = endpointProfiles["glm.openai"].baseURL;
4
4
  const GLM_POLICIES = {
5
5
  "glm-5.1": { maxTurns: 50 },
6
6
  "glm/glm-5.1": { maxTurns: 50 },
@@ -11,8 +11,25 @@ const GLM_POLICIES = {
11
11
  "glm-4-air": { maxTurns: 20 },
12
12
  "glm/glm-4-air": { maxTurns: 20 },
13
13
  };
14
+ /**
15
+ * GLM over its Anthropic-compatible endpoint.
16
+ */
17
+ export class GLMAnthropicProvider extends AnthropicProvider {
18
+ constructor(apiKey, model = "glm-5.1", retry, baseURL = endpointProfiles["glm.anthropic"].baseURL) {
19
+ super(apiKey, model, retry, {
20
+ baseURL,
21
+ authMode: "api-key",
22
+ });
23
+ }
24
+ providerName() {
25
+ return "glm";
26
+ }
27
+ runtimePolicy() {
28
+ return GLM_POLICIES[this.model] ?? {};
29
+ }
30
+ }
14
31
  export class GLMProvider extends OpenAIChatProvider {
15
- constructor(apiKey, model = "glm-5.1", retry, baseURL = GLM_BASE) {
32
+ constructor(apiKey, model = "glm-5.1", retry, baseURL = endpointProfiles["glm.openai"].baseURL) {
16
33
  super(apiKey, model, retry, baseURL);
17
34
  }
18
35
  runtimePolicy() {
@@ -1,5 +1,17 @@
1
1
  import type { ProviderDescriptor, RuntimePolicy } from "../types.js";
2
+ import { AnthropicProvider } from "./anthropic.js";
2
3
  import { OpenAIChatProvider } from "./openai.js";
4
+ /**
5
+ * Kimi over its Anthropic-compatible endpoint.
6
+ */
7
+ export declare class KimiAnthropicProvider extends AnthropicProvider {
8
+ constructor(apiKey: string, model?: string, retry?: {
9
+ maxRetries: number;
10
+ baseDelay: number;
11
+ }, baseURL?: string);
12
+ protected providerName(): string;
13
+ runtimePolicy(): RuntimePolicy;
14
+ }
3
15
  export declare class KimiProvider extends OpenAIChatProvider {
4
16
  constructor(apiKey: string, model?: string, retry?: {
5
17
  maxRetries: number;
@@ -1,6 +1,6 @@
1
+ import { AnthropicProvider } from "./anthropic.js";
1
2
  import { OpenAIChatProvider } from "./openai.js";
2
3
  import { endpointProfiles } from "./profiles.js";
3
- const MOONSHOT_BASE = endpointProfiles["kimi.openai"].baseURL;
4
4
  const KIMI_POLICIES = {
5
5
  "moonshot-v1-8k": { maxTurns: 15 },
6
6
  "moonshot-v1-32k": { maxTurns: 20 },
@@ -10,8 +10,25 @@ const KIMI_POLICIES = {
10
10
  "kimi-k2-thinking": { maxTurns: 50 },
11
11
  "kimi-k2-thinking-turbo": { maxTurns: 40 },
12
12
  };
13
+ /**
14
+ * Kimi over its Anthropic-compatible endpoint.
15
+ */
16
+ export class KimiAnthropicProvider extends AnthropicProvider {
17
+ constructor(apiKey, model = "kimi-k2.6", retry, baseURL = endpointProfiles["kimi.anthropic"].baseURL) {
18
+ super(apiKey, model, retry, {
19
+ baseURL,
20
+ authMode: "api-key",
21
+ });
22
+ }
23
+ providerName() {
24
+ return "kimi";
25
+ }
26
+ runtimePolicy() {
27
+ return KIMI_POLICIES[this.model] ?? {};
28
+ }
29
+ }
13
30
  export class KimiProvider extends OpenAIChatProvider {
14
- constructor(apiKey, model = "kimi-k2.6", retry, baseURL = MOONSHOT_BASE) {
31
+ constructor(apiKey, model = "kimi-k2.6", retry, baseURL = endpointProfiles["kimi.openai"].baseURL) {
15
32
  super(apiKey, model, retry, baseURL);
16
33
  }
17
34
  runtimePolicy() {
@@ -1,7 +1,7 @@
1
1
  import { AnthropicProvider } from "./anthropic.js";
2
2
  import { OpenAIChatProvider } from "./openai.js";
3
3
  import { endpointProfiles } from "./profiles.js";
4
- import { omitExtensionKeys } from "./base.js";
4
+ import { omitExtensionKeys, openAICachedPromptTokens } from "./base.js";
5
5
  const MINIMAX_POLICIES = {
6
6
  "MiniMax-M2.7": { maxTurns: 35 },
7
7
  "MiniMax-M2.7-highspeed": { maxTurns: 35 },
@@ -127,11 +127,13 @@ export class MiniMaxOpenAIProvider extends OpenAIChatProvider {
127
127
  let totalTokens = 0;
128
128
  let inputTokens = 0;
129
129
  let outputTokens = 0;
130
+ let cacheReadTokens = 0;
130
131
  for await (const chunk of stream) {
131
132
  if (chunk.usage) {
132
133
  totalTokens = chunk.usage.total_tokens;
133
134
  inputTokens = chunk.usage.prompt_tokens ?? 0;
134
135
  outputTokens = chunk.usage.completion_tokens ?? 0;
136
+ cacheReadTokens = openAICachedPromptTokens(chunk.usage);
135
137
  continue;
136
138
  }
137
139
  const choice = chunk.choices[0];
@@ -195,7 +197,7 @@ export class MiniMaxOpenAIProvider extends OpenAIChatProvider {
195
197
  yield { type: "tool_call", id: tb.id, name: tb.name, arguments: args };
196
198
  }
197
199
  if (totalTokens > 0)
198
- yield { type: "usage", totalTokens, inputTokens, outputTokens };
200
+ yield { type: "usage", totalTokens, inputTokens, outputTokens, ...(cacheReadTokens > 0 ? { cacheReadInputTokens: cacheReadTokens } : {}) };
199
201
  }
200
202
  rememberMiniMaxReplay(content, toolCalls, reasoningContent, reasoningDetails, nativeToolCalls) {
201
203
  const hasReasoning = typeof reasoningContent === "string" && reasoningContent.trim().length > 0;
@@ -1,4 +1,4 @@
1
- import { normalizeToolCall, omitExtensionKeys } from "./base.js";
1
+ import { normalizeToolCall, omitExtensionKeys, turnsWithStateAppended } from "./base.js";
2
2
  // Prefix-based policy for local models (first match wins)
3
3
  const OLLAMA_PREFIX_POLICIES = [
4
4
  ["deepseek-r1", { maxTurns: 40 }],
@@ -32,7 +32,7 @@ export class OllamaProvider {
32
32
  const result = [];
33
33
  if (context.systemText)
34
34
  result.push({ role: "system", content: context.systemText });
35
- for (const m of context.turns) {
35
+ for (const m of turnsWithStateAppended(context)) {
36
36
  const images = [];
37
37
  if (m.contentParts?.length) {
38
38
  for (const p of m.contentParts) {
@@ -17,9 +17,10 @@ export class OpenAIChatAdapter {
17
17
  replayForAssistant: message => this.replayFields.get(assistantReplayKey(message)),
18
18
  });
19
19
  const degradeReasoning = Boolean(options.requireNonEmptyReasoningForToolCalls && options.degradeMissingReasoning);
20
- // toOpenAIMessageParams prepends systemText as messages[0], then turns.
20
+ // toOpenAIMessageParams emits [system?, ...history, stateTurn?] — the State
21
+ // turn is APPENDED last, so the cursor only skips the system message to align
22
+ // with context.turns (history) when writing reasoning-replay fields.
21
23
  const serialized = toOpenAIMessageParams(context);
22
- // Cursor starts at 1 to skip the system message injected by toOpenAIMessageParams.
23
24
  let cursor = context.systemText ? 1 : 0;
24
25
  for (const source of context.turns) {
25
26
  if (source.role === "tool") {
@@ -55,6 +55,15 @@ export class OpenAIResponsesAdapter {
55
55
  content: this.buildMessageContent(message),
56
56
  });
57
57
  }
58
+ // The volatile State turn is sent every turn (it changes each call and is
59
+ // never "covered" by previous_response_id). Absent on un-rebuilt bindings,
60
+ // where the state is already inside the covered/uncovered history.
61
+ if (context.stateTurn) {
62
+ input.push({
63
+ role: context.stateTurn.role === "assistant" ? "assistant" : "user",
64
+ content: this.buildMessageContent(context.stateTurn),
65
+ });
66
+ }
58
67
  return input;
59
68
  }
60
69
  decodeOutput(output) {
@@ -223,11 +232,15 @@ export class OpenAIResponsesProvider {
223
232
  runState.previousResponseId = evt.response.id;
224
233
  runState.coveredMessageCount = context.turns.length + 1;
225
234
  if (evt.response.usage?.total_tokens) {
235
+ // Responses API reports prompt-cache hits as input_tokens_details.cached_tokens,
236
+ // a subset of input_tokens (the full prompt, kept for accounting).
237
+ const cachedTokens = evt.response.usage.input_tokens_details?.cached_tokens ?? 0;
226
238
  yield {
227
239
  type: "usage",
228
240
  totalTokens: evt.response.usage.total_tokens,
229
241
  ...(evt.response.usage.input_tokens ? { inputTokens: evt.response.usage.input_tokens } : {}),
230
242
  ...(evt.response.usage.output_tokens ? { outputTokens: evt.response.usage.output_tokens } : {}),
243
+ ...(cachedTokens > 0 ? { cacheReadInputTokens: cachedTokens } : {}),
231
244
  };
232
245
  }
233
246
  }
@@ -31,6 +31,13 @@ export declare class OpenAIChatProvider implements LLMProvider {
31
31
  seedProviderReplay(message: Pick<Message, "content" | "toolCalls">, replay: ProviderReplay): void;
32
32
  complete(context: RenderedContext, tools: ToolSchema[], extensions?: Record<string, unknown>): Promise<Message>;
33
33
  stream(context: RenderedContext, tools: ToolSchema[], extensions?: Record<string, unknown>): AsyncIterable<StreamEvent>;
34
+ /**
35
+ * Default `prompt_cache_key` derived from the cacheable prefix (system prompt +
36
+ * tool names) so requests for the same agent config route to the same cache.
37
+ * A caller-supplied `prompt_cache_key` in extensions overrides it (it is spread
38
+ * after this default). Unknown to non-OpenAI compatible endpoints, which ignore it.
39
+ */
40
+ protected promptCacheKey(context: RenderedContext, tools: ToolSchema[]): string;
34
41
  protected requestExtensions(extensions?: Record<string, unknown>): Record<string, unknown>;
35
42
  }
36
43
  export { OpenAIChatProvider as OpenAIProvider };
@@ -1,6 +1,6 @@
1
1
  import OpenAI from "openai";
2
2
  import { withServerRuntimeGuard } from "../runtime/server.js";
3
- import { CircuitBreaker, omitExtensionKeys, ThinkingTagStreamExtractor } from "./base.js";
3
+ import { CircuitBreaker, omitExtensionKeys, openAICachedPromptTokens, stablePromptCacheKey, ThinkingTagStreamExtractor } from "./base.js";
4
4
  import { OpenAIChatAdapter } from "./openai-chat.js";
5
5
  const OPENAI_POLICIES = {
6
6
  "gpt-5.5": { maxTurns: 60 },
@@ -102,6 +102,7 @@ export class OpenAIChatProvider {
102
102
  for (let i = 0; i < this.maxRetries; i++) {
103
103
  try {
104
104
  const resp = await this.client.chat.completions.create({
105
+ prompt_cache_key: this.promptCacheKey(context, tools),
105
106
  ...this.requestExtensions(extensions),
106
107
  model: this.model,
107
108
  messages: msgs,
@@ -129,6 +130,7 @@ export class OpenAIChatProvider {
129
130
  let accumulatedReasoning = "";
130
131
  let accumulatedContent = "";
131
132
  const stream = await this.client.chat.completions.create({
133
+ prompt_cache_key: this.promptCacheKey(context, tools),
132
134
  ...this.requestExtensions(extensions),
133
135
  model: this.model,
134
136
  messages: msgs,
@@ -139,11 +141,13 @@ export class OpenAIChatProvider {
139
141
  let totalTokens = 0;
140
142
  let inputTokens = 0;
141
143
  let outputTokens = 0;
144
+ let cacheReadTokens = 0;
142
145
  for await (const chunk of stream) {
143
146
  if (chunk.usage) {
144
147
  totalTokens = chunk.usage.total_tokens;
145
148
  inputTokens = chunk.usage.prompt_tokens ?? 0;
146
149
  outputTokens = chunk.usage.completion_tokens ?? 0;
150
+ cacheReadTokens = openAICachedPromptTokens(chunk.usage);
147
151
  continue;
148
152
  }
149
153
  const choice = chunk.choices[0];
@@ -228,7 +232,16 @@ export class OpenAIChatProvider {
228
232
  yield { type: "tool_call", id: tb.id, name: tb.name, arguments: args };
229
233
  }
230
234
  if (totalTokens > 0)
231
- yield { type: "usage", totalTokens, inputTokens, outputTokens };
235
+ yield { type: "usage", totalTokens, inputTokens, outputTokens, ...(cacheReadTokens > 0 ? { cacheReadInputTokens: cacheReadTokens } : {}) };
236
+ }
237
+ /**
238
+ * Default `prompt_cache_key` derived from the cacheable prefix (system prompt +
239
+ * tool names) so requests for the same agent config route to the same cache.
240
+ * A caller-supplied `prompt_cache_key` in extensions overrides it (it is spread
241
+ * after this default). Unknown to non-OpenAI compatible endpoints, which ignore it.
242
+ */
243
+ promptCacheKey(context, tools) {
244
+ return stablePromptCacheKey([context.systemText, tools.map(t => t.name).join(",")]);
232
245
  }
233
246
  requestExtensions(extensions) {
234
247
  return omitExtensionKeys(extensions, ["model", "messages", "tools", "stream", "stream_options", "__deepstrikeThinkingEnabled"]);
@@ -65,18 +65,36 @@ export declare const endpointProfiles: {
65
65
  readonly protocol: "openai-chat";
66
66
  readonly baseURL: "https://api.minimaxi.com/v1";
67
67
  };
68
+ readonly "deepseek.anthropic": {
69
+ readonly id: "deepseek.anthropic";
70
+ readonly providerId: "deepseek";
71
+ readonly protocol: "anthropic-messages";
72
+ readonly baseURL: "https://api.deepseek.com/anthropic";
73
+ };
68
74
  readonly "deepseek.openai": {
69
75
  readonly id: "deepseek.openai";
70
76
  readonly providerId: "deepseek";
71
77
  readonly protocol: "openai-chat";
72
78
  readonly baseURL: "https://api.deepseek.com";
73
79
  };
80
+ readonly "kimi.anthropic": {
81
+ readonly id: "kimi.anthropic";
82
+ readonly providerId: "kimi";
83
+ readonly protocol: "anthropic-messages";
84
+ readonly baseURL: "https://api.moonshot.ai/anthropic";
85
+ };
74
86
  readonly "kimi.openai": {
75
87
  readonly id: "kimi.openai";
76
88
  readonly providerId: "kimi";
77
89
  readonly protocol: "openai-chat";
78
90
  readonly baseURL: "https://api.moonshot.cn/v1";
79
91
  };
92
+ readonly "qwen.anthropic": {
93
+ readonly id: "qwen.anthropic";
94
+ readonly providerId: "qwen";
95
+ readonly protocol: "anthropic-messages";
96
+ readonly baseURL: "https://dashscope-intl.aliyuncs.com/apps/anthropic";
97
+ };
80
98
  readonly "qwen.dashscope": {
81
99
  readonly id: "qwen.dashscope";
82
100
  readonly providerId: "qwen";
@@ -107,6 +125,12 @@ export declare const endpointProfiles: {
107
125
  readonly protocol: "gemini-embeddings";
108
126
  readonly baseURL: "https://generativelanguage.googleapis.com";
109
127
  };
128
+ readonly "glm.anthropic": {
129
+ readonly id: "glm.anthropic";
130
+ readonly providerId: "glm";
131
+ readonly protocol: "anthropic-messages";
132
+ readonly baseURL: "https://api.z.ai/api/anthropic";
133
+ };
110
134
  readonly "glm.openai": {
111
135
  readonly id: "glm.openai";
112
136
  readonly providerId: "glm";
@@ -868,7 +892,7 @@ export declare const modelProfiles: {
868
892
  readonly "deepseek/deepseek-chat": {
869
893
  readonly id: "deepseek/deepseek-chat";
870
894
  readonly providerId: "deepseek";
871
- readonly defaultEndpointId: "deepseek.openai";
895
+ readonly defaultEndpointId: "deepseek.anthropic";
872
896
  readonly contextWindow: 64000;
873
897
  readonly modalities: {
874
898
  readonly input: ["text"];
@@ -888,7 +912,7 @@ export declare const modelProfiles: {
888
912
  readonly "deepseek/deepseek-reasoner": {
889
913
  readonly id: "deepseek/deepseek-reasoner";
890
914
  readonly providerId: "deepseek";
891
- readonly defaultEndpointId: "deepseek.openai";
915
+ readonly defaultEndpointId: "deepseek.anthropic";
892
916
  readonly contextWindow: 64000;
893
917
  readonly modalities: {
894
918
  readonly input: ["text"];
@@ -908,7 +932,7 @@ export declare const modelProfiles: {
908
932
  readonly "deepseek/deepseek-v4-flash": {
909
933
  readonly id: "deepseek/deepseek-v4-flash";
910
934
  readonly providerId: "deepseek";
911
- readonly defaultEndpointId: "deepseek.openai";
935
+ readonly defaultEndpointId: "deepseek.anthropic";
912
936
  readonly contextWindow: 1000000;
913
937
  readonly modalities: {
914
938
  readonly input: ["text"];
@@ -928,7 +952,7 @@ export declare const modelProfiles: {
928
952
  readonly "deepseek/deepseek-v4-pro": {
929
953
  readonly id: "deepseek/deepseek-v4-pro";
930
954
  readonly providerId: "deepseek";
931
- readonly defaultEndpointId: "deepseek.openai";
955
+ readonly defaultEndpointId: "deepseek.anthropic";
932
956
  readonly contextWindow: 1000000;
933
957
  readonly modalities: {
934
958
  readonly input: ["text"];
@@ -948,7 +972,7 @@ export declare const modelProfiles: {
948
972
  readonly "kimi/moonshot-v1-8k": {
949
973
  readonly id: "kimi/moonshot-v1-8k";
950
974
  readonly providerId: "kimi";
951
- readonly defaultEndpointId: "kimi.openai";
975
+ readonly defaultEndpointId: "kimi.anthropic";
952
976
  readonly contextWindow: 8000;
953
977
  readonly modalities: {
954
978
  readonly input: ["text"];
@@ -968,7 +992,7 @@ export declare const modelProfiles: {
968
992
  readonly "kimi/moonshot-v1-32k": {
969
993
  readonly id: "kimi/moonshot-v1-32k";
970
994
  readonly providerId: "kimi";
971
- readonly defaultEndpointId: "kimi.openai";
995
+ readonly defaultEndpointId: "kimi.anthropic";
972
996
  readonly contextWindow: 32000;
973
997
  readonly modalities: {
974
998
  readonly input: ["text"];
@@ -988,7 +1012,7 @@ export declare const modelProfiles: {
988
1012
  readonly "kimi/moonshot-v1-128k": {
989
1013
  readonly id: "kimi/moonshot-v1-128k";
990
1014
  readonly providerId: "kimi";
991
- readonly defaultEndpointId: "kimi.openai";
1015
+ readonly defaultEndpointId: "kimi.anthropic";
992
1016
  readonly contextWindow: 128000;
993
1017
  readonly modalities: {
994
1018
  readonly input: ["text", "image"];
@@ -1008,7 +1032,7 @@ export declare const modelProfiles: {
1008
1032
  readonly "kimi/kimi-k2.5": {
1009
1033
  readonly id: "kimi/kimi-k2.5";
1010
1034
  readonly providerId: "kimi";
1011
- readonly defaultEndpointId: "kimi.openai";
1035
+ readonly defaultEndpointId: "kimi.anthropic";
1012
1036
  readonly contextWindow: 256000;
1013
1037
  readonly modalities: {
1014
1038
  readonly input: ["text", "image"];
@@ -1028,7 +1052,7 @@ export declare const modelProfiles: {
1028
1052
  readonly "kimi/kimi-k2.6": {
1029
1053
  readonly id: "kimi/kimi-k2.6";
1030
1054
  readonly providerId: "kimi";
1031
- readonly defaultEndpointId: "kimi.openai";
1055
+ readonly defaultEndpointId: "kimi.anthropic";
1032
1056
  readonly modalities: {
1033
1057
  readonly input: ["text"];
1034
1058
  readonly output: ["text"];
@@ -1047,7 +1071,7 @@ export declare const modelProfiles: {
1047
1071
  readonly "kimi/kimi-k2-thinking": {
1048
1072
  readonly id: "kimi/kimi-k2-thinking";
1049
1073
  readonly providerId: "kimi";
1050
- readonly defaultEndpointId: "kimi.openai";
1074
+ readonly defaultEndpointId: "kimi.anthropic";
1051
1075
  readonly contextWindow: 256000;
1052
1076
  readonly modalities: {
1053
1077
  readonly input: ["text"];
@@ -1067,7 +1091,7 @@ export declare const modelProfiles: {
1067
1091
  readonly "kimi/kimi-k2-thinking-turbo": {
1068
1092
  readonly id: "kimi/kimi-k2-thinking-turbo";
1069
1093
  readonly providerId: "kimi";
1070
- readonly defaultEndpointId: "kimi.openai";
1094
+ readonly defaultEndpointId: "kimi.anthropic";
1071
1095
  readonly contextWindow: 256000;
1072
1096
  readonly modalities: {
1073
1097
  readonly input: ["text"];
@@ -1087,7 +1111,7 @@ export declare const modelProfiles: {
1087
1111
  readonly "qwen/qwen3.7-max-preview": {
1088
1112
  readonly id: "qwen/qwen3.7-max-preview";
1089
1113
  readonly providerId: "qwen";
1090
- readonly defaultEndpointId: "qwen.dashscope";
1114
+ readonly defaultEndpointId: "qwen.anthropic";
1091
1115
  readonly contextWindow: 256000;
1092
1116
  readonly modalities: {
1093
1117
  readonly input: ["text"];
@@ -1107,7 +1131,7 @@ export declare const modelProfiles: {
1107
1131
  readonly "qwen/qwen3.7-plus-preview": {
1108
1132
  readonly id: "qwen/qwen3.7-plus-preview";
1109
1133
  readonly providerId: "qwen";
1110
- readonly defaultEndpointId: "qwen.dashscope";
1134
+ readonly defaultEndpointId: "qwen.anthropic";
1111
1135
  readonly contextWindow: 1000000;
1112
1136
  readonly modalities: {
1113
1137
  readonly input: ["text", "image"];
@@ -1127,7 +1151,7 @@ export declare const modelProfiles: {
1127
1151
  readonly "qwen/qwen3.6-max-preview": {
1128
1152
  readonly id: "qwen/qwen3.6-max-preview";
1129
1153
  readonly providerId: "qwen";
1130
- readonly defaultEndpointId: "qwen.dashscope";
1154
+ readonly defaultEndpointId: "qwen.anthropic";
1131
1155
  readonly contextWindow: 256000;
1132
1156
  readonly modalities: {
1133
1157
  readonly input: ["text"];
@@ -1147,7 +1171,7 @@ export declare const modelProfiles: {
1147
1171
  readonly "qwen/qwen3.6-plus": {
1148
1172
  readonly id: "qwen/qwen3.6-plus";
1149
1173
  readonly providerId: "qwen";
1150
- readonly defaultEndpointId: "qwen.dashscope";
1174
+ readonly defaultEndpointId: "qwen.anthropic";
1151
1175
  readonly contextWindow: 1000000;
1152
1176
  readonly modalities: {
1153
1177
  readonly input: ["text", "image"];
@@ -1167,7 +1191,7 @@ export declare const modelProfiles: {
1167
1191
  readonly "qwen/qwen3.6-flash": {
1168
1192
  readonly id: "qwen/qwen3.6-flash";
1169
1193
  readonly providerId: "qwen";
1170
- readonly defaultEndpointId: "qwen.dashscope";
1194
+ readonly defaultEndpointId: "qwen.anthropic";
1171
1195
  readonly contextWindow: 1000000;
1172
1196
  readonly modalities: {
1173
1197
  readonly input: ["text", "image"];
@@ -1187,7 +1211,7 @@ export declare const modelProfiles: {
1187
1211
  readonly "qwen/qwen3.6-35b-a3b": {
1188
1212
  readonly id: "qwen/qwen3.6-35b-a3b";
1189
1213
  readonly providerId: "qwen";
1190
- readonly defaultEndpointId: "qwen.dashscope";
1214
+ readonly defaultEndpointId: "qwen.anthropic";
1191
1215
  readonly contextWindow: 256000;
1192
1216
  readonly modalities: {
1193
1217
  readonly input: ["text", "image"];
@@ -1207,7 +1231,7 @@ export declare const modelProfiles: {
1207
1231
  readonly "qwen/qwen3.6-27b": {
1208
1232
  readonly id: "qwen/qwen3.6-27b";
1209
1233
  readonly providerId: "qwen";
1210
- readonly defaultEndpointId: "qwen.dashscope";
1234
+ readonly defaultEndpointId: "qwen.anthropic";
1211
1235
  readonly contextWindow: 256000;
1212
1236
  readonly modalities: {
1213
1237
  readonly input: ["text", "image"];
@@ -1227,7 +1251,7 @@ export declare const modelProfiles: {
1227
1251
  readonly "qwen/qwen3.5-plus": {
1228
1252
  readonly id: "qwen/qwen3.5-plus";
1229
1253
  readonly providerId: "qwen";
1230
- readonly defaultEndpointId: "qwen.dashscope";
1254
+ readonly defaultEndpointId: "qwen.anthropic";
1231
1255
  readonly contextWindow: 1000000;
1232
1256
  readonly modalities: {
1233
1257
  readonly input: ["text", "image"];
@@ -1247,7 +1271,7 @@ export declare const modelProfiles: {
1247
1271
  readonly "qwen/qwen3.5-flash": {
1248
1272
  readonly id: "qwen/qwen3.5-flash";
1249
1273
  readonly providerId: "qwen";
1250
- readonly defaultEndpointId: "qwen.dashscope";
1274
+ readonly defaultEndpointId: "qwen.anthropic";
1251
1275
  readonly contextWindow: 1000000;
1252
1276
  readonly modalities: {
1253
1277
  readonly input: ["text", "image"];
@@ -1267,7 +1291,7 @@ export declare const modelProfiles: {
1267
1291
  readonly "qwen/qwen3.5-397b-a17b": {
1268
1292
  readonly id: "qwen/qwen3.5-397b-a17b";
1269
1293
  readonly providerId: "qwen";
1270
- readonly defaultEndpointId: "qwen.dashscope";
1294
+ readonly defaultEndpointId: "qwen.anthropic";
1271
1295
  readonly contextWindow: 256000;
1272
1296
  readonly modalities: {
1273
1297
  readonly input: ["text", "image"];
@@ -1287,7 +1311,7 @@ export declare const modelProfiles: {
1287
1311
  readonly "qwen/qwen3.5-122b-a10b": {
1288
1312
  readonly id: "qwen/qwen3.5-122b-a10b";
1289
1313
  readonly providerId: "qwen";
1290
- readonly defaultEndpointId: "qwen.dashscope";
1314
+ readonly defaultEndpointId: "qwen.anthropic";
1291
1315
  readonly contextWindow: 256000;
1292
1316
  readonly modalities: {
1293
1317
  readonly input: ["text", "image"];
@@ -1307,7 +1331,7 @@ export declare const modelProfiles: {
1307
1331
  readonly "qwen/qwen3.5-35b-a3b": {
1308
1332
  readonly id: "qwen/qwen3.5-35b-a3b";
1309
1333
  readonly providerId: "qwen";
1310
- readonly defaultEndpointId: "qwen.dashscope";
1334
+ readonly defaultEndpointId: "qwen.anthropic";
1311
1335
  readonly contextWindow: 256000;
1312
1336
  readonly modalities: {
1313
1337
  readonly input: ["text", "image"];
@@ -1327,7 +1351,7 @@ export declare const modelProfiles: {
1327
1351
  readonly "qwen/qwen3.5-27b": {
1328
1352
  readonly id: "qwen/qwen3.5-27b";
1329
1353
  readonly providerId: "qwen";
1330
- readonly defaultEndpointId: "qwen.dashscope";
1354
+ readonly defaultEndpointId: "qwen.anthropic";
1331
1355
  readonly contextWindow: 256000;
1332
1356
  readonly modalities: {
1333
1357
  readonly input: ["text", "image"];
@@ -1629,7 +1653,7 @@ export declare const modelProfiles: {
1629
1653
  readonly "glm/glm-5.1": {
1630
1654
  readonly id: "glm/glm-5.1";
1631
1655
  readonly providerId: "glm";
1632
- readonly defaultEndpointId: "glm.openai";
1656
+ readonly defaultEndpointId: "glm.anthropic";
1633
1657
  readonly contextWindow: 200000;
1634
1658
  readonly modalities: {
1635
1659
  readonly input: ["text"];
@@ -1649,7 +1673,7 @@ export declare const modelProfiles: {
1649
1673
  readonly "glm/glm-4-plus": {
1650
1674
  readonly id: "glm/glm-4-plus";
1651
1675
  readonly providerId: "glm";
1652
- readonly defaultEndpointId: "glm.openai";
1676
+ readonly defaultEndpointId: "glm.anthropic";
1653
1677
  readonly contextWindow: 128000;
1654
1678
  readonly modalities: {
1655
1679
  readonly input: ["text", "image"];
@@ -1669,7 +1693,7 @@ export declare const modelProfiles: {
1669
1693
  readonly "glm/glm-4-flash": {
1670
1694
  readonly id: "glm/glm-4-flash";
1671
1695
  readonly providerId: "glm";
1672
- readonly defaultEndpointId: "glm.openai";
1696
+ readonly defaultEndpointId: "glm.anthropic";
1673
1697
  readonly contextWindow: 128000;
1674
1698
  readonly modalities: {
1675
1699
  readonly input: ["text"];
@@ -1689,7 +1713,7 @@ export declare const modelProfiles: {
1689
1713
  readonly "glm/glm-4-air": {
1690
1714
  readonly id: "glm/glm-4-air";
1691
1715
  readonly providerId: "glm";
1692
- readonly defaultEndpointId: "glm.openai";
1716
+ readonly defaultEndpointId: "glm.anthropic";
1693
1717
  readonly contextWindow: 128000;
1694
1718
  readonly modalities: {
1695
1719
  readonly input: ["text"];