fb130d1847
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 57s
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Project CI / AI game creator shell Rust crates (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
Project CI / Frontend tests (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
Project CI / AI game creator shell Rust smoke (push) Has been cancelled
后台模型目录增加 codex/cc 执行模式绑定,旧目录缺省兼容 Codex AGC 客户端按模型绑定路由 Codex app-server 或 Claude Agent SDK sidecar 随包携带 Node runtime、Claude Agent SDK 与匹配平台 Claude runtime 补充模型配置、客户端选择、运行时适配、MCP 取消和定向测试 同步 AGC 模型配置规范、里程碑计划与共享决策记录
79 lines
2.2 KiB
Rust
79 lines
2.2 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum LlmChatMessageRole {
|
|
System,
|
|
User,
|
|
Assistant,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub struct LlmChatMessagePayload {
|
|
pub role: LlmChatMessageRole,
|
|
pub content: String,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub struct LlmChatCompletionRequest {
|
|
#[serde(default)]
|
|
pub model: Option<String>,
|
|
#[serde(default)]
|
|
pub stream: bool,
|
|
pub messages: Vec<LlmChatMessagePayload>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct LlmChatCompletionResponse {
|
|
pub id: Option<String>,
|
|
pub model: String,
|
|
pub content: String,
|
|
pub finish_reason: Option<String>,
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use serde_json::json;
|
|
|
|
#[test]
|
|
fn llm_chat_completion_request_keeps_openai_compatible_field_names() {
|
|
let payload = serde_json::to_value(LlmChatCompletionRequest {
|
|
model: Some("doubao-test".to_string()),
|
|
stream: false,
|
|
messages: vec![
|
|
LlmChatMessagePayload {
|
|
role: LlmChatMessageRole::System,
|
|
content: "系统".to_string(),
|
|
},
|
|
LlmChatMessagePayload {
|
|
role: LlmChatMessageRole::User,
|
|
content: "用户".to_string(),
|
|
},
|
|
],
|
|
})
|
|
.expect("payload should serialize");
|
|
|
|
assert_eq!(payload["model"], json!("doubao-test"));
|
|
assert_eq!(payload["stream"], json!(false));
|
|
assert_eq!(payload["messages"][0]["role"], json!("system"));
|
|
}
|
|
}
|
|
#[derive(Debug, serde::Serialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct LlmModelSummary {
|
|
pub display_name: String,
|
|
pub id: String,
|
|
pub agent_mode: String,
|
|
}
|
|
|
|
#[derive(Debug, serde::Serialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct LlmModelsResponse {
|
|
pub default_model_id: String,
|
|
pub models: Vec<LlmModelSummary>,
|
|
/// 模型目录版本,客户端据此做条件刷新。
|
|
pub revision: u64,
|
|
}
|