ai_lib/provider/
config.rs1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct ProviderConfig {
9 pub base_url: String,
11 pub api_key_env: String,
13 pub chat_endpoint: String,
15 pub models_endpoint: Option<String>,
17 pub headers: HashMap<String, String>,
19 pub field_mapping: FieldMapping,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct FieldMapping {
28 pub messages_field: String,
30 pub model_field: String,
32 pub role_mapping: HashMap<String, String>,
34 pub response_content_path: String,
36}
37
38impl ProviderConfig {
39 pub fn openai_compatible(base_url: &str, api_key_env: &str) -> Self {
41 let mut headers = HashMap::new();
42 headers.insert("Content-Type".to_string(), "application/json".to_string());
43
44 let mut role_mapping = HashMap::new();
45 role_mapping.insert("System".to_string(), "system".to_string());
46 role_mapping.insert("User".to_string(), "user".to_string());
47 role_mapping.insert("Assistant".to_string(), "assistant".to_string());
48
49 Self {
50 base_url: base_url.to_string(),
51 api_key_env: api_key_env.to_string(),
52 chat_endpoint: "/chat/completions".to_string(),
53 models_endpoint: Some("/models".to_string()),
54 headers,
55 field_mapping: FieldMapping {
56 messages_field: "messages".to_string(),
57 model_field: "model".to_string(),
58 role_mapping,
59 response_content_path: "choices.0.message.content".to_string(),
60 },
61 }
62 }
63}