Skip to content

Commit f4a7716

Browse files
authored
Merge pull request #775 from NVIDIA/release/0.7
Forward-merge release/0.7 into main
2 parents fd71f37 + 6cb6063 commit f4a7716

2 files changed

Lines changed: 72 additions & 1 deletion

File tree

crates/core/src/observability/otel_genai.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,15 @@ fn input_message(message: &Message) -> Json {
355355
Message::Developer { content, name } => {
356356
("developer", name.as_ref(), content_parts(content))
357357
}
358-
Message::User { content, name } => ("user", name.as_ref(), content_parts(content)),
358+
Message::User { content, name } => (
359+
if is_tool_result_message(content) {
360+
"tool"
361+
} else {
362+
"user"
363+
},
364+
name.as_ref(),
365+
content_parts(content),
366+
),
359367
Message::Assistant {
360368
content,
361369
tool_calls,
@@ -441,6 +449,17 @@ fn input_message(message: &Message) -> Json {
441449
Json::Object(object)
442450
}
443451

452+
fn is_tool_result_message(content: &MessageContent) -> bool {
453+
matches!(
454+
content,
455+
MessageContent::Parts(parts)
456+
if !parts.is_empty()
457+
&& parts
458+
.iter()
459+
.all(|part| matches!(part, ContentPart::ToolResult { .. }))
460+
)
461+
}
462+
444463
fn output_messages_json(response: &AnnotatedLlmResponse) -> Option<String> {
445464
let mut parts = response
446465
.message

crates/core/tests/unit/observability/otel_tests.rs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2253,6 +2253,32 @@ fn gen_ai_projection_covers_message_variants_and_empty_input() {
22532253
"content": "result",
22542254
"tool_call_id": "call-1"
22552255
},
2256+
{
2257+
"role": "user",
2258+
"content": [{
2259+
"type": "tool_result",
2260+
"tool_use_id": "call-2",
2261+
"content": "claude result"
2262+
}]
2263+
},
2264+
{
2265+
"role": "user",
2266+
"content": [
2267+
{
2268+
"type": "tool_result",
2269+
"tool_use_id": "call-3",
2270+
"content": "mixed result"
2271+
},
2272+
{
2273+
"type": "text",
2274+
"text": "continue"
2275+
}
2276+
]
2277+
},
2278+
{
2279+
"role": "user",
2280+
"content": []
2281+
},
22562282
{
22572283
"role": "user",
22582284
"content": [
@@ -2309,6 +2335,32 @@ fn gen_ai_projection_covers_message_variants_and_empty_input() {
23092335
"response": "result"
23102336
}]
23112337
},
2338+
{
2339+
"role": "tool",
2340+
"parts": [{
2341+
"type": "tool_call_response",
2342+
"id": "call-2",
2343+
"response": "claude result"
2344+
}]
2345+
},
2346+
{
2347+
"role": "user",
2348+
"parts": [
2349+
{
2350+
"type": "tool_call_response",
2351+
"id": "call-3",
2352+
"response": "mixed result"
2353+
},
2354+
{
2355+
"type": "text",
2356+
"content": "continue"
2357+
}
2358+
]
2359+
},
2360+
{
2361+
"role": "user",
2362+
"parts": []
2363+
},
23122364
{
23132365
"role": "user",
23142366
"parts": [

0 commit comments

Comments
 (0)