starweaver_model/adapter/
params.rs1use serde::{Deserialize, Serialize};
2use serde_json::{Map, Value};
3
4use crate::{
5 request::{OutputMode, PreparedInstruction},
6 settings::ThinkingSettings,
7 transport::HttpRequestOptions,
8};
9
10#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
12pub struct ModelRequestParameters {
13 #[serde(default, skip_serializing_if = "Vec::is_empty")]
15 pub tools: Vec<ToolDefinition>,
16 #[serde(default, skip_serializing_if = "Vec::is_empty")]
18 pub native_tools: Vec<NativeToolDefinition>,
19 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub output_schema: Option<Value>,
22 #[serde(default, skip_serializing_if = "Option::is_none")]
24 pub output_mode: Option<OutputMode>,
25 #[serde(default, skip_serializing_if = "Vec::is_empty")]
27 pub instructions: Vec<PreparedInstruction>,
28 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub thinking: Option<ThinkingSettings>,
31 #[serde(default, skip_serializing_if = "Option::is_none")]
33 pub allow_text_output: Option<bool>,
34 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub allow_image_output: Option<bool>,
37 #[serde(default)]
39 pub http: HttpRequestOptions,
40 #[serde(default, skip_serializing_if = "Map::is_empty")]
42 pub extra_body: Map<String, Value>,
43 #[serde(default, skip_serializing_if = "Map::is_empty")]
45 pub metadata: Map<String, Value>,
46}
47
48#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
50pub struct ToolDefinition {
51 pub name: String,
53 #[serde(default, skip_serializing_if = "Option::is_none")]
55 pub description: Option<String>,
56 #[serde(default)]
58 pub parameters: Value,
59 #[serde(default, skip_serializing_if = "Option::is_none")]
61 pub return_schema: Option<Value>,
62 #[serde(default, skip_serializing_if = "Option::is_none")]
64 pub strict: Option<bool>,
65 #[serde(default, skip_serializing_if = "Option::is_none")]
67 pub sequential: Option<bool>,
68 #[serde(default, skip_serializing_if = "Map::is_empty")]
70 pub metadata: Map<String, Value>,
71}
72
73#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
75pub struct NativeToolDefinition {
76 pub tool_type: String,
78 #[serde(default, skip_serializing_if = "Map::is_empty")]
80 pub config: Map<String, Value>,
81 #[serde(default, skip_serializing_if = "Map::is_empty")]
83 pub metadata: Map<String, Value>,
84}
85
86impl NativeToolDefinition {
87 #[must_use]
89 pub fn new(tool_type: impl Into<String>) -> Self {
90 Self {
91 tool_type: tool_type.into(),
92 config: Map::new(),
93 metadata: Map::new(),
94 }
95 }
96
97 #[must_use]
99 pub fn with_config(mut self, config: Map<String, Value>) -> Self {
100 self.config = config;
101 self
102 }
103
104 #[must_use]
106 pub fn with_metadata(mut self, metadata: Map<String, Value>) -> Self {
107 self.metadata = metadata;
108 self
109 }
110}