Fix reasoning model directive response identity

This commit is contained in:
fawney19
2026-05-11 22:48:44 +08:00
parent 7ae38b6c43
commit 0fa97595bf
9 changed files with 465 additions and 25 deletions

View File

@@ -1,6 +1,7 @@
use serde_json::Value;
use uuid::Uuid;
use crate::formats::shared::model_directives::model_directive_display_model_from_report_context;
use crate::formats::shared::AiSurfaceFinalizeError;
use crate::provider_compat::kiro_stream::{
build_kiro_initial_sse_events, build_kiro_stream_error_sse_events, encode_kiro_sse_events,
@@ -63,18 +64,22 @@ impl KiroToClaudeCliStreamState {
impl KiroClaudeStreamState {
pub(super) fn new(report_context: &Value) -> Self {
let model = report_context
.get("mapped_model")
.and_then(Value::as_str)
.filter(|value| !value.is_empty())
let model = model_directive_display_model_from_report_context(report_context)
.or_else(|| {
report_context
.get("mapped_model")
.and_then(Value::as_str)
.filter(|value| !value.is_empty())
.map(ToOwned::to_owned)
})
.or_else(|| {
report_context
.get("model")
.and_then(Value::as_str)
.filter(|value| !value.is_empty())
.map(ToOwned::to_owned)
})
.unwrap_or("unknown")
.to_string();
.unwrap_or_else(|| "unknown".to_string());
let thinking_enabled = report_context
.get("original_request_body")
.and_then(Value::as_object)

View File

@@ -86,6 +86,32 @@ fn kiro_stream_rewriter_converts_text_events_to_claude_sse() {
assert!(text.contains("\"input_tokens\":2000"));
}
#[test]
fn kiro_stream_rewriter_restores_model_directive_display_model() {
let report_context = json!({
"provider_api_format": "claude:messages",
"client_api_format": "claude:messages",
"envelope_name": "kiro:generateAssistantResponse",
"model": "claude-sonnet-4.5-high",
"mapped_model": "claude-sonnet-4.5"
});
let mut rewriter = KiroToClaudeCliStreamState::new(&report_context);
let first = rewriter
.push_chunk(
&report_context,
&encode_event_frame(
"event",
Some("assistantResponseEvent"),
&json!({"content": "Hello"}),
),
)
.expect("rewrite should succeed");
let text = String::from_utf8(first).expect("utf8 should decode");
assert!(text.contains("\"model\":\"claude-sonnet-4.5-high\""));
assert!(!text.contains("\"model\":\"claude-sonnet-4.5\""));
}
#[test]
fn kiro_stream_rewriter_converts_tool_use_to_claude_events() {
let report_context = kiro_report_context(false);