use langchainrust::{OpenAIChat, OpenAIConfig, OpenAIEmbeddings, OpenAIEmbeddingsConfig};
use std::sync::OnceLock;
const API_KEY: &str = "sk-l0YYMX65mCYRlTJYH0ptf4BFpqJwm8Xo9Z5IMqSZD0yOafl6";
const BASE_URL: &str = "https://api.openai-proxy.org/v1";
const DEFAULT_MODEL: &str = "gpt-3.5-turbo";
const EMBEDDING_MODEL: &str = "text-embedding-ada-002";
const MONGO_URI: &str = "";
const MONGO_DATABASE: &str = "langgraph_test";
const MONGO_COLLECTION: &str = "graph_definitions";
static CONFIG: OnceLock<TestConfig> = OnceLock::new();
#[cfg(feature = "mongodb-persistence")]
static MONGO_CONFIG: OnceLock<MongoTestConfig> = OnceLock::new();
pub struct TestConfig {
pub api_key: String,
pub base_url: String,
}
impl TestConfig {
pub fn get() -> &'static Self {
CONFIG.get_or_init(|| {
let api_key = if API_KEY.is_empty() {
std::env::var("OPENAI_API_KEY").expect(
"请设置 OPENAI_API_KEY 环境变量,或在 tests/common/mod.rs 中配置 API_KEY",
)
} else {
API_KEY.to_string()
};
let base_url =
std::env::var("OPENAI_BASE_URL").unwrap_or_else(|_| BASE_URL.to_string());
TestConfig { api_key, base_url }
})
}
pub fn openai_chat_config(&self) -> OpenAIConfig {
OpenAIConfig {
api_key: self.api_key.clone(),
base_url: self.base_url.clone(),
model: DEFAULT_MODEL.to_string(),
streaming: false,
temperature: Some(0.7),
max_tokens: Some(100),
..Default::default()
}
}
pub fn openai_chat(&self) -> OpenAIChat {
OpenAIChat::new(self.openai_chat_config())
}
pub fn embeddings_config(&self) -> OpenAIEmbeddingsConfig {
OpenAIEmbeddingsConfig {
api_key: self.api_key.clone(),
base_url: self.base_url.clone(),
model: EMBEDDING_MODEL.to_string(),
..Default::default()
}
}
pub fn embeddings(&self) -> OpenAIEmbeddings {
OpenAIEmbeddings::new(self.embeddings_config())
}
}
#[cfg(feature = "mongodb-persistence")]
pub struct MongoTestConfig {
pub uri: String,
pub database: String,
pub collection: String,
}
#[cfg(feature = "mongodb-persistence")]
impl MongoTestConfig {
pub fn get() -> &'static Self {
MONGO_CONFIG.get_or_init(|| {
let uri = if MONGO_URI.is_empty() {
std::env::var("MONGO_URI")
.expect("请设置 MONGO_URI 环境变量,或在 tests/common/mod.rs 中配置 MONGO_URI")
} else {
MONGO_URI.to_string()
};
let database =
std::env::var("MONGO_DATABASE").unwrap_or_else(|_| MONGO_DATABASE.to_string());
let collection =
std::env::var("MONGO_COLLECTION").unwrap_or_else(|_| MONGO_COLLECTION.to_string());
MongoTestConfig {
uri,
database,
collection,
}
})
}
pub fn to_mongo_config(&self) -> langchainrust::langgraph::MongoConfig {
langchainrust::langgraph::MongoConfig::new(
self.uri.clone(),
self.database.clone(),
self.collection.clone(),
)
}
}