1 line
25 KiB
JSON
1 line
25 KiB
JSON
{"repo": "aiscriptdev/aiscript", "files": {"aiscript-vm/src/ai/mod.rs": {"d0aab785ff719238e37274dc200658a8b4b596af": {"t": 1785745829.57381, "n": 6112, "h": "b64273b397337b72", "c": "mod agent;\nmod prompt;\n\nuse aiscript_common::EnvString;\nuse std::env;\n\npub use agent::{Agent, run_agent};\nuse openai_api_rs::v1::{api::OpenAIClient, common};\npub use prompt::{PromptConfig, prompt_with_config};\n\nuse serde::Deserialize;\n\n// OpenAI\nconst OPENAI_API_ENDPOINT: &str = \"https://api.openai.com/v1\";\nconst OPENAI_DEFAULT_MODEL: &str = common::GPT4;\n\n// Deepseek\nconst DEEPSEEK_API_ENDPOINT: &str = \"https://api.deepseek.com/v1\";\nconst DEEPSEEK_DEFAULT_MODEL: &str = \"deepseek-chat\";\n\n// Anthropic\nconst ANTHROPIC_API_ENDPOINT: &str = \"https://api.anthropic.com/v1\";\nconst ANTHROPIC_DEFAULT_MODEL: &str = \"claude-3-5-sonnet-latest\";\n\n// Ollama\nconst OLLAMA_DEFAULT_API_ENDPOINT: &str = \"http://localhost:11434/v1\";\nconst OLLAMA_DEFAULT_MODEL: &str = \"llama3\";\n\n#[derive(Debug, Clone, Deserialize)]\npub struct AiConfig {\n pub openai: Option<ModelConfig>,\n pub anthropic: Option<ModelConfig>,\n pub deepseek: Option<ModelConfig>,\n pub ollama: Option<ModelConfig>,\n}\n\nimpl Default for AiConfig {\n fn default() -> Self {\n Self {\n openai: env::var(\"OPENAI_API_KEY\").ok().map(|key| ModelConfig {\n api_key: key.into(),\n api_endpoint: Some(OPENAI_API_ENDPOINT.into()),\n model: Some(OPENAI_DEFAULT_MODEL.into()),\n }),\n anthropic: env::var(\"CLAUDE_API_KEY\").ok().map(|key| ModelConfig {\n api_key: key.into(),\n api_endpoint: Some(ANTHROPIC_API_ENDPOINT.into()),\n model: Some(ANTHROPIC_DEFAULT_MODEL.into()),\n }),\n deepseek: env::var(\"DEEPKSEEK_API_KEY\").ok().map(|key| ModelConfig {\n api_key: key.into(),\n api_endpoint: Some(DEEPSEEK_API_ENDPOINT.into()),\n model: Some(DEEPSEEK_DEFAULT_MODEL.into()),\n }),\n ollama: env::var(\"OLLAMA_API_ENDPOINT\")\n .ok()\n .map(|endpoint| ModelConfig {\n api_key: EnvString(String::default()), // Ollama does not require an API key\n api_endpoint: endpoint\n .parse()\n .ok()\n .map(|url: String| url.into())\n .or(Some(OLLAMA_DEFAULT_API_ENDPOINT.into())),\n model: Some(OLLAMA_DEFAULT_MODEL.into()),\n }),\n }\n }\n}\n\n#[derive(Debug, Clone, Deserialize)]\npub struct ModelConfig {\n pub api_key: EnvString,\n pub api_endpoint: Option<EnvString>,\n pub model: Option<EnvString>,\n}\n\nimpl Default for ModelConfig {\n fn default() -> Self {\n ModelConfig {\n #[cfg(feature = \"ai_test\")]\n api_key: \"\".into(),\n #[cfg(not(feature = \"ai_test\"))]\n api_key: EnvString(env::var(\"OPENAI_API_KEY\").unwrap_or_default()),\n api_endpoint: Some(OPENAI_API_ENDPOINT.into()),\n model: Some(OPENAI_DEFAULT_MODEL.into()),\n }\n }\n}\n\nimpl AiConfig {\n pub(crate) fn get_model_config(\n &self,\n model_name: Option<String>,\n ) -> Result<ModelConfig, String> {\n if let Some(ollama) = self.ollama.as_ref() {\n let model = model_name.as_deref().unwrap_or(OLLAMA_DEFAULT_MODEL);\n let mut config = ollama.clone();\n config.model = Some(EnvString(model.to_string()));\n return Ok(config);\n }\n if let Some(model) = model_name {\n match model {\n m if m.starts_with(\"gpt\") => {\n if let Some(openai) = self.openai.as_ref() {\n let mut config = openai.clone();\n config.model = Some(EnvString(m));\n Ok(config)\n } else {\n Ok(ModelConfig::default())\n }\n }\n m if m.starts_with(\"claude\") => {\n if let Some(anthropic) = self.anthropic.as_ref() {\n let mut config = anthropic.clone();\n config.model = Some(EnvString(m));\n Ok(config)\n } else {\n Ok(ModelConfig {\n api_key: env::var(\"CLAUDE_API_KEY\")\n .expect(\"Expect `CLAUDE_API_KEY` environment variable.\")\n .into(),\n api_endpoint: Some(ANTHROPIC_API_ENDPOINT.into()),\n model: Some(ANTHROPIC_DEFAULT_MODEL.into()),\n })\n }\n }\n m if m.starts_with(\"deepseek\") => {\n if let Some(deepseek) = self.deepseek.as_ref() {\n let mut config = deepseek.clone();\n config.model = Some(EnvString(m));\n Ok(config)\n } else {\n Ok(ModelConfig {\n api_key: env::var(\"DEEPSEEK_API_KEY\")\n .expect(\"Expect `DEEPSEEK_API_KEY` environment variable.\")\n .into(),\n api_endpoint: Some(DEEPSEEK_API_ENDPOINT.into()),\n model: Some(DEEPSEEK_DEFAULT_MODEL.into()),\n })\n }\n }\n m => Err(format!(\"Unsupported model '{m}'.\")),\n }\n } else if let Some(ollama) = self.ollama.as_ref() {\n if let Some(model) = model_name {\n let mut config = ollama.clone();\n config.model = Some(EnvString(model));\n return Ok(config);\n } else {\n return Ok(ollama.clone());\n }\n } else {\n // Default is OpenAI model\n Ok(ModelConfig::default())\n }\n }\n}\n\n#[allow(unused)]\npub(crate) fn openai_client(config: &ModelConfig) -> OpenAIClient {\n OpenAIClient::builder()\n .with_api_key(&*config.api_key)\n .with_endpoint(config.api_endpoint.as_deref().unwrap())\n .build()\n .unwrap()\n}\n"}, "e4b523c9efbdda8054b9890ba3980e3b14ea9a97": {"t": 1785756878.3456755, "n": 4879, "h": "0b4fd8d0e252d8d9", "c": "mod agent;\nmod prompt;\n\nuse aiscript_common::EnvString;\nuse std::env;\n\npub use agent::{Agent, run_agent};\nuse openai_api_rs::v1::{api::OpenAIClient, common};\npub use prompt::{PromptConfig, prompt_with_config};\n\nuse serde::Deserialize;\n\n// OpenAI\nconst OPENAI_API_ENDPOINT: &str = \"https://api.openai.com/v1\";\nconst OPENAI_DEFAULT_MODEL: &str = common::GPT4;\n\n// Deepseek\nconst DEEPSEEK_API_ENDPOINT: &str = \"https://api.deepseek.com/v1\";\nconst DEEPSEEK_DEFAULT_MODEL: &str = \"deepseek-chat\";\n\n// Anthropic\nconst ANTHROPIC_API_ENDPOINT: &str = \"https://api.anthropic.com/v1\";\nconst ANTHROPIC_DEFAULT_MODEL: &str = \"claude-3-5-sonnet-latest\";\n\n#[derive(Debug, Clone, Deserialize)]\npub struct AiConfig {\n pub openai: Option<ModelConfig>,\n pub anthropic: Option<ModelConfig>,\n pub deepseek: Option<ModelConfig>,\n}\n\nimpl Default for AiConfig {\n fn default() -> Self {\n Self {\n openai: env::var(\"OPENAI_API_KEY\").ok().map(|key| ModelConfig {\n api_key: key.into(),\n api_endpoint: Some(OPENAI_API_ENDPOINT.into()),\n model: Some(OPENAI_DEFAULT_MODEL.into()),\n }),\n anthropic: env::var(\"CLAUDE_API_KEY\").ok().map(|key| ModelConfig {\n api_key: key.into(),\n api_endpoint: Some(ANTHROPIC_API_ENDPOINT.into()),\n model: Some(ANTHROPIC_DEFAULT_MODEL.into()),\n }),\n deepseek: env::var(\"DEEPKSEEK_API_KEY\").ok().map(|key| ModelConfig {\n api_key: key.into(),\n api_endpoint: Some(DEEPSEEK_API_ENDPOINT.into()),\n model: Some(DEEPSEEK_DEFAULT_MODEL.into()),\n }),\n }\n }\n}\n\n#[derive(Debug, Clone, Deserialize)]\npub struct ModelConfig {\n pub api_key: EnvString,\n pub api_endpoint: Option<EnvString>,\n pub model: Option<EnvString>,\n}\n\nimpl Default for ModelConfig {\n fn default() -> Self {\n ModelConfig {\n #[cfg(feature = \"ai_test\")]\n api_key: \"\".into(),\n #[cfg(not(feature = \"ai_test\"))]\n api_key: env::var(\"OPENAI_API_KEY\")\n .expect(\"Expect `OPENAI_API_KEY` environment variable.\")\n .into(),\n api_endpoint: Some(OPENAI_API_ENDPOINT.into()),\n model: Some(OPENAI_DEFAULT_MODEL.into()),\n }\n }\n}\n\nimpl AiConfig {\n pub(crate) fn get_model_config(\n &self,\n model_name: Option<String>,\n ) -> Result<ModelConfig, String> {\n if let Some(model) = model_name {\n match model {\n m if m.starts_with(\"gpt\") => {\n if let Some(openai) = self.openai.as_ref() {\n let mut config = openai.clone();\n config.model = Some(EnvString(m));\n Ok(config)\n } else {\n Ok(ModelConfig::default())\n }\n }\n m if m.starts_with(\"claude\") => {\n if let Some(anthropic) = self.anthropic.as_ref() {\n let mut config = anthropic.clone();\n config.model = Some(EnvString(m));\n Ok(config)\n } else {\n Ok(ModelConfig {\n api_key: env::var(\"CLAUDE_API_KEY\")\n .expect(\"Expect `CLAUDE_API_KEY` environment variable.\")\n .into(),\n api_endpoint: Some(ANTHROPIC_API_ENDPOINT.into()),\n model: Some(ANTHROPIC_DEFAULT_MODEL.into()),\n })\n }\n }\n m if m.starts_with(\"deepseek\") => {\n if let Some(deepseek) = self.deepseek.as_ref() {\n let mut config = deepseek.clone();\n config.model = Some(EnvString(m));\n Ok(config)\n } else {\n Ok(ModelConfig {\n api_key: env::var(\"DEEPSEEK_API_KEY\")\n .expect(\"Expect `DEEPSEEK_API_KEY` environment variable.\")\n .into(),\n api_endpoint: Some(DEEPSEEK_API_ENDPOINT.into()),\n model: Some(DEEPSEEK_DEFAULT_MODEL.into()),\n })\n }\n }\n m => Err(format!(\"Unsupported model '{m}'.\")),\n }\n } else {\n // Default is OpenAI model\n Ok(ModelConfig::default())\n }\n }\n}\n\n#[allow(unused)]\npub(crate) fn openai_client(config: &ModelConfig) -> OpenAIClient {\n OpenAIClient::builder()\n .with_api_key(&*config.api_key)\n .with_endpoint(config.api_endpoint.as_deref().unwrap())\n .build()\n .unwrap()\n}\n"}, "01bc90411b03a0a0940094bc8f531272042f95e1": {"t": 1785756880.9344254, "n": 4737, "h": "e1a3d0c64dde38ef", "c": "mod agent;\nmod prompt;\n\nuse std::env;\n\npub use agent::{Agent, run_agent};\nuse openai_api_rs::v1::{api::OpenAIClient, common};\npub use prompt::{PromptConfig, prompt_with_config};\n\nuse serde::Deserialize;\n\n// OpenAI\nconst OPENAI_API_ENDPOINT: &str = \"https://api.openai.com/v1\";\nconst OPENAI_DEFAULT_MODEL: &str = common::GPT4;\n\n// Deepseek\nconst DEEPSEEK_API_ENDPOINT: &str = \"https://api.deepseek.com/v1\";\nconst DEEPSEEK_DEFAULT_MODEL: &str = \"deepseek-chat\";\n\n// Anthropic\nconst ANTHROPIC_API_ENDPOINT: &str = \"https://api.anthropic.com/v1\";\nconst ANTHROPIC_DEFAULT_MODEL: &str = \"claude-3-5-sonnet-latest\";\n\n#[derive(Debug, Clone, Deserialize)]\npub struct AiConfig {\n pub openai: Option<ModelConfig>,\n pub anthropic: Option<ModelConfig>,\n pub deepseek: Option<ModelConfig>,\n}\n\nimpl Default for AiConfig {\n fn default() -> Self {\n Self {\n openai: env::var(\"OPENAI_API_KEY\").ok().map(|key| ModelConfig {\n api_key: key,\n api_endpoint: Some(OPENAI_API_ENDPOINT.to_string()),\n model: Some(OPENAI_DEFAULT_MODEL.to_string()),\n }),\n anthropic: env::var(\"CLAUDE_API_KEY\").ok().map(|key| ModelConfig {\n api_key: key,\n api_endpoint: Some(ANTHROPIC_API_ENDPOINT.to_string()),\n model: Some(ANTHROPIC_DEFAULT_MODEL.to_string()),\n }),\n deepseek: env::var(\"DEEPKSEEK_API_KEY\").ok().map(|key| ModelConfig {\n api_key: key,\n api_endpoint: Some(DEEPSEEK_API_ENDPOINT.to_string()),\n model: Some(DEEPSEEK_DEFAULT_MODEL.to_string()),\n }),\n }\n }\n}\n\n#[derive(Debug, Clone, Deserialize)]\npub struct ModelConfig {\n pub api_key: String,\n pub api_endpoint: Option<String>,\n pub model: Option<String>,\n}\n\nimpl Default for ModelConfig {\n fn default() -> Self {\n ModelConfig {\n #[cfg(feature = \"ai_test\")]\n api_key: \"\".into(),\n #[cfg(not(feature = \"ai_test\"))]\n api_key: env::var(\"OPENAI_API_KEY\")\n .expect(\"Expect `OPENAI_API_KEY` environment variable.\"),\n api_endpoint: Some(OPENAI_API_ENDPOINT.to_string()),\n model: Some(OPENAI_DEFAULT_MODEL.to_string()),\n }\n }\n}\n\nimpl AiConfig {\n pub(crate) fn get_model_config(\n &self,\n model_name: Option<String>,\n ) -> Result<ModelConfig, String> {\n if let Some(model) = model_name {\n match model {\n m if m.starts_with(\"gpt\") => {\n if let Some(openai) = self.openai.as_ref() {\n let mut config = openai.clone();\n config.model = Some(m);\n Ok(config)\n } else {\n Ok(ModelConfig::default())\n }\n }\n m if m.starts_with(\"claude\") => {\n if let Some(anthropic) = self.anthropic.as_ref() {\n let mut config = anthropic.clone();\n config.model = Some(m);\n Ok(config)\n } else {\n Ok(ModelConfig {\n api_key: env::var(\"CLAUDE_API_KEY\")\n .expect(\"Expect `CLAUDE_API_KEY` environment variable.\"),\n api_endpoint: Some(ANTHROPIC_API_ENDPOINT.to_string()),\n model: Some(ANTHROPIC_DEFAULT_MODEL.to_string()),\n })\n }\n }\n m if m.starts_with(\"deepseek\") => {\n if let Some(deepseek) = self.deepseek.as_ref() {\n let mut config = deepseek.clone();\n config.model = Some(m);\n Ok(config)\n } else {\n Ok(ModelConfig {\n api_key: env::var(\"DEEPSEEK_API_KEY\")\n .expect(\"Expect `DEEPSEEK_API_KEY` environment variable.\"),\n api_endpoint: Some(DEEPSEEK_API_ENDPOINT.to_string()),\n model: Some(DEEPSEEK_DEFAULT_MODEL.to_string()),\n })\n }\n }\n m => Err(format!(\"Unsupported model '{m}'.\")),\n }\n } else {\n // Default is OpenAI model\n Ok(ModelConfig::default())\n }\n }\n}\n\n#[allow(unused)]\npub(crate) fn openai_client(config: &ModelConfig) -> OpenAIClient {\n OpenAIClient::builder()\n .with_api_key(&config.api_key)\n .with_endpoint(config.api_endpoint.as_ref().unwrap())\n .build()\n .unwrap()\n}\n"}, "cb5357f56a45c8a63a07d6d67157ecdc73d618f9": {"t": 1785756882.7363257, "n": 3172, "h": "c98bc454443795f1", "c": "mod agent;\nmod prompt;\n\nuse std::env;\n\npub use agent::{Agent, run_agent};\nuse openai_api_rs::v1::{api::OpenAIClient, common::GPT3_5_TURBO};\npub use prompt::{PromptConfig, prompt_with_config};\n\nuse serde::Deserialize;\n\n// Deepseek\nconst DEEPSEEK_API_ENDPOINT: &str = \"https://api.deepseek.com/v1\";\nconst DEEPSEEK_V3: &str = \"deepseek-chat\";\n\n// Anthropic\nconst ANTHROPIC_API_ENDPOINT: &str = \"https://api.anthropic.com/v1\";\nconst CLAUDE_3_5_SONNET: &str = \"claude-3-5-sonnet-latest\";\n\n#[derive(Debug, Clone, Deserialize)]\npub enum AiConfig {\n #[serde(rename = \"openai\")]\n OpenAI(ModelConfig),\n #[serde(rename = \"anthropic\")]\n Anthropic(ModelConfig),\n #[serde(rename = \"deepseek\")]\n DeepSeek(ModelConfig),\n}\n\n#[derive(Debug, Clone, Deserialize)]\npub struct ModelConfig {\n pub api_key: String,\n pub model: Option<String>,\n}\n\nimpl AiConfig {\n pub(crate) fn take_model(&mut self) -> Option<String> {\n match self {\n Self::OpenAI(ModelConfig { model, .. }) => model.take(),\n Self::Anthropic(ModelConfig { model, .. }) => model.take(),\n Self::DeepSeek(ModelConfig { model, .. }) => model.take(),\n }\n }\n\n pub(crate) fn set_model(&mut self, m: String) {\n match self {\n Self::OpenAI(ModelConfig { model, .. }) => model.replace(m),\n Self::Anthropic(ModelConfig { model, .. }) => model.replace(m),\n Self::DeepSeek(ModelConfig { model, .. }) => model.replace(m),\n };\n }\n}\n\n#[allow(unused)]\npub(crate) fn openai_client(config: Option<&AiConfig>) -> OpenAIClient {\n match config {\n None => OpenAIClient::builder()\n .with_api_key(env::var(\"OPENAI_API_KEY\").expect(\"OPENAI_API_KEY not set\"))\n .build()\n .unwrap(),\n Some(AiConfig::OpenAI(model_config)) => {\n let api_key = if model_config.api_key.is_empty() {\n env::var(\"OPENAI_API_KEY\").expect(\"OPENAI_API_KEY not set\")\n } else {\n model_config.api_key.clone()\n };\n OpenAIClient::builder()\n .with_api_key(api_key)\n .build()\n .unwrap()\n }\n Some(AiConfig::DeepSeek(ModelConfig { api_key, .. })) => OpenAIClient::builder()\n .with_endpoint(DEEPSEEK_API_ENDPOINT)\n .with_api_key(api_key)\n .build()\n .unwrap(),\n Some(AiConfig::Anthropic(ModelConfig { api_key, .. })) => OpenAIClient::builder()\n .with_endpoint(ANTHROPIC_API_ENDPOINT)\n .with_api_key(api_key)\n .build()\n .unwrap(),\n }\n}\n\npub(crate) fn default_model(config: Option<&AiConfig>) -> String {\n match config {\n None => GPT3_5_TURBO.to_string(),\n Some(AiConfig::OpenAI(ModelConfig { model, .. })) => {\n model.clone().unwrap_or(GPT3_5_TURBO.to_string())\n }\n Some(AiConfig::DeepSeek(ModelConfig { model, .. })) => {\n model.clone().unwrap_or(DEEPSEEK_V3.to_string())\n }\n Some(AiConfig::Anthropic(ModelConfig { model, .. })) => {\n model.clone().unwrap_or(CLAUDE_3_5_SONNET.to_string())\n }\n }\n}\n"}, "6a047b0d86943501d7ee3040511810136ea297eb": {"t": 1785756884.4048457, "n": 2836, "h": "74894c0dd2aedebb", "c": "mod agent;\nmod prompt;\n\nuse std::env;\n\npub use agent::{Agent, run_agent};\nuse openai_api_rs::v1::{api::OpenAIClient, common::GPT3_5_TURBO};\npub use prompt::{PromptConfig, prompt_with_config};\n\nuse serde::Deserialize;\n\nconst DEEPSEEK_API_ENDPOINT: &str = \"https://api.deepseek.com/v1\";\nconst DEEPSEEK_V3: &str = \"deepseek-chat\";\n\n#[derive(Debug, Clone, Deserialize)]\npub enum AiConfig {\n #[serde(rename = \"openai\")]\n OpenAI(ModelConfig),\n #[serde(rename = \"anthropic\")]\n Anthropic(ModelConfig),\n #[serde(rename = \"deepseek\")]\n DeepSeek(ModelConfig),\n}\n\n#[derive(Debug, Clone, Deserialize)]\npub struct ModelConfig {\n pub api_key: String,\n pub model: Option<String>,\n}\n\nimpl AiConfig {\n pub(crate) fn take_model(&mut self) -> Option<String> {\n match self {\n Self::OpenAI(ModelConfig { model, .. }) => model.take(),\n Self::Anthropic(ModelConfig { model, .. }) => model.take(),\n Self::DeepSeek(ModelConfig { model, .. }) => model.take(),\n }\n }\n\n pub(crate) fn set_model(&mut self, m: String) {\n match self {\n Self::OpenAI(ModelConfig { model, .. }) => model.replace(m),\n Self::Anthropic(ModelConfig { model, .. }) => model.replace(m),\n Self::DeepSeek(ModelConfig { model, .. }) => model.replace(m),\n };\n }\n}\n\n#[allow(unused)]\npub(crate) fn openai_client(config: Option<&AiConfig>) -> OpenAIClient {\n match config {\n None => OpenAIClient::builder()\n .with_api_key(env::var(\"OPENAI_API_KEY\").expect(\"OPENAI_API_KEY not set\"))\n .build()\n .unwrap(),\n Some(AiConfig::OpenAI(model_config)) => {\n let api_key = if model_config.api_key.is_empty() {\n env::var(\"OPENAI_API_KEY\").expect(\"OPENAI_API_KEY not set\")\n } else {\n model_config.api_key.clone()\n };\n OpenAIClient::builder()\n .with_api_key(api_key)\n .build()\n .unwrap()\n }\n Some(AiConfig::DeepSeek(ModelConfig { api_key, .. })) => OpenAIClient::builder()\n .with_endpoint(DEEPSEEK_API_ENDPOINT)\n .with_api_key(api_key)\n .build()\n .unwrap(),\n Some(AiConfig::Anthropic(_)) => unimplemented!(\"Anthropic API not yet supported\"),\n }\n}\n\npub(crate) fn default_model(config: Option<&AiConfig>) -> String {\n match config {\n None => GPT3_5_TURBO.to_string(),\n Some(AiConfig::OpenAI(ModelConfig { model, .. })) => {\n model.clone().unwrap_or(GPT3_5_TURBO.to_string())\n }\n Some(AiConfig::DeepSeek(ModelConfig { model, .. })) => {\n model.clone().unwrap_or(DEEPSEEK_V3.to_string())\n }\n Some(AiConfig::Anthropic(_)) => unimplemented!(\"Anthropic API not yet supported\"),\n }\n}\n"}, "608e446a231328f1e888fa4acb3e5aa44aaa0f8d": {"t": 1785756885.6100452, "n": 703, "h": "1fedc9345ba08ce7", "c": "mod agent;\nmod prompt;\n\nuse std::env;\n\npub use agent::{Agent, run_agent};\nuse openai_api_rs::v1::api::OpenAIClient;\npub use prompt::{PromptConfig, prompt_with_config};\n\nuse serde::Deserialize;\n\n#[derive(Debug, Clone, Deserialize, Default)]\npub struct AiConfig {\n pub openai: Option<ModelConfig>,\n pub anthropic: Option<ModelConfig>,\n pub deepseek: Option<ModelConfig>,\n}\n\n#[derive(Debug, Clone, Deserialize)]\npub struct ModelConfig {\n pub api_key: String,\n pub model: Option<String>,\n}\n\n#[allow(unused)]\npub(crate) fn openai_client() -> OpenAIClient {\n OpenAIClient::builder()\n .with_api_key(env::var(\"OPENAI_API_KEY\").unwrap().to_string())\n .build()\n .unwrap()\n}\n"}, "da31229114b979656c5e5ba5d03ac322314f5315": {"t": 1785756886.8768775, "n": 370, "h": "6ce30dd6fde130e0", "c": "mod agent;\nmod prompt;\n\nuse std::env;\n\npub use agent::{Agent, run_agent};\nuse openai_api_rs::v1::api::OpenAIClient;\npub use prompt::{PromptConfig, prompt_with_config};\n\n#[allow(unused)]\npub(crate) fn openai_client() -> OpenAIClient {\n OpenAIClient::builder()\n .with_api_key(env::var(\"OPENAI_API_KEY\").unwrap().to_string())\n .build()\n .unwrap()\n}\n"}, "d6227cbe5c9dac834d679877ae9e8e76619d5d46": {"t": 1785756891.2564383, "n": 353, "h": "966948536150489e", "c": "mod agent;\nmod prompt;\n\nuse std::env;\n\npub use agent::{Agent, run_agent};\nuse openai_api_rs::v1::api::OpenAIClient;\npub use prompt::{PromptConfig, prompt_with_config};\n\npub(crate) fn openai_client() -> OpenAIClient {\n OpenAIClient::builder()\n .with_api_key(env::var(\"OPENAI_API_KEY\").unwrap().to_string())\n .build()\n .unwrap()\n}\n"}, "c6aa85c386d9cbf1ecb2476a9a1dc79b8528e4b7": {"t": 1785756892.601655, "n": 325, "h": "1d4b2a4deb3e1e5e", "c": "mod agent;\nmod prompt;\n\nuse std::env;\n\npub use agent::{run_agent, Agent};\nuse openai_api_rs::v1::api::OpenAIClient;\npub use prompt::prompt;\n\npub(crate) fn openai_client() -> OpenAIClient {\n OpenAIClient::builder()\n .with_api_key(env::var(\"OPENAI_API_KEY\").unwrap().to_string())\n .build()\n .unwrap()\n}\n"}, "f04339f487215e9e1e2e4ecb445927001f6bd58c": {"t": 1785756895.952972, "n": 83, "h": "663d9aa23769c0c0", "c": "mod agent;\nmod prompt;\n\npub use agent::{run_agent, Agent};\npub use prompt::prompt;\n"}}}} |