From 4cbbcecaa25ac7413eb66e8374064f2d611a2e00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Mon, 21 Sep 2026 19:21:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=8F=E5=B0=91=E5=9B=BE=E7=89=87=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E5=8F=82=E6=95=B0=E5=BD=92=E4=B8=80=E7=9A=84=E5=86=97?= =?UTF-8?q?=E4=BD=99=20JSON=20=E6=8B=B7=E8=B4=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit normalize_legacy_image_model_args 改为按需返回 Cow 未命中归一时复用原始参数视图,避免多一次深拷贝 --- .../crates/api-server/src/editor_agent/tool.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/server-rs/crates/api-server/src/editor_agent/tool.rs b/server-rs/crates/api-server/src/editor_agent/tool.rs index b9d7b6d31..0548addbd 100644 --- a/server-rs/crates/api-server/src/editor_agent/tool.rs +++ b/server-rs/crates/api-server/src/editor_agent/tool.rs @@ -1,3 +1,4 @@ +use std::borrow::Cow; use std::fmt::{Display, Formatter}; use platform_editor_agent::agent::asset::ImageId; @@ -230,12 +231,12 @@ fn parse_internal( /// 平台层图片工具只接受 `gemini-3.1-flash-image-preview` 与 `gpt-image-2.5`,但历史会话 /// 里仍可能保存着 `gpt-image-2` 的工具调用参数。这里在进入强类型校验前做一次别名归一, /// 既让旧调用继续可用,也把计价统一到当前业务模型档位。 -fn normalize_legacy_image_model_args(value: &Value) -> Value { +fn normalize_legacy_image_model_args(value: &Value) -> Cow<'_, Value> { let Some(model) = value.get("model").and_then(Value::as_str) else { - return value.clone(); + return Cow::Borrowed(value); }; if !matches!(model.trim(), GPT_IMAGE_2_MODEL | GPT_IMAGE_2_C_MODEL) { - return value.clone(); + return Cow::Borrowed(value); } let mut normalized = value.clone(); if let Some(fields) = normalized.as_object_mut() { @@ -244,7 +245,7 @@ fn normalize_legacy_image_model_args(value: &Value) -> Value { Value::String(GPT_IMAGE_2_5_BUSINESS_NAME.to_string()), ); } - normalized + Cow::Owned(normalized) } /// 图片类工具的 `validate_args` 入口:先归一历史模型别名,再走强类型反序列化。 @@ -252,7 +253,8 @@ fn parse_invalid_image_args( tool_name: &str, value: &Value, ) -> Result { - parse_invalid_args(tool_name, &normalize_legacy_image_model_args(value)) + let normalized = normalize_legacy_image_model_args(value); + parse_invalid_args(tool_name, &normalized) } /// 图片类工具的 `pricing` 入口:即使调用方直接传入原始 args,也要先归一历史模型别名。 @@ -260,7 +262,8 @@ fn parse_internal_image_args( label: &str, value: &Value, ) -> Result { - parse_internal(label, &normalize_legacy_image_model_args(value)) + let normalized = normalize_legacy_image_model_args(value); + parse_internal(label, &normalized) } /// SFX V2 的显式 `duration: null` 表示自动时长,必须原样保留,不能被通用的