ricecoder_providers/models/
mod.rs1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5use std::time::Duration;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct ModelInfo {
10 pub id: String,
12 pub name: String,
14 pub provider: String,
16 pub context_window: usize,
18 pub capabilities: Vec<Capability>,
20 pub pricing: Option<Pricing>,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
26pub enum Capability {
27 Chat,
29 Code,
31 Vision,
33 FunctionCalling,
35 Streaming,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct Pricing {
42 pub input_per_1k_tokens: f64,
44 pub output_per_1k_tokens: f64,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct Message {
51 pub role: String,
53 pub content: String,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct ChatRequest {
60 pub model: String,
62 pub messages: Vec<Message>,
64 pub temperature: Option<f32>,
66 pub max_tokens: Option<usize>,
68 pub stream: bool,
70}
71
72#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
74pub enum FinishReason {
75 Stop,
77 Length,
79 Error,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
85pub struct TokenUsage {
86 pub prompt_tokens: usize,
88 pub completion_tokens: usize,
90 pub total_tokens: usize,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
96pub struct ChatResponse {
97 pub content: String,
99 pub model: String,
101 pub usage: TokenUsage,
103 pub finish_reason: FinishReason,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct ProviderConfig {
110 pub defaults: DefaultsConfig,
112 pub providers: HashMap<String, ProviderSettings>,
114}
115
116#[derive(Debug, Clone, Serialize, Deserialize)]
118pub struct DefaultsConfig {
119 pub provider: String,
121 pub model: String,
123 pub per_command: HashMap<String, String>,
125 pub per_action: HashMap<String, String>,
127}
128
129#[derive(Debug, Clone, Default, Serialize, Deserialize)]
131pub struct ProviderSettings {
132 pub api_key: Option<String>,
134 pub base_url: Option<String>,
136 pub timeout: Option<Duration>,
138 pub retry_count: Option<usize>,
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
144pub struct ApiKeyConfig {
145 pub env_var: String,
147 pub secure_storage: bool,
149}