mcp_protocol/types/sampling/
mod.rs1use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(tag = "type")]
8pub enum MessageContent {
9 #[serde(rename = "text")]
10 Text {
11 text: String,
12 },
13 #[serde(rename = "image")]
14 Image {
15 data: String,
16 mime_type: String,
17 },
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct Message {
23 pub role: String,
24 pub content: MessageContent,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct ModelHint {
30 pub name: String,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct ModelPreferences {
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub hints: Option<Vec<ModelHint>>,
39
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub cost_priority: Option<f32>,
43
44 #[serde(skip_serializing_if = "Option::is_none")]
46 pub speed_priority: Option<f32>,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub intelligence_priority: Option<f32>,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct CreateMessageParams {
56 pub messages: Vec<Message>,
58
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub model_preferences: Option<ModelPreferences>,
62
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub system_prompt: Option<String>,
66
67 #[serde(skip_serializing_if = "Option::is_none")]
69 pub max_tokens: Option<u32>,
70
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub temperature: Option<f32>,
74
75 #[serde(skip_serializing_if = "Option::is_none")]
77 pub top_p: Option<f32>,
78
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub context: Option<HashMap<String, String>>,
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct CreateMessageResult {
87 pub role: String,
89
90 pub content: MessageContent,
92
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub model: Option<String>,
96
97 #[serde(skip_serializing_if = "Option::is_none")]
99 pub stop_reason: Option<String>,
100
101 #[serde(skip_serializing_if = "Option::is_none")]
103 pub metadata: Option<HashMap<String, serde_json::Value>>,
104}