From 848a73efec41b2dac2ed308c400291958d150f2c Mon Sep 17 00:00:00 2001 From: Clement Bouvet Date: Fri, 6 Mar 2026 11:14:11 +0100 Subject: [PATCH 1/5] feat: add enable_claude_compression and enable_opencode_compression fields Add per-request compression override fields to InputObject and send(). Ref: EDGEE-1185 --- edgee/__init__.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/edgee/__init__.py b/edgee/__init__.py index f03d131..1042d4a 100644 --- a/edgee/__init__.py +++ b/edgee/__init__.py @@ -65,6 +65,12 @@ class InputObject: compression_rate: float | None = ( None # Compression rate 0.0-1.0 (gateway-internal, not sent to providers) ) + enable_claude_compression: bool | None = ( + None # Enable Claude-specific tool compression (gateway-internal, not sent to providers) + ) + enable_opencode_compression: bool | None = ( + None # Enable OpenCode-specific tool compression (gateway-internal, not sent to providers) + ) @dataclass @@ -220,6 +226,8 @@ def send( tags = None enable_compression = None compression_rate = None + enable_claude_compression = None + enable_opencode_compression = None elif isinstance(input, InputObject): messages = input.messages tools = input.tools @@ -227,6 +235,8 @@ def send( tags = input.tags enable_compression = input.enable_compression compression_rate = input.compression_rate + enable_claude_compression = input.enable_claude_compression + enable_opencode_compression = input.enable_opencode_compression else: messages = input.get("messages", []) tools = input.get("tools") @@ -234,6 +244,8 @@ def send( tags = input.get("tags") enable_compression = input.get("enable_compression") compression_rate = input.get("compression_rate") + enable_claude_compression = input.get("enable_claude_compression") + enable_opencode_compression = input.get("enable_opencode_compression") body: dict = {"model": model, "messages": messages} if stream: @@ -248,6 +260,10 @@ def send( body["enable_compression"] = enable_compression if compression_rate is not None: body["compression_rate"] = compression_rate + if enable_claude_compression is not None: + body["enable_claude_compression"] = enable_claude_compression + if enable_opencode_compression is not None: + body["enable_opencode_compression"] = enable_opencode_compression request = Request( f"{self.base_url}{API_ENDPOINT}", From e3995d6a59ff04e84d04f741880987be910fa81c Mon Sep 17 00:00:00 2001 From: Clement Bouvet Date: Fri, 6 Mar 2026 14:42:00 +0100 Subject: [PATCH 2/5] feat: replace per-agent booleans with compression_model Rework compression fields per gateway review: - Add compression_model, compression_semantic_preservation_threshold - Deprecate enable_compression, add compression_technique - Remove enable_claude_compression / enable_opencode_compression Ref: EDGEE-1185 --- edgee/__init__.py | 50 +++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/edgee/__init__.py b/edgee/__init__.py index 1042d4a..209a0a4 100644 --- a/edgee/__init__.py +++ b/edgee/__init__.py @@ -59,17 +59,20 @@ class InputObject: tools: list[dict] | None = None tool_choice: str | dict | None = None tags: list[str] | None = None - enable_compression: bool | None = ( - None # Enable token compression (gateway-internal, not sent to providers) + compression_model: str | None = ( + None # Compression model: agentic, claude, opencode, cursor, customer (gateway-internal) ) compression_rate: float | None = ( None # Compression rate 0.0-1.0 (gateway-internal, not sent to providers) ) - enable_claude_compression: bool | None = ( - None # Enable Claude-specific tool compression (gateway-internal, not sent to providers) + compression_semantic_preservation_threshold: int | None = ( + None # Semantic preservation threshold 0-100 (gateway-internal) + ) + enable_compression: bool | None = ( + None # DEPRECATED: Use compression_model instead ) - enable_opencode_compression: bool | None = ( - None # Enable OpenCode-specific tool compression (gateway-internal, not sent to providers) + compression_technique: str | None = ( + None # DEPRECATED: Use compression_model instead ) @@ -224,28 +227,31 @@ def send( tools = None tool_choice = None tags = None - enable_compression = None + compression_model = None compression_rate = None - enable_claude_compression = None - enable_opencode_compression = None + compression_semantic_preservation_threshold = None + enable_compression = None + compression_technique = None elif isinstance(input, InputObject): messages = input.messages tools = input.tools tool_choice = input.tool_choice tags = input.tags - enable_compression = input.enable_compression + compression_model = input.compression_model compression_rate = input.compression_rate - enable_claude_compression = input.enable_claude_compression - enable_opencode_compression = input.enable_opencode_compression + compression_semantic_preservation_threshold = input.compression_semantic_preservation_threshold + enable_compression = input.enable_compression + compression_technique = input.compression_technique else: messages = input.get("messages", []) tools = input.get("tools") tool_choice = input.get("tool_choice") tags = input.get("tags") - enable_compression = input.get("enable_compression") + compression_model = input.get("compression_model") compression_rate = input.get("compression_rate") - enable_claude_compression = input.get("enable_claude_compression") - enable_opencode_compression = input.get("enable_opencode_compression") + compression_semantic_preservation_threshold = input.get("compression_semantic_preservation_threshold") + enable_compression = input.get("enable_compression") + compression_technique = input.get("compression_technique") body: dict = {"model": model, "messages": messages} if stream: @@ -256,14 +262,16 @@ def send( body["tool_choice"] = tool_choice if tags: body["tags"] = tags - if enable_compression is not None: - body["enable_compression"] = enable_compression + if compression_model is not None: + body["compression_model"] = compression_model if compression_rate is not None: body["compression_rate"] = compression_rate - if enable_claude_compression is not None: - body["enable_claude_compression"] = enable_claude_compression - if enable_opencode_compression is not None: - body["enable_opencode_compression"] = enable_opencode_compression + if compression_semantic_preservation_threshold is not None: + body["compression_semantic_preservation_threshold"] = compression_semantic_preservation_threshold + if enable_compression is not None: + body["enable_compression"] = enable_compression + if compression_technique is not None: + body["compression_technique"] = compression_technique request = Request( f"{self.base_url}{API_ENDPOINT}", From 6b0a78574ddd996b71689ca270008ae5aa59da20 Mon Sep 17 00:00:00 2001 From: Clement Bouvet Date: Fri, 6 Mar 2026 14:54:24 +0100 Subject: [PATCH 3/5] Remove deprecated enable_compression and compression_technique fields These fields have been replaced by the compression_model approach. --- edgee/__init__.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/edgee/__init__.py b/edgee/__init__.py index 209a0a4..fc4fed7 100644 --- a/edgee/__init__.py +++ b/edgee/__init__.py @@ -68,12 +68,6 @@ class InputObject: compression_semantic_preservation_threshold: int | None = ( None # Semantic preservation threshold 0-100 (gateway-internal) ) - enable_compression: bool | None = ( - None # DEPRECATED: Use compression_model instead - ) - compression_technique: str | None = ( - None # DEPRECATED: Use compression_model instead - ) @dataclass @@ -230,8 +224,6 @@ def send( compression_model = None compression_rate = None compression_semantic_preservation_threshold = None - enable_compression = None - compression_technique = None elif isinstance(input, InputObject): messages = input.messages tools = input.tools @@ -240,8 +232,6 @@ def send( compression_model = input.compression_model compression_rate = input.compression_rate compression_semantic_preservation_threshold = input.compression_semantic_preservation_threshold - enable_compression = input.enable_compression - compression_technique = input.compression_technique else: messages = input.get("messages", []) tools = input.get("tools") @@ -250,8 +240,6 @@ def send( compression_model = input.get("compression_model") compression_rate = input.get("compression_rate") compression_semantic_preservation_threshold = input.get("compression_semantic_preservation_threshold") - enable_compression = input.get("enable_compression") - compression_technique = input.get("compression_technique") body: dict = {"model": model, "messages": messages} if stream: @@ -268,10 +256,6 @@ def send( body["compression_rate"] = compression_rate if compression_semantic_preservation_threshold is not None: body["compression_semantic_preservation_threshold"] = compression_semantic_preservation_threshold - if enable_compression is not None: - body["enable_compression"] = enable_compression - if compression_technique is not None: - body["compression_technique"] = compression_technique request = Request( f"{self.base_url}{API_ENDPOINT}", From e96c4809f2e0ab6734d5bebef723c203bbb7b865 Mon Sep 17 00:00:00 2001 From: Clement Bouvet Date: Fri, 6 Mar 2026 15:02:29 +0100 Subject: [PATCH 4/5] Replace compression_rate and compression_semantic_preservation_threshold with compression_configuration object --- edgee/__init__.py | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/edgee/__init__.py b/edgee/__init__.py index fc4fed7..57f3387 100644 --- a/edgee/__init__.py +++ b/edgee/__init__.py @@ -62,11 +62,8 @@ class InputObject: compression_model: str | None = ( None # Compression model: agentic, claude, opencode, cursor, customer (gateway-internal) ) - compression_rate: float | None = ( - None # Compression rate 0.0-1.0 (gateway-internal, not sent to providers) - ) - compression_semantic_preservation_threshold: int | None = ( - None # Semantic preservation threshold 0-100 (gateway-internal) + compression_configuration: dict | None = ( + None # Configuration for compression model: {"rate": 0.7, "semantic_preservation_threshold": 60} ) @@ -222,24 +219,21 @@ def send( tool_choice = None tags = None compression_model = None - compression_rate = None - compression_semantic_preservation_threshold = None + compression_configuration = None elif isinstance(input, InputObject): messages = input.messages tools = input.tools tool_choice = input.tool_choice tags = input.tags compression_model = input.compression_model - compression_rate = input.compression_rate - compression_semantic_preservation_threshold = input.compression_semantic_preservation_threshold + compression_configuration = input.compression_configuration else: messages = input.get("messages", []) tools = input.get("tools") tool_choice = input.get("tool_choice") tags = input.get("tags") compression_model = input.get("compression_model") - compression_rate = input.get("compression_rate") - compression_semantic_preservation_threshold = input.get("compression_semantic_preservation_threshold") + compression_configuration = input.get("compression_configuration") body: dict = {"model": model, "messages": messages} if stream: @@ -252,10 +246,8 @@ def send( body["tags"] = tags if compression_model is not None: body["compression_model"] = compression_model - if compression_rate is not None: - body["compression_rate"] = compression_rate - if compression_semantic_preservation_threshold is not None: - body["compression_semantic_preservation_threshold"] = compression_semantic_preservation_threshold + if compression_configuration is not None: + body["compression_configuration"] = compression_configuration request = Request( f"{self.base_url}{API_ENDPOINT}", From 6c38372027c08a1a0c4c8b8ccf20ea412ae9d642 Mon Sep 17 00:00:00 2001 From: Clement Bouvet Date: Mon, 9 Mar 2026 09:07:53 +0100 Subject: [PATCH 5/5] Update compression example to use compression_model and compression_configuration --- example/compression.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/example/compression.py b/example/compression.py index 67c6128..2b76548 100644 --- a/example/compression.py +++ b/example/compression.py @@ -92,8 +92,10 @@ "messages": [ {"role": "user", "content": user_message}, ], - "enable_compression": True, - "compression_rate": 0.5, + "compression_model": "agentic", + "compression_configuration": { + "rate": 0.5, + }, }, )