减少图片工具参数归一的冗余 JSON 拷贝
normalize_legacy_image_model_args 改为按需返回 Cow 未命中归一时复用原始参数视图,避免多一次深拷贝
This commit is contained in:
@@ -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<T: DeserializeOwned>(
|
||||
/// 平台层图片工具只接受 `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<T: DeserializeOwned>(
|
||||
tool_name: &str,
|
||||
value: &Value,
|
||||
) -> Result<T, EditorAgentToolError> {
|
||||
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<T: DeserializeOwned>(
|
||||
label: &str,
|
||||
value: &Value,
|
||||
) -> Result<T, EditorAgentToolError> {
|
||||
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` 表示自动时长,必须原样保留,不能被通用的
|
||||
|
||||
Reference in New Issue
Block a user