Skip to main content

talos_core/tool/
protocol.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
5#[serde(rename_all = "kebab-case")]
6pub enum ToolProtocol {
7    #[default]
8    Native,
9    TalosStrict,
10    Compat,
11}
12
13impl ToolProtocol {
14    pub fn parse(s: &str) -> Option<Self> {
15        match s {
16            "native" => Some(ToolProtocol::Native),
17            "talos-strict" | "talos_xml_json_strict" => Some(ToolProtocol::TalosStrict),
18            "compat" | "compatibility" => Some(ToolProtocol::Compat),
19            _ => None,
20        }
21    }
22}
23
24#[derive(Debug, Clone, Default)]
25pub struct ToolProtocolConfig {
26    pub protocol: ToolProtocol,
27    pub strict_prompt: bool,
28    pub stream_filter: bool,
29    pub schema_validate: bool,
30}
31
32impl ToolProtocolConfig {
33    pub fn for_protocol(protocol: ToolProtocol) -> Self {
34        match protocol {
35            ToolProtocol::Native => ToolProtocolConfig {
36                protocol,
37                strict_prompt: false,
38                stream_filter: false,
39                schema_validate: false,
40            },
41            ToolProtocol::TalosStrict => ToolProtocolConfig {
42                protocol,
43                strict_prompt: true,
44                stream_filter: true,
45                schema_validate: true,
46            },
47            ToolProtocol::Compat => ToolProtocolConfig {
48                protocol,
49                strict_prompt: false,
50                stream_filter: true,
51                schema_validate: false,
52            },
53        }
54    }
55}