cookie_agent_models/adapters/
compaction.rs1use oven_sdk::CompactionRequest;
4use oven_sdk_azure::{AzureOpenAiCompactionOptions, AzureOpenAiCompactionRequestExt as _};
5use oven_sdk_openai::{OpenAiResponsesCompactionOptions, OpenAiResponsesCompactionRequestExt as _};
6
7#[must_use]
10pub fn with_native_compaction_instructions(
11 request: CompactionRequest,
12 adapter_id: &str,
13 instructions: Option<String>,
14) -> CompactionRequest {
15 match adapter_id {
16 "oven.openai.responses" => {
17 request.with_openai_responses_compaction_options(OpenAiResponsesCompactionOptions {
18 instructions,
19 ..OpenAiResponsesCompactionOptions::default()
20 })
21 }
22 "oven.azure.openai.responses" => {
23 request.with_azure_openai_compaction_options(AzureOpenAiCompactionOptions {
24 instructions,
25 ..AzureOpenAiCompactionOptions::default()
26 })
27 }
28 _ => request,
29 }
30}
31
32#[cfg(test)]
33mod tests {
34 use oven_sdk::{CompactionRequest, Request};
35
36 use super::with_native_compaction_instructions;
37
38 fn request() -> CompactionRequest {
39 CompactionRequest::new(Request::new(Vec::new()))
40 }
41
42 #[test]
43 fn openai_responses_carries_native_instructions() {
44 let compaction = with_native_compaction_instructions(
45 request(),
46 "oven.openai.responses",
47 Some("focus".to_owned()),
48 );
49 assert_eq!(
50 compaction.request.provider_options["openai"]["compaction"]["instructions"],
51 serde_json::json!("focus")
52 );
53 }
54
55 #[test]
56 fn azure_openai_responses_carries_native_instructions() {
57 let compaction = with_native_compaction_instructions(
58 request(),
59 "oven.azure.openai.responses",
60 Some("focus".to_owned()),
61 );
62 assert_eq!(
63 compaction.request.provider_options["azure_openai"]["compaction"]["instructions"],
64 serde_json::json!("focus")
65 );
66 }
67
68 #[test]
69 fn adapters_without_a_native_option_leave_the_request_untouched() {
70 let compaction = with_native_compaction_instructions(
71 request(),
72 "oven.anthropic.messages",
73 Some("focus".to_owned()),
74 );
75 assert!(compaction.request.provider_options.is_empty());
76 }
77}