@earendil-works/pi-coding-agent 0.80.7 → 0.80.9

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 (145) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +6 -6
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js +2 -0
  5. package/dist/bun/cli.js.map +1 -1
  6. package/dist/cli/args.d.ts.map +1 -1
  7. package/dist/cli/args.js +1 -1
  8. package/dist/cli/args.js.map +1 -1
  9. package/dist/cli/list-models.d.ts +2 -2
  10. package/dist/cli/list-models.d.ts.map +1 -1
  11. package/dist/cli/list-models.js +3 -3
  12. package/dist/cli/list-models.js.map +1 -1
  13. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  14. package/dist/core/agent-session-runtime.js +3 -0
  15. package/dist/core/agent-session-runtime.js.map +1 -1
  16. package/dist/core/agent-session-services.d.ts +3 -6
  17. package/dist/core/agent-session-services.d.ts.map +1 -1
  18. package/dist/core/agent-session-services.js +10 -9
  19. package/dist/core/agent-session-services.js.map +1 -1
  20. package/dist/core/agent-session.d.ts +5 -6
  21. package/dist/core/agent-session.d.ts.map +1 -1
  22. package/dist/core/agent-session.js +57 -30
  23. package/dist/core/agent-session.js.map +1 -1
  24. package/dist/core/auth-storage.d.ts +15 -99
  25. package/dist/core/auth-storage.d.ts.map +1 -1
  26. package/dist/core/auth-storage.js +46 -259
  27. package/dist/core/auth-storage.js.map +1 -1
  28. package/dist/core/cache-stats.d.ts +2 -2
  29. package/dist/core/cache-stats.d.ts.map +1 -1
  30. package/dist/core/cache-stats.js +1 -1
  31. package/dist/core/cache-stats.js.map +1 -1
  32. package/dist/core/extensions/loader.d.ts.map +1 -1
  33. package/dist/core/extensions/loader.js +8 -2
  34. package/dist/core/extensions/loader.js.map +1 -1
  35. package/dist/core/extensions/runner.d.ts +1 -0
  36. package/dist/core/extensions/runner.d.ts.map +1 -1
  37. package/dist/core/extensions/runner.js +3 -0
  38. package/dist/core/extensions/runner.js.map +1 -1
  39. package/dist/core/extensions/types.d.ts +9 -2
  40. package/dist/core/extensions/types.d.ts.map +1 -1
  41. package/dist/core/extensions/types.js.map +1 -1
  42. package/dist/core/model-config.d.ts +512 -0
  43. package/dist/core/model-config.d.ts.map +1 -0
  44. package/dist/core/model-config.js +243 -0
  45. package/dist/core/model-config.js.map +1 -0
  46. package/dist/core/model-registry.d.ts +13 -123
  47. package/dist/core/model-registry.d.ts.map +1 -1
  48. package/dist/core/model-registry.js +44 -747
  49. package/dist/core/model-registry.js.map +1 -1
  50. package/dist/core/model-resolver.d.ts +6 -6
  51. package/dist/core/model-resolver.d.ts.map +1 -1
  52. package/dist/core/model-resolver.js +18 -18
  53. package/dist/core/model-resolver.js.map +1 -1
  54. package/dist/core/model-runtime.d.ts +77 -0
  55. package/dist/core/model-runtime.d.ts.map +1 -0
  56. package/dist/core/model-runtime.js +418 -0
  57. package/dist/core/model-runtime.js.map +1 -0
  58. package/dist/core/models-store.d.ts +17 -0
  59. package/dist/core/models-store.d.ts.map +1 -0
  60. package/dist/core/models-store.js +45 -0
  61. package/dist/core/models-store.js.map +1 -0
  62. package/dist/core/provider-composer.d.ts +55 -0
  63. package/dist/core/provider-composer.d.ts.map +1 -0
  64. package/dist/core/provider-composer.js +375 -0
  65. package/dist/core/provider-composer.js.map +1 -0
  66. package/dist/core/radius.d.ts +0 -19
  67. package/dist/core/radius.d.ts.map +1 -1
  68. package/dist/core/radius.js +0 -28
  69. package/dist/core/radius.js.map +1 -1
  70. package/dist/core/remote-catalog-provider.d.ts +5 -0
  71. package/dist/core/remote-catalog-provider.d.ts.map +1 -0
  72. package/dist/core/remote-catalog-provider.js +83 -0
  73. package/dist/core/remote-catalog-provider.js.map +1 -0
  74. package/dist/core/runtime-credentials.d.ts +15 -0
  75. package/dist/core/runtime-credentials.d.ts.map +1 -0
  76. package/dist/core/runtime-credentials.js +36 -0
  77. package/dist/core/runtime-credentials.js.map +1 -0
  78. package/dist/core/sdk.d.ts +3 -6
  79. package/dist/core/sdk.d.ts.map +1 -1
  80. package/dist/core/sdk.js +14 -25
  81. package/dist/core/sdk.js.map +1 -1
  82. package/dist/index.d.ts +2 -1
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +2 -2
  85. package/dist/index.js.map +1 -1
  86. package/dist/main.d.ts.map +1 -1
  87. package/dist/main.js +11 -13
  88. package/dist/main.js.map +1 -1
  89. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  90. package/dist/modes/interactive/components/assistant-message.js +22 -10
  91. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  92. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  93. package/dist/modes/interactive/components/footer.js +1 -1
  94. package/dist/modes/interactive/components/footer.js.map +1 -1
  95. package/dist/modes/interactive/components/login-dialog.d.ts +4 -8
  96. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  97. package/dist/modes/interactive/components/login-dialog.js +14 -12
  98. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  99. package/dist/modes/interactive/components/model-selector.d.ts +11 -4
  100. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  101. package/dist/modes/interactive/components/model-selector.js +72 -41
  102. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  103. package/dist/modes/interactive/components/oauth-selector.d.ts +4 -4
  104. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  105. package/dist/modes/interactive/components/oauth-selector.js +14 -27
  106. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  107. package/dist/modes/interactive/interactive-mode.d.ts +6 -3
  108. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  109. package/dist/modes/interactive/interactive-mode.js +157 -143
  110. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  111. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  112. package/dist/modes/rpc/rpc-mode.js +2 -2
  113. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  114. package/dist/package-manager-cli.d.ts.map +1 -1
  115. package/dist/package-manager-cli.js +67 -5
  116. package/dist/package-manager-cli.js.map +1 -1
  117. package/docs/custom-provider.md +6 -11
  118. package/docs/extensions.md +22 -1
  119. package/docs/models.md +2 -0
  120. package/docs/packages.md +1 -0
  121. package/docs/providers.md +13 -1
  122. package/docs/sdk.md +40 -50
  123. package/docs/usage.md +1 -0
  124. package/examples/extensions/README.md +1 -0
  125. package/examples/extensions/custom-provider-anthropic/index.ts +1 -1
  126. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  127. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  128. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  129. package/examples/extensions/gondolin/package-lock.json +2 -2
  130. package/examples/extensions/gondolin/package.json +1 -1
  131. package/examples/extensions/kimi-deferred-tools.ts +61 -0
  132. package/examples/extensions/sandbox/package-lock.json +2 -2
  133. package/examples/extensions/sandbox/package.json +1 -1
  134. package/examples/extensions/with-deps/package-lock.json +2 -2
  135. package/examples/extensions/with-deps/package.json +1 -1
  136. package/examples/sdk/02-custom-model.ts +5 -8
  137. package/examples/sdk/09-api-keys-and-oauth.ts +13 -31
  138. package/examples/sdk/12-full-control.ts +7 -12
  139. package/examples/sdk/README.md +14 -18
  140. package/npm-shrinkwrap.json +12 -12
  141. package/package.json +4 -4
  142. package/dist/core/provider-display-names.d.ts +0 -2
  143. package/dist/core/provider-display-names.d.ts.map +0 -1
  144. package/dist/core/provider-display-names.js +0 -37
  145. package/dist/core/provider-display-names.js.map +0 -1
@@ -0,0 +1,512 @@
1
+ /** Immutable, credential-blind models.json snapshot. */
2
+ import { type Static, Type } from "typebox";
3
+ declare const ModelDefinitionSchema: Type.TObject<{
4
+ id: Type.TString;
5
+ name: Type.TOptional<Type.TString>;
6
+ api: Type.TOptional<Type.TString>;
7
+ baseUrl: Type.TOptional<Type.TString>;
8
+ reasoning: Type.TOptional<Type.TBoolean>;
9
+ thinkingLevelMap: Type.TOptional<Type.TObject<{
10
+ off: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
11
+ minimal: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
12
+ low: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
13
+ medium: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
14
+ high: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
15
+ xhigh: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
16
+ max: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
17
+ }>>;
18
+ input: Type.TOptional<Type.TArray<Type.TUnion<[Type.TLiteral<"text">, Type.TLiteral<"image">]>>>;
19
+ cost: Type.TOptional<Type.TObject<{
20
+ input: Type.TNumber;
21
+ output: Type.TNumber;
22
+ cacheRead: Type.TNumber;
23
+ cacheWrite: Type.TNumber;
24
+ tiers: Type.TOptional<Type.TArray<Type.TObject<{
25
+ input: Type.TNumber;
26
+ output: Type.TNumber;
27
+ cacheRead: Type.TNumber;
28
+ cacheWrite: Type.TNumber;
29
+ inputTokensAbove: Type.TNumber;
30
+ }>>>;
31
+ }>>;
32
+ contextWindow: Type.TOptional<Type.TNumber>;
33
+ maxTokens: Type.TOptional<Type.TNumber>;
34
+ headers: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
35
+ compat: Type.TOptional<Type.TUnion<[Type.TObject<{
36
+ supportsStore: Type.TOptional<Type.TBoolean>;
37
+ supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
38
+ supportsReasoningEffort: Type.TOptional<Type.TBoolean>;
39
+ supportsUsageInStreaming: Type.TOptional<Type.TBoolean>;
40
+ maxTokensField: Type.TOptional<Type.TUnion<[Type.TLiteral<"max_completion_tokens">, Type.TLiteral<"max_tokens">]>>;
41
+ requiresToolResultName: Type.TOptional<Type.TBoolean>;
42
+ requiresAssistantAfterToolResult: Type.TOptional<Type.TBoolean>;
43
+ requiresThinkingAsText: Type.TOptional<Type.TBoolean>;
44
+ requiresReasoningContentOnAssistantMessages: Type.TOptional<Type.TBoolean>;
45
+ thinkingFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openrouter">, Type.TLiteral<"together">, Type.TLiteral<"deepseek">, Type.TLiteral<"zai">, Type.TLiteral<"qwen">, Type.TLiteral<"chat-template">, Type.TLiteral<"qwen-chat-template">, Type.TLiteral<"string-thinking">, Type.TLiteral<"ant-ling">]>>;
46
+ chatTemplateKwargs: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TUnion<[Type.TString, Type.TNumber, Type.TBoolean, Type.TNull]>, Type.TObject<{
47
+ $var: Type.TUnion<[Type.TLiteral<"thinking.enabled">, Type.TLiteral<"thinking.effort">]>;
48
+ omitWhenOff: Type.TOptional<Type.TBoolean>;
49
+ }>]>>>;
50
+ cacheControlFormat: Type.TOptional<Type.TLiteral<"anthropic">>;
51
+ openRouterRouting: Type.TOptional<Type.TObject<{
52
+ allow_fallbacks: Type.TOptional<Type.TBoolean>;
53
+ require_parameters: Type.TOptional<Type.TBoolean>;
54
+ data_collection: Type.TOptional<Type.TUnion<[Type.TLiteral<"deny">, Type.TLiteral<"allow">]>>;
55
+ zdr: Type.TOptional<Type.TBoolean>;
56
+ enforce_distillable_text: Type.TOptional<Type.TBoolean>;
57
+ order: Type.TOptional<Type.TArray<Type.TString>>;
58
+ only: Type.TOptional<Type.TArray<Type.TString>>;
59
+ ignore: Type.TOptional<Type.TArray<Type.TString>>;
60
+ quantizations: Type.TOptional<Type.TArray<Type.TString>>;
61
+ sort: Type.TOptional<Type.TUnion<[Type.TString, Type.TObject<{
62
+ by: Type.TOptional<Type.TString>;
63
+ partition: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
64
+ }>]>>;
65
+ max_price: Type.TOptional<Type.TObject<{
66
+ prompt: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
67
+ completion: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
68
+ image: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
69
+ audio: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
70
+ request: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
71
+ }>>;
72
+ preferred_min_throughput: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TObject<{
73
+ p50: Type.TOptional<Type.TNumber>;
74
+ p75: Type.TOptional<Type.TNumber>;
75
+ p90: Type.TOptional<Type.TNumber>;
76
+ p99: Type.TOptional<Type.TNumber>;
77
+ }>]>>;
78
+ preferred_max_latency: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TObject<{
79
+ p50: Type.TOptional<Type.TNumber>;
80
+ p75: Type.TOptional<Type.TNumber>;
81
+ p90: Type.TOptional<Type.TNumber>;
82
+ p99: Type.TOptional<Type.TNumber>;
83
+ }>]>>;
84
+ }>>;
85
+ vercelGatewayRouting: Type.TOptional<Type.TObject<{
86
+ only: Type.TOptional<Type.TArray<Type.TString>>;
87
+ order: Type.TOptional<Type.TArray<Type.TString>>;
88
+ }>>;
89
+ supportsStrictMode: Type.TOptional<Type.TBoolean>;
90
+ sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
91
+ deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
92
+ sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
93
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
94
+ }>, Type.TObject<{
95
+ supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
96
+ sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
97
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
98
+ supportsToolSearch: Type.TOptional<Type.TBoolean>;
99
+ }>, Type.TObject<{
100
+ supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
101
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
102
+ sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
103
+ supportsCacheControlOnTools: Type.TOptional<Type.TBoolean>;
104
+ forceAdaptiveThinking: Type.TOptional<Type.TBoolean>;
105
+ supportsToolReferences: Type.TOptional<Type.TBoolean>;
106
+ }>]>>;
107
+ }>;
108
+ declare const ModelOverrideSchema: Type.TObject<{
109
+ name: Type.TOptional<Type.TString>;
110
+ reasoning: Type.TOptional<Type.TBoolean>;
111
+ thinkingLevelMap: Type.TOptional<Type.TObject<{
112
+ off: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
113
+ minimal: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
114
+ low: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
115
+ medium: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
116
+ high: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
117
+ xhigh: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
118
+ max: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
119
+ }>>;
120
+ input: Type.TOptional<Type.TArray<Type.TUnion<[Type.TLiteral<"text">, Type.TLiteral<"image">]>>>;
121
+ cost: Type.TOptional<Type.TObject<{
122
+ input: Type.TOptional<Type.TNumber>;
123
+ output: Type.TOptional<Type.TNumber>;
124
+ cacheRead: Type.TOptional<Type.TNumber>;
125
+ cacheWrite: Type.TOptional<Type.TNumber>;
126
+ tiers: Type.TOptional<Type.TArray<Type.TObject<{
127
+ input: Type.TNumber;
128
+ output: Type.TNumber;
129
+ cacheRead: Type.TNumber;
130
+ cacheWrite: Type.TNumber;
131
+ inputTokensAbove: Type.TNumber;
132
+ }>>>;
133
+ }>>;
134
+ contextWindow: Type.TOptional<Type.TNumber>;
135
+ maxTokens: Type.TOptional<Type.TNumber>;
136
+ headers: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
137
+ compat: Type.TOptional<Type.TUnion<[Type.TObject<{
138
+ supportsStore: Type.TOptional<Type.TBoolean>;
139
+ supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
140
+ supportsReasoningEffort: Type.TOptional<Type.TBoolean>;
141
+ supportsUsageInStreaming: Type.TOptional<Type.TBoolean>;
142
+ maxTokensField: Type.TOptional<Type.TUnion<[Type.TLiteral<"max_completion_tokens">, Type.TLiteral<"max_tokens">]>>;
143
+ requiresToolResultName: Type.TOptional<Type.TBoolean>;
144
+ requiresAssistantAfterToolResult: Type.TOptional<Type.TBoolean>;
145
+ requiresThinkingAsText: Type.TOptional<Type.TBoolean>;
146
+ requiresReasoningContentOnAssistantMessages: Type.TOptional<Type.TBoolean>;
147
+ thinkingFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openrouter">, Type.TLiteral<"together">, Type.TLiteral<"deepseek">, Type.TLiteral<"zai">, Type.TLiteral<"qwen">, Type.TLiteral<"chat-template">, Type.TLiteral<"qwen-chat-template">, Type.TLiteral<"string-thinking">, Type.TLiteral<"ant-ling">]>>;
148
+ chatTemplateKwargs: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TUnion<[Type.TString, Type.TNumber, Type.TBoolean, Type.TNull]>, Type.TObject<{
149
+ $var: Type.TUnion<[Type.TLiteral<"thinking.enabled">, Type.TLiteral<"thinking.effort">]>;
150
+ omitWhenOff: Type.TOptional<Type.TBoolean>;
151
+ }>]>>>;
152
+ cacheControlFormat: Type.TOptional<Type.TLiteral<"anthropic">>;
153
+ openRouterRouting: Type.TOptional<Type.TObject<{
154
+ allow_fallbacks: Type.TOptional<Type.TBoolean>;
155
+ require_parameters: Type.TOptional<Type.TBoolean>;
156
+ data_collection: Type.TOptional<Type.TUnion<[Type.TLiteral<"deny">, Type.TLiteral<"allow">]>>;
157
+ zdr: Type.TOptional<Type.TBoolean>;
158
+ enforce_distillable_text: Type.TOptional<Type.TBoolean>;
159
+ order: Type.TOptional<Type.TArray<Type.TString>>;
160
+ only: Type.TOptional<Type.TArray<Type.TString>>;
161
+ ignore: Type.TOptional<Type.TArray<Type.TString>>;
162
+ quantizations: Type.TOptional<Type.TArray<Type.TString>>;
163
+ sort: Type.TOptional<Type.TUnion<[Type.TString, Type.TObject<{
164
+ by: Type.TOptional<Type.TString>;
165
+ partition: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
166
+ }>]>>;
167
+ max_price: Type.TOptional<Type.TObject<{
168
+ prompt: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
169
+ completion: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
170
+ image: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
171
+ audio: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
172
+ request: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
173
+ }>>;
174
+ preferred_min_throughput: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TObject<{
175
+ p50: Type.TOptional<Type.TNumber>;
176
+ p75: Type.TOptional<Type.TNumber>;
177
+ p90: Type.TOptional<Type.TNumber>;
178
+ p99: Type.TOptional<Type.TNumber>;
179
+ }>]>>;
180
+ preferred_max_latency: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TObject<{
181
+ p50: Type.TOptional<Type.TNumber>;
182
+ p75: Type.TOptional<Type.TNumber>;
183
+ p90: Type.TOptional<Type.TNumber>;
184
+ p99: Type.TOptional<Type.TNumber>;
185
+ }>]>>;
186
+ }>>;
187
+ vercelGatewayRouting: Type.TOptional<Type.TObject<{
188
+ only: Type.TOptional<Type.TArray<Type.TString>>;
189
+ order: Type.TOptional<Type.TArray<Type.TString>>;
190
+ }>>;
191
+ supportsStrictMode: Type.TOptional<Type.TBoolean>;
192
+ sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
193
+ deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
194
+ sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
195
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
196
+ }>, Type.TObject<{
197
+ supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
198
+ sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
199
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
200
+ supportsToolSearch: Type.TOptional<Type.TBoolean>;
201
+ }>, Type.TObject<{
202
+ supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
203
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
204
+ sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
205
+ supportsCacheControlOnTools: Type.TOptional<Type.TBoolean>;
206
+ forceAdaptiveThinking: Type.TOptional<Type.TBoolean>;
207
+ supportsToolReferences: Type.TOptional<Type.TBoolean>;
208
+ }>]>>;
209
+ }>;
210
+ declare const ProviderConfigSchema: Type.TObject<{
211
+ name: Type.TOptional<Type.TString>;
212
+ baseUrl: Type.TOptional<Type.TString>;
213
+ apiKey: Type.TOptional<Type.TString>;
214
+ api: Type.TOptional<Type.TString>;
215
+ oauth: Type.TOptional<Type.TLiteral<"radius">>;
216
+ headers: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
217
+ compat: Type.TOptional<Type.TUnion<[Type.TObject<{
218
+ supportsStore: Type.TOptional<Type.TBoolean>;
219
+ supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
220
+ supportsReasoningEffort: Type.TOptional<Type.TBoolean>;
221
+ supportsUsageInStreaming: Type.TOptional<Type.TBoolean>;
222
+ maxTokensField: Type.TOptional<Type.TUnion<[Type.TLiteral<"max_completion_tokens">, Type.TLiteral<"max_tokens">]>>;
223
+ requiresToolResultName: Type.TOptional<Type.TBoolean>;
224
+ requiresAssistantAfterToolResult: Type.TOptional<Type.TBoolean>;
225
+ requiresThinkingAsText: Type.TOptional<Type.TBoolean>;
226
+ requiresReasoningContentOnAssistantMessages: Type.TOptional<Type.TBoolean>;
227
+ thinkingFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openrouter">, Type.TLiteral<"together">, Type.TLiteral<"deepseek">, Type.TLiteral<"zai">, Type.TLiteral<"qwen">, Type.TLiteral<"chat-template">, Type.TLiteral<"qwen-chat-template">, Type.TLiteral<"string-thinking">, Type.TLiteral<"ant-ling">]>>;
228
+ chatTemplateKwargs: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TUnion<[Type.TString, Type.TNumber, Type.TBoolean, Type.TNull]>, Type.TObject<{
229
+ $var: Type.TUnion<[Type.TLiteral<"thinking.enabled">, Type.TLiteral<"thinking.effort">]>;
230
+ omitWhenOff: Type.TOptional<Type.TBoolean>;
231
+ }>]>>>;
232
+ cacheControlFormat: Type.TOptional<Type.TLiteral<"anthropic">>;
233
+ openRouterRouting: Type.TOptional<Type.TObject<{
234
+ allow_fallbacks: Type.TOptional<Type.TBoolean>;
235
+ require_parameters: Type.TOptional<Type.TBoolean>;
236
+ data_collection: Type.TOptional<Type.TUnion<[Type.TLiteral<"deny">, Type.TLiteral<"allow">]>>;
237
+ zdr: Type.TOptional<Type.TBoolean>;
238
+ enforce_distillable_text: Type.TOptional<Type.TBoolean>;
239
+ order: Type.TOptional<Type.TArray<Type.TString>>;
240
+ only: Type.TOptional<Type.TArray<Type.TString>>;
241
+ ignore: Type.TOptional<Type.TArray<Type.TString>>;
242
+ quantizations: Type.TOptional<Type.TArray<Type.TString>>;
243
+ sort: Type.TOptional<Type.TUnion<[Type.TString, Type.TObject<{
244
+ by: Type.TOptional<Type.TString>;
245
+ partition: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
246
+ }>]>>;
247
+ max_price: Type.TOptional<Type.TObject<{
248
+ prompt: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
249
+ completion: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
250
+ image: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
251
+ audio: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
252
+ request: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
253
+ }>>;
254
+ preferred_min_throughput: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TObject<{
255
+ p50: Type.TOptional<Type.TNumber>;
256
+ p75: Type.TOptional<Type.TNumber>;
257
+ p90: Type.TOptional<Type.TNumber>;
258
+ p99: Type.TOptional<Type.TNumber>;
259
+ }>]>>;
260
+ preferred_max_latency: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TObject<{
261
+ p50: Type.TOptional<Type.TNumber>;
262
+ p75: Type.TOptional<Type.TNumber>;
263
+ p90: Type.TOptional<Type.TNumber>;
264
+ p99: Type.TOptional<Type.TNumber>;
265
+ }>]>>;
266
+ }>>;
267
+ vercelGatewayRouting: Type.TOptional<Type.TObject<{
268
+ only: Type.TOptional<Type.TArray<Type.TString>>;
269
+ order: Type.TOptional<Type.TArray<Type.TString>>;
270
+ }>>;
271
+ supportsStrictMode: Type.TOptional<Type.TBoolean>;
272
+ sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
273
+ deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
274
+ sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
275
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
276
+ }>, Type.TObject<{
277
+ supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
278
+ sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
279
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
280
+ supportsToolSearch: Type.TOptional<Type.TBoolean>;
281
+ }>, Type.TObject<{
282
+ supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
283
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
284
+ sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
285
+ supportsCacheControlOnTools: Type.TOptional<Type.TBoolean>;
286
+ forceAdaptiveThinking: Type.TOptional<Type.TBoolean>;
287
+ supportsToolReferences: Type.TOptional<Type.TBoolean>;
288
+ }>]>>;
289
+ authHeader: Type.TOptional<Type.TBoolean>;
290
+ models: Type.TOptional<Type.TArray<Type.TObject<{
291
+ id: Type.TString;
292
+ name: Type.TOptional<Type.TString>;
293
+ api: Type.TOptional<Type.TString>;
294
+ baseUrl: Type.TOptional<Type.TString>;
295
+ reasoning: Type.TOptional<Type.TBoolean>;
296
+ thinkingLevelMap: Type.TOptional<Type.TObject<{
297
+ off: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
298
+ minimal: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
299
+ low: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
300
+ medium: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
301
+ high: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
302
+ xhigh: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
303
+ max: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
304
+ }>>;
305
+ input: Type.TOptional<Type.TArray<Type.TUnion<[Type.TLiteral<"text">, Type.TLiteral<"image">]>>>;
306
+ cost: Type.TOptional<Type.TObject<{
307
+ input: Type.TNumber;
308
+ output: Type.TNumber;
309
+ cacheRead: Type.TNumber;
310
+ cacheWrite: Type.TNumber;
311
+ tiers: Type.TOptional<Type.TArray<Type.TObject<{
312
+ input: Type.TNumber;
313
+ output: Type.TNumber;
314
+ cacheRead: Type.TNumber;
315
+ cacheWrite: Type.TNumber;
316
+ inputTokensAbove: Type.TNumber;
317
+ }>>>;
318
+ }>>;
319
+ contextWindow: Type.TOptional<Type.TNumber>;
320
+ maxTokens: Type.TOptional<Type.TNumber>;
321
+ headers: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
322
+ compat: Type.TOptional<Type.TUnion<[Type.TObject<{
323
+ supportsStore: Type.TOptional<Type.TBoolean>;
324
+ supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
325
+ supportsReasoningEffort: Type.TOptional<Type.TBoolean>;
326
+ supportsUsageInStreaming: Type.TOptional<Type.TBoolean>;
327
+ maxTokensField: Type.TOptional<Type.TUnion<[Type.TLiteral<"max_completion_tokens">, Type.TLiteral<"max_tokens">]>>;
328
+ requiresToolResultName: Type.TOptional<Type.TBoolean>;
329
+ requiresAssistantAfterToolResult: Type.TOptional<Type.TBoolean>;
330
+ requiresThinkingAsText: Type.TOptional<Type.TBoolean>;
331
+ requiresReasoningContentOnAssistantMessages: Type.TOptional<Type.TBoolean>;
332
+ thinkingFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openrouter">, Type.TLiteral<"together">, Type.TLiteral<"deepseek">, Type.TLiteral<"zai">, Type.TLiteral<"qwen">, Type.TLiteral<"chat-template">, Type.TLiteral<"qwen-chat-template">, Type.TLiteral<"string-thinking">, Type.TLiteral<"ant-ling">]>>;
333
+ chatTemplateKwargs: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TUnion<[Type.TString, Type.TNumber, Type.TBoolean, Type.TNull]>, Type.TObject<{
334
+ $var: Type.TUnion<[Type.TLiteral<"thinking.enabled">, Type.TLiteral<"thinking.effort">]>;
335
+ omitWhenOff: Type.TOptional<Type.TBoolean>;
336
+ }>]>>>;
337
+ cacheControlFormat: Type.TOptional<Type.TLiteral<"anthropic">>;
338
+ openRouterRouting: Type.TOptional<Type.TObject<{
339
+ allow_fallbacks: Type.TOptional<Type.TBoolean>;
340
+ require_parameters: Type.TOptional<Type.TBoolean>;
341
+ data_collection: Type.TOptional<Type.TUnion<[Type.TLiteral<"deny">, Type.TLiteral<"allow">]>>;
342
+ zdr: Type.TOptional<Type.TBoolean>;
343
+ enforce_distillable_text: Type.TOptional<Type.TBoolean>;
344
+ order: Type.TOptional<Type.TArray<Type.TString>>;
345
+ only: Type.TOptional<Type.TArray<Type.TString>>;
346
+ ignore: Type.TOptional<Type.TArray<Type.TString>>;
347
+ quantizations: Type.TOptional<Type.TArray<Type.TString>>;
348
+ sort: Type.TOptional<Type.TUnion<[Type.TString, Type.TObject<{
349
+ by: Type.TOptional<Type.TString>;
350
+ partition: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
351
+ }>]>>;
352
+ max_price: Type.TOptional<Type.TObject<{
353
+ prompt: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
354
+ completion: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
355
+ image: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
356
+ audio: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
357
+ request: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
358
+ }>>;
359
+ preferred_min_throughput: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TObject<{
360
+ p50: Type.TOptional<Type.TNumber>;
361
+ p75: Type.TOptional<Type.TNumber>;
362
+ p90: Type.TOptional<Type.TNumber>;
363
+ p99: Type.TOptional<Type.TNumber>;
364
+ }>]>>;
365
+ preferred_max_latency: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TObject<{
366
+ p50: Type.TOptional<Type.TNumber>;
367
+ p75: Type.TOptional<Type.TNumber>;
368
+ p90: Type.TOptional<Type.TNumber>;
369
+ p99: Type.TOptional<Type.TNumber>;
370
+ }>]>>;
371
+ }>>;
372
+ vercelGatewayRouting: Type.TOptional<Type.TObject<{
373
+ only: Type.TOptional<Type.TArray<Type.TString>>;
374
+ order: Type.TOptional<Type.TArray<Type.TString>>;
375
+ }>>;
376
+ supportsStrictMode: Type.TOptional<Type.TBoolean>;
377
+ sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
378
+ deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
379
+ sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
380
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
381
+ }>, Type.TObject<{
382
+ supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
383
+ sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
384
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
385
+ supportsToolSearch: Type.TOptional<Type.TBoolean>;
386
+ }>, Type.TObject<{
387
+ supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
388
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
389
+ sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
390
+ supportsCacheControlOnTools: Type.TOptional<Type.TBoolean>;
391
+ forceAdaptiveThinking: Type.TOptional<Type.TBoolean>;
392
+ supportsToolReferences: Type.TOptional<Type.TBoolean>;
393
+ }>]>>;
394
+ }>>>;
395
+ modelOverrides: Type.TOptional<Type.TRecord<"^.*$", Type.TObject<{
396
+ name: Type.TOptional<Type.TString>;
397
+ reasoning: Type.TOptional<Type.TBoolean>;
398
+ thinkingLevelMap: Type.TOptional<Type.TObject<{
399
+ off: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
400
+ minimal: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
401
+ low: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
402
+ medium: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
403
+ high: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
404
+ xhigh: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
405
+ max: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
406
+ }>>;
407
+ input: Type.TOptional<Type.TArray<Type.TUnion<[Type.TLiteral<"text">, Type.TLiteral<"image">]>>>;
408
+ cost: Type.TOptional<Type.TObject<{
409
+ input: Type.TOptional<Type.TNumber>;
410
+ output: Type.TOptional<Type.TNumber>;
411
+ cacheRead: Type.TOptional<Type.TNumber>;
412
+ cacheWrite: Type.TOptional<Type.TNumber>;
413
+ tiers: Type.TOptional<Type.TArray<Type.TObject<{
414
+ input: Type.TNumber;
415
+ output: Type.TNumber;
416
+ cacheRead: Type.TNumber;
417
+ cacheWrite: Type.TNumber;
418
+ inputTokensAbove: Type.TNumber;
419
+ }>>>;
420
+ }>>;
421
+ contextWindow: Type.TOptional<Type.TNumber>;
422
+ maxTokens: Type.TOptional<Type.TNumber>;
423
+ headers: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
424
+ compat: Type.TOptional<Type.TUnion<[Type.TObject<{
425
+ supportsStore: Type.TOptional<Type.TBoolean>;
426
+ supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
427
+ supportsReasoningEffort: Type.TOptional<Type.TBoolean>;
428
+ supportsUsageInStreaming: Type.TOptional<Type.TBoolean>;
429
+ maxTokensField: Type.TOptional<Type.TUnion<[Type.TLiteral<"max_completion_tokens">, Type.TLiteral<"max_tokens">]>>;
430
+ requiresToolResultName: Type.TOptional<Type.TBoolean>;
431
+ requiresAssistantAfterToolResult: Type.TOptional<Type.TBoolean>;
432
+ requiresThinkingAsText: Type.TOptional<Type.TBoolean>;
433
+ requiresReasoningContentOnAssistantMessages: Type.TOptional<Type.TBoolean>;
434
+ thinkingFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openrouter">, Type.TLiteral<"together">, Type.TLiteral<"deepseek">, Type.TLiteral<"zai">, Type.TLiteral<"qwen">, Type.TLiteral<"chat-template">, Type.TLiteral<"qwen-chat-template">, Type.TLiteral<"string-thinking">, Type.TLiteral<"ant-ling">]>>;
435
+ chatTemplateKwargs: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TUnion<[Type.TString, Type.TNumber, Type.TBoolean, Type.TNull]>, Type.TObject<{
436
+ $var: Type.TUnion<[Type.TLiteral<"thinking.enabled">, Type.TLiteral<"thinking.effort">]>;
437
+ omitWhenOff: Type.TOptional<Type.TBoolean>;
438
+ }>]>>>;
439
+ cacheControlFormat: Type.TOptional<Type.TLiteral<"anthropic">>;
440
+ openRouterRouting: Type.TOptional<Type.TObject<{
441
+ allow_fallbacks: Type.TOptional<Type.TBoolean>;
442
+ require_parameters: Type.TOptional<Type.TBoolean>;
443
+ data_collection: Type.TOptional<Type.TUnion<[Type.TLiteral<"deny">, Type.TLiteral<"allow">]>>;
444
+ zdr: Type.TOptional<Type.TBoolean>;
445
+ enforce_distillable_text: Type.TOptional<Type.TBoolean>;
446
+ order: Type.TOptional<Type.TArray<Type.TString>>;
447
+ only: Type.TOptional<Type.TArray<Type.TString>>;
448
+ ignore: Type.TOptional<Type.TArray<Type.TString>>;
449
+ quantizations: Type.TOptional<Type.TArray<Type.TString>>;
450
+ sort: Type.TOptional<Type.TUnion<[Type.TString, Type.TObject<{
451
+ by: Type.TOptional<Type.TString>;
452
+ partition: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
453
+ }>]>>;
454
+ max_price: Type.TOptional<Type.TObject<{
455
+ prompt: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
456
+ completion: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
457
+ image: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
458
+ audio: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
459
+ request: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
460
+ }>>;
461
+ preferred_min_throughput: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TObject<{
462
+ p50: Type.TOptional<Type.TNumber>;
463
+ p75: Type.TOptional<Type.TNumber>;
464
+ p90: Type.TOptional<Type.TNumber>;
465
+ p99: Type.TOptional<Type.TNumber>;
466
+ }>]>>;
467
+ preferred_max_latency: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TObject<{
468
+ p50: Type.TOptional<Type.TNumber>;
469
+ p75: Type.TOptional<Type.TNumber>;
470
+ p90: Type.TOptional<Type.TNumber>;
471
+ p99: Type.TOptional<Type.TNumber>;
472
+ }>]>>;
473
+ }>>;
474
+ vercelGatewayRouting: Type.TOptional<Type.TObject<{
475
+ only: Type.TOptional<Type.TArray<Type.TString>>;
476
+ order: Type.TOptional<Type.TArray<Type.TString>>;
477
+ }>>;
478
+ supportsStrictMode: Type.TOptional<Type.TBoolean>;
479
+ sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
480
+ deferredToolsMode: Type.TOptional<Type.TLiteral<"kimi">>;
481
+ sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
482
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
483
+ }>, Type.TObject<{
484
+ supportsDeveloperRole: Type.TOptional<Type.TBoolean>;
485
+ sessionAffinityFormat: Type.TOptional<Type.TUnion<[Type.TLiteral<"openai">, Type.TLiteral<"openai-nosession">, Type.TLiteral<"openrouter">]>>;
486
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
487
+ supportsToolSearch: Type.TOptional<Type.TBoolean>;
488
+ }>, Type.TObject<{
489
+ supportsEagerToolInputStreaming: Type.TOptional<Type.TBoolean>;
490
+ supportsLongCacheRetention: Type.TOptional<Type.TBoolean>;
491
+ sendSessionAffinityHeaders: Type.TOptional<Type.TBoolean>;
492
+ supportsCacheControlOnTools: Type.TOptional<Type.TBoolean>;
493
+ forceAdaptiveThinking: Type.TOptional<Type.TBoolean>;
494
+ supportsToolReferences: Type.TOptional<Type.TBoolean>;
495
+ }>]>>;
496
+ }>>>;
497
+ }>;
498
+ export type ModelsJsonModel = Static<typeof ModelDefinitionSchema>;
499
+ export type ModelsJsonModelOverride = Static<typeof ModelOverrideSchema>;
500
+ export type ModelsJsonProvider = Static<typeof ProviderConfigSchema>;
501
+ /** One immutable load of models.json. */
502
+ export declare class ModelConfig {
503
+ private readonly providers;
504
+ private readonly error;
505
+ private constructor();
506
+ static load(modelsJsonPath: string | undefined): Promise<ModelConfig>;
507
+ getProvider(providerId: string): ModelsJsonProvider | undefined;
508
+ getProviderIds(): readonly string[];
509
+ getError(): string | undefined;
510
+ }
511
+ export {};
512
+ //# sourceMappingURL=model-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-config.d.ts","sourceRoot":"","sources":["../../src/core/model-config.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAGxD,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAgJ5C,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAazB,CAAC;AAEH,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBvB,CAAC;AAEH,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWxB,CAAC;AAOH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnE,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACzE,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAsBrE,yCAAyC;AACzC,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IACpE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAE3C,OAAO,eAGN;IAED,OAAa,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAuC1E;IAED,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAE9D;IAED,cAAc,IAAI,SAAS,MAAM,EAAE,CAElC;IAED,QAAQ,IAAI,MAAM,GAAG,SAAS,CAE7B;CACD","sourcesContent":["/** Immutable, credential-blind models.json snapshot. */\n\nimport { readFile } from \"node:fs/promises\";\nimport { type Static, Type } from \"typebox\";\nimport { Compile } from \"typebox/compile\";\nimport type { TLocalizedValidationError } from \"typebox/error\";\nimport { stripJsonComments } from \"../utils/json.ts\";\nimport { normalizePath } from \"../utils/paths.ts\";\n\nconst PercentileCutoffsSchema = Type.Object({\n\tp50: Type.Optional(Type.Number()),\n\tp75: Type.Optional(Type.Number()),\n\tp90: Type.Optional(Type.Number()),\n\tp99: Type.Optional(Type.Number()),\n});\n\nconst OpenRouterRoutingSchema = Type.Object({\n\tallow_fallbacks: Type.Optional(Type.Boolean()),\n\trequire_parameters: Type.Optional(Type.Boolean()),\n\tdata_collection: Type.Optional(Type.Union([Type.Literal(\"deny\"), Type.Literal(\"allow\")])),\n\tzdr: Type.Optional(Type.Boolean()),\n\tenforce_distillable_text: Type.Optional(Type.Boolean()),\n\torder: Type.Optional(Type.Array(Type.String())),\n\tonly: Type.Optional(Type.Array(Type.String())),\n\tignore: Type.Optional(Type.Array(Type.String())),\n\tquantizations: Type.Optional(Type.Array(Type.String())),\n\tsort: Type.Optional(\n\t\tType.Union([\n\t\t\tType.String(),\n\t\t\tType.Object({\n\t\t\t\tby: Type.Optional(Type.String()),\n\t\t\t\tpartition: Type.Optional(Type.Union([Type.String(), Type.Null()])),\n\t\t\t}),\n\t\t]),\n\t),\n\tmax_price: Type.Optional(\n\t\tType.Object({\n\t\t\tprompt: Type.Optional(Type.Union([Type.Number(), Type.String()])),\n\t\t\tcompletion: Type.Optional(Type.Union([Type.Number(), Type.String()])),\n\t\t\timage: Type.Optional(Type.Union([Type.Number(), Type.String()])),\n\t\t\taudio: Type.Optional(Type.Union([Type.Number(), Type.String()])),\n\t\t\trequest: Type.Optional(Type.Union([Type.Number(), Type.String()])),\n\t\t}),\n\t),\n\tpreferred_min_throughput: Type.Optional(Type.Union([Type.Number(), PercentileCutoffsSchema])),\n\tpreferred_max_latency: Type.Optional(Type.Union([Type.Number(), PercentileCutoffsSchema])),\n});\n\nconst VercelGatewayRoutingSchema = Type.Object({\n\tonly: Type.Optional(Type.Array(Type.String())),\n\torder: Type.Optional(Type.Array(Type.String())),\n});\n\nconst ThinkingLevelMapValueSchema = Type.Union([Type.String(), Type.Null()]);\nconst ThinkingLevelMapSchema = Type.Object({\n\toff: Type.Optional(ThinkingLevelMapValueSchema),\n\tminimal: Type.Optional(ThinkingLevelMapValueSchema),\n\tlow: Type.Optional(ThinkingLevelMapValueSchema),\n\tmedium: Type.Optional(ThinkingLevelMapValueSchema),\n\thigh: Type.Optional(ThinkingLevelMapValueSchema),\n\txhigh: Type.Optional(ThinkingLevelMapValueSchema),\n\tmax: Type.Optional(ThinkingLevelMapValueSchema),\n});\n\nconst ChatTemplateKwargScalarSchema = Type.Union([Type.String(), Type.Number(), Type.Boolean(), Type.Null()]);\nconst ChatTemplateKwargVariableSchema = Type.Object({\n\t$var: Type.Union([Type.Literal(\"thinking.enabled\"), Type.Literal(\"thinking.effort\")]),\n\tomitWhenOff: Type.Optional(Type.Boolean()),\n});\nconst ChatTemplateKwargSchema = Type.Union([ChatTemplateKwargScalarSchema, ChatTemplateKwargVariableSchema]);\n\nconst OpenAICompletionsCompatSchema = Type.Object({\n\tsupportsStore: Type.Optional(Type.Boolean()),\n\tsupportsDeveloperRole: Type.Optional(Type.Boolean()),\n\tsupportsReasoningEffort: Type.Optional(Type.Boolean()),\n\tsupportsUsageInStreaming: Type.Optional(Type.Boolean()),\n\tmaxTokensField: Type.Optional(Type.Union([Type.Literal(\"max_completion_tokens\"), Type.Literal(\"max_tokens\")])),\n\trequiresToolResultName: Type.Optional(Type.Boolean()),\n\trequiresAssistantAfterToolResult: Type.Optional(Type.Boolean()),\n\trequiresThinkingAsText: Type.Optional(Type.Boolean()),\n\trequiresReasoningContentOnAssistantMessages: Type.Optional(Type.Boolean()),\n\tthinkingFormat: Type.Optional(\n\t\tType.Union([\n\t\t\tType.Literal(\"openai\"),\n\t\t\tType.Literal(\"openrouter\"),\n\t\t\tType.Literal(\"together\"),\n\t\t\tType.Literal(\"deepseek\"),\n\t\t\tType.Literal(\"zai\"),\n\t\t\tType.Literal(\"qwen\"),\n\t\t\tType.Literal(\"chat-template\"),\n\t\t\tType.Literal(\"qwen-chat-template\"),\n\t\t\tType.Literal(\"string-thinking\"),\n\t\t\tType.Literal(\"ant-ling\"),\n\t\t]),\n\t),\n\tchatTemplateKwargs: Type.Optional(Type.Record(Type.String(), ChatTemplateKwargSchema)),\n\tcacheControlFormat: Type.Optional(Type.Literal(\"anthropic\")),\n\topenRouterRouting: Type.Optional(OpenRouterRoutingSchema),\n\tvercelGatewayRouting: Type.Optional(VercelGatewayRoutingSchema),\n\tsupportsStrictMode: Type.Optional(Type.Boolean()),\n\tsendSessionAffinityHeaders: Type.Optional(Type.Boolean()),\n\tdeferredToolsMode: Type.Optional(Type.Literal(\"kimi\")),\n\tsessionAffinityFormat: Type.Optional(\n\t\tType.Union([Type.Literal(\"openai\"), Type.Literal(\"openai-nosession\"), Type.Literal(\"openrouter\")]),\n\t),\n\tsupportsLongCacheRetention: Type.Optional(Type.Boolean()),\n});\n\nconst OpenAIResponsesCompatSchema = Type.Object({\n\tsupportsDeveloperRole: Type.Optional(Type.Boolean()),\n\tsessionAffinityFormat: Type.Optional(\n\t\tType.Union([Type.Literal(\"openai\"), Type.Literal(\"openai-nosession\"), Type.Literal(\"openrouter\")]),\n\t),\n\tsupportsLongCacheRetention: Type.Optional(Type.Boolean()),\n\tsupportsToolSearch: Type.Optional(Type.Boolean()),\n});\n\nconst AnthropicMessagesCompatSchema = Type.Object({\n\tsupportsEagerToolInputStreaming: Type.Optional(Type.Boolean()),\n\tsupportsLongCacheRetention: Type.Optional(Type.Boolean()),\n\tsendSessionAffinityHeaders: Type.Optional(Type.Boolean()),\n\tsupportsCacheControlOnTools: Type.Optional(Type.Boolean()),\n\tforceAdaptiveThinking: Type.Optional(Type.Boolean()),\n\tsupportsToolReferences: Type.Optional(Type.Boolean()),\n});\n\nconst ProviderCompatSchema = Type.Union([\n\tOpenAICompletionsCompatSchema,\n\tOpenAIResponsesCompatSchema,\n\tAnthropicMessagesCompatSchema,\n]);\n\nconst ModelCostRatesSchema = {\n\tinput: Type.Number(),\n\toutput: Type.Number(),\n\tcacheRead: Type.Number(),\n\tcacheWrite: Type.Number(),\n};\nconst ModelCostTierSchema = Type.Object({\n\tinputTokensAbove: Type.Number(),\n\t...ModelCostRatesSchema,\n});\nconst ModelCostSchema = Type.Object({\n\t...ModelCostRatesSchema,\n\ttiers: Type.Optional(Type.Array(ModelCostTierSchema)),\n});\n\nconst ModelDefinitionSchema = Type.Object({\n\tid: Type.String({ minLength: 1 }),\n\tname: Type.Optional(Type.String({ minLength: 1 })),\n\tapi: Type.Optional(Type.String({ minLength: 1 })),\n\tbaseUrl: Type.Optional(Type.String({ minLength: 1 })),\n\treasoning: Type.Optional(Type.Boolean()),\n\tthinkingLevelMap: Type.Optional(ThinkingLevelMapSchema),\n\tinput: Type.Optional(Type.Array(Type.Union([Type.Literal(\"text\"), Type.Literal(\"image\")]))),\n\tcost: Type.Optional(ModelCostSchema),\n\tcontextWindow: Type.Optional(Type.Number()),\n\tmaxTokens: Type.Optional(Type.Number()),\n\theaders: Type.Optional(Type.Record(Type.String(), Type.String())),\n\tcompat: Type.Optional(ProviderCompatSchema),\n});\n\nconst ModelOverrideSchema = Type.Object({\n\tname: Type.Optional(Type.String({ minLength: 1 })),\n\treasoning: Type.Optional(Type.Boolean()),\n\tthinkingLevelMap: Type.Optional(ThinkingLevelMapSchema),\n\tinput: Type.Optional(Type.Array(Type.Union([Type.Literal(\"text\"), Type.Literal(\"image\")]))),\n\tcost: Type.Optional(\n\t\tType.Object({\n\t\t\tinput: Type.Optional(Type.Number()),\n\t\t\toutput: Type.Optional(Type.Number()),\n\t\t\tcacheRead: Type.Optional(Type.Number()),\n\t\t\tcacheWrite: Type.Optional(Type.Number()),\n\t\t\ttiers: Type.Optional(Type.Array(ModelCostTierSchema)),\n\t\t}),\n\t),\n\tcontextWindow: Type.Optional(Type.Number()),\n\tmaxTokens: Type.Optional(Type.Number()),\n\theaders: Type.Optional(Type.Record(Type.String(), Type.String())),\n\tcompat: Type.Optional(ProviderCompatSchema),\n});\n\nconst ProviderConfigSchema = Type.Object({\n\tname: Type.Optional(Type.String({ minLength: 1 })),\n\tbaseUrl: Type.Optional(Type.String({ minLength: 1 })),\n\tapiKey: Type.Optional(Type.String({ minLength: 1 })),\n\tapi: Type.Optional(Type.String({ minLength: 1 })),\n\toauth: Type.Optional(Type.Literal(\"radius\")),\n\theaders: Type.Optional(Type.Record(Type.String(), Type.String())),\n\tcompat: Type.Optional(ProviderCompatSchema),\n\tauthHeader: Type.Optional(Type.Boolean()),\n\tmodels: Type.Optional(Type.Array(ModelDefinitionSchema)),\n\tmodelOverrides: Type.Optional(Type.Record(Type.String(), ModelOverrideSchema)),\n});\n\nconst ModelsConfigSchema = Type.Object({\n\tproviders: Type.Record(Type.String(), ProviderConfigSchema),\n});\nconst validateModelsConfig = Compile(ModelsConfigSchema);\n\nexport type ModelsJsonModel = Static<typeof ModelDefinitionSchema>;\nexport type ModelsJsonModelOverride = Static<typeof ModelOverrideSchema>;\nexport type ModelsJsonProvider = Static<typeof ProviderConfigSchema>;\ntype ModelsJson = Static<typeof ModelsConfigSchema>;\n\nfunction formatValidationPath(error: TLocalizedValidationError): string {\n\tif (error.keyword === \"required\") {\n\t\tconst requiredProperties = (error.params as { requiredProperties?: string[] }).requiredProperties;\n\t\tconst requiredProperty = requiredProperties?.[0];\n\t\tif (requiredProperty) {\n\t\t\tconst basePath = error.instancePath.replace(/^\\//, \"\").replace(/\\//g, \".\");\n\t\t\treturn basePath ? `${basePath}.${requiredProperty}` : requiredProperty;\n\t\t}\n\t}\n\tconst path = error.instancePath.replace(/^\\//, \"\").replace(/\\//g, \".\");\n\treturn path || \"root\";\n}\n\nfunction deepFreeze<T>(value: T): T {\n\tif (typeof value !== \"object\" || value === null || Object.isFrozen(value)) return value;\n\tfor (const child of Object.values(value)) deepFreeze(child);\n\treturn Object.freeze(value);\n}\n\n/** One immutable load of models.json. */\nexport class ModelConfig {\n\tprivate readonly providers: ReadonlyMap<string, ModelsJsonProvider>;\n\tprivate readonly error: string | undefined;\n\n\tprivate constructor(providers: ReadonlyMap<string, ModelsJsonProvider>, error?: string) {\n\t\tthis.providers = providers;\n\t\tthis.error = error;\n\t}\n\n\tstatic async load(modelsJsonPath: string | undefined): Promise<ModelConfig> {\n\t\tif (!modelsJsonPath) return new ModelConfig(new Map());\n\t\tconst path = normalizePath(modelsJsonPath);\n\t\tlet content: string;\n\t\ttry {\n\t\t\tcontent = await readFile(path, \"utf-8\");\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") return new ModelConfig(new Map());\n\t\t\treturn new ModelConfig(\n\t\t\t\tnew Map(),\n\t\t\t\t`Failed to load models.json: ${error instanceof Error ? error.message : error}\\n\\nFile: ${path}`,\n\t\t\t);\n\t\t}\n\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(stripJsonComments(content));\n\t\t} catch (error) {\n\t\t\treturn new ModelConfig(\n\t\t\t\tnew Map(),\n\t\t\t\t`Failed to parse models.json: ${error instanceof Error ? error.message : error}\\n\\nFile: ${path}`,\n\t\t\t);\n\t\t}\n\n\t\tif (!validateModelsConfig.Check(parsed)) {\n\t\t\tconst errors =\n\t\t\t\tvalidateModelsConfig\n\t\t\t\t\t.Errors(parsed)\n\t\t\t\t\t.map((error) => ` - ${formatValidationPath(error)}: ${error.message}`)\n\t\t\t\t\t.join(\"\\n\") || \"Unknown schema error\";\n\t\t\treturn new ModelConfig(new Map(), `Invalid models.json schema:\\n${errors}\\n\\nFile: ${path}`);\n\t\t}\n\n\t\tconst config = parsed as ModelsJson;\n\t\tconst providers = new Map<string, ModelsJsonProvider>();\n\t\tfor (const [providerId, provider] of Object.entries(config.providers)) {\n\t\t\tproviders.set(providerId, deepFreeze(structuredClone(provider)));\n\t\t}\n\t\treturn new ModelConfig(providers);\n\t}\n\n\tgetProvider(providerId: string): ModelsJsonProvider | undefined {\n\t\treturn this.providers.get(providerId);\n\t}\n\n\tgetProviderIds(): readonly string[] {\n\t\treturn [...this.providers.keys()];\n\t}\n\n\tgetError(): string | undefined {\n\t\treturn this.error;\n\t}\n}\n"]}