|
|
|
@@ -1,5 +1,18 @@
|
|
|
|
|
use super::*;
|
|
|
|
|
|
|
|
|
|
fn provider_retry_identity_for_response_stream_test(
|
|
|
|
|
snapshot: &AgentRuntimeProviderRequestSnapshot,
|
|
|
|
|
llm: &GameCreatorLlmConfig,
|
|
|
|
|
request: &LlmRunRequest,
|
|
|
|
|
) -> Result<AgentRuntimeProviderRetryIdentity, String> {
|
|
|
|
|
game_creator_agent_runtime_provider_retry_identity_for_mode(
|
|
|
|
|
snapshot,
|
|
|
|
|
llm,
|
|
|
|
|
request,
|
|
|
|
|
GAME_CREATOR_AGENT_MODE_PROVIDER,
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn response_stream_fixture(
|
|
|
|
|
run_id: &str,
|
|
|
|
|
) -> (
|
|
|
|
@@ -75,10 +88,10 @@ fn persist_tool_plan_handoff_repair_chain(
|
|
|
|
|
LlmMessage::user("修复格式"),
|
|
|
|
|
]);
|
|
|
|
|
let base_identity =
|
|
|
|
|
game_creator_agent_runtime_provider_retry_identity(&base_snapshot, llm, &base_request)
|
|
|
|
|
provider_retry_identity_for_response_stream_test(&base_snapshot, llm, &base_request)
|
|
|
|
|
.expect("build cleanup base identity");
|
|
|
|
|
let repair_identity =
|
|
|
|
|
game_creator_agent_runtime_provider_retry_identity(&repair_snapshot, llm, &repair_request)
|
|
|
|
|
provider_retry_identity_for_response_stream_test(&repair_snapshot, llm, &repair_request)
|
|
|
|
|
.expect("build cleanup repair identity");
|
|
|
|
|
let base_request_id = game_creator_agent_runtime_provider_request_id(&base_snapshot);
|
|
|
|
|
let repair_request_id = game_creator_agent_runtime_provider_request_id(&repair_snapshot);
|
|
|
|
@@ -972,7 +985,7 @@ async fn provider_handoff_identity_drift_closes_lifecycle_without_leaking_respon
|
|
|
|
|
let mut new_llm = old_llm.clone();
|
|
|
|
|
new_llm.model = "new-provider-model".to_string();
|
|
|
|
|
let old_identity =
|
|
|
|
|
game_creator_agent_runtime_provider_retry_identity(&snapshot, &old_llm, &request)
|
|
|
|
|
provider_retry_identity_for_response_stream_test(&snapshot, &old_llm, &request)
|
|
|
|
|
.expect("build old handoff identity");
|
|
|
|
|
let provider_request_id = game_creator_agent_runtime_provider_request_id(&snapshot);
|
|
|
|
|
append_game_creator_agent_runtime_provider_request_lifecycle(
|
|
|
|
@@ -1008,9 +1021,7 @@ async fn provider_handoff_identity_drift_closes_lifecycle_without_leaking_respon
|
|
|
|
|
"agentLlm.design-director",
|
|
|
|
|
"测试 Provider handoff 身份漂移",
|
|
|
|
|
&request,
|
|
|
|
|
load_game_creator_app_config()
|
|
|
|
|
.expect("load test agent mode")
|
|
|
|
|
.agent_mode,
|
|
|
|
|
GAME_CREATOR_AGENT_MODE_PROVIDER.to_string(),
|
|
|
|
|
|_request| async {
|
|
|
|
|
Err(platform_llm::LlmError::Transport(
|
|
|
|
|
"identity drift must not call Provider".to_string(),
|
|
|
|
@@ -1077,9 +1088,9 @@ async fn tool_plan_handoff_identity_drift_closes_entire_repair_chain_before_remo
|
|
|
|
|
let mut new_llm = old_llm.clone();
|
|
|
|
|
new_llm.model = "new-tool-plan-model".to_string();
|
|
|
|
|
let base_identity =
|
|
|
|
|
game_creator_agent_runtime_provider_retry_identity(&base_snapshot, &old_llm, &base_request)
|
|
|
|
|
provider_retry_identity_for_response_stream_test(&base_snapshot, &old_llm, &base_request)
|
|
|
|
|
.expect("build old base identity");
|
|
|
|
|
let repair_identity = game_creator_agent_runtime_provider_retry_identity(
|
|
|
|
|
let repair_identity = provider_retry_identity_for_response_stream_test(
|
|
|
|
|
&repair_snapshot,
|
|
|
|
|
&old_llm,
|
|
|
|
|
&repair_request,
|
|
|
|
@@ -1138,9 +1149,7 @@ async fn tool_plan_handoff_identity_drift_closes_entire_repair_chain_before_remo
|
|
|
|
|
"agentLlm.project-supervisor",
|
|
|
|
|
"测试 tool-plan handoff 身份漂移",
|
|
|
|
|
&base_request,
|
|
|
|
|
load_game_creator_app_config()
|
|
|
|
|
.expect("load test agent mode")
|
|
|
|
|
.agent_mode,
|
|
|
|
|
GAME_CREATOR_AGENT_MODE_PROVIDER.to_string(),
|
|
|
|
|
|_request| async {
|
|
|
|
|
Err(platform_llm::LlmError::Transport(
|
|
|
|
|
"identity drift must not call Provider".to_string(),
|
|
|
|
@@ -1197,7 +1206,7 @@ async fn generic_retry_identity_drift_closes_tool_plan_repair_chain_before_remov
|
|
|
|
|
persist_tool_plan_handoff_repair_chain(root, &snapshot, &old_llm);
|
|
|
|
|
let request = LlmRunRequest::new(vec![LlmMessage::user("验证通用 retry 身份漂移")]);
|
|
|
|
|
let old_identity =
|
|
|
|
|
game_creator_agent_runtime_provider_retry_identity(&snapshot, &old_llm, &request)
|
|
|
|
|
provider_retry_identity_for_response_stream_test(&snapshot, &old_llm, &request)
|
|
|
|
|
.expect("build old generic retry identity");
|
|
|
|
|
provider_retry::write_next_at(
|
|
|
|
|
root,
|
|
|
|
@@ -1220,9 +1229,7 @@ async fn generic_retry_identity_drift_closes_tool_plan_repair_chain_before_remov
|
|
|
|
|
"agentLlm.project-supervisor",
|
|
|
|
|
"测试通用 retry 身份漂移",
|
|
|
|
|
&request,
|
|
|
|
|
load_game_creator_app_config()
|
|
|
|
|
.expect("load test agent mode")
|
|
|
|
|
.agent_mode,
|
|
|
|
|
GAME_CREATOR_AGENT_MODE_PROVIDER.to_string(),
|
|
|
|
|
|_request| async {
|
|
|
|
|
Err(platform_llm::LlmError::Transport(
|
|
|
|
|
"generic retry drift must not call Provider".to_string(),
|
|
|
|
@@ -1289,7 +1296,7 @@ async fn tool_plan_capacity_gate_runs_before_provider_lifecycle_and_network() {
|
|
|
|
|
"capacity request {loop_iteration}"
|
|
|
|
|
))]);
|
|
|
|
|
let identity =
|
|
|
|
|
game_creator_agent_runtime_provider_retry_identity(&entry_snapshot, &llm, &request)
|
|
|
|
|
provider_retry_identity_for_response_stream_test(&entry_snapshot, &llm, &request)
|
|
|
|
|
.expect("build capacity entry identity");
|
|
|
|
|
let request_id = game_creator_agent_runtime_provider_request_id(&entry_snapshot);
|
|
|
|
|
let response = platform_llm::LlmRunResponse {
|
|
|
|
@@ -1335,9 +1342,7 @@ async fn tool_plan_capacity_gate_runs_before_provider_lifecycle_and_network() {
|
|
|
|
|
"agentLlm.project-supervisor",
|
|
|
|
|
"测试 tool-plan 请求前容量门禁",
|
|
|
|
|
&request,
|
|
|
|
|
load_game_creator_app_config()
|
|
|
|
|
.expect("load test agent mode")
|
|
|
|
|
.agent_mode,
|
|
|
|
|
GAME_CREATOR_AGENT_MODE_PROVIDER.to_string(),
|
|
|
|
|
move |_request| async move {
|
|
|
|
|
provider_called_for_request.store(true, Ordering::Release);
|
|
|
|
|
Err(platform_llm::LlmError::Transport(
|
|
|
|
@@ -1404,10 +1409,10 @@ async fn tool_plan_handoff_durable_control_closes_entire_repair_chain_before_rem
|
|
|
|
|
retry_backoff_ms: 1,
|
|
|
|
|
};
|
|
|
|
|
let base_identity =
|
|
|
|
|
game_creator_agent_runtime_provider_retry_identity(&base_snapshot, &llm, &base_request)
|
|
|
|
|
provider_retry_identity_for_response_stream_test(&base_snapshot, &llm, &base_request)
|
|
|
|
|
.expect("build durable control base identity");
|
|
|
|
|
let repair_identity =
|
|
|
|
|
game_creator_agent_runtime_provider_retry_identity(&repair_snapshot, &llm, &repair_request)
|
|
|
|
|
provider_retry_identity_for_response_stream_test(&repair_snapshot, &llm, &repair_request)
|
|
|
|
|
.expect("build durable control repair identity");
|
|
|
|
|
let base_request_id = game_creator_agent_runtime_provider_request_id(&base_snapshot);
|
|
|
|
|
let repair_request_id = game_creator_agent_runtime_provider_request_id(&repair_snapshot);
|
|
|
|
@@ -1470,9 +1475,7 @@ async fn tool_plan_handoff_durable_control_closes_entire_repair_chain_before_rem
|
|
|
|
|
"agentLlm.project-supervisor",
|
|
|
|
|
"测试 durable control 清理 tool-plan handoff",
|
|
|
|
|
&base_request,
|
|
|
|
|
load_game_creator_app_config()
|
|
|
|
|
.expect("load test agent mode")
|
|
|
|
|
.agent_mode,
|
|
|
|
|
GAME_CREATOR_AGENT_MODE_PROVIDER.to_string(),
|
|
|
|
|
|_request| async {
|
|
|
|
|
Err(platform_llm::LlmError::Transport(
|
|
|
|
|
"durable control must not call Provider".to_string(),
|
|
|
|
@@ -1528,7 +1531,7 @@ fn provider_recovery_cleanup_closes_tool_plan_lifecycle_before_removing_handoff(
|
|
|
|
|
max_retries: 0,
|
|
|
|
|
retry_backoff_ms: 1,
|
|
|
|
|
};
|
|
|
|
|
let identity = game_creator_agent_runtime_provider_retry_identity(&snapshot, &llm, &request)
|
|
|
|
|
let identity = provider_retry_identity_for_response_stream_test(&snapshot, &llm, &request)
|
|
|
|
|
.expect("build cleanup handoff identity");
|
|
|
|
|
let request_id = game_creator_agent_runtime_provider_request_id(&snapshot);
|
|
|
|
|
append_game_creator_agent_runtime_provider_request_lifecycle(
|
|
|
|
@@ -1598,7 +1601,7 @@ fn runtime_resume_scans_and_cleans_terminal_tool_plan_handoff() {
|
|
|
|
|
max_retries: 0,
|
|
|
|
|
retry_backoff_ms: 1,
|
|
|
|
|
};
|
|
|
|
|
let identity = game_creator_agent_runtime_provider_retry_identity(&snapshot, &llm, &request)
|
|
|
|
|
let identity = provider_retry_identity_for_response_stream_test(&snapshot, &llm, &request)
|
|
|
|
|
.expect("build terminal handoff identity");
|
|
|
|
|
let request_id = game_creator_agent_runtime_provider_request_id(&snapshot);
|
|
|
|
|
append_game_creator_agent_runtime_provider_request_lifecycle(
|
|
|
|
@@ -1692,7 +1695,7 @@ async fn provider_handoff_retry_conflict_preserves_both_sidecars_for_reconciliat
|
|
|
|
|
max_retries: 1,
|
|
|
|
|
retry_backoff_ms: 1,
|
|
|
|
|
};
|
|
|
|
|
let identity = game_creator_agent_runtime_provider_retry_identity(&snapshot, &llm, &request)
|
|
|
|
|
let identity = provider_retry_identity_for_response_stream_test(&snapshot, &llm, &request)
|
|
|
|
|
.expect("build Provider recovery identity");
|
|
|
|
|
let provider_request_id = game_creator_agent_runtime_provider_request_id(&snapshot);
|
|
|
|
|
append_game_creator_agent_runtime_provider_request_lifecycle(
|
|
|
|
@@ -1738,9 +1741,7 @@ async fn provider_handoff_retry_conflict_preserves_both_sidecars_for_reconciliat
|
|
|
|
|
"agentLlm.design-director",
|
|
|
|
|
"测试 Provider recovery 冲突",
|
|
|
|
|
&request,
|
|
|
|
|
load_game_creator_app_config()
|
|
|
|
|
.expect("load test agent mode")
|
|
|
|
|
.agent_mode,
|
|
|
|
|
GAME_CREATOR_AGENT_MODE_PROVIDER.to_string(),
|
|
|
|
|
|_request| async {
|
|
|
|
|
Err(platform_llm::LlmError::Transport(
|
|
|
|
|
"reconciliation must not call Provider".to_string(),
|
|
|
|
|