turbomcp_protocol/types/
sampling.rs1use serde::{Deserialize, Serialize};
7use std::collections::HashMap;
8
9use super::{content::Content, core::Role};
10
11#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
13#[serde(rename_all = "camelCase")]
14pub enum IncludeContext {
15 None,
17 ThisServer,
19 AllServers,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct SamplingMessage {
26 pub role: Role,
28 pub content: Content,
30 #[serde(skip_serializing_if = "Option::is_none")]
32 pub metadata: Option<HashMap<String, serde_json::Value>>,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct CreateMessageRequest {
38 pub messages: Vec<SamplingMessage>,
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub model_preferences: Option<ModelPreferences>,
43 #[serde(rename = "systemPrompt", skip_serializing_if = "Option::is_none")]
45 pub system_prompt: Option<String>,
46 #[serde(rename = "includeContext", skip_serializing_if = "Option::is_none")]
48 pub include_context: Option<IncludeContext>,
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub temperature: Option<f64>,
52 #[serde(rename = "maxTokens")]
54 pub max_tokens: u32,
55 #[serde(rename = "stopSequences", skip_serializing_if = "Option::is_none")]
57 pub stop_sequences: Option<Vec<String>>,
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub _meta: Option<serde_json::Value>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
65pub struct ModelHint {
66 #[serde(skip_serializing_if = "Option::is_none")]
69 pub name: Option<String>,
70}
71
72impl ModelHint {
73 pub fn new(name: impl Into<String>) -> Self {
75 Self {
76 name: Some(name.into()),
77 }
78 }
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct ModelPreferences {
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub hints: Option<Vec<ModelHint>>,
90
91 #[serde(rename = "costPriority", skip_serializing_if = "Option::is_none")]
93 pub cost_priority: Option<f64>,
94
95 #[serde(rename = "speedPriority", skip_serializing_if = "Option::is_none")]
97 pub speed_priority: Option<f64>,
98
99 #[serde(
101 rename = "intelligencePriority",
102 skip_serializing_if = "Option::is_none"
103 )]
104 pub intelligence_priority: Option<f64>,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct CreateMessageResult {
110 pub role: super::core::Role,
112 pub content: Content,
114 pub model: String,
116 #[serde(rename = "stopReason", skip_serializing_if = "Option::is_none")]
120 pub stop_reason: Option<StopReason>,
121 #[serde(skip_serializing_if = "Option::is_none")]
123 pub _meta: Option<serde_json::Value>,
124}
125
126#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
130#[serde(rename_all = "camelCase")]
131pub enum StopReason {
132 EndTurn,
134 MaxTokens,
136 StopSequence,
138 ContentFilter,
140 ToolUse,
142}
143
144#[derive(Debug, Clone, Serialize, Deserialize)]
146pub struct UsageStats {
147 #[serde(rename = "inputTokens", skip_serializing_if = "Option::is_none")]
149 pub input_tokens: Option<u32>,
150 #[serde(rename = "outputTokens", skip_serializing_if = "Option::is_none")]
152 pub output_tokens: Option<u32>,
153 #[serde(rename = "totalTokens", skip_serializing_if = "Option::is_none")]
155 pub total_tokens: Option<u32>,
156}