@shenghuabi/openai 1.2.5 → 1.2.7

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.
@@ -102,7 +102,7 @@ export declare const AnthropicMessagesCompatSchema: v.SchemaWithPipe<readonly [v
102
102
  forceAdaptiveThinking?: boolean | undefined;
103
103
  allowEmptySignature?: boolean | undefined;
104
104
  } | undefined, "针对 Anthropic Messages API 的兼容性覆写选项">]>;
105
- export declare const CompatSchema: v.SchemaWithPipe<readonly [v.UnionSchema<[v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
105
+ export declare const CompatSchema: v.SchemaWithPipe<readonly [v.UnionSchema<[v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
106
106
  readonly supportsStore: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持存储">, v.DescriptionAction<boolean, "是否支持服务端会话存储">]>, undefined>;
107
107
  readonly supportsDeveloperRole: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持开发者角色">, v.DescriptionAction<boolean, "是否支持 developer 系统消息角色">]>, undefined>;
108
108
  readonly supportsReasoningEffort: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持推理努力">, v.DescriptionAction<boolean, "是否支持 reasoning_effort 参数">]>, undefined>;
@@ -156,7 +156,25 @@ export declare const CompatSchema: v.SchemaWithPipe<readonly [v.UnionSchema<[v.S
156
156
  cacheControlFormat?: "anthropic" | undefined;
157
157
  sendSessionAffinityHeaders?: boolean | undefined;
158
158
  supportsLongCacheRetention?: boolean | undefined;
159
- } | undefined, "针对 OpenAI Completions API 的兼容性覆写选项">]>, v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
159
+ } | undefined, "针对 OpenAI Completions API 的兼容性覆写选项">]>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", {
160
+ supportsStore?: boolean | undefined;
161
+ supportsDeveloperRole?: boolean | undefined;
162
+ supportsReasoningEffort?: boolean | undefined;
163
+ supportsUsageInStreaming?: boolean | undefined;
164
+ maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
165
+ requiresToolResultName?: boolean | undefined;
166
+ requiresAssistantAfterToolResult?: boolean | undefined;
167
+ requiresThinkingAsText?: boolean | undefined;
168
+ requiresReasoningContentOnAssistantMessages?: boolean | undefined;
169
+ thinkingFormat?: "deepseek" | "openai" | "openrouter" | "zai" | "together" | "ant-ling" | "qwen" | "qwen-chat-template" | "string-thinking" | undefined;
170
+ openRouterRouting?: unknown;
171
+ vercelGatewayRouting?: unknown;
172
+ zaiToolStream?: boolean | undefined;
173
+ supportsStrictMode?: boolean | undefined;
174
+ cacheControlFormat?: "anthropic" | undefined;
175
+ sendSessionAffinityHeaders?: boolean | undefined;
176
+ supportsLongCacheRetention?: boolean | undefined;
177
+ } | undefined, import("@piying/view-angular-core").AnyCoreSchemaHandle>]>, v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
160
178
  readonly supportsDeveloperRole: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持开发者角色">, v.DescriptionAction<boolean, "是否支持 developer 系统消息角色">]>, undefined>;
161
179
  readonly sendSessionIdHeader: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "发送会话 ID 标头">, v.DescriptionAction<boolean, "是否在请求中携带 X-Session-ID 标头">]>, undefined>;
162
180
  readonly supportsLongCacheRetention: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "长期缓存保留">, v.DescriptionAction<boolean, "是否支持长期缓存保留策略">]>, undefined>;
@@ -168,7 +186,11 @@ export declare const CompatSchema: v.SchemaWithPipe<readonly [v.UnionSchema<[v.S
168
186
  supportsDeveloperRole?: boolean | undefined;
169
187
  sendSessionIdHeader?: boolean | undefined;
170
188
  supportsLongCacheRetention?: boolean | undefined;
171
- } | undefined, "针对 OpenAI Responses API 的兼容性覆写选项">]>, v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
189
+ } | undefined, "针对 OpenAI Responses API 的兼容性覆写选项">]>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", {
190
+ supportsDeveloperRole?: boolean | undefined;
191
+ sendSessionIdHeader?: boolean | undefined;
192
+ supportsLongCacheRetention?: boolean | undefined;
193
+ } | undefined, import("@piying/view-angular-core").AnyCoreSchemaHandle>]>, v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
172
194
  readonly supportsEagerToolInputStreaming: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, " eagerly 工具流式">, v.DescriptionAction<boolean, "是否支持工具调用的 eager 模式流式输出">]>, undefined>;
173
195
  readonly supportsLongCacheRetention: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "长期缓存保留">, v.DescriptionAction<boolean, "是否支持长期缓存保留策略">]>, undefined>;
174
196
  readonly sendSessionAffinityHeaders: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "发送会话亲和标头">, v.DescriptionAction<boolean, "是否在请求中携带会话亲和性标头">]>, undefined>;
@@ -192,7 +214,45 @@ export declare const CompatSchema: v.SchemaWithPipe<readonly [v.UnionSchema<[v.S
192
214
  supportsTemperature?: boolean | undefined;
193
215
  forceAdaptiveThinking?: boolean | undefined;
194
216
  allowEmptySignature?: boolean | undefined;
195
- } | undefined, "针对 Anthropic Messages API 的兼容性覆写选项">]>], undefined>, v.TitleAction<{
217
+ } | undefined, "针对 Anthropic Messages API 的兼容性覆写选项">]>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", {
218
+ supportsEagerToolInputStreaming?: boolean | undefined;
219
+ supportsLongCacheRetention?: boolean | undefined;
220
+ sendSessionAffinityHeaders?: boolean | undefined;
221
+ supportsCacheControlOnTools?: boolean | undefined;
222
+ supportsTemperature?: boolean | undefined;
223
+ forceAdaptiveThinking?: boolean | undefined;
224
+ allowEmptySignature?: boolean | undefined;
225
+ } | undefined, import("@piying/view-angular-core").AnyCoreSchemaHandle>]>], undefined>, import("@piying/valibot-visit").DefineTypeAction<{
226
+ supportsStore?: boolean | undefined;
227
+ supportsDeveloperRole?: boolean | undefined;
228
+ supportsReasoningEffort?: boolean | undefined;
229
+ supportsUsageInStreaming?: boolean | undefined;
230
+ maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
231
+ requiresToolResultName?: boolean | undefined;
232
+ requiresAssistantAfterToolResult?: boolean | undefined;
233
+ requiresThinkingAsText?: boolean | undefined;
234
+ requiresReasoningContentOnAssistantMessages?: boolean | undefined;
235
+ thinkingFormat?: "deepseek" | "openai" | "openrouter" | "zai" | "together" | "ant-ling" | "qwen" | "qwen-chat-template" | "string-thinking" | undefined;
236
+ openRouterRouting?: unknown;
237
+ vercelGatewayRouting?: unknown;
238
+ zaiToolStream?: boolean | undefined;
239
+ supportsStrictMode?: boolean | undefined;
240
+ cacheControlFormat?: "anthropic" | undefined;
241
+ sendSessionAffinityHeaders?: boolean | undefined;
242
+ supportsLongCacheRetention?: boolean | undefined;
243
+ } | {
244
+ supportsDeveloperRole?: boolean | undefined;
245
+ sendSessionIdHeader?: boolean | undefined;
246
+ supportsLongCacheRetention?: boolean | undefined;
247
+ } | {
248
+ supportsEagerToolInputStreaming?: boolean | undefined;
249
+ supportsLongCacheRetention?: boolean | undefined;
250
+ sendSessionAffinityHeaders?: boolean | undefined;
251
+ supportsCacheControlOnTools?: boolean | undefined;
252
+ supportsTemperature?: boolean | undefined;
253
+ forceAdaptiveThinking?: boolean | undefined;
254
+ allowEmptySignature?: boolean | undefined;
255
+ } | undefined>, v.TitleAction<{
196
256
  supportsStore?: boolean | undefined;
197
257
  supportsDeveloperRole?: boolean | undefined;
198
258
  supportsReasoningEffort?: boolean | undefined;
@@ -309,7 +369,7 @@ export declare const ModelSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
309
369
  } | undefined, "自定义请求头">, v.DescriptionAction<{
310
370
  [x: string]: string;
311
371
  } | undefined, "额外的 HTTP 请求头配置">]>, undefined>;
312
- readonly compat: v.SchemaWithPipe<readonly [v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
372
+ readonly compat: v.SchemaWithPipe<readonly [v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
313
373
  readonly supportsStore: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持存储">, v.DescriptionAction<boolean, "是否支持服务端会话存储">]>, undefined>;
314
374
  readonly supportsDeveloperRole: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持开发者角色">, v.DescriptionAction<boolean, "是否支持 developer 系统消息角色">]>, undefined>;
315
375
  readonly supportsReasoningEffort: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持推理努力">, v.DescriptionAction<boolean, "是否支持 reasoning_effort 参数">]>, undefined>;
@@ -363,7 +423,25 @@ export declare const ModelSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
363
423
  cacheControlFormat?: "anthropic" | undefined;
364
424
  sendSessionAffinityHeaders?: boolean | undefined;
365
425
  supportsLongCacheRetention?: boolean | undefined;
366
- } | undefined, "针对 OpenAI Completions API 的兼容性覆写选项">]>, v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
426
+ } | undefined, "针对 OpenAI Completions API 的兼容性覆写选项">]>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", {
427
+ supportsStore?: boolean | undefined;
428
+ supportsDeveloperRole?: boolean | undefined;
429
+ supportsReasoningEffort?: boolean | undefined;
430
+ supportsUsageInStreaming?: boolean | undefined;
431
+ maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
432
+ requiresToolResultName?: boolean | undefined;
433
+ requiresAssistantAfterToolResult?: boolean | undefined;
434
+ requiresThinkingAsText?: boolean | undefined;
435
+ requiresReasoningContentOnAssistantMessages?: boolean | undefined;
436
+ thinkingFormat?: "deepseek" | "openai" | "openrouter" | "zai" | "together" | "ant-ling" | "qwen" | "qwen-chat-template" | "string-thinking" | undefined;
437
+ openRouterRouting?: unknown;
438
+ vercelGatewayRouting?: unknown;
439
+ zaiToolStream?: boolean | undefined;
440
+ supportsStrictMode?: boolean | undefined;
441
+ cacheControlFormat?: "anthropic" | undefined;
442
+ sendSessionAffinityHeaders?: boolean | undefined;
443
+ supportsLongCacheRetention?: boolean | undefined;
444
+ } | undefined, import("@piying/view-angular-core").AnyCoreSchemaHandle>]>, v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
367
445
  readonly supportsDeveloperRole: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持开发者角色">, v.DescriptionAction<boolean, "是否支持 developer 系统消息角色">]>, undefined>;
368
446
  readonly sendSessionIdHeader: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "发送会话 ID 标头">, v.DescriptionAction<boolean, "是否在请求中携带 X-Session-ID 标头">]>, undefined>;
369
447
  readonly supportsLongCacheRetention: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "长期缓存保留">, v.DescriptionAction<boolean, "是否支持长期缓存保留策略">]>, undefined>;
@@ -375,7 +453,11 @@ export declare const ModelSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
375
453
  supportsDeveloperRole?: boolean | undefined;
376
454
  sendSessionIdHeader?: boolean | undefined;
377
455
  supportsLongCacheRetention?: boolean | undefined;
378
- } | undefined, "针对 OpenAI Responses API 的兼容性覆写选项">]>, v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
456
+ } | undefined, "针对 OpenAI Responses API 的兼容性覆写选项">]>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", {
457
+ supportsDeveloperRole?: boolean | undefined;
458
+ sendSessionIdHeader?: boolean | undefined;
459
+ supportsLongCacheRetention?: boolean | undefined;
460
+ } | undefined, import("@piying/view-angular-core").AnyCoreSchemaHandle>]>, v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
379
461
  readonly supportsEagerToolInputStreaming: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, " eagerly 工具流式">, v.DescriptionAction<boolean, "是否支持工具调用的 eager 模式流式输出">]>, undefined>;
380
462
  readonly supportsLongCacheRetention: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "长期缓存保留">, v.DescriptionAction<boolean, "是否支持长期缓存保留策略">]>, undefined>;
381
463
  readonly sendSessionAffinityHeaders: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "发送会话亲和标头">, v.DescriptionAction<boolean, "是否在请求中携带会话亲和性标头">]>, undefined>;
@@ -399,7 +481,45 @@ export declare const ModelSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
399
481
  supportsTemperature?: boolean | undefined;
400
482
  forceAdaptiveThinking?: boolean | undefined;
401
483
  allowEmptySignature?: boolean | undefined;
402
- } | undefined, "针对 Anthropic Messages API 的兼容性覆写选项">]>], undefined>, v.TitleAction<{
484
+ } | undefined, "针对 Anthropic Messages API 的兼容性覆写选项">]>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", {
485
+ supportsEagerToolInputStreaming?: boolean | undefined;
486
+ supportsLongCacheRetention?: boolean | undefined;
487
+ sendSessionAffinityHeaders?: boolean | undefined;
488
+ supportsCacheControlOnTools?: boolean | undefined;
489
+ supportsTemperature?: boolean | undefined;
490
+ forceAdaptiveThinking?: boolean | undefined;
491
+ allowEmptySignature?: boolean | undefined;
492
+ } | undefined, import("@piying/view-angular-core").AnyCoreSchemaHandle>]>], undefined>, import("@piying/valibot-visit").DefineTypeAction<{
493
+ supportsStore?: boolean | undefined;
494
+ supportsDeveloperRole?: boolean | undefined;
495
+ supportsReasoningEffort?: boolean | undefined;
496
+ supportsUsageInStreaming?: boolean | undefined;
497
+ maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
498
+ requiresToolResultName?: boolean | undefined;
499
+ requiresAssistantAfterToolResult?: boolean | undefined;
500
+ requiresThinkingAsText?: boolean | undefined;
501
+ requiresReasoningContentOnAssistantMessages?: boolean | undefined;
502
+ thinkingFormat?: "deepseek" | "openai" | "openrouter" | "zai" | "together" | "ant-ling" | "qwen" | "qwen-chat-template" | "string-thinking" | undefined;
503
+ openRouterRouting?: unknown;
504
+ vercelGatewayRouting?: unknown;
505
+ zaiToolStream?: boolean | undefined;
506
+ supportsStrictMode?: boolean | undefined;
507
+ cacheControlFormat?: "anthropic" | undefined;
508
+ sendSessionAffinityHeaders?: boolean | undefined;
509
+ supportsLongCacheRetention?: boolean | undefined;
510
+ } | {
511
+ supportsDeveloperRole?: boolean | undefined;
512
+ sendSessionIdHeader?: boolean | undefined;
513
+ supportsLongCacheRetention?: boolean | undefined;
514
+ } | {
515
+ supportsEagerToolInputStreaming?: boolean | undefined;
516
+ supportsLongCacheRetention?: boolean | undefined;
517
+ sendSessionAffinityHeaders?: boolean | undefined;
518
+ supportsCacheControlOnTools?: boolean | undefined;
519
+ supportsTemperature?: boolean | undefined;
520
+ forceAdaptiveThinking?: boolean | undefined;
521
+ allowEmptySignature?: boolean | undefined;
522
+ } | undefined>, v.TitleAction<{
403
523
  supportsStore?: boolean | undefined;
404
524
  supportsDeveloperRole?: boolean | undefined;
405
525
  supportsReasoningEffort?: boolean | undefined;
@@ -622,7 +742,7 @@ export type ModelOutput = v.InferOutput<typeof ModelSchema>;
622
742
  /** Output array for image models: ("text" | "image")[] */
623
743
  export declare const OutputSchema: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.PicklistSchema<["text", "image"], undefined>, v.TitleAction<"text" | "image", "输入类型">, v.DescriptionAction<"text" | "image", "支持的输入模态类型">]>, undefined>, v.TitleAction<("text" | "image")[], "输入类型列表">, v.DescriptionAction<("text" | "image")[], "该模型支持的用户输入类型,如 text 文本或 image 图片">]>;
624
744
  export declare const ModelConfigDefine: v.SchemaWithPipe<readonly [v.ObjectSchema<{
625
- readonly provider: v.SchemaWithPipe<readonly [v.PicklistSchema<["amazon-bedrock", "anthropic", "google", "google-vertex", "openai", "azure-openai-responses", "openai-codex", "deepseek", "github-copilot", "xai", "groq", "cerebras", "openrouter", "vercel-ai-gateway", "zai", "mistral", "minimax", "minimax-cn", "moonshotai", "moonshotai-cn", "huggingface", "fireworks", "together", "opencode", "opencode-go", "kimi-coding", "cloudflare-workers-ai", "cloudflare-ai-gateway", "xiaomi", "xiaomi-token-plan-cn", "xiaomi-token-plan-ams", "xiaomi-token-plan-sgp", "ant-ling", "nvidia", "zai-coding-cn", "openai-completions", "openai-responses", "anthropic-messages"], undefined>, v.TitleAction<"deepseek" | "amazon-bedrock" | "anthropic" | "google" | "google-vertex" | "openai" | "azure-openai-responses" | "openai-codex" | "github-copilot" | "xai" | "groq" | "cerebras" | "openrouter" | "vercel-ai-gateway" | "zai" | "mistral" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "huggingface" | "fireworks" | "together" | "opencode" | "opencode-go" | "kimi-coding" | "cloudflare-workers-ai" | "cloudflare-ai-gateway" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp" | "ant-ling" | "nvidia" | "zai-coding-cn" | "openai-completions" | "openai-responses" | "anthropic-messages", "提供商">, v.DescriptionAction<"deepseek" | "amazon-bedrock" | "anthropic" | "google" | "google-vertex" | "openai" | "azure-openai-responses" | "openai-codex" | "github-copilot" | "xai" | "groq" | "cerebras" | "openrouter" | "vercel-ai-gateway" | "zai" | "mistral" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "huggingface" | "fireworks" | "together" | "opencode" | "opencode-go" | "kimi-coding" | "cloudflare-workers-ai" | "cloudflare-ai-gateway" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp" | "ant-ling" | "nvidia" | "zai-coding-cn" | "openai-completions" | "openai-responses" | "anthropic-messages", "'openai-completions','openai-responses','anthropic-messages',为自定义提供商">]>;
745
+ readonly provider: v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.PicklistSchema<["amazon-bedrock", "anthropic", "google", "google-vertex", "openai", "azure-openai-responses", "openai-codex", "deepseek", "github-copilot", "xai", "groq", "cerebras", "openrouter", "vercel-ai-gateway", "zai", "mistral", "minimax", "minimax-cn", "moonshotai", "moonshotai-cn", "huggingface", "fireworks", "together", "opencode", "opencode-go", "kimi-coding", "cloudflare-workers-ai", "cloudflare-ai-gateway", "xiaomi", "xiaomi-token-plan-cn", "xiaomi-token-plan-ams", "xiaomi-token-plan-sgp", "ant-ling", "nvidia", "zai-coding-cn", "openai-completions", "openai-responses", "anthropic-messages"], undefined>, v.TitleAction<"deepseek" | "amazon-bedrock" | "anthropic" | "google" | "google-vertex" | "openai" | "azure-openai-responses" | "openai-codex" | "github-copilot" | "xai" | "groq" | "cerebras" | "openrouter" | "vercel-ai-gateway" | "zai" | "mistral" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "huggingface" | "fireworks" | "together" | "opencode" | "opencode-go" | "kimi-coding" | "cloudflare-workers-ai" | "cloudflare-ai-gateway" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp" | "ant-ling" | "nvidia" | "zai-coding-cn" | "openai-completions" | "openai-responses" | "anthropic-messages", "提供商">, v.DescriptionAction<"deepseek" | "amazon-bedrock" | "anthropic" | "google" | "google-vertex" | "openai" | "azure-openai-responses" | "openai-codex" | "github-copilot" | "xai" | "groq" | "cerebras" | "openrouter" | "vercel-ai-gateway" | "zai" | "mistral" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "huggingface" | "fireworks" | "together" | "opencode" | "opencode-go" | "kimi-coding" | "cloudflare-workers-ai" | "cloudflare-ai-gateway" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp" | "ant-ling" | "nvidia" | "zai-coding-cn" | "openai-completions" | "openai-responses" | "anthropic-messages", "'openai-completions','openai-responses','anthropic-messages',为自定义提供商">]>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", "deepseek" | "amazon-bedrock" | "anthropic" | "google" | "google-vertex" | "openai" | "azure-openai-responses" | "openai-codex" | "github-copilot" | "xai" | "groq" | "cerebras" | "openrouter" | "vercel-ai-gateway" | "zai" | "mistral" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "huggingface" | "fireworks" | "together" | "opencode" | "opencode-go" | "kimi-coding" | "cloudflare-workers-ai" | "cloudflare-ai-gateway" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp" | "ant-ling" | "nvidia" | "zai-coding-cn" | "openai-completions" | "openai-responses" | "anthropic-messages", import("@piying/view-angular-core").AnyCoreSchemaHandle>]>;
626
746
  readonly model: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TitleAction<string, "模型名">]>;
627
747
  readonly name: v.SchemaWithPipe<readonly [v.OptionalSchema<v.StringSchema<undefined>, undefined>, v.TitleAction<string | undefined, "配置名">, v.DescriptionAction<string | undefined, "模型的配置名称(默认为模型名)">]>;
628
748
  /** provider是自定义时使用 */
@@ -676,7 +796,7 @@ export declare const ModelConfigDefine: v.SchemaWithPipe<readonly [v.ObjectSchem
676
796
  } | undefined, "自定义请求头">, v.DescriptionAction<{
677
797
  [x: string]: string;
678
798
  } | undefined, "额外的 HTTP 请求头配置">]>, undefined>;
679
- readonly compat: v.SchemaWithPipe<readonly [v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
799
+ readonly compat: v.SchemaWithPipe<readonly [v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
680
800
  readonly supportsStore: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持存储">, v.DescriptionAction<boolean, "是否支持服务端会话存储">]>, undefined>;
681
801
  readonly supportsDeveloperRole: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持开发者角色">, v.DescriptionAction<boolean, "是否支持 developer 系统消息角色">]>, undefined>;
682
802
  readonly supportsReasoningEffort: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持推理努力">, v.DescriptionAction<boolean, "是否支持 reasoning_effort 参数">]>, undefined>;
@@ -730,7 +850,25 @@ export declare const ModelConfigDefine: v.SchemaWithPipe<readonly [v.ObjectSchem
730
850
  cacheControlFormat?: "anthropic" | undefined;
731
851
  sendSessionAffinityHeaders?: boolean | undefined;
732
852
  supportsLongCacheRetention?: boolean | undefined;
733
- } | undefined, "针对 OpenAI Completions API 的兼容性覆写选项">]>, v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
853
+ } | undefined, "针对 OpenAI Completions API 的兼容性覆写选项">]>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", {
854
+ supportsStore?: boolean | undefined;
855
+ supportsDeveloperRole?: boolean | undefined;
856
+ supportsReasoningEffort?: boolean | undefined;
857
+ supportsUsageInStreaming?: boolean | undefined;
858
+ maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
859
+ requiresToolResultName?: boolean | undefined;
860
+ requiresAssistantAfterToolResult?: boolean | undefined;
861
+ requiresThinkingAsText?: boolean | undefined;
862
+ requiresReasoningContentOnAssistantMessages?: boolean | undefined;
863
+ thinkingFormat?: "deepseek" | "openai" | "openrouter" | "zai" | "together" | "ant-ling" | "qwen" | "qwen-chat-template" | "string-thinking" | undefined;
864
+ openRouterRouting?: unknown;
865
+ vercelGatewayRouting?: unknown;
866
+ zaiToolStream?: boolean | undefined;
867
+ supportsStrictMode?: boolean | undefined;
868
+ cacheControlFormat?: "anthropic" | undefined;
869
+ sendSessionAffinityHeaders?: boolean | undefined;
870
+ supportsLongCacheRetention?: boolean | undefined;
871
+ } | undefined, import("@piying/view-angular-core").AnyCoreSchemaHandle>]>, v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
734
872
  readonly supportsDeveloperRole: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "支持开发者角色">, v.DescriptionAction<boolean, "是否支持 developer 系统消息角色">]>, undefined>;
735
873
  readonly sendSessionIdHeader: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "发送会话 ID 标头">, v.DescriptionAction<boolean, "是否在请求中携带 X-Session-ID 标头">]>, undefined>;
736
874
  readonly supportsLongCacheRetention: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "长期缓存保留">, v.DescriptionAction<boolean, "是否支持长期缓存保留策略">]>, undefined>;
@@ -742,7 +880,11 @@ export declare const ModelConfigDefine: v.SchemaWithPipe<readonly [v.ObjectSchem
742
880
  supportsDeveloperRole?: boolean | undefined;
743
881
  sendSessionIdHeader?: boolean | undefined;
744
882
  supportsLongCacheRetention?: boolean | undefined;
745
- } | undefined, "针对 OpenAI Responses API 的兼容性覆写选项">]>, v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
883
+ } | undefined, "针对 OpenAI Responses API 的兼容性覆写选项">]>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", {
884
+ supportsDeveloperRole?: boolean | undefined;
885
+ sendSessionIdHeader?: boolean | undefined;
886
+ supportsLongCacheRetention?: boolean | undefined;
887
+ } | undefined, import("@piying/view-angular-core").AnyCoreSchemaHandle>]>, v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.OptionalSchema<v.ObjectSchema<{
746
888
  readonly supportsEagerToolInputStreaming: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, " eagerly 工具流式">, v.DescriptionAction<boolean, "是否支持工具调用的 eager 模式流式输出">]>, undefined>;
747
889
  readonly supportsLongCacheRetention: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "长期缓存保留">, v.DescriptionAction<boolean, "是否支持长期缓存保留策略">]>, undefined>;
748
890
  readonly sendSessionAffinityHeaders: v.OptionalSchema<v.SchemaWithPipe<readonly [v.BooleanSchema<undefined>, v.TitleAction<boolean, "发送会话亲和标头">, v.DescriptionAction<boolean, "是否在请求中携带会话亲和性标头">]>, undefined>;
@@ -766,7 +908,45 @@ export declare const ModelConfigDefine: v.SchemaWithPipe<readonly [v.ObjectSchem
766
908
  supportsTemperature?: boolean | undefined;
767
909
  forceAdaptiveThinking?: boolean | undefined;
768
910
  allowEmptySignature?: boolean | undefined;
769
- } | undefined, "针对 Anthropic Messages API 的兼容性覆写选项">]>], undefined>, v.TitleAction<{
911
+ } | undefined, "针对 Anthropic Messages API 的兼容性覆写选项">]>, import("@piying/valibot-visit").RawConfigAction<"viewRawConfig", {
912
+ supportsEagerToolInputStreaming?: boolean | undefined;
913
+ supportsLongCacheRetention?: boolean | undefined;
914
+ sendSessionAffinityHeaders?: boolean | undefined;
915
+ supportsCacheControlOnTools?: boolean | undefined;
916
+ supportsTemperature?: boolean | undefined;
917
+ forceAdaptiveThinking?: boolean | undefined;
918
+ allowEmptySignature?: boolean | undefined;
919
+ } | undefined, import("@piying/view-angular-core").AnyCoreSchemaHandle>]>], undefined>, import("@piying/valibot-visit").DefineTypeAction<{
920
+ supportsStore?: boolean | undefined;
921
+ supportsDeveloperRole?: boolean | undefined;
922
+ supportsReasoningEffort?: boolean | undefined;
923
+ supportsUsageInStreaming?: boolean | undefined;
924
+ maxTokensField?: "max_completion_tokens" | "max_tokens" | undefined;
925
+ requiresToolResultName?: boolean | undefined;
926
+ requiresAssistantAfterToolResult?: boolean | undefined;
927
+ requiresThinkingAsText?: boolean | undefined;
928
+ requiresReasoningContentOnAssistantMessages?: boolean | undefined;
929
+ thinkingFormat?: "deepseek" | "openai" | "openrouter" | "zai" | "together" | "ant-ling" | "qwen" | "qwen-chat-template" | "string-thinking" | undefined;
930
+ openRouterRouting?: unknown;
931
+ vercelGatewayRouting?: unknown;
932
+ zaiToolStream?: boolean | undefined;
933
+ supportsStrictMode?: boolean | undefined;
934
+ cacheControlFormat?: "anthropic" | undefined;
935
+ sendSessionAffinityHeaders?: boolean | undefined;
936
+ supportsLongCacheRetention?: boolean | undefined;
937
+ } | {
938
+ supportsDeveloperRole?: boolean | undefined;
939
+ sendSessionIdHeader?: boolean | undefined;
940
+ supportsLongCacheRetention?: boolean | undefined;
941
+ } | {
942
+ supportsEagerToolInputStreaming?: boolean | undefined;
943
+ supportsLongCacheRetention?: boolean | undefined;
944
+ sendSessionAffinityHeaders?: boolean | undefined;
945
+ supportsCacheControlOnTools?: boolean | undefined;
946
+ supportsTemperature?: boolean | undefined;
947
+ forceAdaptiveThinking?: boolean | undefined;
948
+ allowEmptySignature?: boolean | undefined;
949
+ } | undefined>, v.TitleAction<{
770
950
  supportsStore?: boolean | undefined;
771
951
  supportsDeveloperRole?: boolean | undefined;
772
952
  supportsReasoningEffort?: boolean | undefined;
package/define/index.js CHANGED
@@ -420,10 +420,41 @@ var AnthropicMessagesCompatSchema = v3.pipe(
420
420
  );
421
421
  var CompatSchema = v3.pipe(
422
422
  v3.union([
423
- OpenAICompletionsCompatSchema,
424
- OpenAIResponsesCompatSchema,
425
- AnthropicMessagesCompatSchema
423
+ v3.pipe(
424
+ OpenAICompletionsCompatSchema,
425
+ (0, import_view_angular_core.hideWhen)({
426
+ disabled: true,
427
+ listen(fn, field) {
428
+ return fn({ list: [["@provider"]] }).pipe(
429
+ (0, import_rxjs.map)((item) => item.list[0] !== "openai-completions")
430
+ );
431
+ }
432
+ })
433
+ ),
434
+ v3.pipe(
435
+ OpenAIResponsesCompatSchema,
436
+ (0, import_view_angular_core.hideWhen)({
437
+ disabled: true,
438
+ listen(fn, field) {
439
+ return fn({ list: [["@provider"]] }).pipe(
440
+ (0, import_rxjs.map)((item) => item.list[0] !== "openai-responses")
441
+ );
442
+ }
443
+ })
444
+ ),
445
+ v3.pipe(
446
+ AnthropicMessagesCompatSchema,
447
+ (0, import_view_angular_core.hideWhen)({
448
+ disabled: true,
449
+ listen(fn, field) {
450
+ return fn({ list: [["@provider"]] }).pipe(
451
+ (0, import_rxjs.map)((item) => item.list[0] !== "anthropic-messages")
452
+ );
453
+ }
454
+ })
455
+ )
426
456
  ]),
457
+ (0, import_view_angular_core.setComponent)("object"),
427
458
  v3.title("兼容配置"),
428
459
  v3.description(
429
460
  "模型 API 兼容性覆写选项,支持 OpenAI Completions、OpenAI Responses、Anthropic Messages 三种格式"
@@ -551,7 +582,7 @@ var ModelSchema = v3.pipe(
551
582
  var OutputSchema = InputSchema;
552
583
  var ModelConfigDefine = v3.pipe(
553
584
  v3.object({
554
- provider: KnownProviderDefine,
585
+ provider: v3.pipe(KnownProviderDefine, (0, import_view_angular_core.setAlias)("provider")),
555
586
  model: v3.pipe(v3.string(), v3.title("模型名")),
556
587
  name: v3.pipe(
557
588
  v3.optional(v3.string()),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../packages/openai/define/index.ts", "../../../packages/openai/chat/message.define.ts", "../../../packages/openai/chat/util/get-custom-provider.ts", "../../../packages/openai/chat/provider.define.ts"],
4
- "sourcesContent": ["export * from '../chat/message.define';\nexport * from '../chat/util/get-custom-provider'", "import * as v from 'valibot';\nexport const ChatCompletionContentPartStr = v.object({\n text: v.string(),\n type: v.optional(v.literal('text'), 'text'),\n});\nexport type ChatCompletionContentPartStrType = v.InferOutput<\n typeof ChatCompletionContentPartStr\n>;\n\nexport const ChatCompletionContentPartImage = v.object({\n image_url: v.object({\n url: v.string(),\n }),\n type: v.optional(v.literal('image_url'), 'image_url'),\n});\nexport type ChatCompletionContentPartImageType = v.InferOutput<\n typeof ChatCompletionContentPartImage\n>;\nexport const ChatCompletionContentPart = v.array(\n v.union([ChatCompletionContentPartStr, ChatCompletionContentPartImage]),\n);\nexport const SystemChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const UserChatCompletionContent = ChatCompletionContentPart;\nexport type UserChatCompletionContentType = v.InferOutput<\n typeof UserChatCompletionContent\n>;\nexport const AssistantChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const SystemChatMessage = v.object({\n role: v.optional(v.literal('system'), 'system'),\n content: SystemChatCompletionContent,\n});\nexport type SystemChatMessageType = v.InferOutput<typeof SystemChatMessage>;\nexport const UserChatMessage = v.object({\n role: v.optional(v.literal('user'), 'user'),\n content: UserChatCompletionContent,\n});\nexport type UserChatMessageType = v.InferOutput<typeof UserChatMessage>;\n\nexport const AssistantChatMessage = v.object({\n role: v.optional(v.literal('assistant'), 'assistant'),\n content: AssistantChatCompletionContent,\n thinkContent: v.optional(v.string()),\n});\n\nexport type AssistantChatMessageType = v.InferOutput<\n typeof AssistantChatMessage\n>;\n\nexport const ChatMessageItemDefine = v.union([\n SystemChatMessage,\n UserChatMessage,\n AssistantChatMessage,\n]);\nexport const ChatMessageCommonItemDefine = v.union([\n UserChatMessage,\n AssistantChatMessage,\n]);\nexport type ChatMessageItemType = v.InferOutput<typeof ChatMessageItemDefine>;\nexport const ChatMessageListDefine = v.array(ChatMessageItemDefine);\n\nexport type ChatMessageListOutputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\nexport type ChatMessageListInputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\n", "import * as v from 'valibot';\n\nimport { getModel, Model } from '@earendil-works/pi-ai';\nimport { KnownProviderDefine } from '../provider.define';\nimport { hideWhen, renderConfig } from '@piying/view-angular-core';\nimport { map } from 'rxjs';\n\nfunction getCustomProvider<\n T extends 'openai-completions' | 'openai-responses' | 'anthropic-messages',\n>(\n compat: T,\n model: string,\n name: string,\n input: Omit<Model<T>, 'api' | 'id' | 'name'>,\n) {\n return { ...input, id: model, api: compat, name } satisfies Model<T>;\n}\nexport function getModelConfig(input: ModelConfigInputType) {\n if (input.provider === ('faux' as any)) {\n return {\n model: input.config as Model<any>,\n config: input as ModelConfigOutputType,\n };\n }\n const config = v.parse(ModelConfigDefine, input);\n if (\n config.provider === 'openai-completions' ||\n config.provider === 'openai-responses' ||\n config.provider === 'anthropic-messages'\n ) {\n return {\n model: getCustomProvider(\n config.provider,\n config.model,\n config.name,\n config.config!,\n ),\n config: config,\n };\n }\n\n return {\n model: getModel(config.provider, config.model as any as never),\n config: config,\n };\n}\nexport const ThinkingLevelSchema = v.pipe(\n v.picklist(['minimal', 'low', 'medium', 'high', 'xhigh']),\n v.title('思考等级'),\n v.description('模型思考的详细程度,从最小到最大'),\n);\n\nexport const ModelThinkingLevelSchema = v.pipe(\n v.picklist(['off', 'minimal', 'low', 'medium', 'high', 'xhigh']),\n v.title('模型思考等级'),\n v.description('关闭或设置模型思考的详细程度'),\n);\n\n// --- Compat schemas (conditional on TApi) ---\n\n/** OpenAI Completions compatibility overrides */\nexport const OpenAICompletionsCompatSchema = v.pipe(\n v.optional(\n v.object({\n supportsStore: v.optional(\n v.pipe(\n v.boolean(),\n v.title('支持存储'),\n v.description('是否支持服务端会话存储'),\n ),\n ),\n supportsDeveloperRole: v.optional(\n v.pipe(\n v.boolean(),\n v.title('支持开发者角色'),\n v.description('是否支持 developer 系统消息角色'),\n ),\n ),\n supportsReasoningEffort: v.optional(\n v.pipe(\n v.boolean(),\n v.title('支持推理努力'),\n v.description('是否支持 reasoning_effort 参数'),\n ),\n ),\n supportsUsageInStreaming: v.optional(\n v.pipe(\n v.boolean(),\n v.title('流式用量'),\n v.description('流式输出中是否返回 usage 信息'),\n ),\n ),\n maxTokensField: v.optional(\n v.pipe(\n v.picklist(['max_completion_tokens', 'max_tokens']),\n v.title('最大 token 字段名'),\n v.description('指定最大 token 参数使用的是哪个字段名'),\n ),\n ),\n requiresToolResultName: v.optional(\n v.pipe(\n v.boolean(),\n v.title('需要工具结果名称'),\n v.description('是否要求工具结果消息包含 name 字段'),\n ),\n ),\n requiresAssistantAfterToolResult: v.optional(\n v.pipe(\n v.boolean(),\n v.title('需要助手回复'),\n v.description('工具结果后是否需要助手消息跟进'),\n ),\n ),\n requiresThinkingAsText: v.optional(\n v.pipe(\n v.boolean(),\n v.title('思考转文本'),\n v.description('是否将思考过程作为普通文本发送'),\n ),\n ),\n requiresReasoningContentOnAssistantMessages: v.optional(\n v.pipe(\n v.boolean(),\n v.title('推理内容在助手消息中'),\n v.description('是否在助手消息中包含推理内容'),\n ),\n ),\n thinkingFormat: v.optional(\n v.pipe(\n v.picklist([\n 'openai',\n 'openrouter',\n 'deepseek',\n 'together',\n 'zai',\n 'qwen',\n 'qwen-chat-template',\n 'string-thinking',\n 'ant-ling',\n ]),\n v.title('思考格式'),\n v.description('指定 thinking 标签的序列化格式'),\n ),\n ),\n openRouterRouting: v.optional(\n v.pipe(\n v.unknown(),\n v.title('OpenRouter 路由'),\n v.description('自定义 OpenRouter 的路由配置'),\n ),\n ),\n vercelGatewayRouting: v.optional(\n v.pipe(\n v.unknown(),\n v.title('Vercel Gateway 路由'),\n v.description('自定义 Vercel AI Gateway 的路由配置'),\n ),\n ),\n zaiToolStream: v.optional(\n v.pipe(\n v.boolean(),\n v.title('ZAI 工具流式'),\n v.description('是否启用 ZAI 平台工具调用的流式输出'),\n ),\n ),\n supportsStrictMode: v.optional(\n v.pipe(\n v.boolean(),\n v.title('严格模式'),\n v.description('是否支持工具的 JSON Schema 严格校验'),\n ),\n ),\n cacheControlFormat: v.optional(\n v.pipe(\n v.literal('anthropic'),\n v.title('缓存控制格式'),\n v.description('指定缓存控制的语法格式'),\n ),\n ),\n sendSessionAffinityHeaders: v.optional(\n v.pipe(\n v.boolean(),\n v.title('发送会话亲和标头'),\n v.description('是否在请求中携带会话亲和性标头'),\n ),\n ),\n supportsLongCacheRetention: v.optional(\n v.pipe(\n v.boolean(),\n v.title('长期缓存保留'),\n v.description('是否支持长期缓存保留策略'),\n ),\n ),\n }),\n ),\n v.title('OpenAI Completions 兼容配置'),\n v.description('针对 OpenAI Completions API 的兼容性覆写选项'),\n);\n\n/** OpenAI Responses compatibility overrides */\nexport const OpenAIResponsesCompatSchema = v.pipe(\n v.optional(\n v.object({\n supportsDeveloperRole: v.optional(\n v.pipe(\n v.boolean(),\n v.title('支持开发者角色'),\n v.description('是否支持 developer 系统消息角色'),\n ),\n ),\n sendSessionIdHeader: v.optional(\n v.pipe(\n v.boolean(),\n v.title('发送会话 ID 标头'),\n v.description('是否在请求中携带 X-Session-ID 标头'),\n ),\n ),\n supportsLongCacheRetention: v.optional(\n v.pipe(\n v.boolean(),\n v.title('长期缓存保留'),\n v.description('是否支持长期缓存保留策略'),\n ),\n ),\n }),\n ),\n v.title('OpenAI Responses 兼容配置'),\n v.description('针对 OpenAI Responses API 的兼容性覆写选项'),\n);\n\n/** Anthropic Messages compatibility overrides */\nexport const AnthropicMessagesCompatSchema = v.pipe(\n v.optional(\n v.object({\n supportsEagerToolInputStreaming: v.optional(\n v.pipe(\n v.boolean(),\n v.title(' eagerly 工具流式'),\n v.description('是否支持工具调用的 eager 模式流式输出'),\n ),\n ),\n supportsLongCacheRetention: v.optional(\n v.pipe(\n v.boolean(),\n v.title('长期缓存保留'),\n v.description('是否支持长期缓存保留策略'),\n ),\n ),\n sendSessionAffinityHeaders: v.optional(\n v.pipe(\n v.boolean(),\n v.title('发送会话亲和标头'),\n v.description('是否在请求中携带会话亲和性标头'),\n ),\n ),\n supportsCacheControlOnTools: v.optional(\n v.pipe(\n v.boolean(),\n v.title('工具缓存控制'),\n v.description('是否支持在 tool_use 消息中使用 cache_control'),\n ),\n ),\n supportsTemperature: v.optional(\n v.pipe(\n v.boolean(),\n v.title('支持温度参数'),\n v.description('模型/接口是否支持 temperature 参数'),\n ),\n ),\n forceAdaptiveThinking: v.optional(\n v.pipe(\n v.boolean(),\n v.title('强制自适应思考'),\n v.description('是否强制启用 adaptive thinking 模式'),\n ),\n ),\n allowEmptySignature: v.optional(\n v.pipe(\n v.boolean(),\n v.title('允许空签名'),\n v.description('是否允许工具调用不指定签名(sha256)'),\n ),\n ),\n }),\n ),\n v.title('Anthropic Messages 兼容配置'),\n v.description('针对 Anthropic Messages API 的兼容性覆写选项'),\n);\n\n// Generic compat schema (union of all compat types)\nexport const CompatSchema = v.pipe(\n v.union([\n OpenAICompletionsCompatSchema,\n OpenAIResponsesCompatSchema,\n AnthropicMessagesCompatSchema,\n ]),\n v.title('兼容配置'),\n v.description(\n '模型 API 兼容性覆写选项,支持 OpenAI Completions、OpenAI Responses、Anthropic Messages 三种格式',\n ),\n);\n\n// --- Input array: (\"text\" | \"image\")[] ---\n\nexport const InputChoiceSchema = v.pipe(\n v.picklist(['text', 'image']),\n v.title('输入类型'),\n v.description('支持的输入模态类型'),\n);\nexport const InputSchema = v.pipe(\n v.array(InputChoiceSchema),\n v.title('输入类型列表'),\n v.description('该模型支持的用户输入类型,如 text 文本或 image 图片'),\n);\n\n// --- Headers: Record<string, string> ---\n\nconst HeadersSchema = v.pipe(\n v.record(v.string(), v.string()),\n v.title('自定义请求头'),\n v.description('额外的 HTTP 请求头键值对配置'),\n renderConfig({ hidden: true }),\n);\n\n// --- Model schema (non-generic) ---\n\n/** Cost sub-schema */\nconst CostSchema = v.pipe(\n v.optional(\n v.object({\n input: v.pipe(\n v.number(),\n v.title('输入单价'),\n v.description('每 token 输入费用'),\n ),\n output: v.pipe(\n v.number(),\n v.title('输出单价'),\n v.description('每 token 输出费用'),\n ),\n cacheRead: v.pipe(\n v.number(),\n v.title('缓存读取单价'),\n v.description('从缓存读取每 token 的费用'),\n ),\n cacheWrite: v.pipe(\n v.number(),\n v.title('缓存写入单价'),\n v.description('写入缓存每 token 的费用'),\n ),\n }),\n { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n ),\n v.title('费用配置'),\n v.description('模型各操作类型的 token 计价标准'),\n);\n\n/** Thinking level map: Partial<Record<ModelThinkingLevel, string | null>> */\nconst ThinkingLevelMapSchema = v.pipe(\n v.record(\n ModelThinkingLevelSchema,\n v.pipe(\n v.nullish(v.string()),\n v.title('配置值'),\n v.description('对应思考等级的具体配置字符串,null 表示未设置'),\n ),\n ),\n v.title('思考等级配置映射'),\n v.description('各思考等级对应的具体配置参数映射'),\n);\n\n/**\n * Model schema for pi-ai models.\n * Matches `Model<TApi extends Api>` but without generic type preservation\n * at runtime — compat accepts any of the three compat variants via union.\n */\nexport const ModelSchema = v.pipe(\n v.object({\n provider: v.pipe(\n v.optional(v.string(), 'default'),\n v.title('厂商'),\n v.description('模型提供商,如 openai / anthropic / llama'),\n ),\n baseUrl: v.pipe(\n v.string(),\n v.title('基础 URL'),\n v.description('API 请求的基础地址'),\n ),\n reasoning: v.pipe(\n v.optional(v.boolean(), false),\n v.title('支持推理'),\n v.description('该模型是否支持思考/推理模式'),\n ),\n // thinkingLevelMap: v.optional(\n // v.pipe(\n // v.optional(ThinkingLevelMapSchema),\n // v.title('思考等级配置'),\n // v.description('各思考等级的具体参数配置映射'),\n // ),\n // ),\n input: v.pipe(\n v.optional(InputSchema, ['text', 'image']),\n v.title('输入类型'),\n v.description('支持的输入模态类型'),\n ),\n cost: v.pipe(\n CostSchema,\n v.title('费用配置'),\n v.description('模型 token 计价标准'),\n ),\n contextWindow: v.pipe(\n v.pipe(v.optional(v.number(), 99999999)),\n v.title('上下文窗口'),\n v.description('模型支持的上下文最大 token 数'),\n ),\n maxTokens: v.pipe(\n v.pipe(v.optional(v.number(), 99999999)),\n v.title('最大输出 tokens'),\n v.description('单次请求允许的最大输出 token 数'),\n ),\n headers: v.optional(\n v.pipe(\n v.optional(HeadersSchema),\n v.title('自定义请求头'),\n v.description('额外的 HTTP 请求头配置'),\n ),\n ),\n compat: v.pipe(\n v.optional(CompatSchema, { supportsDeveloperRole: false }),\n v.title('兼容配置'),\n v.description('API 兼容性覆写选项'),\n ),\n }),\n v.title('模型定义'),\n v.description(\n 'pi-ai 模型的核心配置结构,包含模型标识、API 参数、费用及兼容性设置',\n ),\n);\n\nexport type ModelInput = v.InferInput<typeof ModelSchema>;\nexport type ModelOutput = v.InferOutput<typeof ModelSchema>;\n\n// --- ImagesModel schema ---\n\n/** Output array for image models: (\"text\" | \"image\")[] */\nexport const OutputSchema = InputSchema; // same structure\n\nexport const ModelConfigDefine = v.pipe(\n v.object({\n provider: KnownProviderDefine,\n model: v.pipe(v.string(), v.title('模型名')),\n name: v.pipe(\n v.optional(v.string()),\n v.title('配置名'),\n v.description('模型的配置名称(默认为模型名)'),\n ),\n /** provider是自定义时使用 */\n apiKey: v.pipe(v.optional(v.string()), v.title('apiKey')),\n config: v.pipe(\n v.optional(ModelSchema),\n hideWhen({\n disabled: true,\n listen(fn, field) {\n return fn({ list: [['..', 'provider']] }).pipe(\n map(\n ({ list: [value] }) =>\n !(\n value === 'openai-completions' ||\n value === 'openai-responses' ||\n value === 'anthropic-messages'\n ),\n ),\n );\n },\n }),\n ),\n }),\n v.transform((item) => ({ ...item, name: item.name ?? item.model })),\n);\n\nexport type ModelConfigInputType = v.InferInput<typeof ModelConfigDefine>;\nexport type ModelConfigOutputType = v.InferOutput<typeof ModelConfigDefine>;\n", "import * as v from 'valibot';\nimport { KnownProvider } from '@earendil-works/pi-ai';\nexport const KnownProviderDefine = v.pipe(\n v.picklist([\n 'amazon-bedrock',\n 'anthropic',\n 'google',\n 'google-vertex',\n 'openai',\n 'azure-openai-responses',\n 'openai-codex',\n 'deepseek',\n 'github-copilot',\n 'xai',\n 'groq',\n 'cerebras',\n 'openrouter',\n 'vercel-ai-gateway',\n 'zai',\n 'mistral',\n 'minimax',\n 'minimax-cn',\n 'moonshotai',\n 'moonshotai-cn',\n 'huggingface',\n 'fireworks',\n 'together',\n 'opencode',\n 'opencode-go',\n 'kimi-coding',\n 'cloudflare-workers-ai',\n 'cloudflare-ai-gateway',\n 'xiaomi',\n 'xiaomi-token-plan-cn',\n 'xiaomi-token-plan-ams',\n 'xiaomi-token-plan-sgp',\n 'ant-ling',\n 'nvidia',\n 'zai-coding-cn',\n /** 自定义 */\n 'openai-completions',\n 'openai-responses',\n 'anthropic-messages',\n ]),\n v.title('提供商'),\n v.description(`'openai-completions','openai-responses','anthropic-messages',为自定义提供商`),\n);\n\nexport type KnownProviderType = v.InferOutput<typeof KnownProviderDefine>;\ntype D2T = KnownProvider extends KnownProviderType ? true : false;\ntype T2D = KnownProviderType extends KnownProvider ? true : false;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["export * from '../chat/message.define';\nexport * from '../chat/util/get-custom-provider'", "import * as v from 'valibot';\nexport const ChatCompletionContentPartStr = v.object({\n text: v.string(),\n type: v.optional(v.literal('text'), 'text'),\n});\nexport type ChatCompletionContentPartStrType = v.InferOutput<\n typeof ChatCompletionContentPartStr\n>;\n\nexport const ChatCompletionContentPartImage = v.object({\n image_url: v.object({\n url: v.string(),\n }),\n type: v.optional(v.literal('image_url'), 'image_url'),\n});\nexport type ChatCompletionContentPartImageType = v.InferOutput<\n typeof ChatCompletionContentPartImage\n>;\nexport const ChatCompletionContentPart = v.array(\n v.union([ChatCompletionContentPartStr, ChatCompletionContentPartImage]),\n);\nexport const SystemChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const UserChatCompletionContent = ChatCompletionContentPart;\nexport type UserChatCompletionContentType = v.InferOutput<\n typeof UserChatCompletionContent\n>;\nexport const AssistantChatCompletionContent = v.array(\n ChatCompletionContentPartStr,\n);\nexport const SystemChatMessage = v.object({\n role: v.optional(v.literal('system'), 'system'),\n content: SystemChatCompletionContent,\n});\nexport type SystemChatMessageType = v.InferOutput<typeof SystemChatMessage>;\nexport const UserChatMessage = v.object({\n role: v.optional(v.literal('user'), 'user'),\n content: UserChatCompletionContent,\n});\nexport type UserChatMessageType = v.InferOutput<typeof UserChatMessage>;\n\nexport const AssistantChatMessage = v.object({\n role: v.optional(v.literal('assistant'), 'assistant'),\n content: AssistantChatCompletionContent,\n thinkContent: v.optional(v.string()),\n});\n\nexport type AssistantChatMessageType = v.InferOutput<\n typeof AssistantChatMessage\n>;\n\nexport const ChatMessageItemDefine = v.union([\n SystemChatMessage,\n UserChatMessage,\n AssistantChatMessage,\n]);\nexport const ChatMessageCommonItemDefine = v.union([\n UserChatMessage,\n AssistantChatMessage,\n]);\nexport type ChatMessageItemType = v.InferOutput<typeof ChatMessageItemDefine>;\nexport const ChatMessageListDefine = v.array(ChatMessageItemDefine);\n\nexport type ChatMessageListOutputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\nexport type ChatMessageListInputType = v.InferOutput<\n typeof ChatMessageListDefine\n>;\n", "import * as v from 'valibot';\n\nimport { getModel, Model } from '@earendil-works/pi-ai';\nimport { KnownProviderDefine } from '../provider.define';\nimport {\n hideWhen,\n renderConfig,\n setAlias,\n setComponent,\n} from '@piying/view-angular-core';\nimport { map } from 'rxjs';\n\nfunction getCustomProvider<\n T extends 'openai-completions' | 'openai-responses' | 'anthropic-messages',\n>(\n compat: T,\n model: string,\n name: string,\n input: Omit<Model<T>, 'api' | 'id' | 'name'>,\n) {\n return { ...input, id: model, api: compat, name } satisfies Model<T>;\n}\nexport function getModelConfig(input: ModelConfigInputType) {\n if (input.provider === ('faux' as any)) {\n return {\n model: input.config as Model<any>,\n config: input as ModelConfigOutputType,\n };\n }\n const config = v.parse(ModelConfigDefine, input);\n if (\n config.provider === 'openai-completions' ||\n config.provider === 'openai-responses' ||\n config.provider === 'anthropic-messages'\n ) {\n return {\n model: getCustomProvider(\n config.provider,\n config.model,\n config.name,\n config.config!,\n ),\n config: config,\n };\n }\n\n return {\n model: getModel(config.provider, config.model as any as never),\n config: config,\n };\n}\nexport const ThinkingLevelSchema = v.pipe(\n v.picklist(['minimal', 'low', 'medium', 'high', 'xhigh']),\n v.title('思考等级'),\n v.description('模型思考的详细程度,从最小到最大'),\n);\n\nexport const ModelThinkingLevelSchema = v.pipe(\n v.picklist(['off', 'minimal', 'low', 'medium', 'high', 'xhigh']),\n v.title('模型思考等级'),\n v.description('关闭或设置模型思考的详细程度'),\n);\n\n// --- Compat schemas (conditional on TApi) ---\n\n/** OpenAI Completions compatibility overrides */\nexport const OpenAICompletionsCompatSchema = v.pipe(\n v.optional(\n v.object({\n supportsStore: v.optional(\n v.pipe(\n v.boolean(),\n v.title('支持存储'),\n v.description('是否支持服务端会话存储'),\n ),\n ),\n supportsDeveloperRole: v.optional(\n v.pipe(\n v.boolean(),\n v.title('支持开发者角色'),\n v.description('是否支持 developer 系统消息角色'),\n ),\n ),\n supportsReasoningEffort: v.optional(\n v.pipe(\n v.boolean(),\n v.title('支持推理努力'),\n v.description('是否支持 reasoning_effort 参数'),\n ),\n ),\n supportsUsageInStreaming: v.optional(\n v.pipe(\n v.boolean(),\n v.title('流式用量'),\n v.description('流式输出中是否返回 usage 信息'),\n ),\n ),\n maxTokensField: v.optional(\n v.pipe(\n v.picklist(['max_completion_tokens', 'max_tokens']),\n v.title('最大 token 字段名'),\n v.description('指定最大 token 参数使用的是哪个字段名'),\n ),\n ),\n requiresToolResultName: v.optional(\n v.pipe(\n v.boolean(),\n v.title('需要工具结果名称'),\n v.description('是否要求工具结果消息包含 name 字段'),\n ),\n ),\n requiresAssistantAfterToolResult: v.optional(\n v.pipe(\n v.boolean(),\n v.title('需要助手回复'),\n v.description('工具结果后是否需要助手消息跟进'),\n ),\n ),\n requiresThinkingAsText: v.optional(\n v.pipe(\n v.boolean(),\n v.title('思考转文本'),\n v.description('是否将思考过程作为普通文本发送'),\n ),\n ),\n requiresReasoningContentOnAssistantMessages: v.optional(\n v.pipe(\n v.boolean(),\n v.title('推理内容在助手消息中'),\n v.description('是否在助手消息中包含推理内容'),\n ),\n ),\n thinkingFormat: v.optional(\n v.pipe(\n v.picklist([\n 'openai',\n 'openrouter',\n 'deepseek',\n 'together',\n 'zai',\n 'qwen',\n 'qwen-chat-template',\n 'string-thinking',\n 'ant-ling',\n ]),\n v.title('思考格式'),\n v.description('指定 thinking 标签的序列化格式'),\n ),\n ),\n openRouterRouting: v.optional(\n v.pipe(\n v.unknown(),\n v.title('OpenRouter 路由'),\n v.description('自定义 OpenRouter 的路由配置'),\n ),\n ),\n vercelGatewayRouting: v.optional(\n v.pipe(\n v.unknown(),\n v.title('Vercel Gateway 路由'),\n v.description('自定义 Vercel AI Gateway 的路由配置'),\n ),\n ),\n zaiToolStream: v.optional(\n v.pipe(\n v.boolean(),\n v.title('ZAI 工具流式'),\n v.description('是否启用 ZAI 平台工具调用的流式输出'),\n ),\n ),\n supportsStrictMode: v.optional(\n v.pipe(\n v.boolean(),\n v.title('严格模式'),\n v.description('是否支持工具的 JSON Schema 严格校验'),\n ),\n ),\n cacheControlFormat: v.optional(\n v.pipe(\n v.literal('anthropic'),\n v.title('缓存控制格式'),\n v.description('指定缓存控制的语法格式'),\n ),\n ),\n sendSessionAffinityHeaders: v.optional(\n v.pipe(\n v.boolean(),\n v.title('发送会话亲和标头'),\n v.description('是否在请求中携带会话亲和性标头'),\n ),\n ),\n supportsLongCacheRetention: v.optional(\n v.pipe(\n v.boolean(),\n v.title('长期缓存保留'),\n v.description('是否支持长期缓存保留策略'),\n ),\n ),\n }),\n ),\n v.title('OpenAI Completions 兼容配置'),\n v.description('针对 OpenAI Completions API 的兼容性覆写选项'),\n);\n\n/** OpenAI Responses compatibility overrides */\nexport const OpenAIResponsesCompatSchema = v.pipe(\n v.optional(\n v.object({\n supportsDeveloperRole: v.optional(\n v.pipe(\n v.boolean(),\n v.title('支持开发者角色'),\n v.description('是否支持 developer 系统消息角色'),\n ),\n ),\n sendSessionIdHeader: v.optional(\n v.pipe(\n v.boolean(),\n v.title('发送会话 ID 标头'),\n v.description('是否在请求中携带 X-Session-ID 标头'),\n ),\n ),\n supportsLongCacheRetention: v.optional(\n v.pipe(\n v.boolean(),\n v.title('长期缓存保留'),\n v.description('是否支持长期缓存保留策略'),\n ),\n ),\n }),\n ),\n v.title('OpenAI Responses 兼容配置'),\n v.description('针对 OpenAI Responses API 的兼容性覆写选项'),\n);\n\n/** Anthropic Messages compatibility overrides */\nexport const AnthropicMessagesCompatSchema = v.pipe(\n v.optional(\n v.object({\n supportsEagerToolInputStreaming: v.optional(\n v.pipe(\n v.boolean(),\n v.title(' eagerly 工具流式'),\n v.description('是否支持工具调用的 eager 模式流式输出'),\n ),\n ),\n supportsLongCacheRetention: v.optional(\n v.pipe(\n v.boolean(),\n v.title('长期缓存保留'),\n v.description('是否支持长期缓存保留策略'),\n ),\n ),\n sendSessionAffinityHeaders: v.optional(\n v.pipe(\n v.boolean(),\n v.title('发送会话亲和标头'),\n v.description('是否在请求中携带会话亲和性标头'),\n ),\n ),\n supportsCacheControlOnTools: v.optional(\n v.pipe(\n v.boolean(),\n v.title('工具缓存控制'),\n v.description('是否支持在 tool_use 消息中使用 cache_control'),\n ),\n ),\n supportsTemperature: v.optional(\n v.pipe(\n v.boolean(),\n v.title('支持温度参数'),\n v.description('模型/接口是否支持 temperature 参数'),\n ),\n ),\n forceAdaptiveThinking: v.optional(\n v.pipe(\n v.boolean(),\n v.title('强制自适应思考'),\n v.description('是否强制启用 adaptive thinking 模式'),\n ),\n ),\n allowEmptySignature: v.optional(\n v.pipe(\n v.boolean(),\n v.title('允许空签名'),\n v.description('是否允许工具调用不指定签名(sha256)'),\n ),\n ),\n }),\n ),\n v.title('Anthropic Messages 兼容配置'),\n v.description('针对 Anthropic Messages API 的兼容性覆写选项'),\n);\n\n// Generic compat schema (union of all compat types)\nexport const CompatSchema = v.pipe(\n v.union([\n v.pipe(\n OpenAICompletionsCompatSchema,\n hideWhen({\n disabled: true,\n listen(fn, field) {\n return fn({ list: [['@provider']] }).pipe(\n map((item) => item.list[0] !== 'openai-completions'),\n );\n },\n }),\n ),\n v.pipe(\n OpenAIResponsesCompatSchema,\n hideWhen({\n disabled: true,\n listen(fn, field) {\n return fn({ list: [['@provider']] }).pipe(\n map((item) => item.list[0] !== 'openai-responses'),\n );\n },\n }),\n ),\n v.pipe(\n AnthropicMessagesCompatSchema,\n hideWhen({\n disabled: true,\n listen(fn, field) {\n return fn({ list: [['@provider']] }).pipe(\n map((item) => item.list[0] !== 'anthropic-messages'),\n );\n },\n }),\n ),\n ]),\n setComponent('object'),\n v.title('兼容配置'),\n v.description(\n '模型 API 兼容性覆写选项,支持 OpenAI Completions、OpenAI Responses、Anthropic Messages 三种格式',\n ),\n);\n\n// --- Input array: (\"text\" | \"image\")[] ---\n\nexport const InputChoiceSchema = v.pipe(\n v.picklist(['text', 'image']),\n v.title('输入类型'),\n v.description('支持的输入模态类型'),\n);\nexport const InputSchema = v.pipe(\n v.array(InputChoiceSchema),\n v.title('输入类型列表'),\n v.description('该模型支持的用户输入类型,如 text 文本或 image 图片'),\n);\n\n// --- Headers: Record<string, string> ---\n\nconst HeadersSchema = v.pipe(\n v.record(v.string(), v.string()),\n v.title('自定义请求头'),\n v.description('额外的 HTTP 请求头键值对配置'),\n renderConfig({ hidden: true }),\n);\n\n// --- Model schema (non-generic) ---\n\n/** Cost sub-schema */\nconst CostSchema = v.pipe(\n v.optional(\n v.object({\n input: v.pipe(\n v.number(),\n v.title('输入单价'),\n v.description('每 token 输入费用'),\n ),\n output: v.pipe(\n v.number(),\n v.title('输出单价'),\n v.description('每 token 输出费用'),\n ),\n cacheRead: v.pipe(\n v.number(),\n v.title('缓存读取单价'),\n v.description('从缓存读取每 token 的费用'),\n ),\n cacheWrite: v.pipe(\n v.number(),\n v.title('缓存写入单价'),\n v.description('写入缓存每 token 的费用'),\n ),\n }),\n { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n ),\n v.title('费用配置'),\n v.description('模型各操作类型的 token 计价标准'),\n);\n\n/** Thinking level map: Partial<Record<ModelThinkingLevel, string | null>> */\nconst ThinkingLevelMapSchema = v.pipe(\n v.record(\n ModelThinkingLevelSchema,\n v.pipe(\n v.nullish(v.string()),\n v.title('配置值'),\n v.description('对应思考等级的具体配置字符串,null 表示未设置'),\n ),\n ),\n v.title('思考等级配置映射'),\n v.description('各思考等级对应的具体配置参数映射'),\n);\n\n/**\n * Model schema for pi-ai models.\n * Matches `Model<TApi extends Api>` but without generic type preservation\n * at runtime — compat accepts any of the three compat variants via union.\n */\nexport const ModelSchema = v.pipe(\n v.object({\n provider: v.pipe(\n v.optional(v.string(), 'default'),\n v.title('厂商'),\n v.description('模型提供商,如 openai / anthropic / llama'),\n ),\n baseUrl: v.pipe(\n v.string(),\n v.title('基础 URL'),\n v.description('API 请求的基础地址'),\n ),\n reasoning: v.pipe(\n v.optional(v.boolean(), false),\n v.title('支持推理'),\n v.description('该模型是否支持思考/推理模式'),\n ),\n // thinkingLevelMap: v.optional(\n // v.pipe(\n // v.optional(ThinkingLevelMapSchema),\n // v.title('思考等级配置'),\n // v.description('各思考等级的具体参数配置映射'),\n // ),\n // ),\n input: v.pipe(\n v.optional(InputSchema, ['text', 'image']),\n v.title('输入类型'),\n v.description('支持的输入模态类型'),\n ),\n cost: v.pipe(\n CostSchema,\n v.title('费用配置'),\n v.description('模型 token 计价标准'),\n ),\n contextWindow: v.pipe(\n v.pipe(v.optional(v.number(), 99999999)),\n v.title('上下文窗口'),\n v.description('模型支持的上下文最大 token 数'),\n ),\n maxTokens: v.pipe(\n v.pipe(v.optional(v.number(), 99999999)),\n v.title('最大输出 tokens'),\n v.description('单次请求允许的最大输出 token 数'),\n ),\n headers: v.optional(\n v.pipe(\n v.optional(HeadersSchema),\n v.title('自定义请求头'),\n v.description('额外的 HTTP 请求头配置'),\n ),\n ),\n compat: v.pipe(\n v.optional(CompatSchema, { supportsDeveloperRole: false }),\n v.title('兼容配置'),\n v.description('API 兼容性覆写选项'),\n ),\n }),\n v.title('模型定义'),\n v.description(\n 'pi-ai 模型的核心配置结构,包含模型标识、API 参数、费用及兼容性设置',\n ),\n);\n\nexport type ModelInput = v.InferInput<typeof ModelSchema>;\nexport type ModelOutput = v.InferOutput<typeof ModelSchema>;\n\n// --- ImagesModel schema ---\n\n/** Output array for image models: (\"text\" | \"image\")[] */\nexport const OutputSchema = InputSchema; // same structure\n\nexport const ModelConfigDefine = v.pipe(\n v.object({\n provider: v.pipe(KnownProviderDefine, setAlias('provider')),\n model: v.pipe(v.string(), v.title('模型名')),\n name: v.pipe(\n v.optional(v.string()),\n v.title('配置名'),\n v.description('模型的配置名称(默认为模型名)'),\n ),\n /** provider是自定义时使用 */\n apiKey: v.pipe(v.optional(v.string()), v.title('apiKey')),\n config: v.pipe(\n v.optional(ModelSchema),\n hideWhen({\n disabled: true,\n listen(fn, field) {\n return fn({ list: [['..', 'provider']] }).pipe(\n map(\n ({ list: [value] }) =>\n !(\n value === 'openai-completions' ||\n value === 'openai-responses' ||\n value === 'anthropic-messages'\n ),\n ),\n );\n },\n }),\n ),\n }),\n v.transform((item) => ({ ...item, name: item.name ?? item.model })),\n);\n\nexport type ModelConfigInputType = v.InferInput<typeof ModelConfigDefine>;\nexport type ModelConfigOutputType = v.InferOutput<typeof ModelConfigDefine>;\n", "import * as v from 'valibot';\nimport { KnownProvider } from '@earendil-works/pi-ai';\nexport const KnownProviderDefine = v.pipe(\n v.picklist([\n 'amazon-bedrock',\n 'anthropic',\n 'google',\n 'google-vertex',\n 'openai',\n 'azure-openai-responses',\n 'openai-codex',\n 'deepseek',\n 'github-copilot',\n 'xai',\n 'groq',\n 'cerebras',\n 'openrouter',\n 'vercel-ai-gateway',\n 'zai',\n 'mistral',\n 'minimax',\n 'minimax-cn',\n 'moonshotai',\n 'moonshotai-cn',\n 'huggingface',\n 'fireworks',\n 'together',\n 'opencode',\n 'opencode-go',\n 'kimi-coding',\n 'cloudflare-workers-ai',\n 'cloudflare-ai-gateway',\n 'xiaomi',\n 'xiaomi-token-plan-cn',\n 'xiaomi-token-plan-ams',\n 'xiaomi-token-plan-sgp',\n 'ant-ling',\n 'nvidia',\n 'zai-coding-cn',\n /** 自定义 */\n 'openai-completions',\n 'openai-responses',\n 'anthropic-messages',\n ]),\n v.title('提供商'),\n v.description(`'openai-completions','openai-responses','anthropic-messages',为自定义提供商`),\n);\n\nexport type KnownProviderType = v.InferOutput<typeof KnownProviderDefine>;\ntype D2T = KnownProvider extends KnownProviderType ? true : false;\ntype T2D = KnownProviderType extends KnownProvider ? true : false;\n"],
5
+ "mappings": "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",
6
6
  "names": ["v", "v"]
7
7
  }
package/define/index.mjs CHANGED
@@ -97,7 +97,12 @@ var KnownProviderDefine = v2.pipe(
97
97
  );
98
98
 
99
99
  // packages/openai/chat/util/get-custom-provider.ts
100
- import { hideWhen, renderConfig } from "@piying/view-angular-core";
100
+ import {
101
+ hideWhen,
102
+ renderConfig,
103
+ setAlias,
104
+ setComponent
105
+ } from "@piying/view-angular-core";
101
106
  import { map } from "rxjs";
102
107
  function getCustomProvider(compat, model, name, input) {
103
108
  return { ...input, id: model, api: compat, name };
@@ -361,10 +366,41 @@ var AnthropicMessagesCompatSchema = v3.pipe(
361
366
  );
362
367
  var CompatSchema = v3.pipe(
363
368
  v3.union([
364
- OpenAICompletionsCompatSchema,
365
- OpenAIResponsesCompatSchema,
366
- AnthropicMessagesCompatSchema
369
+ v3.pipe(
370
+ OpenAICompletionsCompatSchema,
371
+ hideWhen({
372
+ disabled: true,
373
+ listen(fn, field) {
374
+ return fn({ list: [["@provider"]] }).pipe(
375
+ map((item) => item.list[0] !== "openai-completions")
376
+ );
377
+ }
378
+ })
379
+ ),
380
+ v3.pipe(
381
+ OpenAIResponsesCompatSchema,
382
+ hideWhen({
383
+ disabled: true,
384
+ listen(fn, field) {
385
+ return fn({ list: [["@provider"]] }).pipe(
386
+ map((item) => item.list[0] !== "openai-responses")
387
+ );
388
+ }
389
+ })
390
+ ),
391
+ v3.pipe(
392
+ AnthropicMessagesCompatSchema,
393
+ hideWhen({
394
+ disabled: true,
395
+ listen(fn, field) {
396
+ return fn({ list: [["@provider"]] }).pipe(
397
+ map((item) => item.list[0] !== "anthropic-messages")
398
+ );
399
+ }
400
+ })
401
+ )
367
402
  ]),
403
+ setComponent("object"),
368
404
  v3.title("兼容配置"),
369
405
  v3.description(
370
406
  "模型 API 兼容性覆写选项,支持 OpenAI Completions、OpenAI Responses、Anthropic Messages 三种格式"
@@ -492,7 +528,7 @@ var ModelSchema = v3.pipe(
492
528
  var OutputSchema = InputSchema;
493
529
  var ModelConfigDefine = v3.pipe(
494
530
  v3.object({
495
- provider: KnownProviderDefine,
531
+ provider: v3.pipe(KnownProviderDefine, setAlias("provider")),
496
532
  model: v3.pipe(v3.string(), v3.title("模型名")),
497
533
  name: v3.pipe(
498
534
  v3.optional(v3.string()),