@@ -4,6 +4,7 @@ defmodule CodexPooler.Gateway.RequestCompression.PerformanceTest do
44 alias CodexPooler.Catalog.Model
55 alias CodexPooler.Gateway.Payloads.RequestOptions
66 alias CodexPooler.Gateway.RequestCompression
7+ alias CodexPooler.Gateway.RequestCompression.TokenCounter
78 alias CodexPooler.Gateway.Runtime.Dispatch.Context
89 alias CodexPooler.Gateway.Runtime.Dispatch.RouteState
910 alias CodexPooler.Pools.RoutingSettings
@@ -18,6 +19,11 @@ defmodule CodexPooler.Gateway.RequestCompression.PerformanceTest do
1819 @ local_budget_ms 500
1920 @ supported_model "gpt-4o"
2021
22+ setup_all do
23+ assert { :ok , _count , _metadata } = TokenCounter . count ( @ supported_model , "warm tokenizer ranks" )
24+ :ok
25+ end
26+
2127 describe "request compression guardrails" do
2228 test "skips over-limit bodies before JSON scanning" do
2329 body = "{" <> String . duplicate ( "x" , @ max_body_bytes )
@@ -199,6 +205,92 @@ defmodule CodexPooler.Gateway.RequestCompression.PerformanceTest do
199205 refute inspect ( compression ) =~ "call_oversized_shell_output"
200206 end
201207
208+ test "returns a large completed rewrite when a sibling candidate hits tokenizer input limit" do
209+ rewrite_item = % {
210+ "type" => "local_shell_call_output" ,
211+ "call_id" => "call_near_limit_completed_rewrite" ,
212+ "output" =>
213+ oversized_log_fixture ( "near-limit shell" , "SANITIZED_NEAR_LIMIT_REWRITE_SENTINEL" )
214+ }
215+
216+ skipped_output =
217+ "[\n " <>
218+ Jason . encode! (
219+ String . duplicate ( "a" , TokenCounter . max_input_bytes ( ) + 1 ) <>
220+ "SANITIZED_NEAR_LIMIT_SKIP_SENTINEL"
221+ ) <> "\n ]"
222+
223+ skip_item = % {
224+ "type" => "local_shell_call_output" ,
225+ "call_id" => "call_near_limit_tokenizer_skip" ,
226+ "output" => skipped_output
227+ }
228+
229+ base_items = [ rewrite_item , skip_item ]
230+ body = encode_request ( base_items ++ [ near_limit_padding_item ( @ max_body_bytes , base_items ) ] )
231+
232+ assert byte_size ( body ) == @ max_body_bytes
233+
234+ { context , request_options } = request_context ( )
235+ started = System . monotonic_time ( :millisecond )
236+
237+ assert { compressed_body , compressed_options } =
238+ RequestCompression . maybe_compress ( body , context , request_options )
239+
240+ elapsed_ms = System . monotonic_time ( :millisecond ) - started
241+ compression = compressed_options . runtime . payload_compression
242+
243+ assert elapsed_ms <= @ local_budget_ms
244+ assert compressed_body != body
245+
246+ decoded_outputs =
247+ compressed_body
248+ |> Jason . decode! ( )
249+ |> Map . fetch! ( "input" )
250+ |> Map . new ( & { & 1 [ "call_id" ] , & 1 [ "output" ] } )
251+
252+ rewritten_output = Map . fetch! ( decoded_outputs , "call_near_limit_completed_rewrite" )
253+ assert rewritten_output =~ "[compressed log output: omitted"
254+ refute rewritten_output =~ "SANITIZED_NEAR_LIMIT_REWRITE_SENTINEL"
255+
256+ assert Map . fetch! ( decoded_outputs , "call_near_limit_tokenizer_skip" ) == skipped_output
257+
258+ assert Map . fetch! ( decoded_outputs , "call_near_limit_tokenizer_skip" ) =~
259+ "SANITIZED_NEAR_LIMIT_SKIP_SENTINEL"
260+
261+ assert % {
262+ "enabled" => true ,
263+ "attempted" => true ,
264+ "status" => "compressed" ,
265+ "reason" => "rewritten" ,
266+ "route_class" => "proxy_http" ,
267+ "transport" => "http_json" ,
268+ "candidate_count" => 2 ,
269+ "compressed_count" => 1 ,
270+ "skipped_count" => 1 ,
271+ "tokenizer_input_skipped_count" => 1 ,
272+ "original_bytes" => @ max_body_bytes ,
273+ "compressed_bytes" => compressed_bytes ,
274+ "original_tokens_lower_bound" => original_tokens_lower_bound ,
275+ "compressed_tokens" => compressed_tokens
276+ } = compression
277+
278+ assert compressed_bytes == byte_size ( compressed_body )
279+ assert compressed_bytes < @ max_body_bytes
280+ assert compression [ "token_count_mode" ] == "bounded_original"
281+ assert compressed_tokens < original_tokens_lower_bound
282+ assert "log_output" in compression [ "strategies" ]
283+ assert finite_elapsed_ms? ( compression )
284+ refute Map . has_key? ( compression , "original_tokens" )
285+ refute Map . has_key? ( compression , "saved_tokens" )
286+ refute Map . has_key? ( compression , "token_savings_ratio" )
287+ refute Map . has_key? ( compression , "token_savings_percent" )
288+ refute inspect ( compression ) =~ "SANITIZED_NEAR_LIMIT_REWRITE_SENTINEL"
289+ refute inspect ( compression ) =~ "SANITIZED_NEAR_LIMIT_SKIP_SENTINEL"
290+ refute inspect ( compression ) =~ "call_near_limit_completed_rewrite"
291+ refute inspect ( compression ) =~ "call_near_limit_tokenizer_skip"
292+ end
293+
202294 test "handles a sanitized one MiB fixture within the local dispatch budget" do
203295 body = fixed_size_request ( @ max_body_bytes , @ max_candidate_count )
204296 { context , request_options } = request_context ( )
@@ -304,6 +396,17 @@ defmodule CodexPooler.Gateway.RequestCompression.PerformanceTest do
304396 body
305397 end
306398
399+ defp near_limit_padding_item ( target_body_bytes , base_items ) do
400+ empty_padding_item = % { "type" => "message" , "role" => "user" , "content" => "" }
401+ empty_body = encode_request ( base_items ++ [ empty_padding_item ] )
402+ remaining_bytes = target_body_bytes - byte_size ( empty_body )
403+ padding = String . duplicate ( "p" , remaining_bytes )
404+ padding_item = % { empty_padding_item | "content" => padding }
405+ body = encode_request ( base_items ++ [ padding_item ] )
406+ assert byte_size ( body ) == target_body_bytes
407+ padding_item
408+ end
409+
307410 defp plain_output ( index , bytes ) do
308411 prefix = "synthetic output #{ index } : "
309412
0 commit comments