ds_api/raw/mod.rs
1//! 原始 API 数据结构模块
2//!
3//! 提供与 DeepSeek API 直接对应的原始数据结构,这些结构体直接映射到 API 的 JSON 格式。
4//! 这个模块适合需要直接控制 API 请求和响应的用户。
5//!
6//! # 模块结构
7//!
8//! - [`request`]
9//! - [`response`]
10//!
11//! # 主要类型
12//!
13//! ## 请求类型
14//!
15//! - [`ChatCompletionRequest`]
16//! - [`Message`]
17//! - [`Model`]
18//! - [`Tool`]
19//! - [`ResponseFormat`]
20//! - [`Thinking`]
21//! - [`Stop`]
22//! - [`StreamOptions`]
23//!
24//! ## 响应类型
25//!
26//! - [`ChatCompletionResponse`]
27//! - [`ChatCompletionChunk`]
28//! - [`Choice`]
29//! - [`Usage`]
30//!
31//! # 使用场景
32//!
33//! 使用原始数据结构适合以下场景:
34//!
35//! 1. **需要完全控制 API 请求**:直接设置所有字段
36//! 2. **高级功能使用**:如工具调用、推理模式等
37//! 3. **性能优化**:避免构建器的开销
38//! 4. **与现有代码集成**:直接使用 serde 序列化/反序列化
39//!
40//! # 示例
41//!
42//! ## 基本使用
43//!
44//! ```rust
45//! use ds_api::raw::{ChatCompletionRequest, Message, Model, Role};
46//! use serde_json::json;
47//!
48//! fn main() {
49//! // 示例 1: 基本聊天补全请求
50//! let basic_request = ChatCompletionRequest {
51//! messages: vec![
52//! Message::new(Role::System, "You are a helpful assistant."),
53//! Message::new(Role::User, "What is the capital of France?"),
54//! ],
55//! model: Model::DeepseekChat,
56//! max_tokens: Some(100),
57//! temperature: Some(0.7),
58//! stream: Some(false),
59//! ..Default::default()
60//! };
61//!
62//! println!("Basic request JSON:");
63//! let json = serde_json::to_string_pretty(&basic_request).unwrap();
64//! println!("{}\n", json);
65//!
66//! // 示例 2: 带工具调用的请求
67//! use ds_api::raw::{Tool, ToolChoice, ToolChoiceType, ToolType, Function};
68//!
69//! let tool_request = ChatCompletionRequest {
70//! messages: vec![Message::new(Role::User, "What's the weather like in Tokyo?")],
71//! model: Model::DeepseekChat,
72//! max_tokens: Some(200),
73//! temperature: Some(0.8),
74//! stream: Some(false),
75//! tools: Some(vec![Tool {
76//! r#type: ToolType::Function,
77//! function: Function {
78//! name: "get_weather".to_string(),
79//! description: Some("Get the current weather for a location".to_string()),
80//! parameters: json!({
81//! "type": "object",
82//! "properties": {
83//! "location": {
84//! "type": "string",
85//! "description": "The city and country, e.g. Tokyo, Japan"
86//! }
87//! },
88//! "required": ["location"]
89//! }),
90//! strict: Some(true),
91//! },
92//! }]),
93//! tool_choice: Some(ToolChoice::String(ToolChoiceType::Auto)),
94//! ..Default::default()
95//! };
96//!
97//! println!("Tool request JSON:");
98//! let json = serde_json::to_string_pretty(&tool_request).unwrap();
99//! println!("{}\n", json);
100//!
101//! // 示例 3: 使用 DeepSeek Reasoner 模型
102//! use ds_api::raw::{Thinking, ThinkingType};
103//!
104//! let reasoner_request = ChatCompletionRequest {
105//! messages: vec![
106//! Message::new(Role::System, "You are a helpful assistant that explains your reasoning."),
107//! Message::new(Role::User, "Solve this math problem: What is 15% of 200?"),
108//! ],
109//! model: Model::DeepseekReasoner,
110//! thinking: Some(Thinking {
111//! r#type: ThinkingType::Enabled,
112//! }),
113//! max_tokens: Some(150),
114//! temperature: Some(0.3),
115//! stream: Some(false),
116//! ..Default::default()
117//! };
118//!
119//! println!("Reasoner request JSON:");
120//! let json = serde_json::to_string_pretty(&reasoner_request).unwrap();
121//! println!("{}\n", json);
122//!
123//! // 示例 4: JSON 模式响应格式
124//! use ds_api::raw::{ResponseFormat, ResponseFormatType};
125//!
126//! let json_request = ChatCompletionRequest {
127//! messages: vec![
128//! Message::new(Role::System, "You are a helpful assistant that always responds in valid JSON format."),
129//! Message::new(Role::User, "Give me information about Paris in JSON format with fields: name, country, population, and landmarks."),
130//! ],
131//! model: Model::DeepseekChat,
132//! max_tokens: Some(200),
133//! temperature: Some(0.5),
134//! stream: Some(false),
135//! response_format: Some(ResponseFormat {
136//! r#type: ResponseFormatType::JsonObject,
137//! }),
138//! ..Default::default()
139//! };
140//!
141//! println!("JSON mode request:");
142//! let json = serde_json::to_string_pretty(&json_request).unwrap();
143//! println!("{}\n", json);
144//! }
145//! ```
146//!
147//! # 序列化/反序列化
148//!
149//! 所有结构体都实现了 `Serialize` 和 `Deserialize` trait,可以直接使用 `serde_json` 进行序列化和反序列化:
150//!
151//! ```rust
152//! use ds_api::raw::{ChatCompletionRequest, Message, Model, Role};
153//!
154//! let request = ChatCompletionRequest {
155//! messages: vec![Message::new(Role::User, "Hello")],
156//! model: Model::DeepseekChat,
157//! ..Default::default()
158//! };
159//! let json_string = serde_json::to_string(&request).unwrap();
160//! let parsed_request: ChatCompletionRequest = serde_json::from_str(&json_string).unwrap();
161//! ```
162//!
163//! # 与高级 API 的关系
164//!
165//! 高级 API(如 [`Request`](../request/struct.Request.html))内部使用这些原始数据结构,
166//! 但提供了更友好的构建器接口和验证逻辑。如果你需要更简单的使用方式,请
167pub mod request;
168pub mod response;
169
170pub use request::*;
171pub use response::*;