mirror of
https://github.com/openai/codex.git
synced 2026-04-26 15:45:02 +00:00
Add store/load support for code mode (#14259)
adds support for transferring state across code mode invocations.
This commit is contained in:
committed by
Michael Bolin
parent
2621ba17e3
commit
83b22bb612
@@ -524,3 +524,96 @@ structuredContent=null"
|
||||
|
||||
Ok(())
|
||||
}
|
||||
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
||||
async fn code_mode_can_store_and_load_values_across_turns() -> Result<()> {
|
||||
skip_if_no_network!(Ok(()));
|
||||
|
||||
let server = responses::start_mock_server().await;
|
||||
let mut builder = test_codex().with_config(move |config| {
|
||||
let _ = config.features.enable(Feature::CodeMode);
|
||||
});
|
||||
let test = builder.build(&server).await?;
|
||||
|
||||
responses::mount_sse_once(
|
||||
&server,
|
||||
sse(vec![
|
||||
ev_response_created("resp-1"),
|
||||
ev_custom_tool_call(
|
||||
"call-1",
|
||||
"code_mode",
|
||||
r#"
|
||||
import { store } from "@openai/code_mode";
|
||||
|
||||
store("nb", { title: "Notebook", items: [1, true, null] });
|
||||
add_content("stored");
|
||||
"#,
|
||||
),
|
||||
ev_completed("resp-1"),
|
||||
]),
|
||||
)
|
||||
.await;
|
||||
let first_follow_up = responses::mount_sse_once(
|
||||
&server,
|
||||
sse(vec![
|
||||
ev_assistant_message("msg-1", "stored"),
|
||||
ev_completed("resp-2"),
|
||||
]),
|
||||
)
|
||||
.await;
|
||||
|
||||
test.submit_turn("store value for later").await?;
|
||||
|
||||
let first_request = first_follow_up.single_request();
|
||||
let (first_output, first_success) =
|
||||
custom_tool_output_text_and_success(&first_request, "call-1");
|
||||
assert_ne!(
|
||||
first_success,
|
||||
Some(false),
|
||||
"code_mode store call failed unexpectedly: {first_output}"
|
||||
);
|
||||
assert_eq!(first_output, "stored");
|
||||
|
||||
responses::mount_sse_once(
|
||||
&server,
|
||||
sse(vec![
|
||||
ev_response_created("resp-3"),
|
||||
ev_custom_tool_call(
|
||||
"call-2",
|
||||
"code_mode",
|
||||
r#"
|
||||
import { load } from "openai/code_mode";
|
||||
|
||||
add_content(JSON.stringify(load("nb")));
|
||||
"#,
|
||||
),
|
||||
ev_completed("resp-3"),
|
||||
]),
|
||||
)
|
||||
.await;
|
||||
let second_follow_up = responses::mount_sse_once(
|
||||
&server,
|
||||
sse(vec![
|
||||
ev_assistant_message("msg-2", "loaded"),
|
||||
ev_completed("resp-4"),
|
||||
]),
|
||||
)
|
||||
.await;
|
||||
|
||||
test.submit_turn("load the stored value").await?;
|
||||
|
||||
let second_request = second_follow_up.single_request();
|
||||
let (second_output, second_success) =
|
||||
custom_tool_output_text_and_success(&second_request, "call-2");
|
||||
assert_ne!(
|
||||
second_success,
|
||||
Some(false),
|
||||
"code_mode load call failed unexpectedly: {second_output}"
|
||||
);
|
||||
let loaded: Value = serde_json::from_str(&second_output)?;
|
||||
assert_eq!(
|
||||
loaded,
|
||||
serde_json::json!({ "title": "Notebook", "items": [1, true, null] })
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user