feat: add title field for data types (#410)
* feat(model): add title field to various structs * fix(test): fix test json schema * fix(model): allow boxed type in `ts_union` macro
This commit is contained in:
parent
fdd6bc0565
commit
1b70f5b032
4 changed files with 219 additions and 73 deletions
|
|
@ -66,7 +66,7 @@ pub enum RawContent {
|
|||
Text(RawTextContent),
|
||||
Image(RawImageContent),
|
||||
Resource(RawEmbeddedResource),
|
||||
Audio(AudioContent),
|
||||
Audio(RawAudioContent),
|
||||
ResourceLink(super::resource::RawResource),
|
||||
}
|
||||
|
||||
|
|
@ -253,6 +253,7 @@ mod tests {
|
|||
let resource_link = RawContent::ResourceLink(RawResource {
|
||||
uri: "file:///test.txt".to_string(),
|
||||
name: "test.txt".to_string(),
|
||||
title: None,
|
||||
description: Some("A test file".to_string()),
|
||||
mime_type: Some("text/plain".to_string()),
|
||||
size: Some(100),
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ use super::{
|
|||
pub struct Prompt {
|
||||
/// The name of the prompt
|
||||
pub name: String,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub title: Option<String>,
|
||||
/// Optional description of what the prompt does
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub description: Option<String>,
|
||||
|
|
@ -35,6 +37,7 @@ impl Prompt {
|
|||
{
|
||||
Prompt {
|
||||
name: name.into(),
|
||||
title: None,
|
||||
description: description.map(Into::into),
|
||||
arguments,
|
||||
}
|
||||
|
|
@ -47,6 +50,9 @@ impl Prompt {
|
|||
pub struct PromptArgument {
|
||||
/// The name of the argument
|
||||
pub name: String,
|
||||
/// A human-readable title for the argument
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub title: Option<String>,
|
||||
/// A description of what the argument is used for
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub description: Option<String>,
|
||||
|
|
|
|||
|
|
@ -11,6 +11,9 @@ pub struct RawResource {
|
|||
pub uri: String,
|
||||
/// Name of the resource
|
||||
pub name: String,
|
||||
/// Human-readable title of the resource
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub title: Option<String>,
|
||||
/// Optional description of the resource
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub description: Option<String>,
|
||||
|
|
@ -34,6 +37,8 @@ pub struct RawResourceTemplate {
|
|||
pub uri_template: String,
|
||||
pub name: String,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub title: Option<String>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub description: Option<String>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub mime_type: Option<String>,
|
||||
|
|
@ -82,6 +87,7 @@ impl RawResource {
|
|||
Self {
|
||||
uri: uri.into(),
|
||||
name: name.into(),
|
||||
title: None,
|
||||
description: None,
|
||||
mime_type: None,
|
||||
size: None,
|
||||
|
|
@ -99,6 +105,7 @@ mod tests {
|
|||
fn test_resource_serialization() {
|
||||
let resource = RawResource {
|
||||
uri: "file:///test.txt".to_string(),
|
||||
title: None,
|
||||
name: "test".to_string(),
|
||||
description: Some("Test resource".to_string()),
|
||||
mime_type: Some("text/plain".to_string()),
|
||||
|
|
|
|||
|
|
@ -15,6 +15,9 @@ use super::JsonObject;
|
|||
pub struct Tool {
|
||||
/// The name of the tool
|
||||
pub name: Cow<'static, str>,
|
||||
/// A human-readable title for the tool
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub title: Option<String>,
|
||||
/// A description of what the tool does
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub description: Option<Cow<'static, str>>,
|
||||
|
|
@ -138,6 +141,7 @@ impl Tool {
|
|||
{
|
||||
Tool {
|
||||
name: name.into(),
|
||||
title: None,
|
||||
description: Some(description.into()),
|
||||
input_schema: input_schema.into(),
|
||||
output_schema: None,
|
||||
|
|
|
|||
Loading…
Reference in a new issue