Skip to content

Commit 75aad93

Browse files
committed
format llm error when serving over http
1 parent bcd861f commit 75aad93

File tree

3 files changed

+61
-30
lines changed

3 files changed

+61
-30
lines changed

shai-http/src/apis/openai/completion/formatter.rs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,30 @@ impl EventFormatter for ChatCompletionFormatter {
6161
match event {
6262
// Capture assistant messages from brain results
6363
AgentEvent::BrainResult { thought, .. } => {
64-
if let Ok(msg) = thought {
65-
if let ChatMessage::Assistant {
66-
content: Some(ChatMessageContent::Text(text)),
67-
..
68-
} = msg
69-
{
70-
// Accumulate the text for final response
71-
self.accumulated_text = text;
64+
match thought {
65+
Ok(msg) => {
66+
if let ChatMessage::Assistant {
67+
content: Some(ChatMessageContent::Text(text)),
68+
..
69+
} = msg
70+
{
71+
// Accumulate the text for final response
72+
self.accumulated_text = text;
73+
}
74+
None
75+
}
76+
Err(err) => {
77+
// Stream error as assistant message
78+
let delta = DeltaChatMessage::Assistant {
79+
content: Some(ChatMessageContent::Text(format!("Error: {}", err))),
80+
reasoning_content: None,
81+
refusal: None,
82+
name: None,
83+
tool_calls: None,
84+
};
85+
Some(self.create_chunk(delta, Some(FinishReason::StopSequenceReached)))
7286
}
7387
}
74-
None
7588
}
7689

7790
// Tool call started - stream as thinking delta

shai-http/src/apis/openai/response/formatter.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,13 +114,19 @@ impl EventFormatter for ResponseFormatter {
114114
match event {
115115
// Capture assistant messages from brain results
116116
AgentEvent::BrainResult { thought, .. } => {
117-
if let Ok(msg) = thought {
118-
if let ChatMessage::Assistant {
119-
content: Some(ChatMessageContent::Text(text)),
120-
..
121-
} = msg
122-
{
123-
self.accumulated_text = text;
117+
match thought {
118+
Ok(msg) => {
119+
if let ChatMessage::Assistant {
120+
content: Some(ChatMessageContent::Text(text)),
121+
..
122+
} = msg
123+
{
124+
self.accumulated_text = text;
125+
}
126+
}
127+
Err(err) => {
128+
// Accumulate error message as text
129+
self.accumulated_text = format!("Error: {}", err);
124130
}
125131
}
126132
None

shai-http/src/apis/simple/formatter.rs

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,39 @@ impl EventFormatter for SimpleFormatter {
2828
) -> Option<Self::Output> {
2929
match event {
3030
AgentEvent::BrainResult { thought, .. } => {
31-
if let Ok(msg) = thought {
32-
// Extract text content from the ChatMessage
33-
let text_content = match &msg {
34-
ChatMessage::Assistant {
35-
content: Some(ChatMessageContent::Text(text)),
36-
..
37-
} => Some(text.clone()),
38-
_ => None,
39-
};
31+
match thought {
32+
Ok(msg) => {
33+
// Extract text content from the ChatMessage
34+
let text_content = match &msg {
35+
ChatMessage::Assistant {
36+
content: Some(ChatMessageContent::Text(text)),
37+
..
38+
} => Some(text.clone()),
39+
_ => None,
40+
};
4041

41-
if let Some(text) = text_content {
42-
return Some(MultiModalStreamingResponse {
42+
if let Some(text) = text_content {
43+
return Some(MultiModalStreamingResponse {
44+
id: session_id.to_string(),
45+
model: self.model.clone(),
46+
assistant: Some(text),
47+
call: None,
48+
result: None,
49+
});
50+
}
51+
None
52+
}
53+
Err(err) => {
54+
// Format error as assistant message
55+
Some(MultiModalStreamingResponse {
4356
id: session_id.to_string(),
4457
model: self.model.clone(),
45-
assistant: Some(text),
58+
assistant: Some(format!("Error: {}", err)),
4659
call: None,
4760
result: None,
48-
});
61+
})
4962
}
5063
}
51-
None
5264
}
5365
AgentEvent::ToolCallStarted { call, .. } => Some(MultiModalStreamingResponse {
5466
id: session_id.to_string(),

0 commit comments

Comments
 (0)