Skip to main content

lellm_core/
request.rs

1//! 请求类型。
2
3use serde::{Deserialize, Serialize};
4
5/// 统一的聊天请求。
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct ChatRequest {
8    pub model: String,
9    pub messages: Vec<crate::Message>,
10    pub tools: Option<Vec<ToolDefinition>>,
11    pub temperature: Option<f64>,
12    pub tool_choice: Option<ToolChoice>,
13    pub stop_sequences: Option<Vec<String>>,
14    pub prefill: Option<String>,
15}
16
17impl Default for ChatRequest {
18    fn default() -> Self {
19        Self {
20            model: String::new(),
21            messages: Vec::new(),
22            tools: None,
23            temperature: Some(0.6),
24            tool_choice: None,
25            stop_sequences: None,
26            prefill: None,
27        }
28    }
29}
30
31impl ChatRequest {
32    /// 便捷构造:单条用户消息
33    pub fn user_prompt(prompt: String) -> Self {
34        Self {
35            messages: vec![crate::Message::User {
36                content: crate::text_block(prompt),
37            }],
38            ..Default::default()
39        }
40    }
41
42    pub fn with_temperature(mut self, temp: f64) -> Self {
43        self.temperature = Some(temp);
44        self
45    }
46
47    pub fn with_model(mut self, model: String) -> Self {
48        self.model = model;
49        self
50    }
51}
52
53/// 工具选择策略
54#[derive(Debug, Clone, Serialize, Deserialize)]
55pub enum ToolChoice {
56    Tool { name: String },
57    Any,
58}
59
60/// 工具定义(输入侧)。
61#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct ToolDefinition {
63    pub name: String,
64    pub description: String,
65    pub parameters: serde_json::Value,
66}