Skip to content

Commit 7106de5

Browse files
fix: REST API JSON parse failure hangs frontend AI listener (Closes #706) (#733)
1 parent 6a692e7 commit 7106de5

1 file changed

Lines changed: 44 additions & 16 deletions

File tree

src-tauri/src/ai_provider/rest_providers.rs

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,17 @@ pub(super) async fn run_rest_anthropic(
6363
return Ok(());
6464
}
6565

66-
let json: serde_json::Value = resp
67-
.json()
68-
.await
69-
.map_err(|e| format!("Failed to parse response: {}", e))?;
66+
let json: serde_json::Value = match resp.json().await {
67+
Ok(v) => v,
68+
Err(e) => {
69+
emit_error(
70+
window,
71+
request_id,
72+
&format!("Failed to parse Anthropic response: {}", e),
73+
);
74+
return Ok(());
75+
}
76+
};
7077

7178
// Extract text from content blocks
7279
if let Some(content) = json.get("content").and_then(|c| c.as_array()) {
@@ -126,10 +133,17 @@ pub(super) async fn run_rest_openai(
126133
return Ok(());
127134
}
128135

129-
let json: serde_json::Value = resp
130-
.json()
131-
.await
132-
.map_err(|e| format!("Failed to parse response: {}", e))?;
136+
let json: serde_json::Value = match resp.json().await {
137+
Ok(v) => v,
138+
Err(e) => {
139+
emit_error(
140+
window,
141+
request_id,
142+
&format!("Failed to parse OpenAI response: {}", e),
143+
);
144+
return Ok(());
145+
}
146+
};
133147

134148
if let Some(text) = json
135149
.get("choices")
@@ -191,10 +205,17 @@ pub(super) async fn run_rest_google(
191205
return Ok(());
192206
}
193207

194-
let json: serde_json::Value = resp
195-
.json()
196-
.await
197-
.map_err(|e| format!("Failed to parse response: {}", e))?;
208+
let json: serde_json::Value = match resp.json().await {
209+
Ok(v) => v,
210+
Err(e) => {
211+
emit_error(
212+
window,
213+
request_id,
214+
&format!("Failed to parse Google AI response: {}", e),
215+
);
216+
return Ok(());
217+
}
218+
};
198219

199220
if let Some(text) = json
200221
.get("candidates")
@@ -254,10 +275,17 @@ pub(super) async fn run_rest_ollama(
254275
return Ok(());
255276
}
256277

257-
let json: serde_json::Value = resp
258-
.json()
259-
.await
260-
.map_err(|e| format!("Failed to parse response: {}", e))?;
278+
let json: serde_json::Value = match resp.json().await {
279+
Ok(v) => v,
280+
Err(e) => {
281+
emit_error(
282+
window,
283+
request_id,
284+
&format!("Failed to parse Ollama response: {}", e),
285+
);
286+
return Ok(());
287+
}
288+
};
261289

262290
if let Some(text) = json.get("response").and_then(|r| r.as_str()) {
263291
emit_chunk(window, request_id, text);

0 commit comments

Comments
 (0)