mcp_kit/types/
sampling.rs1use serde::{Deserialize, Serialize};
2
3use super::content::Content;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct MessageParam {
8 pub role: SamplingRole,
9 pub content: Content,
10}
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
14#[serde(rename_all = "lowercase")]
15pub enum SamplingRole {
16 User,
17 Assistant,
18}
19
20pub type SamplingMessage = MessageParam;
22
23#[derive(Debug, Clone, Default, Serialize, Deserialize)]
25pub struct ModelHint {
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub name: Option<String>,
28}
29
30#[derive(Debug, Clone, Default, Serialize, Deserialize)]
32#[serde(rename_all = "camelCase")]
33pub struct ModelPreferences {
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub hints: Option<Vec<ModelHint>>,
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub cost_priority: Option<f64>,
39 #[serde(skip_serializing_if = "Option::is_none")]
41 pub speed_priority: Option<f64>,
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub intelligence_priority: Option<f64>,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
49#[serde(rename_all = "camelCase")]
50pub enum StopReason {
51 EndTurn,
52 MaxTokens,
53 StopSequence,
54 #[serde(other)]
55 Other,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct CreateMessageRequest {
62 pub messages: Vec<SamplingMessage>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub model_preferences: Option<ModelPreferences>,
65 #[serde(skip_serializing_if = "Option::is_none")]
66 pub system_prompt: Option<String>,
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub include_context: Option<IncludeContext>,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub temperature: Option<f64>,
71 pub max_tokens: u32,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub stop_sequences: Option<Vec<String>>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub metadata: Option<serde_json::Value>,
76}
77
78#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
79#[serde(rename_all = "camelCase")]
80pub enum IncludeContext {
81 None,
82 ThisServer,
83 AllServers,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize)]
88#[serde(rename_all = "camelCase")]
89pub struct CreateMessageResult {
90 pub role: SamplingRole,
91 pub content: Content,
92 pub model: String,
93 #[serde(skip_serializing_if = "Option::is_none")]
94 pub stop_reason: Option<StopReason>,
95}