talos_core/tool/
protocol.rs1use 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}