This commit is contained in:
2026-05-08 11:44:42 +08:00
parent b08127031c
commit abf1f1ebea
249 changed files with 39411 additions and 887 deletions

View File

@@ -0,0 +1,59 @@
use platform_llm::{
LlmClient, LlmMessage, LlmMessageContentPart, LlmMessageRole, LlmTextProtocol, LlmTextRequest,
LlmTextResponse,
};
use crate::error::PlatformAgentError;
pub const CREATIVE_AGENT_GPT5_MODEL: &str = "gpt-5";
#[derive(Clone)]
pub struct Gpt5ResponsesAgentClient {
llm_client: LlmClient,
}
impl Gpt5ResponsesAgentClient {
pub fn new(llm_client: LlmClient) -> Self {
Self { llm_client }
}
pub async fn request(
&self,
system_prompt: impl Into<String>,
user_text: impl Into<String>,
image_urls: Vec<String>,
) -> Result<LlmTextResponse, PlatformAgentError> {
let request = build_gpt5_multimodal_request(system_prompt, user_text, image_urls);
self.llm_client
.request_text(request)
.await
.map_err(Into::into)
}
}
pub fn build_gpt5_multimodal_request(
system_prompt: impl Into<String>,
user_text: impl Into<String>,
image_urls: Vec<String>,
) -> LlmTextRequest {
let mut user_parts = vec![LlmMessageContentPart::InputText {
text: user_text.into(),
}];
user_parts.extend(
image_urls
.into_iter()
.map(|image_url| LlmMessageContentPart::InputImage { image_url }),
);
LlmTextRequest {
model: Some(CREATIVE_AGENT_GPT5_MODEL.to_string()),
messages: vec![
LlmMessage::new(LlmMessageRole::System, system_prompt.into()),
LlmMessage::multimodal(LlmMessageRole::User, user_parts),
],
max_tokens: None,
request_timeout_ms: None,
enable_web_search: false,
protocol: LlmTextProtocol::Responses,
}
}