anthropic_types/
models.rs

1use serde::{Deserialize, Serialize};
2
3/// Information about a model
4#[derive(Serialize, Deserialize, Debug, Clone)]
5pub struct ModelInfo {
6    /// Model ID
7    pub id: String,
8
9    /// Display name
10    pub display_name: String,
11
12    /// Maximum context window size
13    pub max_tokens: u32,
14
15    /// Provider name
16    pub provider: String,
17
18    /// Optional pricing information
19    pub pricing: Option<ModelPricing>,
20}
21
22/// Pricing information for a model
23#[derive(Serialize, Deserialize, Debug, Clone)]
24pub struct ModelPricing {
25    /// Cost per million input tokens
26    pub input_cost_per_million_tokens: f64,
27
28    /// Cost per million output tokens
29    pub output_cost_per_million_tokens: f64,
30}
31
32impl ModelInfo {
33    /// Get maximum tokens for a given model ID
34    pub fn get_max_tokens(model_id: &str) -> u32 {
35        match model_id {
36            // Claude 3.7 models
37            "claude-3-7-sonnet-20250219" => 200000,
38
39            // Claude 3.5 models
40            "claude-3-5-sonnet-20241022"
41            | "claude-3-5-haiku-20241022"
42            | "claude-3-5-sonnet-20240620" => 200000,
43
44            // Claude 3 models
45            "claude-3-opus-20240229" => 200000,
46            "claude-3-sonnet-20240229" => 200000,
47            "claude-3-haiku-20240307" => 200000,
48
49            // Claude 2 models
50            "claude-2.1" | "claude-2.0" => 100000,
51
52            // Default case
53            _ => 100000, // Conservative default
54        }
55    }
56
57    /// Get pricing information for a given model ID
58    pub fn get_pricing(model_id: &str) -> ModelPricing {
59        match model_id {
60            // Claude 3.7 models
61            "claude-3-7-sonnet-20250219" => ModelPricing {
62                input_cost_per_million_tokens: 3.00,
63                output_cost_per_million_tokens: 15.00,
64            },
65
66            // Claude 3.5 models
67            "claude-3-5-sonnet-20241022" | "claude-3-5-sonnet-20240620" => ModelPricing {
68                input_cost_per_million_tokens: 3.00,
69                output_cost_per_million_tokens: 15.00,
70            },
71            "claude-3-5-haiku-20241022" => ModelPricing {
72                input_cost_per_million_tokens: 0.80,
73                output_cost_per_million_tokens: 4.00,
74            },
75
76            // Claude 3 models
77            "claude-3-opus-20240229" => ModelPricing {
78                input_cost_per_million_tokens: 15.00,
79                output_cost_per_million_tokens: 75.00,
80            },
81            "claude-3-haiku-20240307" => ModelPricing {
82                input_cost_per_million_tokens: 0.25,
83                output_cost_per_million_tokens: 1.25,
84            },
85            "claude-3-sonnet-20240229" => ModelPricing {
86                input_cost_per_million_tokens: 3.00,
87                output_cost_per_million_tokens: 15.00,
88            },
89
90            // Default for older or unknown models
91            _ => ModelPricing {
92                input_cost_per_million_tokens: 8.00,
93                output_cost_per_million_tokens: 24.00,
94            },
95        }
96    }
97}