notdiamond 2.0.0-rc2 → 2.0.0-rc20

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 (147) hide show
  1. package/CHANGELOG.md +185 -0
  2. package/LICENSE +1 -1
  3. package/README.md +261 -168
  4. package/client.d.mts +26 -43
  5. package/client.d.mts.map +1 -1
  6. package/client.d.ts +26 -43
  7. package/client.d.ts.map +1 -1
  8. package/client.js +49 -68
  9. package/client.js.map +1 -1
  10. package/client.mjs +47 -66
  11. package/client.mjs.map +1 -1
  12. package/core/api-promise.d.mts +2 -2
  13. package/core/api-promise.d.ts +2 -2
  14. package/core/error.d.mts +2 -2
  15. package/core/error.d.ts +2 -2
  16. package/core/error.js +4 -4
  17. package/core/error.mjs +2 -2
  18. package/core/resource.d.mts +3 -3
  19. package/core/resource.d.ts +3 -3
  20. package/index.d.mts +3 -3
  21. package/index.d.ts +3 -3
  22. package/index.js +4 -4
  23. package/index.mjs +3 -3
  24. package/internal/parse.d.mts +2 -2
  25. package/internal/parse.d.ts +2 -2
  26. package/internal/shims.js +1 -1
  27. package/internal/shims.mjs +1 -1
  28. package/internal/uploads.d.mts +4 -4
  29. package/internal/uploads.d.ts +4 -4
  30. package/internal/utils/base64.js +2 -2
  31. package/internal/utils/base64.mjs +3 -3
  32. package/internal/utils/env.d.mts.map +1 -1
  33. package/internal/utils/env.d.ts.map +1 -1
  34. package/internal/utils/env.js +4 -2
  35. package/internal/utils/env.js.map +1 -1
  36. package/internal/utils/env.mjs +4 -2
  37. package/internal/utils/env.mjs.map +1 -1
  38. package/internal/utils/log.d.mts +3 -3
  39. package/internal/utils/log.d.ts +3 -3
  40. package/internal/utils/path.js +1 -1
  41. package/internal/utils/path.mjs +2 -2
  42. package/internal/utils/values.js +5 -5
  43. package/internal/utils/values.mjs +6 -6
  44. package/package.json +11 -12
  45. package/resources/custom-router.d.mts +145 -0
  46. package/resources/custom-router.d.mts.map +1 -0
  47. package/resources/custom-router.d.ts +145 -0
  48. package/resources/custom-router.d.ts.map +1 -0
  49. package/resources/custom-router.js +83 -0
  50. package/resources/custom-router.js.map +1 -0
  51. package/resources/custom-router.mjs +79 -0
  52. package/resources/custom-router.mjs.map +1 -0
  53. package/resources/index.d.mts +5 -6
  54. package/resources/index.d.mts.map +1 -1
  55. package/resources/index.d.ts +5 -6
  56. package/resources/index.d.ts.map +1 -1
  57. package/resources/index.js +5 -7
  58. package/resources/index.js.map +1 -1
  59. package/resources/index.mjs +2 -3
  60. package/resources/index.mjs.map +1 -1
  61. package/resources/model-router.d.mts +194 -0
  62. package/resources/model-router.d.mts.map +1 -0
  63. package/resources/model-router.d.ts +194 -0
  64. package/resources/model-router.d.ts.map +1 -0
  65. package/resources/model-router.js +68 -0
  66. package/resources/model-router.js.map +1 -0
  67. package/resources/model-router.mjs +64 -0
  68. package/resources/model-router.mjs.map +1 -0
  69. package/resources/models.d.mts +50 -25
  70. package/resources/models.d.mts.map +1 -1
  71. package/resources/models.d.ts +50 -25
  72. package/resources/models.d.ts.map +1 -1
  73. package/resources/models.js +5 -0
  74. package/resources/models.js.map +1 -1
  75. package/resources/models.mjs +5 -0
  76. package/resources/models.mjs.map +1 -1
  77. package/resources/preferences.d.mts +37 -54
  78. package/resources/preferences.d.mts.map +1 -1
  79. package/resources/preferences.d.ts +37 -54
  80. package/resources/preferences.d.ts.map +1 -1
  81. package/resources/preferences.js +17 -42
  82. package/resources/preferences.js.map +1 -1
  83. package/resources/preferences.mjs +17 -42
  84. package/resources/preferences.mjs.map +1 -1
  85. package/resources/prompt-adaptation.d.mts +340 -249
  86. package/resources/prompt-adaptation.d.mts.map +1 -1
  87. package/resources/prompt-adaptation.d.ts +340 -249
  88. package/resources/prompt-adaptation.d.ts.map +1 -1
  89. package/resources/prompt-adaptation.js +36 -79
  90. package/resources/prompt-adaptation.js.map +1 -1
  91. package/resources/prompt-adaptation.mjs +36 -79
  92. package/resources/prompt-adaptation.mjs.map +1 -1
  93. package/src/client.ts +72 -128
  94. package/src/core/api-promise.ts +4 -4
  95. package/src/core/error.ts +2 -2
  96. package/src/core/resource.ts +3 -3
  97. package/src/index.ts +3 -3
  98. package/src/internal/parse.ts +2 -2
  99. package/src/internal/shims.ts +1 -1
  100. package/src/internal/uploads.ts +5 -5
  101. package/src/internal/utils/base64.ts +3 -3
  102. package/src/internal/utils/env.ts +4 -2
  103. package/src/internal/utils/log.ts +3 -3
  104. package/src/internal/utils/path.ts +2 -2
  105. package/src/internal/utils/values.ts +6 -6
  106. package/src/resources/custom-router.ts +168 -0
  107. package/src/resources/index.ts +20 -32
  108. package/src/resources/model-router.ts +222 -0
  109. package/src/resources/models.ts +55 -32
  110. package/src/resources/preferences.ts +43 -83
  111. package/src/resources/prompt-adaptation.ts +358 -300
  112. package/src/version.ts +1 -1
  113. package/version.d.mts +1 -1
  114. package/version.d.mts.map +1 -1
  115. package/version.d.ts +1 -1
  116. package/version.d.ts.map +1 -1
  117. package/version.js +1 -1
  118. package/version.js.map +1 -1
  119. package/version.mjs +1 -1
  120. package/version.mjs.map +1 -1
  121. package/resources/admin.d.mts +0 -4
  122. package/resources/admin.d.mts.map +0 -1
  123. package/resources/admin.d.ts +0 -4
  124. package/resources/admin.d.ts.map +0 -1
  125. package/resources/admin.js +0 -9
  126. package/resources/admin.js.map +0 -1
  127. package/resources/admin.mjs +0 -5
  128. package/resources/admin.mjs.map +0 -1
  129. package/resources/report.d.mts +0 -245
  130. package/resources/report.d.mts.map +0 -1
  131. package/resources/report.d.ts +0 -245
  132. package/resources/report.d.ts.map +0 -1
  133. package/resources/report.js +0 -86
  134. package/resources/report.js.map +0 -1
  135. package/resources/report.mjs +0 -82
  136. package/resources/report.mjs.map +0 -1
  137. package/resources/routing.d.mts +0 -391
  138. package/resources/routing.d.mts.map +0 -1
  139. package/resources/routing.d.ts +0 -391
  140. package/resources/routing.d.ts.map +0 -1
  141. package/resources/routing.js +0 -163
  142. package/resources/routing.js.map +0 -1
  143. package/resources/routing.mjs +0 -159
  144. package/resources/routing.mjs.map +0 -1
  145. package/src/resources/admin.ts +0 -5
  146. package/src/resources/report.ts +0 -300
  147. package/src/resources/routing.ts +0 -476
@@ -0,0 +1,168 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ import { APIResource } from '../core/resource';
4
+ import { APIPromise } from '../core/api-promise';
5
+ import { type Uploadable } from '../core/uploads';
6
+ import { RequestOptions } from '../internal/request-options';
7
+ import { multipartFormRequestOptions } from '../internal/uploads';
8
+
9
+ export class CustomRouter extends APIResource {
10
+ /**
11
+ * Train a custom router on your evaluation data to optimize routing for your
12
+ * specific use case.
13
+ *
14
+ * This endpoint allows you to train a domain-specific router that learns which
15
+ * models perform best for different types of queries in your application. The
16
+ * router analyzes your evaluation dataset, clusters similar queries, and learns
17
+ * model performance patterns.
18
+ *
19
+ * **Training Process:**
20
+ *
21
+ * 1. Upload a CSV file with your evaluation data
22
+ * 2. Specify which models to route between
23
+ * 3. Define the evaluation metric (score column)
24
+ * 4. The system trains asynchronously and returns a preference_id
25
+ * 5. Use the preference_id in model_select() calls once training completes
26
+ *
27
+ * **Dataset Requirements:**
28
+ *
29
+ * - Format: CSV file
30
+ * - Minimum samples: 25 (more is better for accuracy)
31
+ * - Required columns:
32
+ * - Prompt column (specified in prompt_column parameter)
33
+ * - For each model: `{provider}/{model}/score` and `{provider}/{model}/response`
34
+ *
35
+ * **Example CSV structure:**
36
+ *
37
+ * ```
38
+ * prompt,openai/gpt-4o/score,openai/gpt-4o/response,anthropic/claude-sonnet-4-5-20250929/score,anthropic/claude-sonnet-4-5-20250929/response
39
+ * "Explain quantum computing",0.95,"Quantum computing uses...",0.87,"Quantum computers leverage..."
40
+ * "Write a Python function",0.82,"def my_function()...",0.91,"Here's a Python function..."
41
+ * ```
42
+ *
43
+ * **Model Selection:**
44
+ *
45
+ * - Specify standard models: `{"provider": "openai", "model": "gpt-4o"}`
46
+ * - Or custom models with pricing:
47
+ * `{"provider": "custom", "model": "my-model", "is_custom": true, "input_price": 10.0, "output_price": 30.0, "context_length": 8192, "latency": 1.5}`
48
+ *
49
+ * **Training Time:**
50
+ *
51
+ * - Training is asynchronous and typically takes 5-15 minutes
52
+ * - Larger datasets or more models take longer
53
+ * - You'll receive a preference_id immediately
54
+ * - Check training status by attempting to use the preference_id in model_select()
55
+ *
56
+ * **Best Practices:**
57
+ *
58
+ * 1. Use diverse, representative examples from your production workload
59
+ * 2. Include at least 50-100 samples for best results
60
+ * 3. Ensure consistent evaluation metrics across all models
61
+ * 4. Use the same models you plan to route between in production
62
+ *
63
+ * **Related Documentation:** See
64
+ * https://docs.notdiamond.ai/docs/adapting-prompts-to-new-models for detailed
65
+ * guide.
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * const response =
70
+ * await client.customRouter.trainCustomRouter({
71
+ * dataset_file: fs.createReadStream('path/to/file'),
72
+ * language: 'english',
73
+ * llm_providers:
74
+ * '[{"provider": "openai", "model": "gpt-4o"}, {"provider": "anthropic", "model": "claude-sonnet-4-5-20250929"}]',
75
+ * maximize: true,
76
+ * prompt_column: 'prompt',
77
+ * });
78
+ * ```
79
+ */
80
+ trainCustomRouter(
81
+ body: CustomRouterTrainCustomRouterParams,
82
+ options?: RequestOptions,
83
+ ): APIPromise<CustomRouterTrainCustomRouterResponse> {
84
+ return this._client.post(
85
+ '/v2/pzn/trainCustomRouter',
86
+ multipartFormRequestOptions({ body, ...options }, this._client),
87
+ );
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Response model for POST /v2/pzn/trainCustomRouter endpoint.
93
+ *
94
+ * Returned immediately after submitting a custom router training request. The
95
+ * training process runs asynchronously (typically 5-15 minutes), so use the
96
+ * returned preference_id to make routing calls once training completes.
97
+ *
98
+ * **Next steps:**
99
+ *
100
+ * 1. Store the preference_id
101
+ * 2. Wait for training to complete (typically 5-15 minutes)
102
+ * 3. Use this preference_id in POST /v2/modelRouter/modelSelect requests
103
+ * 4. The router will use your custom-trained model to make routing decisions
104
+ *
105
+ * **How to use the preference_id:**
106
+ *
107
+ * - Include it in the 'preference_id' field of model_select() calls
108
+ * - The system automatically uses your custom router once training is complete
109
+ * - No need to poll status - you can start using it immediately (will use default
110
+ * until ready)
111
+ */
112
+ export interface CustomRouterTrainCustomRouterResponse {
113
+ /**
114
+ * Unique identifier for the custom router. Use this in model_select() calls to
115
+ * enable routing with your custom-trained router
116
+ */
117
+ preference_id: string;
118
+ }
119
+
120
+ export interface CustomRouterTrainCustomRouterParams {
121
+ /**
122
+ * CSV file containing evaluation data with prompt column and score/response
123
+ * columns for each model
124
+ */
125
+ dataset_file: Uploadable;
126
+
127
+ /**
128
+ * Language of the evaluation data. Use 'english' for English-only data or
129
+ * 'multilingual' for multi-language support
130
+ */
131
+ language: string;
132
+
133
+ /**
134
+ * JSON string array of LLM providers to train the router on. Format:
135
+ * '[{"provider": "openai", "model": "gpt-4o"}, {"provider": "anthropic", "model":
136
+ * "claude-sonnet-4-5-20250929"}]'
137
+ */
138
+ llm_providers: string;
139
+
140
+ /**
141
+ * Whether higher scores are better. Set to true if higher scores indicate better
142
+ * performance, false otherwise
143
+ */
144
+ maximize: boolean;
145
+
146
+ /**
147
+ * Name of the column in the CSV file that contains the prompts
148
+ */
149
+ prompt_column: string;
150
+
151
+ /**
152
+ * Whether to override an existing custom router for this preference_id
153
+ */
154
+ override?: boolean | null;
155
+
156
+ /**
157
+ * Optional preference ID to update an existing router. If not provided, a new
158
+ * preference will be created
159
+ */
160
+ preference_id?: string | null;
161
+ }
162
+
163
+ export declare namespace CustomRouter {
164
+ export {
165
+ type CustomRouterTrainCustomRouterResponse as CustomRouterTrainCustomRouterResponse,
166
+ type CustomRouterTrainCustomRouterParams as CustomRouterTrainCustomRouterParams,
167
+ };
168
+ }
@@ -1,44 +1,32 @@
1
1
  // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
- export { Admin } from './admin';
4
- export { Models, type ModelListResponse, type ModelListParams } from './models';
3
+ export {
4
+ CustomRouter,
5
+ type CustomRouterTrainCustomRouterResponse,
6
+ type CustomRouterTrainCustomRouterParams,
7
+ } from './custom-router';
8
+ export {
9
+ ModelRouter,
10
+ type ModelRouterSelectModelResponse,
11
+ type ModelRouterSelectModelParams,
12
+ } from './model-router';
13
+ export { Models, type Model, type ModelListResponse, type ModelListParams } from './models';
5
14
  export {
6
15
  Preferences,
7
- type PreferenceRetrieveResponse,
8
- type PreferenceCreateUserPreferenceResponse,
9
- type PreferenceDeleteUserPreferenceResponse,
10
- type PreferenceUpdateUserPreferenceResponse,
11
- type PreferenceRetrieveParams,
12
- type PreferenceCreateUserPreferenceParams,
13
- type PreferenceUpdateUserPreferenceParams,
16
+ type PreferenceCreateResponse,
17
+ type PreferenceUpdateResponse,
18
+ type PreferenceDeleteResponse,
19
+ type PreferenceCreateParams,
20
+ type PreferenceUpdateParams,
14
21
  } from './preferences';
15
22
  export {
16
23
  PromptAdaptation,
17
- type AdaptationRunResults,
24
+ type GoldenRecord,
18
25
  type JobStatus,
26
+ type RequestProvider,
19
27
  type PromptAdaptationAdaptResponse,
20
- type PromptAdaptationGetAdaptRunsResponse,
28
+ type PromptAdaptationGetAdaptResultsResponse,
21
29
  type PromptAdaptationGetAdaptStatusResponse,
22
- type PromptAdaptationRetrieveCostsResponse,
30
+ type PromptAdaptationGetCostResponse,
23
31
  type PromptAdaptationAdaptParams,
24
- type PromptAdaptationGetAdaptRunResultsParams,
25
- type PromptAdaptationGetAdaptRunsParams,
26
32
  } from './prompt-adaptation';
27
- export {
28
- Report,
29
- type ReportEvaluateHallucinationResponse,
30
- type ReportLatencyResponse,
31
- type ReportSubmitFeedbackResponse,
32
- type ReportEvaluateHallucinationParams,
33
- type ReportLatencyParams,
34
- type ReportSubmitFeedbackParams,
35
- } from './report';
36
- export {
37
- Routing,
38
- type RoutingCreateSurveyResponseResponse,
39
- type RoutingSelectModelResponse,
40
- type RoutingTrainCustomRouterResponse,
41
- type RoutingCreateSurveyResponseParams,
42
- type RoutingSelectModelParams,
43
- type RoutingTrainCustomRouterParams,
44
- } from './routing';
@@ -0,0 +1,222 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ import { APIResource } from '../core/resource';
4
+ import * as PromptAdaptationAPI from './prompt-adaptation';
5
+ import { APIPromise } from '../core/api-promise';
6
+ import { RequestOptions } from '../internal/request-options';
7
+
8
+ export class ModelRouter extends APIResource {
9
+ /**
10
+ * Select the optimal LLM to handle your query based on Not Diamond's routing
11
+ * algorithm.
12
+ *
13
+ * This endpoint analyzes your messages and returns the best-suited model from your
14
+ * specified models. The router considers factors like query complexity, model
15
+ * capabilities, cost, and latency based on your preferences.
16
+ *
17
+ * **Key Features:**
18
+ *
19
+ * - Intelligent routing across multiple LLM providers
20
+ * - Support for custom routers trained on your evaluation data
21
+ * - Optional cost/latency optimization
22
+ * - Function calling support for compatible models
23
+ *
24
+ * **Usage:**
25
+ *
26
+ * 1. Pass your messages in OpenAI format (array of objects with 'role' and
27
+ * 'content')
28
+ * 2. Specify which LLM providers you want to route between
29
+ * 3. Optionally provide a preference_id to use a custom router that you've trained
30
+ * 4. Receive a recommended model and session_id
31
+ * 5. Use the session_id to submit feedback and improve routing
32
+ *
33
+ * **Related Endpoints:**
34
+ *
35
+ * - `POST /v2/preferences/userPreferenceCreate` - Create a preference ID for
36
+ * personalized routing
37
+ * - `POST /v2/pzn/trainCustomRouter` - Train a custom router on your evaluation
38
+ * data
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * const response = await client.modelRouter.selectModel({
43
+ * llm_providers: [
44
+ * { provider: 'openai', model: 'gpt-4o' },
45
+ * {
46
+ * provider: 'anthropic',
47
+ * model: 'claude-sonnet-4-5-20250929',
48
+ * },
49
+ * { provider: 'google', model: 'gemini-2.5-flash' },
50
+ * ],
51
+ * messages: [
52
+ * {
53
+ * role: 'system',
54
+ * content: 'You are a helpful assistant.',
55
+ * },
56
+ * {
57
+ * role: 'user',
58
+ * content: 'Explain quantum computing in simple terms',
59
+ * },
60
+ * ],
61
+ * });
62
+ * ```
63
+ */
64
+ selectModel(
65
+ params: ModelRouterSelectModelParams,
66
+ options?: RequestOptions,
67
+ ): APIPromise<ModelRouterSelectModelResponse> {
68
+ const { type, ...body } = params;
69
+ return this._client.post('/v2/modelRouter/modelSelect', { query: { type }, body, ...options });
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Response from model selection endpoint.
75
+ */
76
+ export interface ModelRouterSelectModelResponse {
77
+ /**
78
+ * List containing the selected provider
79
+ */
80
+ providers: Array<ModelRouterSelectModelResponse.Provider>;
81
+
82
+ /**
83
+ * Unique session ID for this routing decision
84
+ */
85
+ session_id: string;
86
+ }
87
+
88
+ export namespace ModelRouterSelectModelResponse {
89
+ /**
90
+ * Selected LLM provider information from model selection endpoints.
91
+ *
92
+ * Part of ModelSelectResponse. Contains the provider and model that Not Diamond's
93
+ * routing algorithm selected as optimal for your query. Use these values to make
94
+ * your LLM API call to the recommended model.
95
+ */
96
+ export interface Provider {
97
+ /**
98
+ * Model identifier for the selected model (e.g., 'gpt-4o',
99
+ * 'claude-3-opus-20240229')
100
+ */
101
+ model: string;
102
+
103
+ /**
104
+ * Provider name for the selected model (e.g., 'openai', 'anthropic', 'google')
105
+ */
106
+ provider: string;
107
+ }
108
+ }
109
+
110
+ export interface ModelRouterSelectModelParams {
111
+ /**
112
+ * Body param: List of LLM providers to route between. Specify at least one
113
+ * provider in format {provider, model}
114
+ */
115
+ llm_providers: Array<PromptAdaptationAPI.RequestProvider | ModelRouterSelectModelParams.OpenRouterProvider>;
116
+
117
+ /**
118
+ * Body param: Array of message objects in OpenAI format (with 'role' and 'content'
119
+ * keys)
120
+ */
121
+ messages: Array<{ [key: string]: string | Array<unknown> }> | string;
122
+
123
+ /**
124
+ * Query param: Optional format type. Use 'openrouter' to accept and return
125
+ * OpenRouter-format model identifiers
126
+ */
127
+ type?: string | null;
128
+
129
+ /**
130
+ * Body param: Whether to hash message content for privacy
131
+ */
132
+ hash_content?: boolean;
133
+
134
+ /**
135
+ * Body param: Maximum number of models to consider for routing. If not specified,
136
+ * considers all provided models
137
+ */
138
+ max_model_depth?: number | null;
139
+
140
+ /**
141
+ * Body param: Optimization metric for model selection
142
+ */
143
+ metric?: string;
144
+
145
+ /**
146
+ * Body param: Preference ID for personalized routing. Create one via POST
147
+ * /v2/preferences/userPreferenceCreate
148
+ */
149
+ preference_id?: string | null;
150
+
151
+ /**
152
+ * Body param: Previous session ID to link related requests
153
+ */
154
+ previous_session?: string | null;
155
+
156
+ /**
157
+ * Body param: OpenAI-format function calling tools
158
+ */
159
+ tools?: Array<{ [key: string]: unknown }> | null;
160
+
161
+ /**
162
+ * Body param: Optimization tradeoff strategy. Use 'cost' to prioritize cost
163
+ * savings or 'latency' to prioritize speed
164
+ */
165
+ tradeoff?: string | null;
166
+ }
167
+
168
+ export namespace ModelRouterSelectModelParams {
169
+ /**
170
+ * Model for specifying an LLM provider using OpenRouter format.
171
+ *
172
+ * Used in model routing requests when you want to specify providers using the
173
+ * OpenRouter naming convention (combined 'provider/model' format). This is an
174
+ * alternative to the standard RequestProvider which uses separate provider and
175
+ * model fields.
176
+ *
177
+ * **When to use:**
178
+ *
179
+ * - When working with OpenRouter-compatible systems
180
+ * - When you prefer the unified 'provider/model' format
181
+ * - For models accessed via OpenRouter proxy
182
+ */
183
+ export interface OpenRouterProvider {
184
+ /**
185
+ * OpenRouter model identifier in 'provider/model' format (e.g., 'openai/gpt-4o',
186
+ * 'anthropic/claude-sonnet-4-5-20250929')
187
+ */
188
+ model: string;
189
+
190
+ /**
191
+ * Maximum context length for the model (required for custom models)
192
+ */
193
+ context_length?: number | null;
194
+
195
+ /**
196
+ * Input token price per million tokens in USD (required for custom models)
197
+ */
198
+ input_price?: number | null;
199
+
200
+ /**
201
+ * Whether this is a custom model not in Not Diamond's supported model list
202
+ */
203
+ is_custom?: boolean;
204
+
205
+ /**
206
+ * Average latency in seconds (required for custom models)
207
+ */
208
+ latency?: number | null;
209
+
210
+ /**
211
+ * Output token price per million tokens in USD (required for custom models)
212
+ */
213
+ output_price?: number | null;
214
+ }
215
+ }
216
+
217
+ export declare namespace ModelRouter {
218
+ export {
219
+ type ModelRouterSelectModelResponse as ModelRouterSelectModelResponse,
220
+ type ModelRouterSelectModelParams as ModelRouterSelectModelParams,
221
+ };
222
+ }
@@ -36,6 +36,11 @@ export class Models extends APIResource {
36
36
  * **Caching:**
37
37
  *
38
38
  * - Response is cacheable for 1 hour (model list rarely changes)
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * const models = await client.models.list();
43
+ * ```
39
44
  */
40
45
  list(
41
46
  query: ModelListParams | null | undefined = {},
@@ -46,50 +51,64 @@ export class Models extends APIResource {
46
51
  }
47
52
 
48
53
  /**
49
- * Response for models list endpoint.
54
+ * Response model for a single LLM model from GET /v2/models endpoint.
55
+ *
56
+ * Contains metadata about a supported text generation model including pricing,
57
+ * context limits, and availability information.
50
58
  */
51
- export interface ModelListResponse {
52
- deprecated_models: Array<ModelListResponse.DeprecatedModel>;
53
-
54
- models: Array<ModelListResponse.Model>;
55
-
56
- total: number;
57
- }
58
-
59
- export namespace ModelListResponse {
59
+ export interface Model {
60
60
  /**
61
- * Response model for a single LLM provider.
61
+ * Maximum context window size in tokens
62
62
  */
63
- export interface DeprecatedModel {
64
- context_length: number;
65
-
66
- input_price: number;
63
+ context_length: number;
67
64
 
68
- model: string;
69
-
70
- output_price: number;
71
-
72
- provider: string;
65
+ /**
66
+ * Price per million input tokens in USD
67
+ */
68
+ input_price: number;
73
69
 
74
- openrouter_model?: string | null;
75
- }
70
+ /**
71
+ * Model identifier (e.g., 'gpt-4', 'claude-3-opus-20240229')
72
+ */
73
+ model: string;
76
74
 
77
75
  /**
78
- * Response model for a single LLM provider.
76
+ * Price per million output tokens in USD
79
77
  */
80
- export interface Model {
81
- context_length: number;
78
+ output_price: number;
82
79
 
83
- input_price: number;
80
+ /**
81
+ * Provider name (e.g., 'openai', 'anthropic', 'google')
82
+ */
83
+ provider: string;
84
84
 
85
- model: string;
85
+ /**
86
+ * OpenRouter model identifier if available, null if not supported via OpenRouter
87
+ */
88
+ openrouter_model?: string | null;
89
+ }
86
90
 
87
- output_price: number;
91
+ /**
92
+ * Response model for GET /v2/models endpoint.
93
+ *
94
+ * Returns a list of all supported text generation models with their metadata,
95
+ * separated into active and deprecated models.
96
+ */
97
+ export interface ModelListResponse {
98
+ /**
99
+ * List of deprecated models that are no longer recommended but may still work
100
+ */
101
+ deprecated_models: Array<Model>;
88
102
 
89
- provider: string;
103
+ /**
104
+ * List of active/supported text generation models with their metadata
105
+ */
106
+ models: Array<Model>;
90
107
 
91
- openrouter_model?: string | null;
92
- }
108
+ /**
109
+ * Total count of active models in the response
110
+ */
111
+ total: number;
93
112
  }
94
113
 
95
114
  export interface ModelListParams {
@@ -106,5 +125,9 @@ export interface ModelListParams {
106
125
  }
107
126
 
108
127
  export declare namespace Models {
109
- export { type ModelListResponse as ModelListResponse, type ModelListParams as ModelListParams };
128
+ export {
129
+ type Model as Model,
130
+ type ModelListResponse as ModelListResponse,
131
+ type ModelListParams as ModelListParams,
132
+ };
110
133
  }