From 0866878d9e8e53ac3d884059d9774f4701c9e6a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 16 Jul 2026 13:05:37 +0800 Subject: [PATCH] follow master change, use gpt-5.4-mini max_tokens=1024 --- server-rs/Cargo.lock | 1 + .../crates/api-server/src/editor_agent/api.rs | 4 +- .../crates/platform-editor-agent/Cargo.toml | 1 + .../platform-editor-agent/src/agent/agent.rs | 38 +++++++++++++++++-- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/server-rs/Cargo.lock b/server-rs/Cargo.lock index 0aafe4a79..4c8fd6522 100644 --- a/server-rs/Cargo.lock +++ b/server-rs/Cargo.lock @@ -4447,6 +4447,7 @@ name = "platform-editor-agent" version = "0.1.0" dependencies = [ "hmac", + "platform-agent", "platform-llm", "serde", "serde_json", diff --git a/server-rs/crates/api-server/src/editor_agent/api.rs b/server-rs/crates/api-server/src/editor_agent/api.rs index 6f873f3a9..3b1c69635 100644 --- a/server-rs/crates/api-server/src/editor_agent/api.rs +++ b/server-rs/crates/api-server/src/editor_agent/api.rs @@ -167,9 +167,9 @@ pub async fn editor_agent_message( let tool_context = context::build_tool_context(&document); // Build and run agent - let llm_client = state.llm_client().ok_or_else(|| { + let llm_client = state.creative_agent_gpt5_client().ok_or_else(|| { AppError::from_status(axum::http::StatusCode::SERVICE_UNAVAILABLE) - .with_details(json!({ "message": "LLM client not configured" })) + .with_details(json!({ "message": "Creative Agent GPT-5 client not configured" })) })?; let llm_client = llm_client.clone(); let pricing = state.editor_generation_pricing().await.map_err(|error| { diff --git a/server-rs/crates/platform-editor-agent/Cargo.toml b/server-rs/crates/platform-editor-agent/Cargo.toml index b236c0199..a38849a97 100644 --- a/server-rs/crates/platform-editor-agent/Cargo.toml +++ b/server-rs/crates/platform-editor-agent/Cargo.toml @@ -6,6 +6,7 @@ license.workspace = true [dependencies] hmac = { workspace = true } +platform-agent = { workspace = true } platform-llm = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } diff --git a/server-rs/crates/platform-editor-agent/src/agent/agent.rs b/server-rs/crates/platform-editor-agent/src/agent/agent.rs index 0b8ed41c6..6b9ee59f5 100644 --- a/server-rs/crates/platform-editor-agent/src/agent/agent.rs +++ b/server-rs/crates/platform-editor-agent/src/agent/agent.rs @@ -4,9 +4,13 @@ use crate::framework::error::PromptError; use crate::framework::hook::Hook; use crate::framework::memory::AgentMemory; use crate::framework::tool::{Tool, ToolDyn}; -use platform_llm::{LlmClient, LlmMessage}; +use platform_agent::CREATIVE_AGENT_GPT5_MODEL; +use platform_llm::{LlmClient, LlmMessage, LlmTextRequest}; use serde_json::Value; +const EDITOR_AGENT_LLM_MAX_OUTPUT_TOKENS: u32 = 1024; +const EDITOR_AGENT_LLM_REQUEST_TIMEOUT_MS: u64 = 60_000; + pub struct LlmCompletionModel { client: LlmClient, } @@ -16,9 +20,7 @@ impl LlmApiAdaptor for LlmCompletionModel { &self, messages: impl Iterator + Send, ) -> Result { - use platform_llm::LlmTextRequest; - let request = - LlmTextRequest::new(messages.cloned().collect()).with_request_timeout_ms(30_000); + let request = build_editor_agent_llm_request(messages.cloned().collect()); let response = self .client .request_text(request) @@ -36,6 +38,13 @@ impl LlmApiAdaptor for LlmCompletionModel { } } +fn build_editor_agent_llm_request(messages: Vec) -> LlmTextRequest { + LlmTextRequest::new(messages) + .with_model(CREATIVE_AGENT_GPT5_MODEL) + .with_max_tokens(EDITOR_AGENT_LLM_MAX_OUTPUT_TOKENS) + .with_request_timeout_ms(EDITOR_AGENT_LLM_REQUEST_TIMEOUT_MS) +} + pub struct LlmChatAgentBuilder { client: Option, system_prompt_parts: Vec, @@ -172,3 +181,24 @@ fn build_tools_system_prompt(base_prompt: &str, tool_specs: &[ToolPromptSpec]) - prompt } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn editor_agent_llm_request_keeps_gpt5_contract() { + let request = build_editor_agent_llm_request(vec![ + LlmMessage::system("系统提示"), + LlmMessage::user("用户请求"), + ]); + + assert_eq!( + request.model.as_deref(), + Some(platform_agent::CREATIVE_AGENT_GPT5_MODEL) + ); + assert_eq!(request.max_tokens, Some(1024)); + assert_eq!(request.request_timeout_ms, Some(60_000)); + assert_eq!(request.messages.len(), 2); + } +}