完善 AGC 独立 Agent 试验验证
支持使用 Fake Provider 验证跨进程 Agent 回合 修正独立 Agent 与排队模型的匹配和子进程超时回收 补充 AGC 到独立 App Server 的真实子进程 smoke
This commit is contained in:
@@ -10,6 +10,7 @@ use std::process::{Command, Stdio};
|
||||
use std::time::Duration;
|
||||
|
||||
const AGENT_RUNTIME_PROGRAM_ENV: &str = "GENARRATIVE_AGENT_RUNTIME_PROGRAM";
|
||||
const AGENT_RUNTIME_PROVIDER_ENV: &str = "GENARRATIVE_AGENT_RUNTIME_PROVIDER";
|
||||
const AGENT_RUNTIME_MAX_LINE_BYTES: usize = 4 * 1024 * 1024;
|
||||
const AGENT_RUNTIME_TIMEOUT: Duration = Duration::from_secs(120);
|
||||
|
||||
@@ -51,8 +52,12 @@ fn request_game_creator_agent_runtime_blocking(
|
||||
platform_llm::LlmError::Transport(format!("创建 Agent 临时目录失败:{error}"))
|
||||
})?;
|
||||
let db = temp.path().join("agent.db");
|
||||
let provider = std::env::var(AGENT_RUNTIME_PROVIDER_ENV)
|
||||
.ok()
|
||||
.filter(|value| matches!(value.as_str(), "fake" | "openai"))
|
||||
.unwrap_or_else(|| "openai".to_string());
|
||||
let config = temp.path().join("agent.toml");
|
||||
std::fs::write(&config, "provider = \"openai\"\n").map_err(|error| {
|
||||
std::fs::write(&config, format!("provider = \"{provider}\"\n")).map_err(|error| {
|
||||
platform_llm::LlmError::Transport(format!("创建 Agent 配置失败:{error}"))
|
||||
})?;
|
||||
let home = temp.path().join("home");
|
||||
@@ -69,7 +74,7 @@ fn request_game_creator_agent_runtime_blocking(
|
||||
.env("TMPDIR", temp.path())
|
||||
.env("AGENT_CONFIG", &config)
|
||||
.env("AGENT_DB", &db)
|
||||
.env("AGENT_PROVIDER", "openai")
|
||||
.env("AGENT_PROVIDER", &provider)
|
||||
.env("AGENT_MODEL", &llm.model)
|
||||
.env("OPENAI_BASE_URL", &llm.base_url)
|
||||
.env("OPENAI_API_KEY", &llm.api_key)
|
||||
@@ -189,6 +194,43 @@ fn request_game_creator_agent_runtime_blocking(
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(test, unix))]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use std::sync::Mutex;
|
||||
|
||||
static ENV_LOCK: Mutex<()> = Mutex::new(());
|
||||
|
||||
#[test]
|
||||
fn standalone_agent_fake_process_completes_text_turn() {
|
||||
let _guard = ENV_LOCK.lock().expect("env lock");
|
||||
let program = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
|
||||
.join("../../../rust/target/debug/agent");
|
||||
assert!(
|
||||
program.is_file(),
|
||||
"先构建 rust agent-cli: {}",
|
||||
program.display()
|
||||
);
|
||||
let previous_program = std::env::var_os(AGENT_RUNTIME_PROGRAM_ENV);
|
||||
let previous_provider = std::env::var_os(AGENT_RUNTIME_PROVIDER_ENV);
|
||||
std::env::set_var(AGENT_RUNTIME_PROGRAM_ENV, &program);
|
||||
std::env::set_var(AGENT_RUNTIME_PROVIDER_ENV, "fake");
|
||||
let llm = GameCreatorLlmConfig::default();
|
||||
let request = platform_llm::LlmRunRequest::single_turn("系统", "请简短回答:你好");
|
||||
let response = request_game_creator_agent_runtime_blocking(&llm, request)
|
||||
.expect("独立 Agent 应完成文本回合");
|
||||
assert_eq!(response.text, "fake provider complete");
|
||||
match previous_program {
|
||||
Some(value) => std::env::set_var(AGENT_RUNTIME_PROGRAM_ENV, value),
|
||||
None => std::env::remove_var(AGENT_RUNTIME_PROGRAM_ENV),
|
||||
}
|
||||
match previous_provider {
|
||||
Some(value) => std::env::set_var(AGENT_RUNTIME_PROVIDER_ENV, value),
|
||||
None => std::env::remove_var(AGENT_RUNTIME_PROVIDER_ENV),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn write_rpc(
|
||||
stdin: &mut impl Write,
|
||||
value: serde_json::Value,
|
||||
|
||||
@@ -437,19 +437,16 @@ fn configure_host_with_fake_call_id(
|
||||
) -> Result<AgentHost, Box<dyn std::error::Error>> {
|
||||
match config.provider().as_str() {
|
||||
"fake" => {
|
||||
host = if let Some(call_id) = fake_call_id {
|
||||
host.with_provider(
|
||||
Arc::new(agent_provider_fake::FakeProvider::tool_then_text(
|
||||
call_id,
|
||||
"echo",
|
||||
json!({"text": "hello from fake provider"}),
|
||||
"fake provider complete",
|
||||
)),
|
||||
"fake",
|
||||
)
|
||||
} else {
|
||||
host.with_fake_provider()
|
||||
}
|
||||
let call_id = fake_call_id.unwrap_or("echo-call-1");
|
||||
host = host.with_provider(
|
||||
Arc::new(agent_provider_fake::FakeProvider::tool_then_text(
|
||||
call_id,
|
||||
"echo",
|
||||
json!({"text": "hello from fake provider"}),
|
||||
"fake provider complete",
|
||||
)),
|
||||
config.model(),
|
||||
)
|
||||
}
|
||||
"openai" => {
|
||||
let model = config.model();
|
||||
|
||||
Reference in New Issue
Block a user