refactor: 直接使用 TolerantJsonParser 而不是通过命令调用

- 移除对 parse_json_tolerant 命令的依赖,避免 Mutex 污染问题
- 直接创建和使用 TolerantJsonParser 实例
- 简化代码路径,提高性能和稳定性
- 移除不必要的 JsonParserState 参数
This commit is contained in:
imeepos 2025-08-15 18:59:42 +08:00
parent 8785cc6097
commit 9ba62d9e06
1 changed files with 13 additions and 21 deletions

View File

@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize};
use serde_json::Value; use serde_json::Value;
use chrono; use chrono;
use veo3_scene_writer::Veo3ActorDefine; use veo3_scene_writer::Veo3ActorDefine;
use crate::presentation::commands::tolerant_json_commands::{ParseJsonRequest, JsonParserState}; use crate::infrastructure::tolerant_json_parser::TolerantJsonParser;
/// VEO3 角色定义响应结构 /// VEO3 角色定义响应结构
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
@ -202,7 +202,6 @@ pub struct CreateActorFileResponse {
pub async fn veo3_actor_define_create_actor_file( pub async fn veo3_actor_define_create_actor_file(
request: CreateActorFileRequest, request: CreateActorFileRequest,
session_manager: State<'_, Veo3ActorDefineSessionManager>, session_manager: State<'_, Veo3ActorDefineSessionManager>,
json_parser_state: State<'_, JsonParserState>,
) -> Result<CreateActorFileResponse, String> { ) -> Result<CreateActorFileResponse, String> {
// 获取最近一次助手回复 // 获取最近一次助手回复
let last_assistant_message = { let last_assistant_message = {
@ -233,16 +232,20 @@ pub async fn veo3_actor_define_create_actor_file(
}; };
// 使用容错JSON解析器提取JSON // 使用容错JSON解析器提取JSON
let parse_request = ParseJsonRequest { let mut parser = match TolerantJsonParser::new(None) {
text: assistant_message, Ok(p) => p,
config: None, Err(e) => {
return Ok(CreateActorFileResponse {
success: false,
file_path: None,
extracted_json: None,
error: Some(format!("创建JSON解析器失败: {}", e)),
});
}
}; };
let parse_response = match crate::presentation::commands::tolerant_json_commands::parse_json_tolerant( let json_data = match parser.parse(&assistant_message) {
parse_request, Ok((data, _statistics)) => data,
json_parser_state,
).await {
Ok(response) => response,
Err(e) => { Err(e) => {
return Ok(CreateActorFileResponse { return Ok(CreateActorFileResponse {
success: false, success: false,
@ -253,17 +256,6 @@ pub async fn veo3_actor_define_create_actor_file(
} }
}; };
if !parse_response.success || parse_response.data.is_none() {
return Ok(CreateActorFileResponse {
success: false,
file_path: None,
extracted_json: None,
error: Some(parse_response.error.unwrap_or_else(|| "JSON解析失败".to_string())),
});
}
let json_data = parse_response.data.unwrap();
// 生成文件名 // 生成文件名
let file_name = request.file_name.unwrap_or_else(|| { let file_name = request.file_name.unwrap_or_else(|| {
let timestamp = chrono::Utc::now().format("%Y%m%d_%H%M%S"); let timestamp = chrono::Utc::now().format("%Y%m%d_%H%M%S");