agixt_sdk/client/
providers.rs1use crate::error::Result;
4use std::collections::HashMap;
5
6impl super::AGiXTSDK {
7 pub async fn get_providers(&self) -> Result<Vec<serde_json::Value>> {
11 let response = self
12 .client
13 .get(&format!("{}/v1/provider", self.base_uri))
14 .headers(self.headers.lock().await.clone())
15 .send()
16 .await?;
17
18 let status = response.status();
19 let text = response.text().await?;
20
21 if self.verbose {
22 self.parse_response(status, &text).await?;
23 }
24
25 let data: serde_json::Value = serde_json::from_str(&text)?;
27 if let Some(arr) = data.as_array() {
28 return Ok(arr.clone());
29 }
30 if let Some(obj) = data.as_object() {
31 if let Some(providers) = obj.get("providers").and_then(|v| v.as_array()) {
32 return Ok(providers.clone());
33 }
34 }
35 Ok(vec![])
36 }
37
38 pub async fn get_providers_by_service(&self, service: &str) -> Result<Vec<serde_json::Value>> {
40 let response = self
41 .client
42 .get(&format!("{}/v1/providers/service/{}", self.base_uri, service))
43 .headers(self.headers.lock().await.clone())
44 .send()
45 .await?;
46
47 let status = response.status();
48 let text = response.text().await?;
49
50 if self.verbose {
51 self.parse_response(status, &text).await?;
52 }
53
54 let data: serde_json::Value = serde_json::from_str(&text)?;
55 if let Some(arr) = data.as_array() {
56 return Ok(arr.clone());
57 }
58 if let Some(obj) = data.as_object() {
59 if let Some(providers) = obj.get("providers").and_then(|v| v.as_array()) {
60 return Ok(providers.clone());
61 }
62 }
63 Ok(vec![])
64 }
65
66 pub async fn get_provider_settings(&self, provider_name: &str) -> Result<HashMap<String, serde_json::Value>> {
68 let response = self
69 .client
70 .get(&format!("{}/v1/provider/{}", self.base_uri, provider_name))
71 .headers(self.headers.lock().await.clone())
72 .send()
73 .await?;
74
75 let status = response.status();
76 let text = response.text().await?;
77
78 if self.verbose {
79 self.parse_response(status, &text).await?;
80 }
81
82 #[derive(serde::Deserialize)]
83 struct SettingsResponse {
84 settings: HashMap<String, serde_json::Value>,
85 }
86
87 let result: SettingsResponse = serde_json::from_str(&text)?;
88 Ok(result.settings)
89 }
90
91 pub async fn get_embed_providers(&self) -> Result<Vec<String>> {
93 let providers = self.get_providers().await?;
94 let mut embed_providers = Vec::new();
95
96 for provider in providers {
97 if let Some(obj) = provider.as_object() {
98 if obj.get("supports_embeddings").and_then(|v| v.as_bool()).unwrap_or(false) {
99 if let Some(name) = obj.get("name").and_then(|v| v.as_str()) {
100 embed_providers.push(name.to_string());
101 }
102 }
103 }
104 }
105
106 Ok(embed_providers)
107 }
108
109 pub async fn get_embedders(&self) -> Result<HashMap<String, serde_json::Value>> {
111 let providers = self.get_providers().await?;
112 let mut embedders = HashMap::new();
113
114 for provider in providers {
115 if let Some(obj) = provider.as_object() {
116 if obj.get("supports_embeddings").and_then(|v| v.as_bool()).unwrap_or(false) {
117 if let Some(name) = obj.get("name").and_then(|v| v.as_str()) {
118 embedders.insert(name.to_string(), provider.clone());
119 }
120 }
121 }
122 }
123
124 Ok(embedders)
125 }
126
127 pub async fn get_extension_settings(&self) -> Result<serde_json::Value> {
131 let response = self
132 .client
133 .get(&format!("{}/v1/extensions/settings", self.base_uri))
134 .headers(self.headers.lock().await.clone())
135 .send()
136 .await?;
137
138 let status = response.status();
139 let text = response.text().await?;
140
141 if self.verbose {
142 self.parse_response(status, &text).await?;
143 }
144
145 #[derive(serde::Deserialize)]
146 struct ExtensionSettingsResponse {
147 extension_settings: serde_json::Value,
148 }
149
150 let result: ExtensionSettingsResponse = serde_json::from_str(&text)?;
151 Ok(result.extension_settings)
152 }
153
154 pub async fn get_extensions(&self) -> Result<Vec<serde_json::Value>> {
156 let response = self
157 .client
158 .get(&format!("{}/v1/extensions", self.base_uri))
159 .headers(self.headers.lock().await.clone())
160 .send()
161 .await?;
162
163 let status = response.status();
164 let text = response.text().await?;
165
166 if self.verbose {
167 self.parse_response(status, &text).await?;
168 }
169
170 let data: serde_json::Value = serde_json::from_str(&text)?;
171 if let Some(arr) = data.as_array() {
172 return Ok(arr.clone());
173 }
174 if let Some(obj) = data.as_object() {
175 if let Some(extensions) = obj.get("extensions").and_then(|v| v.as_array()) {
176 return Ok(extensions.clone());
177 }
178 }
179 Ok(vec![])
180 }
181
182 pub async fn get_command_args(&self, command_name: &str) -> Result<serde_json::Value> {
184 let response = self
185 .client
186 .get(&format!("{}/v1/extensions/{}/args", self.base_uri, command_name))
187 .headers(self.headers.lock().await.clone())
188 .send()
189 .await?;
190
191 let status = response.status();
192 let text = response.text().await?;
193
194 if self.verbose {
195 self.parse_response(status, &text).await?;
196 }
197
198 #[derive(serde::Deserialize)]
199 struct CommandArgsResponse {
200 command_args: serde_json::Value,
201 }
202
203 let result: CommandArgsResponse = serde_json::from_str(&text)?;
204 Ok(result.command_args)
205 }
206}