subcog/mcp/prompts/
types.rs1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct PromptDefinition {
10 pub name: String,
12 pub description: Option<String>,
14 pub arguments: Vec<PromptArgument>,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct PromptArgument {
21 pub name: String,
23 pub description: Option<String>,
25 pub required: bool,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct PromptMessage {
32 pub role: String,
34 pub content: PromptContent,
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize)]
40#[serde(tag = "type", rename_all = "lowercase")]
41pub enum PromptContent {
42 Text {
44 text: String,
46 },
47 Image {
49 data: String,
51 mime_type: String,
53 },
54 Resource {
56 uri: String,
58 },
59}
60
61pub fn user_prompt_to_definition(template: &crate::models::PromptTemplate) -> PromptDefinition {
63 let description = if template.description.is_empty() {
64 None
65 } else {
66 Some(template.description.clone())
67 };
68
69 PromptDefinition {
70 name: format!("user/{}", template.name),
71 description,
72 arguments: template
73 .variables
74 .iter()
75 .map(|v| PromptArgument {
76 name: v.name.clone(),
77 description: v.description.clone(),
78 required: v.required,
79 })
80 .collect(),
81 }
82}