notdiamond
Version:
The official TypeScript library for the Notdiamond API
145 lines • 6 kB
text/typescript
import { APIResource } from "../core/resource.mjs";
import { APIPromise } from "../core/api-promise.mjs";
import { type Uploadable } from "../core/uploads.mjs";
import { RequestOptions } from "../internal/request-options.mjs";
export declare class CustomRouter extends APIResource {
/**
* Train a custom router on your evaluation data to optimize routing for your
* specific use case.
*
* This endpoint allows you to train a domain-specific router that learns which
* models perform best for different types of queries in your application. The
* router analyzes your evaluation dataset, clusters similar queries, and learns
* model performance patterns.
*
* **Training Process:**
*
* 1. Upload a CSV file with your evaluation data
* 2. Specify which models to route between
* 3. Define the evaluation metric (score column)
* 4. The system trains asynchronously and returns a preference_id
* 5. Use the preference_id in model_select() calls once training completes
*
* **Dataset Requirements:**
*
* - Format: CSV file
* - Minimum samples: 25 (more is better for accuracy)
* - Required columns:
* - Prompt column (specified in prompt_column parameter)
* - For each model: `{provider}/{model}/score` and `{provider}/{model}/response`
*
* **Example CSV structure:**
*
* ```
* prompt,openai/gpt-4o/score,openai/gpt-4o/response,anthropic/claude-sonnet-4-5-20250929/score,anthropic/claude-sonnet-4-5-20250929/response
* "Explain quantum computing",0.95,"Quantum computing uses...",0.87,"Quantum computers leverage..."
* "Write a Python function",0.82,"def my_function()...",0.91,"Here's a Python function..."
* ```
*
* **Model Selection:**
*
* - Specify standard models: `{"provider": "openai", "model": "gpt-4o"}`
* - Or custom models with pricing:
* `{"provider": "custom", "model": "my-model", "is_custom": true, "input_price": 10.0, "output_price": 30.0, "context_length": 8192, "latency": 1.5}`
*
* **Training Time:**
*
* - Training is asynchronous and typically takes 5-15 minutes
* - Larger datasets or more models take longer
* - You'll receive a preference_id immediately
* - Check training status by attempting to use the preference_id in model_select()
*
* **Best Practices:**
*
* 1. Use diverse, representative examples from your production workload
* 2. Include at least 50-100 samples for best results
* 3. Ensure consistent evaluation metrics across all models
* 4. Use the same models you plan to route between in production
*
* **Related Documentation:** See
* https://docs.notdiamond.ai/docs/adapting-prompts-to-new-models for detailed
* guide.
*
* @example
* ```ts
* const response =
* await client.customRouter.trainCustomRouter({
* dataset_file: fs.createReadStream('path/to/file'),
* language: 'english',
* llm_providers:
* '[{"provider": "openai", "model": "gpt-4o"}, {"provider": "anthropic", "model": "claude-sonnet-4-5-20250929"}]',
* maximize: true,
* prompt_column: 'prompt',
* });
* ```
*/
trainCustomRouter(body: CustomRouterTrainCustomRouterParams, options?: RequestOptions): APIPromise<CustomRouterTrainCustomRouterResponse>;
}
/**
* Response model for POST /v2/pzn/trainCustomRouter endpoint.
*
* Returned immediately after submitting a custom router training request. The
* training process runs asynchronously (typically 5-15 minutes), so use the
* returned preference_id to make routing calls once training completes.
*
* **Next steps:**
*
* 1. Store the preference_id
* 2. Wait for training to complete (typically 5-15 minutes)
* 3. Use this preference_id in POST /v2/modelRouter/modelSelect requests
* 4. The router will use your custom-trained model to make routing decisions
*
* **How to use the preference_id:**
*
* - Include it in the 'preference_id' field of model_select() calls
* - The system automatically uses your custom router once training is complete
* - No need to poll status - you can start using it immediately (will use default
* until ready)
*/
export interface CustomRouterTrainCustomRouterResponse {
/**
* Unique identifier for the custom router. Use this in model_select() calls to
* enable routing with your custom-trained router
*/
preference_id: string;
}
export interface CustomRouterTrainCustomRouterParams {
/**
* CSV file containing evaluation data with prompt column and score/response
* columns for each model
*/
dataset_file: Uploadable;
/**
* Language of the evaluation data. Use 'english' for English-only data or
* 'multilingual' for multi-language support
*/
language: string;
/**
* JSON string array of LLM providers to train the router on. Format:
* '[{"provider": "openai", "model": "gpt-4o"}, {"provider": "anthropic", "model":
* "claude-sonnet-4-5-20250929"}]'
*/
llm_providers: string;
/**
* Whether higher scores are better. Set to true if higher scores indicate better
* performance, false otherwise
*/
maximize: boolean;
/**
* Name of the column in the CSV file that contains the prompts
*/
prompt_column: string;
/**
* Whether to override an existing custom router for this preference_id
*/
override?: boolean | null;
/**
* Optional preference ID to update an existing router. If not provided, a new
* preference will be created
*/
preference_id?: string | null;
}
export declare namespace CustomRouter {
export { type CustomRouterTrainCustomRouterResponse as CustomRouterTrainCustomRouterResponse, type CustomRouterTrainCustomRouterParams as CustomRouterTrainCustomRouterParams, };
}
//# sourceMappingURL=custom-router.d.mts.map