diff --git a/Cargo.lock b/Cargo.lock index f03617513f..4e961c6c98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -225,9 +225,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.37" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d10e4f991a553474232bc0a31799f6d24b034a84c0971d80d2e2f78b2e576e40" +checksum = "68650b7df54f0293fd061972a0fb05aaf4fc0879d3b3d21a638a182c5c543b9f" dependencies = [ "compression-codecs", "compression-core", @@ -727,6 +727,8 @@ dependencies = [ "http 1.4.0", "http-body 1.0.1", "http-body-util", + "hyper 1.8.1", + "hyper-util", "itoa", "matchit 0.7.3", "memchr", @@ -735,10 +737,15 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", "sync_wrapper 1.0.2", + "tokio", "tower 0.5.3", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -796,6 +803,7 @@ dependencies = [ "sync_wrapper 1.0.2", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -3081,15 +3089,15 @@ dependencies = [ [[package]] name = "docx-rs" -version = "0.4.18" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f21be13b97bd2924f30323d674f5a8db382964972825abd93f30d08f21dad98" +checksum = "70395eb132dcc1761533e62c54878a9deb2b637863ecb52e9c5f66148616398e" dependencies = [ "base64 0.22.1", - "image 0.24.9", + "image 0.25.9", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.18", "xml-rs", "zip 0.6.6", ] @@ -3394,6 +3402,26 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "fax" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" +dependencies = [ + "fax_derive", +] + +[[package]] +name = "fax_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "fd-lock" version = "4.0.4" @@ -3588,9 +3616,9 @@ dependencies = [ [[package]] name = "fs-err" -version = "3.2.2" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf68cef89750956493a66a10f512b9e58d9db21f2a573c079c0bdf1207a54a7" +checksum = "73fde052dbfc920003cfd2c8e2c6e6d4cc7c1091538c3a24226cec0665ab08c0" dependencies = [ "autocfg", ] @@ -4047,6 +4075,16 @@ dependencies = [ "weezl", ] +[[package]] +name = "gif" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gimli" version = "0.32.3" @@ -4102,6 +4140,7 @@ dependencies = [ "fs2", "futures", "goose-mcp", + "goose-test-support", "hf-hub", "ignore", "include_dir", @@ -4181,6 +4220,7 @@ dependencies = [ "futures", "goose", "goose-mcp", + "goose-test-support", "http-body-util", "regex", "rmcp 0.14.0", @@ -4372,6 +4412,16 @@ dependencies = [ "serde_json", ] +[[package]] +name = "goose-test-support" +version = "1.23.0" +dependencies = [ + "axum 0.7.9", + "rmcp 0.14.0", + "serde_json", + "tokio", +] + [[package]] name = "gzip-header" version = "1.0.0" @@ -5006,12 +5056,12 @@ dependencies = [ "byteorder", "color_quant", "exr", - "gif", + "gif 0.13.3", "jpeg-decoder", "num-traits", "png 0.17.16", "qoi", - "tiff", + "tiff 0.9.1", ] [[package]] @@ -5022,9 +5072,14 @@ checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" dependencies = [ "bytemuck", "byteorder-lite", + "color_quant", + "gif 0.14.1", "moxcms", "num-traits", "png 0.18.0", + "tiff 0.10.3", + "zune-core 0.5.1", + "zune-jpeg 0.5.12", ] [[package]] @@ -5667,9 +5722,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memmap2" @@ -7356,9 +7411,9 @@ checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" [[package]] name = "psm" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa96cb91275ed31d6da3e983447320c4eb219ac180fa1679a0889ff32861e2d" +checksum = "3852766467df634d74f0b2d7819bf8dc483a0eb2e3b0f50f756f9cfe8b0d18d8" dependencies = [ "ar_archive_writer", "cc", @@ -7429,6 +7484,12 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quick-xml" version = "0.30.0" @@ -8223,9 +8284,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "ryu-js" @@ -9071,9 +9132,9 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stacker" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1f8b29fb42aafcea4edeeb6b2f2d7ecd0d969c48b4cf0d2e64aafc471dd6e59" +checksum = "08d74a23609d509411d10e2176dc2a4346e3b4aea2e7b1869f19fdedbc71c013" dependencies = [ "cc", "cfg-if", @@ -10144,6 +10205,20 @@ dependencies = [ "weezl", ] +[[package]] +name = "tiff" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" +dependencies = [ + "fax", + "flate2", + "half", + "quick-error", + "weezl", + "zune-jpeg 0.4.21", +] + [[package]] name = "tiktoken-rs" version = "0.6.0" @@ -10963,9 +11038,9 @@ checksum = "81b79ad29b5e19de4260020f8919b443b2ef0277d242ce532ec7b7a2cc8b6007" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "537dd038a89878be9b64dd4bd1b260315c1bb94f4d784956b81e27a088d9a09e" [[package]] name = "unicode-linebreak" @@ -11344,9 +11419,9 @@ dependencies = [ [[package]] name = "webbrowser" -version = "1.0.6" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f1243ef785213e3a32fa0396093424a3a6ea566f9948497e5a2309261a4c97" +checksum = "3f00bb839c1cf1e3036066614cbdcd035ecf215206691ea646aa3c60a24f68f2" dependencies = [ "core-foundation 0.10.1", "jni", @@ -12342,9 +12417,9 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" +checksum = "4de98dfa5d5b7fef4ee834d0073d560c9ca7b6c46a71d058c48db7960f8cfaf7" [[package]] name = "zoneinfo64" @@ -12418,6 +12493,18 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" + [[package]] name = "zune-inflate" version = "0.2.54" @@ -12426,3 +12513,21 @@ checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" dependencies = [ "simd-adler32", ] + +[[package]] +name = "zune-jpeg" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" +dependencies = [ + "zune-core 0.4.12", +] + +[[package]] +name = "zune-jpeg" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "410e9ecef634c709e3831c2cfdb8d9c32164fae1c67496d5b68fff728eec37fe" +dependencies = [ + "zune-core 0.5.1", +] diff --git a/crates/goose-acp/Cargo.toml b/crates/goose-acp/Cargo.toml index 871dc71fdd..135f2f0b45 100644 --- a/crates/goose-acp/Cargo.toml +++ b/crates/goose-acp/Cargo.toml @@ -43,6 +43,7 @@ uuid = { version = "1.11", features = ["v7"] } [dev-dependencies] assert-json-diff = "2.0.2" async-trait = "0.1.89" +goose-test-support = { path = "../goose-test-support" } wiremock = { workspace = true } tempfile = "3" test-case = { workspace = true } diff --git a/crates/goose-acp/tests/common_tests/mod.rs b/crates/goose-acp/tests/common_tests/mod.rs index f307211ba1..e1d8ba53cc 100644 --- a/crates/goose-acp/tests/common_tests/mod.rs +++ b/crates/goose-acp/tests/common_tests/mod.rs @@ -4,48 +4,34 @@ #[path = "../fixtures/mod.rs"] pub mod fixtures; -use fixtures::{ - ExpectedSessionId, McpFixture, OpenAiFixture, PermissionDecision, Session, TestSessionConfig, - FAKE_CODE, -}; +use fixtures::{OpenAiFixture, PermissionDecision, Session, TestSessionConfig}; use fs_err as fs; use goose::config::base::CONFIG_YAML_NAME; use goose::config::GooseMode; +use goose_test_support::{ExpectedSessionId, McpFixture, FAKE_CODE}; use sacp::schema::{McpServer, McpServerHttp, ToolCallStatus}; -pub async fn run_basic_completion() { +pub async fn run_config_mcp() { + let temp_dir = tempfile::tempdir().unwrap(); let expected_session_id = ExpectedSessionId::default(); - let openai = OpenAiFixture::new( - vec![( - r#"\nwhat is 1+1""#.into(), - include_str!("../test_data/openai_basic_response.txt"), - )], - expected_session_id.clone(), - ) - .await; + let prompt = "Use the get_code tool and output only its result."; + let mcp = McpFixture::new(Some(expected_session_id.clone())).await; - let mut session = S::new(TestSessionConfig::default(), openai).await; - expected_session_id.set(session.id()); + let config_yaml = format!( + "GOOSE_MODEL: gpt-5-nano\nextensions:\n mcp-fixture:\n enabled: true\n type: streamable_http\n name: mcp-fixture\n description: MCP fixture\n uri: \"{}\"\n", + mcp.url + ); + fs::write(temp_dir.path().join(CONFIG_YAML_NAME), config_yaml).unwrap(); - let output = session - .prompt("what is 1+1", PermissionDecision::Cancel) - .await; - assert_eq!(output.text, "2"); - expected_session_id.assert_matches(&session.id().0); -} - -pub async fn run_mcp_http_server() { - let expected_session_id = ExpectedSessionId::default(); - let mcp = McpFixture::new(expected_session_id.clone()).await; let openai = OpenAiFixture::new( vec![ ( - r#"\nUse the get_code tool and output only its result.""#.into(), - include_str!("../test_data/openai_tool_call_response.txt"), + prompt.to_string(), + include_str!("../test_data/openai_tool_call.txt"), ), ( format!(r#""content":"{FAKE_CODE}""#), - include_str!("../test_data/openai_tool_result_response.txt"), + include_str!("../test_data/openai_tool_result.txt"), ), ], expected_session_id.clone(), @@ -53,64 +39,15 @@ pub async fn run_mcp_http_server() { .await; let config = TestSessionConfig { - mcp_servers: vec![McpServer::Http(McpServerHttp::new("lookup", &mcp.url))], - ..Default::default() - }; - let mut session = S::new(config, openai).await; - expected_session_id.set(session.id()); - - let output = session - .prompt( - "Use the get_code tool and output only its result.", - PermissionDecision::Cancel, - ) - .await; - assert_eq!(output.text, FAKE_CODE); - expected_session_id.assert_matches(&session.id().0); -} - -pub async fn run_builtin_and_mcp() { - let expected_session_id = ExpectedSessionId::default(); - let prompt = - "Search for getCode and textEditor tools. Use them to save the code to /tmp/result.txt."; - let mcp = McpFixture::new(expected_session_id.clone()).await; - let openai = OpenAiFixture::new( - vec![ - ( - format!(r#"\n{prompt}""#), - include_str!("../test_data/openai_builtin_search.txt"), - ), - ( - r#"export async function getCode"#.into(), - include_str!("../test_data/openai_builtin_execute.txt"), - ), - ( - r#"\"writeResult\": \"Successfully wrote to /tmp/result.txt"#.into(), - include_str!("../test_data/openai_builtin_final.txt"), - ), - ], - expected_session_id.clone(), - ) - .await; - - let config = TestSessionConfig { - builtins: vec!["code_execution".to_string(), "developer".to_string()], - mcp_servers: vec![McpServer::Http(McpServerHttp::new("lookup", &mcp.url))], + data_root: temp_dir.path().to_path_buf(), ..Default::default() }; - let _ = fs::remove_file("/tmp/result.txt"); - let mut session = S::new(config, openai).await; - expected_session_id.set(session.id()); + expected_session_id.set(session.id().0.to_string()); let output = session.prompt(prompt, PermissionDecision::Cancel).await; - if matches!(output.tool_status, Some(ToolCallStatus::Failed)) || output.text.contains("error") { - panic!("{}", output.text); - } - - let result = fs::read_to_string("/tmp/result.txt").unwrap_or_default(); - assert_eq!(result, format!("{FAKE_CODE}\n")); + assert_eq!(output.text, FAKE_CODE); expected_session_id.assert_matches(&session.id().0); } @@ -119,13 +56,13 @@ pub async fn run_permission_persistence() { ( PermissionDecision::AllowAlways, ToolCallStatus::Completed, - "user:\n always_allow:\n - lookup__get_code\n ask_before: []\n never_allow: []\n", + "user:\n always_allow:\n - mcp-fixture__get_code\n ask_before: []\n never_allow: []\n", ), (PermissionDecision::AllowOnce, ToolCallStatus::Completed, ""), ( PermissionDecision::RejectAlways, ToolCallStatus::Failed, - "user:\n always_allow: []\n ask_before: []\n never_allow:\n - lookup__get_code\n", + "user:\n always_allow: []\n ask_before: []\n never_allow:\n - mcp-fixture__get_code\n", ), (PermissionDecision::RejectOnce, ToolCallStatus::Failed, ""), (PermissionDecision::Cancel, ToolCallStatus::Failed, ""), @@ -134,16 +71,16 @@ pub async fn run_permission_persistence() { let temp_dir = tempfile::tempdir().unwrap(); let prompt = "Use the get_code tool and output only its result."; let expected_session_id = ExpectedSessionId::default(); - let mcp = McpFixture::new(expected_session_id.clone()).await; + let mcp = McpFixture::new(Some(expected_session_id.clone())).await; let openai = OpenAiFixture::new( vec![ ( prompt.to_string(), - include_str!("../test_data/openai_tool_call_response.txt"), + include_str!("../test_data/openai_tool_call.txt"), ), ( format!(r#""content":"{FAKE_CODE}""#), - include_str!("../test_data/openai_tool_result_response.txt"), + include_str!("../test_data/openai_tool_result.txt"), ), ], expected_session_id.clone(), @@ -151,14 +88,14 @@ pub async fn run_permission_persistence() { .await; let config = TestSessionConfig { - mcp_servers: vec![McpServer::Http(McpServerHttp::new("lookup", &mcp.url))], + mcp_servers: vec![McpServer::Http(McpServerHttp::new("mcp-fixture", &mcp.url))], goose_mode: GooseMode::Approve, data_root: temp_dir.path().to_path_buf(), ..Default::default() }; let mut session = S::new(config, openai).await; - expected_session_id.set(session.id()); + expected_session_id.set(session.id().0.to_string()); for (decision, expected_status, expected_yaml) in cases { session.reset_openai(); @@ -182,27 +119,45 @@ pub async fn run_permission_persistence() { expected_session_id.assert_matches(&session.id().0); } -pub async fn run_configured_extension() { - let temp_dir = tempfile::tempdir().unwrap(); +pub async fn run_prompt_basic() { let expected_session_id = ExpectedSessionId::default(); - let prompt = "Use the get_code tool and output only its result."; - let mcp = McpFixture::new(expected_session_id.clone()).await; + let openai = OpenAiFixture::new( + vec![( + r#"\nwhat is 1+1""#.into(), + include_str!("../test_data/openai_basic.txt"), + )], + expected_session_id.clone(), + ) + .await; - let config_yaml = format!( - "GOOSE_MODEL: gpt-5-nano\nextensions:\n lookup:\n enabled: true\n type: streamable_http\n name: lookup\n description: Lookup server\n uri: \"{}\"\n", - mcp.url - ); - fs::write(temp_dir.path().join(CONFIG_YAML_NAME), config_yaml).unwrap(); + let mut session = S::new(TestSessionConfig::default(), openai).await; + expected_session_id.set(session.id().0.to_string()); + let output = session + .prompt("what is 1+1", PermissionDecision::Cancel) + .await; + assert_eq!(output.text, "2"); + expected_session_id.assert_matches(&session.id().0); +} + +pub async fn run_prompt_codemode() { + let expected_session_id = ExpectedSessionId::default(); + let prompt = + "Search for getCode and textEditor tools. Use them to save the code to /tmp/result.txt."; + let mcp = McpFixture::new(Some(expected_session_id.clone())).await; let openai = OpenAiFixture::new( vec![ ( - prompt.to_string(), - include_str!("../test_data/openai_tool_call_response.txt"), + format!(r#"\n{prompt}""#), + include_str!("../test_data/openai_builtin_search.txt"), ), ( - format!(r#""content":"{FAKE_CODE}""#), - include_str!("../test_data/openai_tool_result_response.txt"), + r#"export async function getCode"#.into(), + include_str!("../test_data/openai_builtin_execute.txt"), + ), + ( + r#"Successfully wrote to /tmp/result.txt"#.into(), + include_str!("../test_data/openai_builtin_final.txt"), ), ], expected_session_id.clone(), @@ -210,14 +165,93 @@ pub async fn run_configured_extension() { .await; let config = TestSessionConfig { - data_root: temp_dir.path().to_path_buf(), + builtins: vec!["code_execution".to_string(), "developer".to_string()], + mcp_servers: vec![McpServer::Http(McpServerHttp::new("mcp-fixture", &mcp.url))], ..Default::default() }; + let _ = fs::remove_file("/tmp/result.txt"); + let mut session = S::new(config, openai).await; - expected_session_id.set(session.id()); + expected_session_id.set(session.id().0.to_string()); let output = session.prompt(prompt, PermissionDecision::Cancel).await; + if matches!(output.tool_status, Some(ToolCallStatus::Failed)) || output.text.contains("error") { + panic!("{}", output.text); + } + + let result = fs::read_to_string("/tmp/result.txt").unwrap_or_default(); + assert_eq!(result, format!("{FAKE_CODE}\n")); + expected_session_id.assert_matches(&session.id().0); +} + +pub async fn run_prompt_image() { + let expected_session_id = ExpectedSessionId::default(); + let mcp = McpFixture::new(Some(expected_session_id.clone())).await; + let openai = OpenAiFixture::new( + vec![ + ( + r#"\nUse the get_image tool and describe what you see in its result.""# + .into(), + include_str!("../test_data/openai_image_tool_call.txt"), + ), + ( + r#""type":"image_url""#.into(), + include_str!("../test_data/openai_image_tool_result.txt"), + ), + ], + expected_session_id.clone(), + ) + .await; + + let config = TestSessionConfig { + mcp_servers: vec![McpServer::Http(McpServerHttp::new("mcp-fixture", &mcp.url))], + ..Default::default() + }; + let mut session = S::new(config, openai).await; + expected_session_id.set(session.id().0.to_string()); + + let output = session + .prompt( + "Use the get_image tool and describe what you see in its result.", + PermissionDecision::Cancel, + ) + .await; + assert_eq!(output.text, "Hello Goose!\nThis is a test image."); + expected_session_id.assert_matches(&session.id().0); +} + +pub async fn run_prompt_mcp() { + let expected_session_id = ExpectedSessionId::default(); + let mcp = McpFixture::new(Some(expected_session_id.clone())).await; + let openai = OpenAiFixture::new( + vec![ + ( + r#"\nUse the get_code tool and output only its result.""#.into(), + include_str!("../test_data/openai_tool_call.txt"), + ), + ( + format!(r#""content":"{FAKE_CODE}""#), + include_str!("../test_data/openai_tool_result.txt"), + ), + ], + expected_session_id.clone(), + ) + .await; + + let config = TestSessionConfig { + mcp_servers: vec![McpServer::Http(McpServerHttp::new("mcp-fixture", &mcp.url))], + ..Default::default() + }; + let mut session = S::new(config, openai).await; + expected_session_id.set(session.id().0.to_string()); + + let output = session + .prompt( + "Use the get_code tool and output only its result.", + PermissionDecision::Cancel, + ) + .await; assert_eq!(output.text, FAKE_CODE); expected_session_id.assert_matches(&session.id().0); } diff --git a/crates/goose-acp/tests/fixtures/mod.rs b/crates/goose-acp/tests/fixtures/mod.rs index 3aa74a9dfc..a66751bf57 100644 --- a/crates/goose-acp/tests/fixtures/mod.rs +++ b/crates/goose-acp/tests/fixtures/mod.rs @@ -11,15 +11,7 @@ use goose::providers::openai::OpenAiProvider; use goose::providers::provider_registry::ProviderConstructor; use goose::session_context::SESSION_ID_HEADER; use goose_acp::server::{serve, GooseAcpAgent}; -use rmcp::model::{ClientNotification, ClientRequest, Meta, ServerResult}; -use rmcp::service::{NotificationContext, RequestContext, ServiceRole}; -use rmcp::transport::streamable_http_server::{ - session::local::LocalSessionManager, StreamableHttpServerConfig, StreamableHttpService, -}; -use rmcp::{ - handler::server::router::tool::ToolRouter, model::*, tool, tool_handler, tool_router, - ErrorData as McpError, RoleServer, ServerHandler, Service, -}; +use goose_test_support::ExpectedSessionId; use sacp::schema::{ McpServer, PermissionOptionKind, RequestPermissionOutcome, RequestPermissionRequest, RequestPermissionResponse, SelectedPermissionOutcome, ToolCallStatus, @@ -34,10 +26,6 @@ use tokio_util::compat::{TokioAsyncReadCompatExt, TokioAsyncWriteCompatExt}; use wiremock::matchers::{method, path}; use wiremock::{Mock, MockServer, ResponseTemplate}; -pub const FAKE_CODE: &str = "test-uuid-12345-67890"; - -const NOT_YET_SET: &str = "session-id-not-yet-set"; - #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub enum PermissionDecision { AllowAlways, @@ -81,54 +69,6 @@ fn select_option( .unwrap_or(RequestPermissionOutcome::Cancelled) } -#[derive(Clone)] -pub struct ExpectedSessionId { - value: Arc>, - errors: Arc>>, -} - -impl Default for ExpectedSessionId { - fn default() -> Self { - Self { - value: Arc::new(Mutex::new(NOT_YET_SET.to_string())), - errors: Arc::new(Mutex::new(Vec::new())), - } - } -} - -impl ExpectedSessionId { - pub fn set(&self, id: &sacp::schema::SessionId) { - *self.value.lock().unwrap() = id.0.to_string(); - } - - pub fn validate(&self, actual: Option<&str>) -> Result<(), String> { - let expected = self.value.lock().unwrap(); - - let err = match actual { - Some(act) if act == *expected => None, - _ => Some(format!( - "{} mismatch: expected '{}', got {:?}", - SESSION_ID_HEADER, expected, actual - )), - }; - match err { - Some(e) => { - self.errors.lock().unwrap().push(e.clone()); - Err(e) - } - None => Ok(()), - } - } - - /// Calling this ensures requests have coherent session IDs. - pub fn assert_matches(&self, actual: &str) { - let result = self.validate(Some(actual)); - assert!(result.is_ok(), "{}", result.unwrap_err()); - let e = self.errors.lock().unwrap(); - assert!(e.is_empty(), "Session ID validation errors: {:?}", *e); - } -} - pub struct OpenAiFixture { _server: MockServer, base_url: String, @@ -213,153 +153,6 @@ impl OpenAiFixture { } } -#[derive(Clone)] -struct Lookup { - tool_router: ToolRouter, -} - -impl Default for Lookup { - fn default() -> Self { - Self::new() - } -} - -#[tool_router] -impl Lookup { - pub fn new() -> Self { - Self { - tool_router: Self::tool_router(), - } - } - - #[tool(description = "Get the code")] - fn get_code(&self) -> Result { - Ok(CallToolResult::success(vec![Content::text(FAKE_CODE)])) - } -} - -#[tool_handler] -impl ServerHandler for Lookup { - fn get_info(&self) -> ServerInfo { - ServerInfo { - protocol_version: ProtocolVersion::V_2025_03_26, - capabilities: ServerCapabilities::builder().enable_tools().build(), - server_info: Implementation { - name: "lookup".into(), - version: "1.0.0".into(), - ..Default::default() - }, - instructions: Some("Lookup server with get_code tool.".into()), - } - } -} - -trait HasMeta { - fn meta(&self) -> &Meta; -} - -impl HasMeta for RequestContext { - fn meta(&self) -> &Meta { - &self.meta - } -} - -impl HasMeta for NotificationContext { - fn meta(&self) -> &Meta { - &self.meta - } -} - -struct ValidatingService { - inner: S, - expected_session_id: ExpectedSessionId, -} - -impl ValidatingService { - fn new(inner: S, expected_session_id: ExpectedSessionId) -> Self { - Self { - inner, - expected_session_id, - } - } - - fn validate(&self, context: &C) -> Result<(), McpError> { - let actual = context - .meta() - .0 - .get(SESSION_ID_HEADER) - .and_then(|v| v.as_str()); - self.expected_session_id - .validate(actual) - .map_err(|e| McpError::new(ErrorCode::INVALID_REQUEST, e, None)) - } -} - -impl> Service for ValidatingService { - async fn handle_request( - &self, - request: ClientRequest, - context: RequestContext, - ) -> Result { - if !matches!(request, ClientRequest::InitializeRequest(_)) { - self.validate(&context)?; - } - self.inner.handle_request(request, context).await - } - - async fn handle_notification( - &self, - notification: ClientNotification, - context: NotificationContext, - ) -> Result<(), McpError> { - if !matches!(notification, ClientNotification::InitializedNotification(_)) { - self.validate(&context).ok(); - } - self.inner.handle_notification(notification, context).await - } - - fn get_info(&self) -> ServerInfo { - self.inner.get_info() - } -} - -pub struct McpFixture { - pub url: String, - // Keep the server alive in tests; underscore avoids unused field warnings. - _handle: JoinHandle<()>, -} - -impl McpFixture { - pub async fn new(expected_session_id: ExpectedSessionId) -> Self { - let service = StreamableHttpService::new( - { - let expected_session_id = expected_session_id.clone(); - move || { - Ok(ValidatingService::new( - Lookup::new(), - expected_session_id.clone(), - )) - } - }, - LocalSessionManager::default().into(), - StreamableHttpServerConfig::default(), - ); - let router = axum::Router::new().nest_service("/mcp", service); - let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); - let addr = listener.local_addr().unwrap(); - let url = format!("http://{addr}/mcp"); - - let handle = tokio::spawn(async move { - axum::serve(listener, router).await.unwrap(); - }); - - Self { - url, - _handle: handle, - } - } -} - pub type DuplexTransport = sacp::ByteStreams< tokio_util::compat::Compat, tokio_util::compat::Compat, diff --git a/crates/goose-acp/tests/server_test.rs b/crates/goose-acp/tests/server_test.rs index 5345a6148c..2121a90462 100644 --- a/crates/goose-acp/tests/server_test.rs +++ b/crates/goose-acp/tests/server_test.rs @@ -3,8 +3,8 @@ use common_tests::fixtures::initialize_agent; use common_tests::fixtures::run_test; use common_tests::fixtures::server::ClientToAgentSession; use common_tests::{ - run_basic_completion, run_builtin_and_mcp, run_configured_extension, run_mcp_http_server, - run_permission_persistence, + run_config_mcp, run_permission_persistence, run_prompt_basic, run_prompt_codemode, + run_prompt_image, run_prompt_mcp, }; use goose::config::GooseMode; use goose::providers::provider_registry::ProviderConstructor; @@ -12,18 +12,8 @@ use goose_acp::server::GooseAcpAgent; use std::sync::Arc; #[test] -fn test_acp_basic_completion() { - run_test(async { run_basic_completion::().await }); -} - -#[test] -fn test_acp_with_mcp_http_server() { - run_test(async { run_mcp_http_server::().await }); -} - -#[test] -fn test_acp_with_builtin_and_mcp() { - run_test(async { run_builtin_and_mcp::().await }); +fn test_config_mcp() { + run_test(async { run_config_mcp::().await }); } #[test] @@ -32,8 +22,23 @@ fn test_permission_persistence() { } #[test] -fn test_configured_extension() { - run_test(async { run_configured_extension::().await }); +fn test_prompt_basic() { + run_test(async { run_prompt_basic::().await }); +} + +#[test] +fn test_prompt_codemode() { + run_test(async { run_prompt_codemode::().await }); +} + +#[test] +fn test_prompt_image() { + run_test(async { run_prompt_image::().await }); +} + +#[test] +fn test_prompt_mcp() { + run_test(async { run_prompt_mcp::().await }); } #[test] diff --git a/crates/goose-acp/tests/test_data/openai_basic_response.txt b/crates/goose-acp/tests/test_data/openai_basic.txt similarity index 100% rename from crates/goose-acp/tests/test_data/openai_basic_response.txt rename to crates/goose-acp/tests/test_data/openai_basic.txt diff --git a/crates/goose-acp/tests/test_data/openai_builtin_execute.txt b/crates/goose-acp/tests/test_data/openai_builtin_execute.txt index 1e1eefda5f..0aebbd29ea 100644 --- a/crates/goose-acp/tests/test_data/openai_builtin_execute.txt +++ b/crates/goose-acp/tests/test_data/openai_builtin_execute.txt @@ -1,435 +1,511 @@ -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_UBLtxrNOFHnLNHCInjjeVLzP","type":"function","function":{"name":"code_execution__execute","arguments":""}}],"refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"WDLD"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_HCUq7OYIqj233H77wpqAtSGP","type":"function","function":{"name":"code_execution__execute","arguments":""}}],"refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"XbIx"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"yJBJJfdldX"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"0WAOew1EJA"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EYtPIkyWy"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"PdQalDVBc"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"kLCKi4W0"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"SUSOxe2S"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"async"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0pB1gVsj"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"async"}}]},"finish_reason":null}],"usage":null,"obfuscation":"lGNpX0hf"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" function"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Quyw"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" function"}}]},"finish_reason":null}],"usage":null,"obfuscation":"1wCB"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" run"}}]},"finish_reason":null}],"usage":null,"obfuscation":"C47A3bchK"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" run"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LNRcwubzP"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"()"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GnzOrhzYZew"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"()"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Aq7vRtDvlF4"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"sMmX7plrr"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"lb2NCrdyI"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"wqLsTgMRSxtN"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ErsVOWq6Z3Xu"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"5MHvUdIfJ0qJ"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"qNMOJVTHLUp4"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" console"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Uv1zV"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" //"}}]},"finish_reason":null}],"usage":null,"obfuscation":"6n2KlzcsTp"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".log"}}]},"finish_reason":null}],"usage":null,"obfuscation":"JAPWfZ8vW"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Step"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Syxh8KgO"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"r2howfHn"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"LVrPhgFXXORS"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Fetching"}}]},"finish_reason":null}],"usage":null,"obfuscation":"3uEtb"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}],"usage":null,"obfuscation":"HJcsbkgldODt"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"73EB8Vfy"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"meGjHjoA1xft"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" using"}}]},"finish_reason":null}],"usage":null,"obfuscation":"bj5YgoP"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"6ue6xAtTS"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"a0nSxyCLV"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"tFmcmr9A"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"sE6BzCdcA"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" from"}}]},"finish_reason":null}],"usage":null,"obfuscation":"YlOG2Pln"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"...\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"piPx4wDk"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" MCP"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Uxh9l06s6"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\");"}}]},"finish_reason":null}],"usage":null,"obfuscation":"8dYsX5mrP"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" fixture"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Pzqu4"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5VbIZPEA6ix"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"kOYakk7vCs"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"01RMMD23GQkr"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"Ew0I4Yv7lsZu"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"Ig3VtqefZFcI"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" const"}}]},"finish_reason":null}],"usage":null,"obfuscation":"BwnGXcl"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" const"}}]},"finish_reason":null}],"usage":null,"obfuscation":"227PgWF"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"DYK3JLN8"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zYLjrdtw"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Res"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7T6NXmfl7g"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"85j33BB"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"rYrRL7FpIpl"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"m9B1dsMaGtk"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" await"}}]},"finish_reason":null}],"usage":null,"obfuscation":"aKhInCt"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" await"}}]},"finish_reason":null}],"usage":null,"obfuscation":"y1QKhVE"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Mc"}}]},"finish_reason":null}],"usage":null,"obfuscation":"TiUrBUJ3S8"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Lookup"}}]},"finish_reason":null}],"usage":null,"obfuscation":"tyu2C3"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"p"}}]},"finish_reason":null}],"usage":null,"obfuscation":"rUBZNYrMu5QX"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"mSnyOOHWO"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Fixture"}}]},"finish_reason":null}],"usage":null,"obfuscation":"JAVgEJ"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zKEttDzEa"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"9SzQLFQkS"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"({"}}]},"finish_reason":null}],"usage":null,"obfuscation":"KevY7aP3ryh"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"35KBxpEwO"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"});"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EgG4bzRSW8"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"({"}}]},"finish_reason":null}],"usage":null,"obfuscation":"JrhE1JHlm54"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"x0sZLH8SbhL"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"});"}}]},"finish_reason":null}],"usage":null,"obfuscation":"wohXvQg7Ob"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"IHuyUXshht2C"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"lVazpoueAIq"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"zv2aVS40gP6A"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"j5Kk4o8z8KVq"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" let"}}]},"finish_reason":null}],"usage":null,"obfuscation":"q2RPbnzIm"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"1GWCRFnUwLOm"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"RpPYIgMc"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" let"}}]},"finish_reason":null}],"usage":null,"obfuscation":"QfhWFYeVO"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"hthkNEp3btP"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"y2sgZpV8"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ''"}}]},"finish_reason":null}],"usage":null,"obfuscation":"czifZEqaPz"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"CSJpY7ykRgo"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Z94iEsTOFM"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ''"}}]},"finish_reason":null}],"usage":null,"obfuscation":"d8X4iNvkfT"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"YmsDuM4CGmAm"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"SHsYhZpXT5"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"F9VDjITdevyZ"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"eaM94gaV3SjW"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" if"}}]},"finish_reason":null}],"usage":null,"obfuscation":"3mTNWX7Ccs"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"oBdwnsKEn6Pe"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ("}}]},"finish_reason":null}],"usage":null,"obfuscation":"VPSM2U9ztaj"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" if"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MOdNd1VIdT"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"typeof"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EjlBDWl"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ("}}]},"finish_reason":null}],"usage":null,"obfuscation":"LaNZf51HyNY"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"waNmvkMf"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zpRHAvyvj"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MtFriQX"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Res"}}]},"finish_reason":null}],"usage":null,"obfuscation":"RiV1yS7ugy"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ==="}}]},"finish_reason":null}],"usage":null,"obfuscation":"6lERzMmdv"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" !="}}]},"finish_reason":null}],"usage":null,"obfuscation":"4UaTQI4oY6"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}],"usage":null,"obfuscation":"tFFzpFq7XNp"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" null"}}]},"finish_reason":null}],"usage":null,"obfuscation":"CksUZb6e"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"string"}}]},"finish_reason":null}],"usage":null,"obfuscation":"R3I84RZ"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":")"}}]},"finish_reason":null}],"usage":null,"obfuscation":"du3S3fRcNGFJ"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"')"}}]},"finish_reason":null}],"usage":null,"obfuscation":"BSnvZ4pAb76"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"peNFo8PaO"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"cvK3wmQAp"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"y3HGwbdgGGN2"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"9U4NG1zW1hpA"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"2yRkpk4hHq"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"TMZWFdPIGt"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" if"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Fqx4l55lFk"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"J6lbPQxv"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ("}}]},"finish_reason":null}],"usage":null,"obfuscation":"R3Nn65bbShk"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"qRU6bhPit7h"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"typeof"}}]},"finish_reason":null}],"usage":null,"obfuscation":"KNuxb26"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"IouQzhkX"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"y3VY7fiz"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"cyJEbKZ"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Res"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GzFgdFnlEk"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"d0mgOWJ4BI"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ==="}}]},"finish_reason":null}],"usage":null,"obfuscation":"QZYQNItUp"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"DT5fUSwF4rag"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}],"usage":null,"obfuscation":"BxFluNL3LiS"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"qxuu5io6tf3v"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"string"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EYS4Szt"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }"}}]},"finish_reason":null}],"usage":null,"obfuscation":"uivHQEB1MHf"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"')"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ld3QawCCj8j"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" else"}}]},"finish_reason":null}],"usage":null,"obfuscation":"mXjbTfS9"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"AhXpCgGSW"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" if"}}]},"finish_reason":null}],"usage":null,"obfuscation":"X6y8tpzr6O"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"HR4oVYvrKIp0"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ("}}]},"finish_reason":null}],"usage":null,"obfuscation":"Y1nBNR2nfBu"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"GRH0AMvt"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"t6taDGZWE"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"b22NAPWU"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"S4uVyIz"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"jXZz9g9tus1"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" &&"}}]},"finish_reason":null}],"usage":null,"obfuscation":"sf0ZWdiu4N"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EzPoaNwG"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" typeof"}}]},"finish_reason":null}],"usage":null,"obfuscation":"TpYZWc"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Res"}}]},"finish_reason":null}],"usage":null,"obfuscation":"dNp3Z4YURy"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zbilqttA"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"SFijuwxEh0"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zqGeQHW"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ta4OC28eSsDQ"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ==="}}]},"finish_reason":null}],"usage":null,"obfuscation":"F8hxhZoBg"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"KmW5WLpYfl"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0QWhjOXxfMI"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }"}}]},"finish_reason":null}],"usage":null,"obfuscation":"67HBmLCOU18"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"object"}}]},"finish_reason":null}],"usage":null,"obfuscation":"TkPlD4R"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" else"}}]},"finish_reason":null}],"usage":null,"obfuscation":"SWcwdCbt"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"')"}}]},"finish_reason":null}],"usage":null,"obfuscation":"NR4MUn0RRS4"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" if"}}]},"finish_reason":null}],"usage":null,"obfuscation":"H6DUToAyQ4"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"saoY11LYc"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ("}}]},"finish_reason":null}],"usage":null,"obfuscation":"quSQs2d3Leu"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"eh3OiAfwS3Jl"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"typeof"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Yth9o7r"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"g5iOHn9zDZ"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"4VQXKZnb"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"8W6TSAMM"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Res"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Z3wtnBjMxE"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"VRzyVssdYN3"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ==="}}]},"finish_reason":null}],"usage":null,"obfuscation":"0TPK99588"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Aql9R8g6"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}],"usage":null,"obfuscation":"WY5WPQzxzYm"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"N1FHNi9"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"object"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7uUOdgI"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"sYqbc9to"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"')"}}]},"finish_reason":null}],"usage":null,"obfuscation":"HvcmQAC33mi"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ??"}}]},"finish_reason":null}],"usage":null,"obfuscation":"hGQnicL3wo"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"gZ29HXtRa"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"g4KW2tFJ"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"2BVcAHxoKTBJ"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ifEWkT9"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"8ZgPj7ct"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".content"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Qsv00"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ibY235FW"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ??"}}]},"finish_reason":null}],"usage":null,"obfuscation":"eThY8OKgQM"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"ZioVR8c4ry5"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ''"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0x03TQmZKV"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"uw5DCPUr"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"vX8rRtILap"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Res"}}]},"finish_reason":null}],"usage":null,"obfuscation":"easTNJ4HTi"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zAqdH8JPBibe"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"2f996DsH"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"ov9HisKNyUac"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ??"}}]},"finish_reason":null}],"usage":null,"obfuscation":"antE6IcDfK"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"I4APrZWxY"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Tb6mqsJT"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5ImlnX0Dttf5"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Res"}}]},"finish_reason":null}],"usage":null,"obfuscation":"F9SNOWaJ4s"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"YXKxHGHDxIMx"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".content"}}]},"finish_reason":null}],"usage":null,"obfuscation":"AcXac"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" console"}}]},"finish_reason":null}],"usage":null,"obfuscation":"4czSy"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ??"}}]},"finish_reason":null}],"usage":null,"obfuscation":"1AJwttqKUC"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".log"}}]},"finish_reason":null}],"usage":null,"obfuscation":"BzoIKE2IQ"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"vKazIIc2"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"RFDi14O6"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Res"}}]},"finish_reason":null}],"usage":null,"obfuscation":"digOEQ8L8K"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"kBQ5JuRLo"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".output"}}]},"finish_reason":null}],"usage":null,"obfuscation":"buFsGY"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" length"}}]},"finish_reason":null}],"usage":null,"obfuscation":"uLKt9b"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ??"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0teoOOb2Ps"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"AernamVDYj"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ''"}}]},"finish_reason":null}],"usage":null,"obfuscation":"d8wkQgBHJX"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\","}}]},"finish_reason":null}],"usage":null,"obfuscation":"W2G1ODBPI7"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7ZG1t8y03p"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ClK2v6Co"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"pyBBgSFqywgy"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".length"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5QREcu"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"j9yOeuhITh"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":");\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"vYkJXePbp"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"KPPU04Hw7"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"eYwcfwGza6SP"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5LX55vkRR8kW"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"WD8XfCubj9Fi"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"PxYDQQzmC8oa"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" const"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GRx06ti"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ZhtYKzY50"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GARHMD7"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"lTheErkcOz2I"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Input"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0ViQAnum"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"1NujUoinnFdC"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"pH7owHzrw2r"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" if"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LnpOMGO1gA"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {"}}]},"finish_reason":null}],"usage":null,"obfuscation":"g1NLPYzOctR"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" (!"}}]},"finish_reason":null}],"usage":null,"obfuscation":"PG0Ukg0lIG"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" path"}}]},"finish_reason":null}],"usage":null,"obfuscation":"D8RncX3Y"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"seyEOZxMx"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"9WvQILV05SIi"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":")"}}]},"finish_reason":null}],"usage":null,"obfuscation":"8HgFZ5FIEiyd"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '/"}}]},"finish_reason":null}],"usage":null,"obfuscation":"HqB41Bt0gL"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"pe3d5DOxz"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"vDKGLeU1TF"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"pO4Zjn4nYjUN"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"3AdXIE"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"PwrHo1elqK"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}],"usage":null,"obfuscation":"uRa25ZT1p"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"j5wyQvGu"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"',"}}]},"finish_reason":null}],"usage":null,"obfuscation":"vSHWogAiBbD"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"ZbcOhXhUldx"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" command"}}]},"finish_reason":null}],"usage":null,"obfuscation":"rZzDM"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '//"}}]},"finish_reason":null}],"usage":null,"obfuscation":"quGPXmBjM"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"pSUTKKwDCn8p"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" no"}}]},"finish_reason":null}],"usage":null,"obfuscation":"IAwIEo6A6a"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Qjt96EnsRAm"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"h5ERm6Sh"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"09rNMlnR"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" returned"}}]},"finish_reason":null}],"usage":null,"obfuscation":"WOaC"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"',"}}]},"finish_reason":null}],"usage":null,"obfuscation":"itKwh0SX1ga"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" by"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5gcyoClkTY"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" file"}}]},"finish_reason":null}],"usage":null,"obfuscation":"du3kCfTn"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Mc"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0zteWyELKW"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ngVnMudT"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"p"}}]},"finish_reason":null}],"usage":null,"obfuscation":"B5cHXJmChBms"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ybJSbaU82SiV"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Fixture"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0Xe1QR"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"FRFx9RKj"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"2vHYUwQDp"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LoFsPXu5IT5"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"9JwUpRtnt"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"K1VJOHAdow"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"()"}}]},"finish_reason":null}],"usage":null,"obfuscation":"1zjaqiXZl2f"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"79UQqyjivA2x"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"';"}}]},"finish_reason":null}],"usage":null,"obfuscation":"bYFdw3hFiAw"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"Wdhzy4D1tN5x"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"3GhBmzN37pV"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" const"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MMQBCgU"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"e5RqErjJCYzD"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GXQxXyP"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"vkgozuoVy8n6"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"aHn6RNH"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"4JNc8Okf2"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"JhpeUQraTS4"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"eEpcildyEGUi"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" await"}}]},"finish_reason":null}],"usage":null,"obfuscation":"QsGqq3h"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"kZJv2yzDAT"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Developer"}}]},"finish_reason":null}],"usage":null,"obfuscation":"nFR"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"NJaDVEBJleAZ"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"k75EY8l0"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" //"}}]},"finish_reason":null}],"usage":null,"obfuscation":"AkzTH2plV3"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Editor"}}]},"finish_reason":null}],"usage":null,"obfuscation":"yfopeoz"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Step"}}]},"finish_reason":null}],"usage":null,"obfuscation":"VGDFoeiS"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"NUMmKyB"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"NdzacxSwRwkc"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Input"}}]},"finish_reason":null}],"usage":null,"obfuscation":"tlqNVNVr"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"2"}}]},"finish_reason":null}],"usage":null,"obfuscation":"dO0VtCqWvSue"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":");\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"R9nTDEH8s"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"3EmacbMeJWDm"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"NfNK8HdqJSKv"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"UB5FQGQ"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"QVPXEN5xQ1Ze"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" the"}}]},"finish_reason":null}],"usage":null,"obfuscation":"4KMEtFkPe"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" return"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7MTQ6U"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" retrieved"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7mp"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {"}}]},"finish_reason":null}],"usage":null,"obfuscation":"K2FMAiCIujD"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"xFHKGtd8"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EE9Ru0tD"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" to"}}]},"finish_reason":null}],"usage":null,"obfuscation":"XWtWyabOHo"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Length"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0SZhPwa"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" /"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GI413xIkvDP"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"IlyrcjFrNtf1"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"8Hwwo1OP5F"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"nIffRVq6"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"vr2pwB"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".length"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MJrhKV"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}],"usage":null,"obfuscation":"WcJiQyK6D"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}],"usage":null,"obfuscation":"b0bPSjPStgSB"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"cR0x5ORkfO"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"jZ1s48d"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"g4ZejTLDefCP"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"FnJBVR0"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" const"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LKWKME4"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}],"usage":null,"obfuscation":"sGoSb5moV3lU"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"i4nxJ43"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" path"}}]},"finish_reason":null}],"usage":null,"obfuscation":"lEDGAUW7"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Res"}}]},"finish_reason":null}],"usage":null,"obfuscation":"hVAkN7PbyW"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"L33XZS2eVjP8"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" ="}}]},"finish_reason":null}],"usage":null,"obfuscation":"ilkxXcex9UU"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '/"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Mc6352ovqh"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" await"}}]},"finish_reason":null}],"usage":null,"obfuscation":"cYjPDlD"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"WVf7tUa4MO"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Developer"}}]},"finish_reason":null}],"usage":null,"obfuscation":"G6t"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"dgLoNl"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"OOxdzNJq"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}],"usage":null,"obfuscation":"peo3oJpMf"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Editor"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MiMZRWA"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"'"}}]},"finish_reason":null}],"usage":null,"obfuscation":"CUBYBaa76JLc"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"({"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7sQdVn1KZH3"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Mn0H2SyFIfj"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"L6lFRm1PNqG"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"auORHaAgoa"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Su0Qw704RLRe"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"OUGiUCfKmJSM"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"rkfEW2QLpO"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"dF6Q4oq7L7"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" path"}}]},"finish_reason":null}],"usage":null,"obfuscation":"jGD2QcOd"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zkI9TnUUs3ch"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ne7pCHdniACu"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"2GBDJdx9"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '/"}}]},"finish_reason":null}],"usage":null,"obfuscation":"A7rPtw8xwm"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"IR9AsAJLS"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"scv4frvmOL"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_graph"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LZdBnmQ"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"2eELSy"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":["}}]},"finish_reason":null}],"usage":null,"obfuscation":"LrdA4JMPl"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}],"usage":null,"obfuscation":"1KSuOUume"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"hoFr6PdSxy"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"',"}}]},"finish_reason":null}],"usage":null,"obfuscation":"2bfPK90ZMWR"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"09voS71xG"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GSiHQg8iM2E"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"OnQsbjgO"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"56PdyUx8eBvQ"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Lookup"}}]},"finish_reason":null}],"usage":null,"obfuscation":"txA3kTV"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"XurvUHlgwc"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"bBPWLAWjf"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" command"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ZsYLy"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MN2cF3bAO"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"PFlue8D49Rzx"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"4J9xpizI"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}],"usage":null,"obfuscation":"JUShQEjjAxm"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"description"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zF"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"MB5hRzt5"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"cwNVXSPt"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"',"}}]},"finish_reason":null}],"usage":null,"obfuscation":"unqKUoz76aS"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"lVybj8jkPg"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"P39riGC0HKA"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"j9AE0p2w"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"sJxnV6swTye6"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" to"}}]},"finish_reason":null}],"usage":null,"obfuscation":"PsKLkrCQru"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"xVJI6wFQLA"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" save"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LaBz90vK"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" file"}}]},"finish_reason":null}],"usage":null,"obfuscation":"aYkuCMJQ"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"ZM1ykOP4"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"DQ5IKXUC"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"depends"}}]},"finish_reason":null}],"usage":null,"obfuscation":"1EQhvi"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}],"usage":null,"obfuscation":"YaxTVILdGh6I"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_on"}}]},"finish_reason":null}],"usage":null,"obfuscation":"dfaEmUGSEN"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"tTzYfOHr"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":[]"}}]},"finish_reason":null}],"usage":null,"obfuscation":"z5Aw0q4K"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":",\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"EKsCaMI5g9"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"},{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"41s45OYD"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"kKCqlBzwhCq8"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zL7J4Y5rW"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"KLo6QPM5VKk0"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"96Kod7bM"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" });"}}]},"finish_reason":null}],"usage":null,"obfuscation":"DNqh4g1Na"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Developer"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Qnr0"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"u1iriNCPeXk"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"J3Fq0V0e"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"PRv5bSbXOVAK"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Editor"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7OJJNS2"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zBm488IA2h"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"p0Um8MwA"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null}],"usage":null,"obfuscation":"5BmN6XMBvJK8"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"description"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ZR"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" return"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Jzvgzr"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"wIKGLRH8"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {"}}]},"finish_reason":null}],"usage":null,"obfuscation":"dqpuXK9vmsI"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zbApOiBy"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0QRLI8kv"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"M1PXb440"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}],"usage":null,"obfuscation":"1GL4TASp6ipg"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" to"}}]},"finish_reason":null}],"usage":null,"obfuscation":"En0BC1zcqo"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Czgd0iL"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" /"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5VoEIKXk92K"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Res"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Bv304pNXQg"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"6WSWQwr75c"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" }"}}]},"finish_reason":null}],"usage":null,"obfuscation":"fZGuBvkzNzz"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"z0OIp4"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":";\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"ManURNiZBB"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}],"usage":null,"obfuscation":"yiZKDyLLD"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"hN2gPjbJkn1b"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"wQnmcE1I"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}\\"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Hke7vUJzSM"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"depends"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Im97QG"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"n"}}]},"finish_reason":null}],"usage":null,"obfuscation":"naUuxvnxWvXs"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_on"}}]},"finish_reason":null}],"usage":null,"obfuscation":"YX0ERDmjVw"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"HYQQNm55"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":["}}]},"finish_reason":null}],"usage":null,"obfuscation":"bmrLkX68c"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"lmbBNO1kI"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"0"}}]},"finish_reason":null}],"usage":null,"obfuscation":"E6kFZ2NkKqDW"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_graph"}}]},"finish_reason":null}],"usage":null,"obfuscation":"qdrnpGB"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"]}"}}]},"finish_reason":null}],"usage":null,"obfuscation":"GpL2fucX06l"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":["}}]},"finish_reason":null}],"usage":null,"obfuscation":"OYQjmFkz5"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"]}"}}]},"finish_reason":null}],"usage":null,"obfuscation":"QcijSKPB34X"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"7yVjHnHF8g"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":null,"obfuscation":"38W18dvZIF7"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"QEEhae2TJ"} -data: {"id":"chatcmpl-D52mhi3yQh0ZVyJeuHwBBdtr5PZ2L","object":"chat.completion.chunk","created":1770094715,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":5612,"completion_tokens":1193,"total_tokens":6805,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":960,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"Ikcn1RF9DqIck8"} +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"kEukkQGI"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"M"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LYxfiGayx20v"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"cp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zEf2SuFI3cH"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Fixture"}}]},"finish_reason":null}],"usage":null,"obfuscation":"S2GG1i"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"likS7Y45F"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"TwySl39OJ"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"2p2DjdVv"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"description"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Zk"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"ZBeDt6sM"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Get"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7bjcsaItXQ"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"LtDIcbNq"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"A1kFK8sA"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"depends"}}]},"finish_reason":null}],"usage":null,"obfuscation":"AyIA9i"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_on"}}]},"finish_reason":null}],"usage":null,"obfuscation":"9F4q7ARQQd"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":[]"}}]},"finish_reason":null}],"usage":null,"obfuscation":"jAVbSgQF"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"},{\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"XUbEQMwJ"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tool"}}]},"finish_reason":null}],"usage":null,"obfuscation":"Eehl1Y6Xt"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"T3iH8KKU"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Developer"}}]},"finish_reason":null}],"usage":null,"obfuscation":"jzRU"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".text"}}]},"finish_reason":null}],"usage":null,"obfuscation":"zeeCDR1q"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Editor"}}]},"finish_reason":null}],"usage":null,"obfuscation":"8YZ1VtI"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"R15EQTSl"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"description"}}]},"finish_reason":null}],"usage":null,"obfuscation":"v8"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"uCS5hMDz"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Write"}}]},"finish_reason":null}],"usage":null,"obfuscation":"b4P9og82"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" code"}}]},"finish_reason":null}],"usage":null,"obfuscation":"CkksRy3s"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" to"}}]},"finish_reason":null}],"usage":null,"obfuscation":"7z4KadqiCw"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" /"}}]},"finish_reason":null}],"usage":null,"obfuscation":"XYeWQ4H9N5X"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tmp"}}]},"finish_reason":null}],"usage":null,"obfuscation":"qADuBhZQgw"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/result"}}]},"finish_reason":null}],"usage":null,"obfuscation":"0tqRXZ"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}],"usage":null,"obfuscation":"59jHzUi0h"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\""}}]},"finish_reason":null}],"usage":null,"obfuscation":"QRyYho94"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"depends"}}]},"finish_reason":null}],"usage":null,"obfuscation":"61NYkx"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_on"}}]},"finish_reason":null}],"usage":null,"obfuscation":"WHWBsd5Jkg"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":["}}]},"finish_reason":null}],"usage":null,"obfuscation":"xyMuvvQ1H"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"0"}}]},"finish_reason":null}],"usage":null,"obfuscation":"NkL223rTveiY"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"]}"}}]},"finish_reason":null}],"usage":null,"obfuscation":"5FvupEDfMHe"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"]}"}}]},"finish_reason":null}],"usage":null,"obfuscation":"uDYSO0oHbmz"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":null,"obfuscation":"9sRJO4xoviH"} + +data: {"id":"chatcmpl-D64NZp69RkEyXdUoDaCBj7fSYll8J","object":"chat.completion.chunk","created":1770339173,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":5657,"completion_tokens":1488,"total_tokens":7145,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":1216,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"6YeROQTGvStbj"} data: [DONE] - - diff --git a/crates/goose-acp/tests/test_data/openai_builtin_final.txt b/crates/goose-acp/tests/test_data/openai_builtin_final.txt index d3f43dff24..45e52a3113 100644 --- a/crates/goose-acp/tests/test_data/openai_builtin_final.txt +++ b/crates/goose-acp/tests/test_data/openai_builtin_final.txt @@ -1,355 +1,167 @@ -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"DBl2H"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"aQKzd"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"##"},"finish_reason":null}],"usage":null,"obfuscation":"QftPU"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"##"},"finish_reason":null}],"usage":null,"obfuscation":"0Wf0H"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Operation"},"finish_reason":null}],"usage":null,"obfuscation":"J5Sw3zVEkPvfW"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Done"},"finish_reason":null}],"usage":null,"obfuscation":"AQ"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" completed"},"finish_reason":null}],"usage":null,"obfuscation":"1ueJsqoOUutou"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"0hF"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"4IS"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"zu5Ssj"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"I"},"finish_reason":null}],"usage":null,"obfuscation":"sZdBrx"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Retrieved"},"finish_reason":null}],"usage":null,"obfuscation":"qz8LIGnHhsu2z"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" followed"},"finish_reason":null}],"usage":null,"obfuscation":"XdPAY5Vz3cjYwj"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"rd"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" your"},"finish_reason":null}],"usage":null,"obfuscation":"PI"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}],"usage":null,"obfuscation":"I"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" instruction"},"finish_reason":null}],"usage":null,"obfuscation":"UH9S7jMuejM"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Mc"},"finish_reason":null}],"usage":null,"obfuscation":"4nTh"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"QWA3"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"p"},"finish_reason":null}],"usage":null,"obfuscation":"8GcBxs"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" batch"},"finish_reason":null}],"usage":null,"obfuscation":"m"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Fixture"},"finish_reason":null}],"usage":null,"obfuscation":""} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" get"},"finish_reason":null}],"usage":null,"obfuscation":"RzC"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".get"},"finish_reason":null}],"usage":null,"obfuscation":"l1G"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Code"},"finish_reason":null}],"usage":null,"obfuscation":"hR9"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Code"},"finish_reason":null}],"usage":null,"obfuscation":"tiq"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}],"usage":null,"obfuscation":"LzV"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"gu51g"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" text"},"finish_reason":null}],"usage":null,"obfuscation":"Rh"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"vovzo6"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Editor"},"finish_reason":null}],"usage":null,"obfuscation":"T"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Saved"},"finish_reason":null}],"usage":null,"obfuscation":"Y"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" into"},"finish_reason":null}],"usage":null,"obfuscation":"Bw"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"EhL"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}],"usage":null,"obfuscation":"j39H7"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"7L"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" single"},"finish_reason":null}],"usage":null,"obfuscation":""} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"MeaR"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" execute"},"finish_reason":null}],"usage":null,"obfuscation":"tzHiE8zaYekvXrP"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" /"},"finish_reason":null}],"usage":null,"obfuscation":"Bzpfd"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" call"},"finish_reason":null}],"usage":null,"obfuscation":"vw"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"tmp"},"finish_reason":null}],"usage":null,"obfuscation":"hmov"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}],"usage":null,"obfuscation":"F7m"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"/result"},"finish_reason":null}],"usage":null,"obfuscation":""} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" saved"},"finish_reason":null}],"usage":null,"obfuscation":"H"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}],"usage":null,"obfuscation":"omu"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"KV0"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}],"usage":null,"obfuscation":"P"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" result"},"finish_reason":null}],"usage":null,"obfuscation":""} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Developer"},"finish_reason":null}],"usage":null,"obfuscation":"ehHehaK2t0Ddx"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"ifZo"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".text"},"finish_reason":null}],"usage":null,"obfuscation":"Io"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" /"},"finish_reason":null}],"usage":null,"obfuscation":"zvEML"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Editor"},"finish_reason":null}],"usage":null,"obfuscation":"4"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"tmp"},"finish_reason":null}],"usage":null,"obfuscation":"m67x"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ("},"finish_reason":null}],"usage":null,"obfuscation":"ZyNgq"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"/result"},"finish_reason":null}],"usage":null,"obfuscation":""} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"write"},"finish_reason":null}],"usage":null,"obfuscation":"79"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}],"usage":null,"obfuscation":"z8K"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":")\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"yx"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"EP"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"###"},"finish_reason":null}],"usage":null,"obfuscation":"AnhY"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"dDhAJx"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" File"},"finish_reason":null}],"usage":null,"obfuscation":"fR"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Path"},"finish_reason":null}],"usage":null,"obfuscation":"ti"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}],"usage":null,"obfuscation":"toRedYiWXrOWCt6"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" written"},"finish_reason":null}],"usage":null,"obfuscation":"Fmz6IdQRRVrbcG3"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"wNYeR"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}],"usage":null,"obfuscation":"uAsSWL"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"``"},"finish_reason":null}],"usage":null,"obfuscation":"xmJag"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" /"},"finish_reason":null}],"usage":null,"obfuscation":"l25Gw"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}],"usage":null,"obfuscation":"ZqCC"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"tmp"},"finish_reason":null}],"usage":null,"obfuscation":"eEjT"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"test"},"finish_reason":null}],"usage":null,"obfuscation":"Zom"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"/result"},"finish_reason":null}],"usage":null,"obfuscation":""} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"25fVgE"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}],"usage":null,"obfuscation":"LoC"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"uuid"},"finish_reason":null}],"usage":null,"obfuscation":"sNs"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"Ao85V"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"WKf475"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"YZVZ8Y"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"123"},"finish_reason":null}],"usage":null,"obfuscation":"pUWP"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Code"},"finish_reason":null}],"usage":null,"obfuscation":"2M"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"45"},"finish_reason":null}],"usage":null,"obfuscation":"UJWHi"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" length"},"finish_reason":null}],"usage":null,"obfuscation":""} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"naAmnL"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" fetched"},"finish_reason":null}],"usage":null,"obfuscation":"wLn3x2DncUr9KZN"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"678"},"finish_reason":null}],"usage":null,"obfuscation":"EZiD"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}],"usage":null,"obfuscation":"CwhQ2N"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"90"},"finish_reason":null}],"usage":null,"obfuscation":"pmDEn"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}],"usage":null,"obfuscation":"jX7HKQ"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"ExdUo"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"21"},"finish_reason":null}],"usage":null,"obfuscation":"v2Q3e"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"``"},"finish_reason":null}],"usage":null,"obfuscation":"GVkML"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" characters"},"finish_reason":null}],"usage":null,"obfuscation":"rzLUIdvybCee"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"`\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"Rm"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"x3pWt"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"###"},"finish_reason":null}],"usage":null,"obfuscation":"KHkH"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"FiaGDY"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Write"},"finish_reason":null}],"usage":null,"obfuscation":"N"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Written"},"finish_reason":null}],"usage":null,"obfuscation":"Uv5i4hNfDvCKOKo"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" result"},"finish_reason":null}],"usage":null,"obfuscation":""} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}],"usage":null,"obfuscation":"IwipJnjOAgQbsM3"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"N9gVJ"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}],"usage":null,"obfuscation":"1xjY"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"3m12KG"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"EtX"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Successfully"},"finish_reason":null}],"usage":null,"obfuscation":"zWAzMcKJ1h"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"Ki"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" wrote"},"finish_reason":null}],"usage":null,"obfuscation":"g"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}],"usage":null,"obfuscation":"bsYW"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"npd5"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}],"usage":null,"obfuscation":"HuTiM1"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" /"},"finish_reason":null}],"usage":null,"obfuscation":"Di2lF"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" -"},"finish_reason":null}],"usage":null,"obfuscation":"Djq3E"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"tmp"},"finish_reason":null}],"usage":null,"obfuscation":"bFN2"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" The"},"finish_reason":null}],"usage":null,"obfuscation":"tKO"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"/result"},"finish_reason":null}],"usage":null,"obfuscation":""} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"08"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}],"usage":null,"obfuscation":"jAM"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" contains"},"finish_reason":null}],"usage":null,"obfuscation":"3zNgk3SNozv6QX"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"mBj"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}],"usage":null,"obfuscation":"eIdHo"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"If"},"finish_reason":null}],"usage":null,"obfuscation":"EwyTz"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" fenced"},"finish_reason":null}],"usage":null,"obfuscation":""} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}],"usage":null,"obfuscation":"MdZ"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"Vz"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" want"},"finish_reason":null}],"usage":null,"obfuscation":"lr"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" block"},"finish_reason":null}],"usage":null,"obfuscation":"Z"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"3UYH"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}],"usage":null,"obfuscation":"P9"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" view"},"finish_reason":null}],"usage":null,"obfuscation":"fT"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"wV6"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" or"},"finish_reason":null}],"usage":null,"obfuscation":"aA1v"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" string"},"finish_reason":null}],"usage":null,"obfuscation":""} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" edit"},"finish_reason":null}],"usage":null,"obfuscation":"lx"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}],"usage":null,"obfuscation":"ZiUL"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"CFk"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" \n"},"finish_reason":null}],"usage":null,"obfuscation":"Nas"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"Pk"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"``"},"finish_reason":null}],"usage":null,"obfuscation":"P8Nhe"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" further"},"finish_reason":null}],"usage":null,"obfuscation":"xZV6orYDINsvpSm"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}],"usage":null,"obfuscation":"yMUI"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":","},"finish_reason":null}],"usage":null,"obfuscation":"rIgbQL"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"test"},"finish_reason":null}],"usage":null,"obfuscation":"Wis"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" I"},"finish_reason":null}],"usage":null,"obfuscation":"PushO"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"yZQWve"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}],"usage":null,"obfuscation":"NfT"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"uuid"},"finish_reason":null}],"usage":null,"obfuscation":"pTW"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" open"},"finish_reason":null}],"usage":null,"obfuscation":"vt"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"ZjldwU"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" it"},"finish_reason":null}],"usage":null,"obfuscation":"YdGd"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"123"},"finish_reason":null}],"usage":null,"obfuscation":"lCI7"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" or"},"finish_reason":null}],"usage":null,"obfuscation":"Nr1q"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"45"},"finish_reason":null}],"usage":null,"obfuscation":"mfWAg"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" perform"},"finish_reason":null}],"usage":null,"obfuscation":"odfH1BqmSysXoQX"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"5vmLQg"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" additional"},"finish_reason":null}],"usage":null,"obfuscation":"85PS7edSCbfj"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"678"},"finish_reason":null}],"usage":null,"obfuscation":"g43k"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" edits"},"finish_reason":null}],"usage":null,"obfuscation":"u"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"90"},"finish_reason":null}],"usage":null,"obfuscation":"X2qMT"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}],"usage":null,"obfuscation":"PyvcSe"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"kgT"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":null,"obfuscation":"7"} -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"``"},"finish_reason":null}],"usage":null,"obfuscation":"IENwg"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"`\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"4U"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Notes"},"finish_reason":null}],"usage":null,"obfuscation":"mb"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}],"usage":null,"obfuscation":"eWI4"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"vNyV5I"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" The"},"finish_reason":null}],"usage":null,"obfuscation":"nXZ"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}],"usage":null,"obfuscation":"10M7xKE1b67hafu"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" written"},"finish_reason":null}],"usage":null,"obfuscation":"cuhhj4CeigD1UgE"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"0IQ6"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"ZoQ"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"bs"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" was"},"finish_reason":null}],"usage":null,"obfuscation":"wS5"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" exactly"},"finish_reason":null}],"usage":null,"obfuscation":"sMx2WDna3NDQYwZ"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"0hb"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" string"},"finish_reason":null}],"usage":null,"obfuscation":""} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" returned"},"finish_reason":null}],"usage":null,"obfuscation":"BEj8YwjVinkJVB"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" by"},"finish_reason":null}],"usage":null,"obfuscation":"3Dsy"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" get"},"finish_reason":null}],"usage":null,"obfuscation":"gtf"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Code"},"finish_reason":null}],"usage":null,"obfuscation":"WED"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" ("},"finish_reason":null}],"usage":null,"obfuscation":"bNdxf"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"21"},"finish_reason":null}],"usage":null,"obfuscation":"1CR1E"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" chars"},"finish_reason":null}],"usage":null,"obfuscation":"w"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"),"},"finish_reason":null}],"usage":null,"obfuscation":"W8r0d"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" wrapped"},"finish_reason":null}],"usage":null,"obfuscation":"aHhICEmcTUnhmMq"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}],"usage":null,"obfuscation":"rSUh"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}],"usage":null,"obfuscation":"OtFXr"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" markdown"},"finish_reason":null}],"usage":null,"obfuscation":"B7UAyjBDFJr4y2"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"Av"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" block"},"finish_reason":null}],"usage":null,"obfuscation":"p"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" by"},"finish_reason":null}],"usage":null,"obfuscation":"YA3y"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"zD5"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" editor"},"finish_reason":null}],"usage":null,"obfuscation":""} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" output"},"finish_reason":null}],"usage":null,"obfuscation":""} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"A1"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"If"},"finish_reason":null}],"usage":null,"obfuscation":"RAGoS"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}],"usage":null,"obfuscation":"Raw"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"’d"},"finish_reason":null}],"usage":null,"obfuscation":"9RwEx"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}],"usage":null,"obfuscation":"yz"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":","},"finish_reason":null}],"usage":null,"obfuscation":"kDeUAF"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" I"},"finish_reason":null}],"usage":null,"obfuscation":"BLTGS"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}],"usage":null,"obfuscation":"tYP"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}],"usage":null,"obfuscation":"A5Jv"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"vxcFhK"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Verify"},"finish_reason":null}],"usage":null,"obfuscation":""} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"qQC"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"Pz"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" contents"},"finish_reason":null}],"usage":null,"obfuscation":"AggSHo905WFTWo"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" by"},"finish_reason":null}],"usage":null,"obfuscation":"BpXh"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" reading"},"finish_reason":null}],"usage":null,"obfuscation":"7BlAGfq2LLaX94N"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" /"},"finish_reason":null}],"usage":null,"obfuscation":"4LzeE"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"tmp"},"finish_reason":null}],"usage":null,"obfuscation":"MczH"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"/result"},"finish_reason":null}],"usage":null,"obfuscation":""} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}],"usage":null,"obfuscation":"KdZ"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"HtPvQ"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"EbFCqJ"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" View"},"finish_reason":null}],"usage":null,"obfuscation":"OV"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"tLL"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" raw"},"finish_reason":null}],"usage":null,"obfuscation":"ZqV"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}],"usage":null,"obfuscation":"bh4g1ZuIXjzIVon"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" without"},"finish_reason":null}],"usage":null,"obfuscation":"KqotEsJnw7202zj"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"AU4"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"pw"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" block"},"finish_reason":null}],"usage":null,"obfuscation":"J"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" wrapper"},"finish_reason":null}],"usage":null,"obfuscation":"1sIrx9kpy3y1Qmp"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}],"usage":null,"obfuscation":"ns5tM"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}],"usage":null,"obfuscation":"3UgsGR"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Save"},"finish_reason":null}],"usage":null,"obfuscation":"h1"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}],"usage":null,"obfuscation":"SFtKX"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" different"},"finish_reason":null}],"usage":null,"obfuscation":"cHVjmh5Hx4PLB"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" piece"},"finish_reason":null}],"usage":null,"obfuscation":"4"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" of"},"finish_reason":null}],"usage":null,"obfuscation":"rRb5"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" code"},"finish_reason":null}],"usage":null,"obfuscation":"kG"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" or"},"finish_reason":null}],"usage":null,"obfuscation":"9Ydy"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" text"},"finish_reason":null}],"usage":null,"obfuscation":"68"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"UPpM"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" another"},"finish_reason":null}],"usage":null,"obfuscation":"9y3pEwWtjcVhmFZ"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" path"},"finish_reason":null}],"usage":null,"obfuscation":"xZ"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"\n\n"},"finish_reason":null}],"usage":null,"obfuscation":"Flg"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Would"},"finish_reason":null}],"usage":null,"obfuscation":"ZK"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}],"usage":null,"obfuscation":"Nlc"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}],"usage":null,"obfuscation":"xZ"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" me"},"finish_reason":null}],"usage":null,"obfuscation":"38pk"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}],"usage":null,"obfuscation":"V0Lb"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" read"},"finish_reason":null}],"usage":null,"obfuscation":"Hq"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" back"},"finish_reason":null}],"usage":null,"obfuscation":"JP"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}],"usage":null,"obfuscation":"748"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}],"usage":null,"obfuscation":"9G"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" or"},"finish_reason":null}],"usage":null,"obfuscation":"Hdsm"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" make"},"finish_reason":null}],"usage":null,"obfuscation":"Y2"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" any"},"finish_reason":null}],"usage":null,"obfuscation":"6s2"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" adjustments"},"finish_reason":null}],"usage":null,"obfuscation":"pnlQHSO9oRP"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"?"},"finish_reason":null}],"usage":null,"obfuscation":"up8aas"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":null,"obfuscation":"F"} - -data: {"id":"chatcmpl-D52mrPdEJMNMRiu3YPcMWgAkrBN3L","object":"chat.completion.chunk","created":1770094725,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":5944,"completion_tokens":1591,"total_tokens":7535,"prompt_tokens_details":{"cached_tokens":4736,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":1408,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"R5KQcpHZ74"} +data: {"id":"chatcmpl-D64NkPzFlFdteIXaDZiWzbRazyX73","object":"chat.completion.chunk","created":1770339184,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":6014,"completion_tokens":601,"total_tokens":6615,"prompt_tokens_details":{"cached_tokens":4736,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":512,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"wCzJI4gC3nyF"} data: [DONE] - - diff --git a/crates/goose-acp/tests/test_data/openai_builtin_search.txt b/crates/goose-acp/tests/test_data/openai_builtin_search.txt index 07130f8e41..4220c58ef8 100644 --- a/crates/goose-acp/tests/test_data/openai_builtin_search.txt +++ b/crates/goose-acp/tests/test_data/openai_builtin_search.txt @@ -1,39 +1,39 @@ -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null},"finish_reason":null}],"obfuscation":"Yd"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null},"finish_reason":null}],"obfuscation":"bj"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"id":"call_zzoNiRL9fhMwZmopcrhgnzit","type":"function","function":{"name":"code_execution__list_functions","arguments":""}}]},"finish_reason":null}],"obfuscation":"RajKpGwjZtWueM"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"id":"call_mhfEtsDu6HJHTgoyc3rUDTNh","type":"function","function":{"name":"code_execution__list_functions","arguments":""}}]},"finish_reason":null}],"obfuscation":"iPDqUVdKwkKN3F"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{}"}}]},"finish_reason":null}],"obfuscation":"6NOrpOsiDjm"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{}"}}]},"finish_reason":null}],"obfuscation":"1sK4gwd8S5s"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"id":"call_oOGp9vL5SW3ATazwQsqMGVUF","type":"function","function":{"name":"code_execution__get_function_details","arguments":""}}]},"finish_reason":null}],"obfuscation":"XzNL5prg"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"id":"call_AwLicLqHJBNM33BX8pjZeB9H","type":"function","function":{"name":"code_execution__get_function_details","arguments":""}}]},"finish_reason":null}],"obfuscation":"Nb9YXNVD"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"{\"fu"}}]},"finish_reason":null}],"obfuscation":"pXtaOUk0"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"{\"fu"}}]},"finish_reason":null}],"obfuscation":"WfhGNuZ8"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"nctio"}}]},"finish_reason":null}],"obfuscation":"3vnwaaJz"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"nctio"}}]},"finish_reason":null}],"obfuscation":"onePKs8g"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"ns\": ["}}]},"finish_reason":null}],"obfuscation":"DOwx5E"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"ns\": ["}}]},"finish_reason":null}],"obfuscation":"1i6Ns7"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"\"Loo"}}]},"finish_reason":null}],"obfuscation":"R0vj7yxw"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"\"Mcp"}}]},"finish_reason":null}],"obfuscation":"SxKZ9zQ8"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"kup.g"}}]},"finish_reason":null}],"obfuscation":"ONm67mnw"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"Fixtu"}}]},"finish_reason":null}],"obfuscation":"oRNvv26j"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"etCode"}}]},"finish_reason":null}],"obfuscation":"WKRbEGk"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"re.get"}}]},"finish_reason":null}],"obfuscation":"9jh4BM5"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"\", \""}}]},"finish_reason":null}],"obfuscation":"PUSV6OA"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"Code"}}]},"finish_reason":null}],"obfuscation":"X4583CKJj"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"Devel"}}]},"finish_reason":null}],"obfuscation":"iE40CeHf"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"\", \"D"}}]},"finish_reason":null}],"obfuscation":"pLCir4"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"oper.t"}}]},"finish_reason":null}],"obfuscation":"H6OirmC"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"evelop"}}]},"finish_reason":null}],"obfuscation":"YdjzlvJ"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"extE"}}]},"finish_reason":null}],"obfuscation":"kDbaE6CEl"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"er.t"}}]},"finish_reason":null}],"obfuscation":"Kv1vRc0to"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"ditor"}}]},"finish_reason":null}],"obfuscation":"y0gYF9yy"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"extEd"}}]},"finish_reason":null}],"obfuscation":"4sRF9L7t"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"\"]}"}}]},"finish_reason":null}],"obfuscation":"YrrS1cRX8"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"itor\"]"}}]},"finish_reason":null}],"obfuscation":"SmXF9J"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":null,"obfuscation":"HVEjNhyKZ9f"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"usage":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"}"}}]},"finish_reason":null}],"obfuscation":"kO5yFNBeMAXW"} -data: {"id":"chatcmpl-D52mYBQiVJoVI837twEG5vpPRxo3F","object":"chat.completion.chunk","created":1770094706,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":2911,"completion_tokens":1088,"total_tokens":3999,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":1024,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"7gsIC3BJ8WITa"} +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":null,"obfuscation":"RNhcx0FLJsf"} + +data: {"id":"chatcmpl-D64NHpAses8hYgIt8xQfDCmg3PoHQ","object":"chat.completion.chunk","created":1770339155,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":2919,"completion_tokens":2626,"total_tokens":5545,"prompt_tokens_details":{"cached_tokens":2560,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":2560,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"KT48p4Oy6v"} data: [DONE] - - diff --git a/crates/goose-acp/tests/test_data/openai_image_tool_call.txt b/crates/goose-acp/tests/test_data/openai_image_tool_call.txt new file mode 100644 index 0000000000..491f782858 --- /dev/null +++ b/crates/goose-acp/tests/test_data/openai_image_tool_call.txt @@ -0,0 +1,9 @@ +data: {"id":"chatcmpl-D64jlQjeSdFB1flOZAoyVx3Kr3jBM","object":"chat.completion.chunk","created":1770340549,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_WQz9ddBYGE2NUstbYIx4jLzP","type":"function","function":{"name":"mcp-fixture__get_image","arguments":""}}],"refusal":null},"finish_reason":null}],"usage":null,"obfuscation":""} + +data: {"id":"chatcmpl-D64jlQjeSdFB1flOZAoyVx3Kr3jBM","object":"chat.completion.chunk","created":1770340549,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{}"}}]},"finish_reason":null}],"usage":null,"obfuscation":"S3q07Q7rhA5"} + +data: {"id":"chatcmpl-D64jlQjeSdFB1flOZAoyVx3Kr3jBM","object":"chat.completion.chunk","created":1770340549,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":null,"obfuscation":"sqTkwgxzEue"} + +data: {"id":"chatcmpl-D64jlQjeSdFB1flOZAoyVx3Kr3jBM","object":"chat.completion.chunk","created":1770340549,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":5254,"completion_tokens":345,"total_tokens":5599,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":320,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"XUJZvwg1ZvdZQCh"} + +data: [DONE] diff --git a/crates/goose-acp/tests/test_data/openai_image_tool_result.txt b/crates/goose-acp/tests/test_data/openai_image_tool_result.txt new file mode 100644 index 0000000000..55126be166 --- /dev/null +++ b/crates/goose-acp/tests/test_data/openai_image_tool_result.txt @@ -0,0 +1,25 @@ +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"5exqq"} + +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}],"usage":null,"obfuscation":"yI"} + +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" Goose"},"finish_reason":null}],"usage":null,"obfuscation":"6"} + +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"!\n"},"finish_reason":null}],"usage":null,"obfuscation":"ocAA"} + +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"This"},"finish_reason":null}],"usage":null,"obfuscation":"DJx"} + +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" is"},"finish_reason":null}],"usage":null,"obfuscation":"CQGZ"} + +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}],"usage":null,"obfuscation":"NJygF"} + +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}],"usage":null,"obfuscation":"kV"} + +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" image"},"finish_reason":null}],"usage":null,"obfuscation":"S"} + +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}],"usage":null,"obfuscation":"Cv0h11"} + +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":null,"obfuscation":"N"} + +data: {"id":"chatcmpl-D64jowotwkWXsd3RqhveZzRGUuOVu","object":"chat.completion.chunk","created":1770340552,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":5448,"completion_tokens":466,"total_tokens":5914,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":448,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}},"obfuscation":"evt64Mp0NnoCT9R"} + +data: [DONE] diff --git a/crates/goose-acp/tests/test_data/openai_tool_call_response.txt b/crates/goose-acp/tests/test_data/openai_tool_call.txt similarity index 90% rename from crates/goose-acp/tests/test_data/openai_tool_call_response.txt rename to crates/goose-acp/tests/test_data/openai_tool_call.txt index 2e89327d50..c62eaf9b92 100644 --- a/crates/goose-acp/tests/test_data/openai_tool_call_response.txt +++ b/crates/goose-acp/tests/test_data/openai_tool_call.txt @@ -1,4 +1,4 @@ -data: {"id":"chatcmpl-CqqCVVtD16yj37EZocLFkGNMhHZFS","object":"chat.completion.chunk","created":1766709751,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_eLXEeL8ZQBgXACKp78eNmyNp","type":"function","function":{"name":"lookup__get_code","arguments":""}}],"refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"FobexttCIQY"} +data: {"id":"chatcmpl-CqqCVVtD16yj37EZocLFkGNMhHZFS","object":"chat.completion.chunk","created":1766709751,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_eLXEeL8ZQBgXACKp78eNmyNp","type":"function","function":{"name":"mcp-fixture__get_code","arguments":""}}],"refusal":null},"finish_reason":null}],"usage":null,"obfuscation":"FobexttCIQY"} data: {"id":"chatcmpl-CqqCVVtD16yj37EZocLFkGNMhHZFS","object":"chat.completion.chunk","created":1766709751,"model":"gpt-5-nano-2025-08-07","service_tier":"default","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{}"}}]},"finish_reason":null}],"usage":null,"obfuscation":"01EkRUrgMxo"} diff --git a/crates/goose-acp/tests/test_data/openai_tool_result_response.txt b/crates/goose-acp/tests/test_data/openai_tool_result.txt similarity index 100% rename from crates/goose-acp/tests/test_data/openai_tool_result_response.txt rename to crates/goose-acp/tests/test_data/openai_tool_result.txt diff --git a/crates/goose-test-support/Cargo.toml b/crates/goose-test-support/Cargo.toml new file mode 100644 index 0000000000..18fdb9d42d --- /dev/null +++ b/crates/goose-test-support/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "goose-test-support" +edition.workspace = true +version.workspace = true +authors.workspace = true +license.workspace = true +repository.workspace = true +description.workspace = true + +[dependencies] +axum = "0.7" +rmcp = { workspace = true, features = ["server", "macros", "transport-streamable-http-server"] } +serde_json.workspace = true +tokio.workspace = true + +[[example]] +name = "mcp_fixture_server" +path = "examples/mcp_fixture_server.rs" + +[lints] +workspace = true diff --git a/crates/goose-test-support/examples/mcp_fixture_server.rs b/crates/goose-test-support/examples/mcp_fixture_server.rs new file mode 100644 index 0000000000..f80aaad7d3 --- /dev/null +++ b/crates/goose-test-support/examples/mcp_fixture_server.rs @@ -0,0 +1,19 @@ +use goose_test_support::mcp::McpFixtureServer; +use rmcp::service::ServiceExt; +use rmcp::transport::streamable_http_server::{ + session::local::LocalSessionManager, StreamableHttpServerConfig, StreamableHttpService, +}; + +#[tokio::main] +async fn main() { + let service = StreamableHttpService::new( + || Ok(McpFixtureServer::new().into_dyn()), + LocalSessionManager::default().into(), + StreamableHttpServerConfig::default(), + ); + let router = axum::Router::new().nest_service("/mcp", service); + let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); + let addr = listener.local_addr().unwrap(); + eprintln!("MCP fixture server running at http://{addr}/mcp"); + axum::serve(listener, router).await.unwrap(); +} diff --git a/crates/goose-test-support/src/lib.rs b/crates/goose-test-support/src/lib.rs new file mode 100644 index 0000000000..4481d557d4 --- /dev/null +++ b/crates/goose-test-support/src/lib.rs @@ -0,0 +1,5 @@ +pub mod mcp; +pub mod session; + +pub use mcp::{McpFixture, FAKE_CODE, TEST_IMAGE_B64}; +pub use session::{ExpectedSessionId, TEST_SESSION_ID}; diff --git a/crates/goose-test-support/src/mcp.rs b/crates/goose-test-support/src/mcp.rs new file mode 100644 index 0000000000..d20a4a908e --- /dev/null +++ b/crates/goose-test-support/src/mcp.rs @@ -0,0 +1,180 @@ +use crate::session::{ExpectedSessionId, SESSION_ID_HEADER}; +use rmcp::model::{ + CallToolResult, ClientNotification, ClientRequest, Content, ErrorCode, Implementation, Meta, + ProtocolVersion, ServerCapabilities, ServerInfo, +}; +use rmcp::service::{DynService, NotificationContext, RequestContext, ServiceExt, ServiceRole}; +use rmcp::transport::streamable_http_server::{ + session::local::LocalSessionManager, StreamableHttpServerConfig, StreamableHttpService, +}; +use rmcp::{ + handler::server::router::tool::ToolRouter, tool, tool_handler, tool_router, + ErrorData as McpError, RoleServer, ServerHandler, Service, +}; +use tokio::task::JoinHandle; + +pub const FAKE_CODE: &str = "test-uuid-12345-67890"; + +pub const TEST_IMAGE_B64: &str = include_str!("test_assets/test_image.b64").trim_ascii_end(); + +pub trait HasMeta { + fn meta(&self) -> &Meta; +} + +impl HasMeta for RequestContext { + fn meta(&self) -> &Meta { + &self.meta + } +} + +impl HasMeta for NotificationContext { + fn meta(&self) -> &Meta { + &self.meta + } +} + +struct ValidatingService { + inner: S, + expected_session_id: ExpectedSessionId, +} + +impl ValidatingService { + fn new(inner: S, expected_session_id: ExpectedSessionId) -> Self { + Self { + inner, + expected_session_id, + } + } + + fn validate(&self, context: &C) -> Result<(), McpError> { + let actual = context + .meta() + .0 + .get(SESSION_ID_HEADER) + .and_then(|v| v.as_str()); + self.expected_session_id + .validate(actual) + .map_err(|e| McpError::new(ErrorCode::INVALID_REQUEST, e, None)) + } +} + +impl> Service for ValidatingService { + async fn handle_request( + &self, + request: ClientRequest, + context: RequestContext, + ) -> Result { + if !matches!(request, ClientRequest::InitializeRequest(_)) { + self.validate(&context)?; + } + self.inner.handle_request(request, context).await + } + + async fn handle_notification( + &self, + notification: ClientNotification, + context: NotificationContext, + ) -> Result<(), McpError> { + if !matches!(notification, ClientNotification::InitializedNotification(_)) { + self.validate(&context).ok(); + } + self.inner.handle_notification(notification, context).await + } + + fn get_info(&self) -> ServerInfo { + self.inner.get_info() + } +} + +#[derive(Clone)] +pub struct McpFixtureServer { + tool_router: ToolRouter, +} + +impl Default for McpFixtureServer { + fn default() -> Self { + Self::new() + } +} + +#[tool_router] +impl McpFixtureServer { + pub fn new() -> Self { + Self { + tool_router: Self::tool_router(), + } + } + + #[tool(description = "Get the code")] + fn get_code(&self) -> Result { + Ok(CallToolResult::success(vec![Content::text(FAKE_CODE)])) + } + + #[tool(description = "Get an image")] + fn get_image(&self) -> Result { + Ok(CallToolResult::success(vec![Content::image( + TEST_IMAGE_B64, + "image/png", + )])) + } +} + +#[tool_handler] +impl ServerHandler for McpFixtureServer { + fn get_info(&self) -> ServerInfo { + ServerInfo { + protocol_version: ProtocolVersion::V_2025_03_26, + capabilities: ServerCapabilities::builder().enable_tools().build(), + server_info: Implementation { + name: "mcp-fixture".into(), + version: "1.0.0".into(), + ..Default::default() + }, + instructions: Some("Test server with get_code and get_image tools.".into()), + } + } +} + +pub struct McpFixture { + pub url: String, + handle: JoinHandle<()>, +} + +impl Drop for McpFixture { + fn drop(&mut self) { + self.handle.abort(); + } +} + +type McpServiceFactory = + Box Result>, std::io::Error> + Send + Sync>; + +impl McpFixture { + pub async fn new(expected_session_id: Option) -> Self { + let service_factory: McpServiceFactory = match expected_session_id { + Some(expected_session_id) => Box::new(move || { + Ok( + ValidatingService::new(McpFixtureServer::new(), expected_session_id.clone()) + .into_dyn(), + ) + }), + None => Box::new(|| Ok(McpFixtureServer::new().into_dyn())), + }; + + let service = StreamableHttpService::new( + service_factory, + LocalSessionManager::default().into(), + StreamableHttpServerConfig::default(), + ); + let router = axum::Router::new().nest_service("/mcp", service); + let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap(); + let addr = listener.local_addr().unwrap(); + let url = format!("http://{addr}/mcp"); + + let handle = tokio::spawn(async move { + axum::serve(listener, router).await.unwrap(); + }); + + Self { url, handle } + } +} diff --git a/crates/goose-test-support/src/session.rs b/crates/goose-test-support/src/session.rs new file mode 100644 index 0000000000..a311ff5f70 --- /dev/null +++ b/crates/goose-test-support/src/session.rs @@ -0,0 +1,56 @@ +use std::sync::{Arc, Mutex}; + +pub const TEST_SESSION_ID: &str = "test-session-id"; + +const NOT_YET_SET: &str = "session-id-not-yet-set"; +pub(crate) const SESSION_ID_HEADER: &str = "agent-session-id"; + +#[derive(Clone)] +pub struct ExpectedSessionId { + value: Arc>, + errors: Arc>>, +} + +impl Default for ExpectedSessionId { + fn default() -> Self { + Self { + value: Arc::new(Mutex::new(NOT_YET_SET.to_string())), + errors: Arc::new(Mutex::new(Vec::new())), + } + } +} + +impl ExpectedSessionId { + pub fn set(&self, id: impl Into) { + *self.value.lock().unwrap() = id.into(); + } + + pub fn validate(&self, actual: Option<&str>) -> Result<(), String> { + let expected = self.value.lock().unwrap(); + let err = match actual { + Some(act) if act == *expected => None, + _ => Some(format!( + "{} mismatch: expected '{}', got {:?}", + SESSION_ID_HEADER, expected, actual + )), + }; + match err { + Some(e) => { + self.errors.lock().unwrap().push(e.clone()); + Err(e) + } + None => Ok(()), + } + } + + pub fn assert_matches(&self, actual: &str) { + let result = self.validate(Some(actual)); + assert!(result.is_ok(), "{}", result.unwrap_err()); + let errors = self.errors.lock().unwrap(); + assert!( + errors.is_empty(), + "Session ID validation errors: {:?}", + *errors + ); + } +} diff --git a/crates/goose-test-support/src/test_assets/test_image.b64 b/crates/goose-test-support/src/test_assets/test_image.b64 new file mode 100644 index 0000000000..2213be4b24 --- /dev/null +++ b/crates/goose-test-support/src/test_assets/test_image.b64 @@ -0,0 +1 @@ +iVBORw0KGgoAAAANSUhEUgAAAZAAAADICAAAAADjfug+AAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAACYktHRAD/h4/MvwAAAAd0SU1FB+gLGBYWC0dfzrMAAA/XSURBVHja7Z15eFTV3cc/dxJCCBDCEpYSYtCAbJogUsE+IoICwmu0atWqRSuLWlFbLNLyorwt7fO+vvK4YASXqlBtHxQxLm+hYKlaQBGQJSxhKRAWCUsgGwmBJHPeP2bubDn33skkkznhOZ9/uOc3v3PO997v3Dt3ztxfMAQalXDFWoAmGG2IYmhDFEMbohjaEMXQhiiGNkQxtCGKoQ1RDG2IYmhDFEMbohjaEMXQhiiGNkQxtCGKoQ1RDG2IYmhDFEMbohjaEMXQhiiGNkQxtCGKoQ1RDG2IYmhDFEMbohjaEMXQhiiGNkQxtCGKoQ1RDG2IYmhDFEMbohjaEMXQhiiGNkQxtCGKoQ1RDG2IYmhDFEMbohjaEMXQhiiGNkQxtCGKoQ1RDG2IYmhDFEMbohjaEMXQhiiGNkQxtCGKoQ1RDG2IYmhDFEMbohhRMyTTMIzi4JBhGF1senxoGMbWoI2wOfpCTma7+A69x8/ZFK39CWSRYRiPRGns+ObYgShzcNYHboDy8sIVv79qTk6s9TSKi+CSteiKJW5/a/OtkytjragxtPwz5PdzANqMvKTT2QMbTgJv/fvzVrEWFTkt3pC35gCpf7y3LYB79bPr4atpr8daVeS09EvW7ieAkXumtPXszU1fzwbe2BhrWZHTwg0R91XBTSs6+gLG3CnAH2OtK3JieMk6ubaorMvgqw2nvPztx0W3qwZKX1u+GVLfSwwMzVtayqcnuzr1l0UrN+wuSUrNDkkNV2cTIaLEZcCp4BDQ2df4eqTn5EybV+ONLAW2BG0IIWpeyvDovCT3gmSW0cDbIbFfAu8L2/7SaPGjSZ5g+sJaf2p9nUK8AzwcpeMWI0Pc0/1vuOztnpjMkKNZ/rdOVmG9SQ4CHc+FBNdkZWU9J+z6S6PbeviDN56z0SnEYuDRi8uQhwDSb7ltsAGk7rcy5OilgDHkzpwrAFIPhE6yyOGtKu8vjRZ3A9Jzptyb7QJ+YqNTiI+B31xUhrwGpH0mhBAHbwUG1soNcd8IjDsohBAFNwJXhp4Mk4FF1hrk/eXRX0HcG7VCCLH7h8A/rXUKsQ6YF6XjFlVD6uMx5FhbSDviTbwHWCw3ZBEw3u1Jq70FeDVkkmxgh7UGeX95tAdM9HY72QEesNYpxB7gnSgdt5gYMhtYbSaWtYPhQT74NrIh6biZdyIZeodM8gOg3FqDvL80Wgr8wQz+HLKtdQpxBvg0SsctFoa4u8Ewf+YkiC8XEkO2AL/w5z0MFARPkggut9nY/1kAlZb95dETwHXmUMUFBfutdQrhjod1UTpuUf0eMiMpqPk7778FJ+A//OGRb1G7YbSk+xrgLn9z7Ouwtl9gQnU1tPfdBn00I+ClfZlW/eXR1M6nWXPvvJ6et01ne51G5xPY/ZDQGKJqyNPBqk1D1gN9/eGBwCFZ9w0Qd42/OQAoDEpwAResp5f3l0eNab+DJctG3Twiy7d4Ya2zywk6R+mYxeKb+vcEvUcBTsvyjkFGwJfwrsCZoISEtpWcq7XcBXl/i1Fn5+dBzcqVpIy6Oaerg85UXB2JDrFYyyqpHzonyyuFlIBmAlAdnNEJOG42fm1ehmfb9rcYNX7ZaxmeXh9N6XnHTnudXUiJ1oGLxRniBjJaB4VSZHk1EBfQPAt0CM7ocQS2pYX2K7btbzWq8fCUtZ+t3iqA2o/+/tFYO52pUbtixcSQjsBfrnXOS4GygOb3eE6JAIZvgI0TQvsdse1vPaprxAhOf7l6+SGomri/nY3OLlH7TI/JJasrcDS8vIM1/uYOPB+sAYwAloV2c6+z7W8/auc7FhR+2RdO/s1OZxTPkFgYMhTY4G8Wffjhh+WyvCFwISDvH96uAYyIhx2bQ7qtK7XtL4+uyM39PzN0/SfALjudOUufidrRieYXQ4u1rJr2kOH7PieehFaVQvLFcA2Bi6pnk73fnwO5HxgTEhsHsM+yvzw6FS73D9EOZlnqjC4xWVx8HHjXjO5Jgp8KITHE3QcSzBVW8b/A/NBZ8gH+HBR6C9MQeX95dCEYvmWAIuANS53RJSaGHGgNHbd5gkf6Q/x2IWRrWQuBK4s9eevaQHr9N+h9QKvPAgJvt/IZYtFfGj0SDzdUeYI194DriKVOzw9U/3kxGSIWAEmzt52t3DE3xbdzkuX3kUD3F/dWlWyangDk1Z+mvC/Ag+YvJRtz8Hz53mfdXx59COizcM/ZyoJXBwJTrXVejIaIpwI/xu6sszBEFAXdVT0vm2eb534n65FnX/yvSX0AbimO8xpi0V8aLekdGMyusNZ5URoiFiabu9lqtnc/ZT/hnv6x73CkLpZPVBhy5zWpRlxtGmLRXxo9Otw/xu0lNjpbqCGf5+XlnQ8O5eXlLfc1TjwzyAWtBs/y/dL9fV5eXmnQhhBC/GtSLxdGpzGvlFjNdD434Lt636VCiF/7DLHqL42unDQo2XB1GPL4poBgfZ1ClBYUFJwS0cEQjbhlbiR1p1ydwlkpqCtLtk87v3LlN8eL41Iyh0wY7QJO7Wdwa6f+8qjbqP+4T7g6m4RYGqKR0MKfXLz40IYohjZEMbQhiqENUQxtiGJoQxRDG6IYVoa8Z0jpArmGYRyvl59rGMbuMOYLN685UUpTyy36rKwhrn2zdGpWWu4l646OHYc2T6dmxeoMyZ5rbv21AB40H51Och5R0yisDBk0yNzaVAD33eg0ztT7IdkpqQF5zYlSmprqMyQhoWnzmhOlNLXcz5CLlIjPkJq1O8s7pd3QVvaavN674XmVG3eVxqf0u6pdOIJk5eThCgmm9qv8c12vHeAZYfWhcz2GBlWlyFWd+uJoba8RPcNRZY/jb4q3Ap8HtF8BisR8z8OtbadV+aPe55rk9d6iYXlCiH0/877e+scbQ1/zP3zgfTJHVk4eOkG9TqGaXgFKxGJPffToQiEqn/C84YbvdlBVeHscgOu2A2ICzDTDMlUORGbIsQd9+3ZVVciBltZ7SwyxzxPivYAruyv0gZOQYystJ683QXiGTDeTMk4e729ut99pq2q570LRZYPfEHmRuwORXbJmvgs/6HN+ZwVs/u1LQS+dHnMC0rO7Ve7Kd/OPiR9YDeGU9+1EN6Rf163m0JoS3DMGjA96tU0HKmtxtfeWFkx+G0jPiju0VbB11PpL5ROEdJIz9wXo1eXQGSh84kAB9Ew9fAYqHthoo+rz2y5AQv+0sk3VxeP9bwOZKmciOkNg2BohRPV/A63PBL3LpPXeknejQ54YBa7cOiGEqJ4D3FBP11j/07jScnLpBGODHuGVnSEweqsQtX/yXGtGbxFCfNIdWGutqrgH8FiREKJ8lgHmGWJR5O5AhIb8xHtNfATvk3++nZLVe8t23iHvTBw8aTZyINHGEHk5uXSCMAz5mefxq0fB92jcp3hrpuWqpgNzvME/+QyxKnJ3ILLb3s7veC91DwA7A18pK/IXSqbeDtssRnDK21MHk8zGOKiusFazoBIWm89mvd4OXmuAkFC6ve4y5yRxoWd7TBzstVRV9Tb0NcvoJt1qq8qZyAyZaH6I9QeKAl85D6w0Hy16vqBgmcUITnkpM2f+1ne3GgfUWYoRb8KwUWYr+W7YWBG+kFDub+P5txcw2lsn1ToZSi1VfVkKv/J9Fj9pq8qZyD7Uf+SbyBDBBZuyem8ZTnn9/se/7bY/mPJy8nCFhGKWsLUBBptBl7f8WqrqG2CML3xdYrWNKmciO0P6mBuGK+S9a0wDlvQe9/IWt+0IYeZV7/n7wqcHr7IdSl5OHq4Qy10juKIx8IHCYFUFkOS/g4q/3E6VM5GdITZLcZJ67wjz9i1Zu6MojAcrLcrJwxVis2uyP25aX9UZ6B7Q7GirypHIzpBE65ck9d4R5VVM6vfsqmMCIHmIrRiLcvJwhYTQ2vZVmaqK4F8l4m1VOdL0vxjWr/eOJK9sRD5A1z6XDRzyo9zv7Ca0KicPV0gDkKpKhNqAnBP2qpyIxk+4ofXekeQ9lQ/pM25Lc5oLu7L3cIWEjVRVSvDpcMxJlcPBa7xKKYH13hHklS2GtE3TvHt+wXYI+7L3cIWEg1xVLzjh/3j47nQ4qqxp6jNkxX4yzLu96z/pD7siyltfC4+nmq0j2DEU2OD//CxaB2OSwxbSEOSqrlkIq35qRs2bYbkqZ5rakI/f4HLf7Xe/dmeDLq/h550EfD9C1K2wnTK7fQXLnvctrD73Mq1KwxfSEOSqbnC5mX+Pd/7D821VOdPUl6zBsNf3jNPxs5ARUV4SAX/m52X7G/j4B6HwL2Zr75twZ1L4QhqCXFX6LbDe+7fAiu80/2sGuSrYvGTJkh12k0S0uFjka8V5l+3MBTppvbdkIc8hbx9whacqvfY5F8AZia5Uz5a0nFw+gb+T1eKiuWsFwCtmRmcYa61qexJw93d1dUfnp0Mr7+KiRZH7Y/hXIptucdGatInwRdZreyurdi/IXgKT0yLKyxwO26/55FR5/nMDZrr7AF9WlQaP0BNOzd194Dz0fhFKhj+TX1m18w9XFMDMQZYT+DtFgoWqQX9OgPeHJCSmPXGY6RneZKmqMGjiM8Si3rv+u9Ehb2PAd89xRfEAbwZnvOt5cbsQ8nJy6QSBnRp+hliq+jrTGzSeqr0MZnl6SYvcm/sMIWVNYL33F+0izLs6z/xbZUkv/K37zyUD3NXLvz0vsJz8fZf1BIGdIsBK1fCCxTk9EzoNeOSbeXEVnoVJC1WOOFfhLt0D92f429u/god8awUL3PQfDRzeBdd5F+VXffDt4Qqjfea1D9Rf8wg3D4pe+HR/XdsrJ0zuBjUvrTrX6zdZwQn/nvVFSdvMjz2H+GRu3i43rQbdPPUSf4ZkgqBOoZp2r4e7vUezLA+GmbdUS6rpeVN4qtyJNbz6C29DqqqxhkSGrN67wXniQuuwBvEgLycPV0j42Ks6eCksv9lJlTXRevo93EuhbZ7RED+I6y6LNv1SRKiqsufhpuvN1hoCfkexVGUzuv7DAY2ltu0FxpsLM3VDt5C1tRGj6UdJG0389bDin55t94wtMLUxo+kzpPEsnwBtnr4r0zi+dsFaGLilMf9rnzakCXhsQUCjx78yIx4IfclqEl6d5y+TG/Nto/zQZ0jTUPzXlfnFtcmXXXvPsEaOpA1RDH3JUgxtiGJoQxRDG6IY2hDF0IYohjZEMbQhiqENUQxtiGJoQxRDG6IY2hDF0IYohjZEMbQhiqENUQxtiGJoQxRDG6IY2hDF0IYohjZEMbQhiqENUQxtiGJoQxRDG6IY2hDF0IYohjZEMbQhiqENUQxtiGJoQxRDG6IY2hDF0IYohjZEMbQhiqENUQxtiGJoQxRDG6IY2hDF0IYohjZEMbQhiqENUQxtiGJoQxRDG6IY2hDF0IYohjZEMbQhiqENUQxtiGJoQxRDG6IY/w98aDLYDYQUAQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNC0xMS0yNFQyMjoyMjoxMSswMDowMFXDgZwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjQtMTEtMjRUMjI6MjI6MTErMDA6MDAknjkgAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI0LTExLTI0VDIyOjIyOjExKzAwOjAwc4sY/wAAAABJRU5ErkJggg== \ No newline at end of file diff --git a/crates/goose-test-support/src/test_assets/test_image.png b/crates/goose-test-support/src/test_assets/test_image.png new file mode 100644 index 0000000000..f72b65986d Binary files /dev/null and b/crates/goose-test-support/src/test_assets/test_image.png differ diff --git a/crates/goose/Cargo.toml b/crates/goose/Cargo.toml index 086fe11462..c95734bff3 100644 --- a/crates/goose/Cargo.toml +++ b/crates/goose/Cargo.toml @@ -148,6 +148,7 @@ ctor = "0.2.9" test-case = { workspace = true } env-lock = { workspace = true } rmcp = { workspace = true, features = ["transport-streamable-http-server"] } +goose-test-support = { path = "../goose-test-support" } [[example]] name = "agent" diff --git a/crates/goose/src/providers/chatgpt_codex.rs b/crates/goose/src/providers/chatgpt_codex.rs index 8dacdcbb4c..eb51bdfbbe 100644 --- a/crates/goose/src/providers/chatgpt_codex.rs +++ b/crates/goose/src/providers/chatgpt_codex.rs @@ -997,6 +997,7 @@ impl Provider for ChatGptCodexProvider { mod tests { use super::*; use crate::conversation::message::Message; + use goose_test_support::TEST_IMAGE_B64; use jsonwebtoken::{Algorithm, EncodingKey, Header}; use rmcp::model::{CallToolRequestParams, CallToolResult, Content, ErrorCode, ErrorData}; use rmcp::object; @@ -1004,9 +1005,6 @@ mod tests { use wiremock::matchers::{body_string_contains, method, path}; use wiremock::{Mock, MockServer, ResponseTemplate}; - /// 1x1 transparent PNG, base64-encoded. - const TINY_PNG_B64: &str = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNgYAAAAAMAASsJTYQAAAAASUVORK5CYII="; - fn input_kinds(payload: &Value) -> Vec { payload["input"] .as_array() @@ -1106,7 +1104,7 @@ mod tests { vec![ Message::user() .with_text("describe this") - .with_image(TINY_PNG_B64, "image/png"), + .with_image(TEST_IMAGE_B64, "image/png"), ], vec![ "message:user".to_string(), @@ -1122,7 +1120,7 @@ mod tests { #[test] fn test_image_url_format() { - let messages = vec![Message::user().with_image(TINY_PNG_B64, "image/png")]; + let messages = vec![Message::user().with_image(TEST_IMAGE_B64, "image/png")]; let items = build_input_items(&messages).unwrap(); // The image is inside the content array of the user message let content = items[0]["content"].as_array().unwrap(); diff --git a/crates/goose/src/providers/codex.rs b/crates/goose/src/providers/codex.rs index 8c44edcc80..898355d417 100644 --- a/crates/goose/src/providers/codex.rs +++ b/crates/goose/src/providers/codex.rs @@ -670,11 +670,9 @@ impl Provider for CodexProvider { #[cfg(test)] mod tests { use super::*; + use goose_test_support::TEST_IMAGE_B64; use test_case::test_case; - /// 1x1 transparent PNG, base64-encoded. - const TINY_PNG_B64: &str = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNgYAAAAAMAASsJTYQAAAAASUVORK5CYII="; - #[test] fn test_codex_metadata() { let metadata = CodexProvider::metadata(); @@ -694,7 +692,7 @@ mod tests { let dir = tempfile::tempdir().unwrap(); let messages = vec![Message::user() .with_text("Describe") - .with_image(TINY_PNG_B64, mime)]; + .with_image(TEST_IMAGE_B64, mime)]; let (_prompt, temp_files) = prepare_input("", &messages, dir.path()).unwrap(); assert_eq!(temp_files.len(), 1); let path = temp_files[0].path(); @@ -712,7 +710,7 @@ mod tests { let dir = tempfile::tempdir().unwrap(); let messages = vec![Message::user() .with_text("Describe") - .with_image(TINY_PNG_B64, mime)]; + .with_image(TEST_IMAGE_B64, mime)]; let err = prepare_input("", &messages, dir.path()).unwrap_err(); assert!( err.to_string().contains("Unsupported image MIME type"), diff --git a/crates/goose/src/providers/formats/bedrock.rs b/crates/goose/src/providers/formats/bedrock.rs index dc37e006b8..3f7a6d3f19 100644 --- a/crates/goose/src/providers/formats/bedrock.rs +++ b/crates/goose/src/providers/formats/bedrock.rs @@ -386,11 +386,9 @@ pub fn from_bedrock_json(document: &Document) -> Result { mod tests { use super::*; use anyhow::Result; + use goose_test_support::TEST_IMAGE_B64; use rmcp::model::{AnnotateAble, RawImageContent}; - // Base64 encoded 1x1 PNG image for testing - const TEST_IMAGE_BASE64: &str = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=="; - #[test] fn test_to_bedrock_image_supported_formats() -> Result<()> { let supported_formats = [ @@ -403,7 +401,7 @@ mod tests { for mime_type in supported_formats { let image = RawImageContent { - data: TEST_IMAGE_BASE64.to_string(), + data: TEST_IMAGE_B64.to_string(), mime_type: mime_type.to_string(), meta: None, } @@ -419,7 +417,7 @@ mod tests { #[test] fn test_to_bedrock_image_unsupported_format() { let image = RawImageContent { - data: TEST_IMAGE_BASE64.to_string(), + data: TEST_IMAGE_B64.to_string(), mime_type: "image/bmp".to_string(), meta: None, } @@ -450,7 +448,7 @@ mod tests { #[test] fn test_to_bedrock_message_content_image() -> Result<()> { let image = RawImageContent { - data: TEST_IMAGE_BASE64.to_string(), + data: TEST_IMAGE_B64.to_string(), mime_type: "image/png".to_string(), meta: None, } @@ -467,7 +465,7 @@ mod tests { #[test] fn test_to_bedrock_tool_result_content_block_image() -> Result<()> { - let content = Content::image(TEST_IMAGE_BASE64.to_string(), "image/png".to_string()); + let content = Content::image(TEST_IMAGE_B64.to_string(), "image/png".to_string()); let result = to_bedrock_tool_result_content_block("test_id", content)?; // Verify the wrapper correctly converts Content::Image to ToolResultContentBlock::Image diff --git a/crates/goose/src/providers/ollama.rs b/crates/goose/src/providers/ollama.rs index 56618c77eb..7dd87e4ac2 100644 --- a/crates/goose/src/providers/ollama.rs +++ b/crates/goose/src/providers/ollama.rs @@ -38,6 +38,7 @@ pub const OLLAMA_DEFAULT_PORT: u16 = 11434; pub const OLLAMA_DEFAULT_MODEL: &str = "qwen3"; pub const OLLAMA_KNOWN_MODELS: &[&str] = &[ OLLAMA_DEFAULT_MODEL, + "qwen3-vl", "qwen3-coder:30b", "qwen3-coder:480b-cloud", ]; diff --git a/crates/goose/tests/providers.rs b/crates/goose/tests/providers.rs index 0656bb3a74..9be54de9d0 100644 --- a/crates/goose/tests/providers.rs +++ b/crates/goose/tests/providers.rs @@ -1,5 +1,7 @@ use anyhow::Result; use dotenvy::dotenv; +use goose::agents::{ExtensionManager, PromptManager}; +use goose::config::ExtensionConfig; use goose::conversation::message::{Message, MessageContent}; use goose::providers::anthropic::ANTHROPIC_DEFAULT_MODEL; use goose::providers::azure::AZURE_DEFAULT_MODEL; @@ -10,17 +12,15 @@ use goose::providers::databricks::DATABRICKS_DEFAULT_MODEL; use goose::providers::errors::ProviderError; use goose::providers::google::GOOGLE_DEFAULT_MODEL; use goose::providers::litellm::LITELLM_DEFAULT_MODEL; -use goose::providers::ollama::OLLAMA_DEFAULT_MODEL; use goose::providers::openai::OPEN_AI_DEFAULT_MODEL; use goose::providers::sagemaker_tgi::SAGEMAKER_TGI_DEFAULT_MODEL; use goose::providers::snowflake::SNOWFLAKE_DEFAULT_MODEL; use goose::providers::xai::XAI_DEFAULT_MODEL; -use rmcp::model::{AnnotateAble, Content, RawImageContent}; -use rmcp::model::{CallToolRequestParams, Tool}; -use rmcp::object; +use goose::session::SessionManager; +use goose_test_support::{ExpectedSessionId, McpFixture, FAKE_CODE, TEST_SESSION_ID}; use std::collections::HashMap; -use std::sync::Arc; -use std::sync::Mutex; +use std::sync::{Arc, Mutex}; +use tokio_util::sync::CancellationToken; #[derive(Debug, Clone, Copy)] enum TestStatus { @@ -88,11 +88,77 @@ lazy_static::lazy_static! { struct ProviderTester { provider: Arc, name: String, + extension_manager: Arc, } impl ProviderTester { - fn new(provider: Arc, name: String) -> Self { - Self { provider, name } + fn new( + provider: Arc, + name: String, + extension_manager: Arc, + ) -> Self { + Self { + provider, + name, + extension_manager, + } + } + + async fn tool_roundtrip(&self, prompt: &str) -> Result { + let tools = self + .extension_manager + .get_prefixed_tools(TEST_SESSION_ID, None) + .await + .expect("get_prefixed_tools failed"); + + let info = self.extension_manager.get_extensions_info().await; + let system = PromptManager::new() + .builder() + .with_extensions(info.into_iter()) + .build(); + + let message = Message::user().with_text(prompt); + let (response1, _) = self + .provider + .complete( + TEST_SESSION_ID, + &system, + std::slice::from_ref(&message), + &tools, + ) + .await?; + + let tool_req = response1 + .content + .iter() + .filter_map(|c| c.as_tool_request()) + .next_back() + .expect("Expected provider to return a tool request"); + let params = tool_req + .tool_call + .as_ref() + .expect("tool_call should be Ok") + .clone(); + let result = self + .extension_manager + .dispatch_tool_call(TEST_SESSION_ID, params, None, CancellationToken::new()) + .await + .expect("dispatch failed") + .result + .await + .expect("tool call failed"); + let tool_response = Message::user().with_tool_response(&tool_req.id, Ok(result)); + + let (response2, _) = self + .provider + .complete( + TEST_SESSION_ID, + &system, + &[message, response1, tool_response], + &tools, + ) + .await?; + Ok(response2) } async fn test_basic_response(&self) -> Result<()> { @@ -101,7 +167,7 @@ impl ProviderTester { let (response, _) = self .provider .complete( - "test-session-id", + TEST_SESSION_ID, "You are a helpful assistant.", &[message], &[], @@ -123,94 +189,13 @@ impl ProviderTester { } async fn test_tool_usage(&self) -> Result<()> { - let weather_tool = Tool::new( - "get_weather", - "Get the weather for a location", - object!({ - "type": "object", - "required": ["location"], - "properties": { - "location": { - "type": "string", - "description": "The city and state, e.g. San Francisco, CA" - } - } - }), - ); - - let message = Message::user().with_text("What's the weather like in San Francisco?"); - - let (response1, _) = self - .provider - .complete( - "test-session-id", - "You are a helpful weather assistant.", - std::slice::from_ref(&message), - std::slice::from_ref(&weather_tool), - ) + let response = self + .tool_roundtrip("Use the get_code tool and output only its result.") .await?; - - println!("=== {}::reponse1 ===", self.name); - dbg!(&response1); - println!("==================="); - assert!( - response1 - .content - .iter() - .any(|content| matches!(content, MessageContent::ToolRequest(_))), - "Expected tool request in response" + response.as_concat_text().contains(FAKE_CODE), + "Expected lookup code in final response" ); - - let id = &response1 - .content - .iter() - .filter_map(|message| message.as_tool_request()) - .next_back() - .expect("got tool request") - .id; - - let weather = Message::user().with_tool_response( - id, - Ok(rmcp::model::CallToolResult { - content: vec![Content::text( - " - 50°F°C - Precipitation: 0% - Humidity: 84% - Wind: 2 mph - Weather - Saturday 9:00 PM - Clear", - )], - structured_content: None, - is_error: Some(false), - meta: None, - }), - ); - - let (response2, _) = self - .provider - .complete( - "test-session-id", - "You are a helpful weather assistant.", - &[message, response1, weather], - &[weather_tool], - ) - .await?; - - println!("=== {}::reponse2 ===", self.name); - dbg!(&response2); - println!("==================="); - - assert!( - response2 - .content - .iter() - .any(|content| matches!(content, MessageContent::Text(_))), - "Expected text for final response" - ); - Ok(()) } @@ -236,7 +221,7 @@ impl ProviderTester { let result = self .provider .complete( - "test-session-id", + TEST_SESSION_ID, "You are a helpful assistant.", &messages, &[], @@ -268,102 +253,15 @@ impl ProviderTester { } async fn test_image_content_support(&self) -> Result<()> { - use base64::{engine::general_purpose::STANDARD as BASE64, Engine as _}; - use goose::conversation::message::Message; - use std::fs; - - let image_path = "crates/goose/examples/test_assets/test_image.png"; - let image_data = match fs::read(image_path) { - Ok(data) => data, - Err(_) => { - println!( - "Test image not found at {}, skipping image test", - image_path - ); - return Ok(()); - } - }; - - let base64_image = BASE64.encode(image_data); - let image_content = RawImageContent { - data: base64_image, - mime_type: "image/png".to_string(), - meta: None, - } - .no_annotation(); - - let message_with_image = - Message::user().with_image(image_content.data.clone(), image_content.mime_type.clone()); - - let result = self - .provider - .complete( - "test-session-id", - "You are a helpful assistant. Describe what you see in the image briefly.", - &[message_with_image], - &[], - ) - .await; - - println!("=== {}::image_content_support ===", self.name); - let (response, _) = result?; - println!("Image response: {:?}", response); + let response = self + .tool_roundtrip("Use the get_image tool and describe what you see in its result.") + .await?; + let text = response.as_concat_text().to_lowercase(); assert!( - response - .content - .iter() - .any(|content| matches!(content, MessageContent::Text(_))), - "Expected text response for image" + text.contains("hello goose") || text.contains("test image"), + "Expected response to describe the test image, got: {}", + text ); - println!("==================="); - - let screenshot_tool = Tool::new( - "get_screenshot", - "Get a screenshot of the current screen", - object!({ - "type": "object", - "properties": {} - }), - ); - - let user_message = Message::user().with_text("Take a screenshot please"); - let tool_request = Message::assistant().with_tool_request( - "test_id", - Ok(CallToolRequestParams { - meta: None, - task: None, - name: "get_screenshot".into(), - arguments: Some(object!({})), - }), - ); - let tool_response = Message::user().with_tool_response( - "test_id", - Ok(rmcp::model::CallToolResult { - content: vec![Content::image( - image_content.data.clone(), - image_content.mime_type.clone(), - )], - structured_content: None, - is_error: Some(false), - meta: None, - }), - ); - - let result2 = self - .provider - .complete( - "test-session-id", - "You are a helpful assistant.", - &[user_message, tool_request, tool_response], - &[screenshot_tool], - ) - .await; - - println!("=== {}::tool_image_response ===", self.name); - let (response, _) = result2?; - println!("Tool image response: {:?}", response); - println!("==================="); - Ok(()) } @@ -452,7 +350,12 @@ async fn test_provider( original_env }; - let provider = match create_with_named_model(&name.to_lowercase(), model_name).await { + let expected_session_id = ExpectedSessionId::default(); + let provider_name = name.to_lowercase(); + let mcp = McpFixture::new(Some(expected_session_id.clone())).await; + expected_session_id.set(TEST_SESSION_ID); + + let provider = match create_with_named_model(&provider_name, model_name).await { Ok(p) => p, Err(e) => { println!("Skipping {} tests - failed to create provider: {}", name, e); @@ -475,8 +378,25 @@ async fn test_provider( } } - let tester = ProviderTester::new(provider, name.to_string()); - match tester.run_test_suite().await { + let temp_dir = tempfile::tempdir()?; + let shared_provider = Arc::new(tokio::sync::Mutex::new(Some(provider.clone()))); + let session_manager = Arc::new(SessionManager::new(temp_dir.path().to_path_buf())); + let extension_manager = Arc::new(ExtensionManager::new(shared_provider, session_manager)); + extension_manager + .add_extension( + ExtensionConfig::streamable_http("mcp-fixture", &mcp.url, "MCP fixture", 30_u64), + None, + None, + None, + ) + .await + .expect("failed to add extension"); + + let tester = ProviderTester::new(provider, name.to_string(), extension_manager); + let _mcp = mcp; + let result = tester.run_test_suite().await; + + match result { Ok(_) => { TEST_REPORT.record_pass(name); Ok(()) @@ -565,7 +485,8 @@ async fn test_databricks_provider() -> Result<()> { #[tokio::test] async fn test_ollama_provider() -> Result<()> { - test_provider("Ollama", OLLAMA_DEFAULT_MODEL, &["OLLAMA_HOST"], None).await + // qwen3-vl supports text, tools, and vision (needed for image test) + test_provider("Ollama", "qwen3-vl", &["OLLAMA_HOST"], None).await } #[tokio::test]