Files
Genarrative/server-rs/crates/shared-contracts/src/llm.rs
T
suzmii d60c4ce6ec
Project CI / Frontend tests (pull_request) Successful in 3m54s
Project CI / Repository checks (pull_request) Successful in 5m41s
Project CI / Backend tests (pull_request) Successful in 14m56s
Project CI / Native shell tests (pull_request) Failing after 15m10s
优化AGC客户端同步LLM配置
- GET /api/llm/models 增加目录 revision,客户端据此做条件刷新
- AGC 客户端在项目切换、对话表面挂载、下拉展开、窗口聚焦时按 revision 条件刷新
- 模型目录请求同一时刻只保留一个在途请求,刷新失败保留上一次有效目录与本地选择
- 发起对话前校验所选模型,已停用或删除时回退默认模型并提示
- 新增模型目录缓存模块与定向测试,同步技术方案与后端架构文档
2026-09-08 16:11:36 +08:00

78 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,
}
#[derive(Debug, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct LlmModelsResponse {
pub default_model_id: String,
pub models: Vec<LlmModelSummary>,
/// 模型目录版本,客户端据此做条件刷新。
pub revision: u64,
}