From c238a40045995524cffd7bbe554b61f1a2460a54 Mon Sep 17 00:00:00 2001 From: Yixing Lao Date: Fri, 24 Apr 2026 18:42:59 +0800 Subject: [PATCH] refactor(config): migrate to yaml and forward auth (#3) --- .env.example | 22 -- README.md | 152 ++++------- assets/cursor_chat.png | Bin 0 -> 73289 bytes assets/cursor_config.png | Bin 0 -> 75271 bytes assets/ngrok_dashboard.png | Bin 0 -> 45785 bytes config.example.yaml | 17 ++ pyproject.toml | 4 +- src/deepseek_cursor_proxy/config.py | 313 ++++++++++++++++------- src/deepseek_cursor_proxy/server.py | 80 +++--- tests/test_config.py | 165 ++++++++---- tests/test_live_deepseek_cursor_proxy.py | 21 +- tests/test_proxy_end_to_end.py | 41 ++- tests/test_transform.py | 50 +--- 13 files changed, 495 insertions(+), 370 deletions(-) delete mode 100644 .env.example create mode 100644 assets/cursor_chat.png create mode 100644 assets/cursor_config.png create mode 100644 assets/ngrok_dashboard.png create mode 100644 config.example.yaml diff --git a/.env.example b/.env.example deleted file mode 100644 index 738b99b..0000000 --- a/.env.example +++ /dev/null @@ -1,22 +0,0 @@ -# Copy this file to ~/.deepseek-cursor-proxy/.env. -# The proxy loads that file automatically and keeps secrets out of the repo. - -DEEPSEEK_API_KEY=sk-your-deepseek-key - -# Use this as the OpenAI API key in Cursor. -PROXY_API_KEY=cursor-local-token - -DEEPSEEK_MODEL=deepseek-v4-pro -DEEPSEEK_BASE_URL=https://api.deepseek.com -DEEPSEEK_THINKING=enabled -DEEPSEEK_REASONING_EFFORT=high -CURSOR_DISPLAY_REASONING=true - -PROXY_HOST=127.0.0.1 -PROXY_PORT=9000 -PROXY_NGROK=true -PROXY_VERBOSE=false -PROXY_LOG_BODIES=false - -# Optional. Default: ~/.deepseek-cursor-proxy/reasoning_content.sqlite3 -REASONING_CONTENT_PATH=~/.deepseek-cursor-proxy/reasoning_content.sqlite3 diff --git a/README.md b/README.md index dbd1ce2..bfd1dfc 100644 --- a/README.md +++ b/README.md @@ -1,98 +1,91 @@ # deepseek-cursor-proxy -A simple proxy that caches and restores DeepSeek `reasoning_content` across tool-call turns in Cursor, making thinking models like `deepseek-v4-pro` and `deepseek-v4-flash` work correctly. +Compatibility proxy connecting Cursor to DeepSeek thinking models (`deepseek-v4-pro` and `deepseek-v4-flash`). ## What It Does -- Caches DeepSeek `reasoning_content` from regular and streamed responses, then restores it on later tool-call turns when Cursor omits it. -- Mirrors streamed `reasoning_content` into Cursor-visible `...` text so thinking tokens are shown in Cursor BYOK/proxy chats. Cursor currently renders this as normal chat text, not as a native collapsible Thinking block. -- Provides other compatibility fixes for running Cursor with the DeepSeek official API. +- ✅ Caches DeepSeek `reasoning_content` from regular and streamed responses, then restores it on later tool-call turns when Cursor omits it. See [DeepSeek docs](https://api-docs.deepseek.com/guides/thinking_mode#tool-calls) for more details. +- ✅ Mirrors streamed `reasoning_content` into Cursor-visible `...` text so that thinking tokens are shown in Cursor's UI. For BYOK/proxy mode, Cursor renders this as normal text, not as a native collapsible thinking block. +- ✅ Starts an ngrok tunnel so Cursor can reach the local proxy. +- ✅ Provides other compatibility fixes to make DeepSeek models run well in Cursor. ## Why This Exists -DeepSeek thinking mode returns `reasoning_content` separately from final `content`. After an assistant turn with tool calls, DeepSeek requires that same `reasoning_content` to be sent back in later requests. Cursor can omit it in custom OpenAI-compatible flows, causing `The reasoning_content in the thinking mode must be passed back to the API.` This proxy caches reasoning by conversation prefix, message signature, and tool-call IDs, then restores it before forwarding to DeepSeek. - -For streamed responses, the proxy also mirrors DeepSeek `reasoning_content` into Cursor-visible `...` content while leaving the original `reasoning_content` field intact. This lets Cursor display the thinking text in OpenAI-compatible BYOK/proxy flows, and the proxy strips those display-only tags from later assistant history before replaying it to DeepSeek. - -This repo fixes the following error: +This repository fixes the following Cursor + DeepSeek tool-call error with thinking mode enabled: ![Error 400 - reasoning_content must be passed back](assets/error_400.png) ```txt ⚠️ Connection Error - -Provider returned error: {"error":{"message":"The reasoning_content in the thinking mode must be passed back to the -API.","type":"invalid_request_error","param":null,"code":"invalid_request_error"}} +Provider returned error: +{ + "error": { + "message": "The reasoning_content in the thinking mode must be passed back to the API.", + "type": "invalid_request_error", + "param": null, + "code": "invalid_request_error" + } +} ``` -## 1. Install +## Usage -```bash -source ~/miniconda3/etc/profile.d/conda.sh -conda activate pytools -PIP_REQUIRE_VIRTUALENV=false python -m pip install -e . -``` +### Step 1: Set Up ngrok -## 2. Configure +Create an ngrok account, visit ngrok's Dashboard: https://dashboard.ngrok.com -```bash -mkdir -p ~/.deepseek-cursor-proxy -chmod 700 ~/.deepseek-cursor-proxy -cp .env.example ~/.deepseek-cursor-proxy/.env -chmod 600 ~/.deepseek-cursor-proxy/.env -``` +![ngrok dashboard showing the public URL](assets/ngrok_dashboard.png) -`.env.example` is only a safe template. The proxy loads `~/.deepseek-cursor-proxy/.env` automatically, and that file should stay outside this repository because it contains your keys. - -Edit `~/.deepseek-cursor-proxy/.env`: - -```bash -DEEPSEEK_API_KEY=sk-your-deepseek-key -PROXY_API_KEY=cursor-local-token -CURSOR_DISPLAY_REASONING=true -``` - -Keep `PROXY_API_KEY` set when using ngrok because the proxy will be reachable from the public internet. - -By default, reasoning cache data is stored at: - -```text -~/.deepseek-cursor-proxy/reasoning_content.sqlite3 -``` - -Override it with `REASONING_CONTENT_PATH` or `deepseek-cursor-proxy --reasoning-content-path ` only when you need a custom location. - -## 3. Set Up Ngrok Once - -- Create/login to an ngrok account: https://dashboard.ngrok.com/signup -- Copy your authtoken from the dashboard: https://dashboard.ngrok.com/get-started/your-authtoken +Then, install and authenticate ngrok once: ```bash brew install ngrok ngrok config add-authtoken ``` -## 4. Run +### Step 2: Add Cursor Custom Model + +In Cursor, add the DeepSeek custom model and point it at this proxy: + +- Model: `deepseek-v4-pro` +- API Key: your DeepSeek API key +- Base URL: your ngrok HTTPS URL with the `/v1` API version path + +For example, if ngrok dashboard shows `https://example.ngrok-free.app`, use: + +```text +https://example.ngrok-free.app/v1 +``` + +![Cursor settings for DeepSeek through the proxy](assets/cursor_config.png) + +Note: you can toggle the custom API on and off with: + +- macOS: `Cmd+Shift+0` +- Windows/Linux: `Ctrl+Shift+0` + +### Step 3: Start the Proxy Server + +Install and run the proxy: ```bash +conda create -n dcp python=3.10 -y +conda activate dcp +pip install -e . deepseek-cursor-proxy --verbose ``` -The proxy prints a line like: +The proxy creates `~/.deepseek-cursor-proxy/config.yaml` on first run. -```text -Cursor Base URL: https://example.ngrok-free.app/v1 -``` +This will also print the ngrok public URL. If it differs from the one in Cursor, update it in Cursor's Base URL field. -Use that URL in Cursor. If you do not use ngrok and point Cursor at `localhost` or `127.0.0.1`, Cursor may fail with `ssrf_blocked: connection to private IP is blocked`. +### Step 4: Chat with DeepSeek in Cursor -## 5. Cursor Settings +Select `deepseek-v4-pro` in Cursor and use chat or agent mode as usual. -- OpenAI Base URL: the printed ngrok URL ending in `/v1` -- OpenAI API Key: the value of `PROXY_API_KEY` -- Model: `deepseek-v4-pro` +![Chatting with DeepSeek in Cursor](assets/cursor_chat.png) -## Useful Commands +## Debugging and Development Run without ngrok for local curl testing: @@ -100,24 +93,10 @@ Run without ngrok for local curl testing: PROXY_NGROK=false deepseek-cursor-proxy --port 9000 --verbose ``` -Disable the Cursor display mirror if you only want raw OpenAI-compatible response fields: +Use another config file: ```bash -CURSOR_DISPLAY_REASONING=false deepseek-cursor-proxy --verbose -``` - -Log full request bodies only when needed: - -```bash -deepseek-cursor-proxy --ngrok --verbose --log-bodies -``` - -This prints the Cursor request body, the normalized DeepSeek request body, DeepSeek error bodies, and the final streamed assistant message. - -Use a different env file for development: - -```bash -deepseek-cursor-proxy --config ./dev.env +deepseek-cursor-proxy --config ./dev.config.yaml ``` Run tests: @@ -125,24 +104,3 @@ Run tests: ```bash PYTHONPATH=src python -m unittest discover -s tests ``` - -## Development - -Pre-commit runs whitespace checks, Black, and Ruff: - -```bash -PIP_REQUIRE_VIRTUALENV=false python -m pip install -e ".[dev]" -pre-commit install -pre-commit run --all-files -``` - -## Notes - -- Distribution name: `deepseek-cursor-proxy` -- Import package: `deepseek_cursor_proxy` -- User config file: `~/.deepseek-cursor-proxy/.env` -- Cache file: `~/.deepseek-cursor-proxy/reasoning_content.sqlite3` -- DeepSeek thinking docs: https://api-docs.deepseek.com/guides/thinking_mode -- DeepSeek chat completion docs: https://api-docs.deepseek.com/api/create-chat-completion -- Cursor forum report: https://forum.cursor.com/t/compatibility-with-deepseek-models-design-to-return-reasoning-content-after-tool-calls/158905 -- ngrok setup docs: https://ngrok.com/downloads diff --git a/assets/cursor_chat.png b/assets/cursor_chat.png new file mode 100644 index 0000000000000000000000000000000000000000..c91308165df1a6d3282a4365fae115da8b522166 GIT binary patch literal 73289 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⪙b|q|D3|4tu?S>bbDc2sqB4NrD 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 O@YB`Qzg4AS8}UD8@F8XZ literal 0 HcmV?d00001 diff --git a/assets/cursor_config.png b/assets/cursor_config.png new file mode 100644 index 0000000000000000000000000000000000000000..50e9b686d46159dd084cc4acef14b5a3c4dd4b67 GIT binary patch literal 75271 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 literal 0 HcmV?d00001 diff --git a/assets/ngrok_dashboard.png b/assets/ngrok_dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..314d2bf969d7b512b04634d6bc5350e6e479e436 GIT binary patch literal 45785 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.0", +] [project.optional-dependencies] dev = [ diff --git a/src/deepseek_cursor_proxy/config.py b/src/deepseek_cursor_proxy/config.py index ecc4aa5..8ea44b3 100644 --- a/src/deepseek_cursor_proxy/config.py +++ b/src/deepseek_cursor_proxy/config.py @@ -3,15 +3,36 @@ from __future__ import annotations from collections.abc import Mapping from dataclasses import dataclass, field from pathlib import Path +from typing import Any import os +import yaml APP_DIR_NAME = ".deepseek-cursor-proxy" -CONFIG_FILE_NAME = ".env" +CONFIG_FILE_NAME = "config.yaml" REASONING_CONTENT_FILE_NAME = "reasoning_content.sqlite3" TRUE_VALUES = {"1", "true", "yes", "on"} FALSE_VALUES = {"0", "false", "no", "off"} +MISSING = object() +DEFAULT_CONFIG_TEXT = """# This file was created automatically at ~/.deepseek-cursor-proxy/config.yaml. +# API keys are read from Cursor's Authorization header and forwarded upstream. + +base_url: https://api.deepseek.com +model: deepseek-v4-pro +thinking: enabled +reasoning_effort: high +display_reasoning: true + +host: 127.0.0.1 +port: 9000 +ngrok: true +verbose: false +log_bodies: false +request_timeout: 300 + +reasoning_content_path: reasoning_content.sqlite3 +""" def default_app_dir() -> Path: @@ -26,45 +47,65 @@ def default_reasoning_content_path() -> Path: return default_app_dir() / REASONING_CONTENT_FILE_NAME -def load_env_file(env_file_path: str | Path) -> dict[str, str]: - env_file_path = Path(env_file_path) - if not env_file_path.exists(): +def populate_default_config_file(config_path: Path) -> None: + config_path.parent.mkdir(mode=0o700, parents=True, exist_ok=True) + config_path.parent.chmod(0o700) + config_path.write_text(DEFAULT_CONFIG_TEXT, encoding="utf-8") + config_path.chmod(0o600) + + +def load_config_file(config_path: str | Path) -> dict[str, Any]: + config_path = Path(config_path).expanduser() + if not config_path.exists(): return {} - values: dict[str, str] = {} - for raw_line in env_file_path.read_text(encoding="utf-8").splitlines(): - line = raw_line.strip() - if not line or line.startswith("#") or "=" not in line: - continue - if line.startswith("export "): - line = line.removeprefix("export ").strip() - key, value = line.split("=", 1) - key = key.strip() - value = value.strip().strip('"').strip("'") - if key: - values[key] = value - return values + try: + loaded = yaml.safe_load(config_path.read_text(encoding="utf-8")) + except yaml.YAMLError as exc: + raise ValueError(f"Invalid YAML config at {config_path}: {exc}") from exc + if loaded is None: + return {} + if not isinstance(loaded, Mapping): + raise ValueError(f"Config file must contain a YAML mapping: {config_path}") + return dict(loaded) -def merged_env( - env: Mapping[str, str] | None, env_file_path: str | Path | None -) -> dict[str, str]: - live_env = dict(os.environ if env is None else env) - config_path = Path( - env_file_path +def resolve_config_path( + env: Mapping[str, str] | None, config_path: str | Path | None +) -> Path: + live_env = os.environ if env is None else env + return Path( + config_path or live_env.get("DEEPSEEK_CURSOR_PROXY_CONFIG_PATH") or default_config_path() - ) - values = load_env_file(config_path) - values.update(live_env) - return values + ).expanduser() -def env_bool(values: Mapping[str, str], name: str, default: bool) -> bool: - value = values.get(name) - if value is None: +def setting_value( + settings: Mapping[str, Any], + env: Mapping[str, str], + key: str, + env_name: str, +) -> Any: + if env_name in env: + return env[env_name] + return settings.get(key, MISSING) + + +def as_str(value: Any, default: str) -> str: + if value is MISSING or value is None: return default - normalized = value.strip().lower() + return str(value) + + +def as_bool(value: Any, default: bool) -> bool: + if value is MISSING or value is None: + return default + if isinstance(value, bool): + return value + if isinstance(value, int): + return bool(value) + normalized = str(value).strip().lower() if normalized in TRUE_VALUES: return True if normalized in FALSE_VALUES: @@ -72,48 +113,45 @@ def env_bool(values: Mapping[str, str], name: str, default: bool) -> bool: return default -def env_int(values: Mapping[str, str], name: str, default: int) -> int: - value = values.get(name) - if value is None: +def as_int(value: Any, default: int) -> int: + if value is MISSING or value is None: return default try: return int(value) - except ValueError: + except (TypeError, ValueError): return default -def env_float(values: Mapping[str, str], name: str, default: float) -> float: - value = values.get(name) - if value is None: +def as_float(value: Any, default: float) -> float: + if value is MISSING or value is None: return default try: return float(value) - except ValueError: + except (TypeError, ValueError): return default -def env_tuple( - values: Mapping[str, str], name: str, default: tuple[str, ...] -) -> tuple[str, ...]: - value = values.get(name) - if not value: - return default - return tuple(item.strip() for item in value.split(",") if item.strip()) +def as_path(value: Any, default_path: Path, relative_base: Path) -> Path: + if value is MISSING or value is None or value == "": + return default_path + candidate_path = Path(str(value)).expanduser() + if candidate_path.is_absolute(): + return candidate_path + return relative_base / candidate_path -def env_path( - values: Mapping[str, str], - names: tuple[str, ...], - default_path: Path, -) -> Path: - for env_name in names: - value = values.get(env_name) - if value: - candidate_path = Path(value).expanduser() - if candidate_path.is_absolute(): - return candidate_path - return default_path.parent / candidate_path - return default_path +def settings_and_env( + env: Mapping[str, str] | None, config_path: str | Path | None +) -> tuple[dict[str, Any], dict[str, str], Path]: + live_env = dict(os.environ if env is None else env) + config_path = resolve_config_path(live_env, config_path) + if ( + config_path == default_config_path() + and "DEEPSEEK_CURSOR_PROXY_CONFIG_PATH" not in live_env + and not config_path.exists() + ): + populate_default_config_file(config_path) + return load_config_file(config_path), live_env, config_path @dataclass(frozen=True) @@ -121,8 +159,6 @@ class ProxyConfig: host: str = "127.0.0.1" port: int = 9000 upstream_base_url: str = "https://api.deepseek.com" - upstream_api_key: str = "" - proxy_api_key: str | None = None upstream_model: str = "deepseek-v4-pro" allow_model_passthrough: bool = False thinking: str = "enabled" @@ -133,52 +169,143 @@ class ProxyConfig: verbose: bool = False log_bodies: bool = False ngrok: bool = False - model_list: tuple[str, ...] = ("deepseek-v4-pro", "deepseek-v4-flash") @classmethod - def from_env( + def from_file( cls: type[ProxyConfig], env: Mapping[str, str] | None = None, - env_file_path: str | Path | None = None, + config_path: str | Path | None = None, ) -> "ProxyConfig": - values = merged_env(env, env_file_path) - thinking = values.get("DEEPSEEK_THINKING", "enabled").strip().lower() + settings, live_env, resolved_config_path = settings_and_env(env, config_path) + config_dir = resolved_config_path.parent + + thinking = ( + as_str( + setting_value( + settings, + live_env, + "thinking", + "DEEPSEEK_THINKING", + ), + "enabled", + ) + .strip() + .lower() + ) if thinking in {"passthrough", "pass-through", "pass_through"}: thinking = "pass-through" if thinking not in {"enabled", "disabled", "pass-through"}: thinking = "enabled" return cls( - host=values.get("PROXY_HOST", "127.0.0.1"), - port=env_int(values, "PROXY_PORT", 9000), - upstream_base_url=values.get( - "DEEPSEEK_BASE_URL", "https://api.deepseek.com" + host=as_str( + setting_value( + settings, + live_env, + "host", + "PROXY_HOST", + ), + "127.0.0.1", + ), + port=as_int( + setting_value( + settings, + live_env, + "port", + "PROXY_PORT", + ), + 9000, + ), + upstream_base_url=as_str( + setting_value( + settings, + live_env, + "base_url", + "DEEPSEEK_BASE_URL", + ), + "https://api.deepseek.com", ).rstrip("/"), - upstream_api_key=values.get("DEEPSEEK_API_KEY", ""), - proxy_api_key=values.get("PROXY_API_KEY") or None, - upstream_model=values.get("DEEPSEEK_MODEL", "deepseek-v4-pro"), - allow_model_passthrough=env_bool( - values, "DEEPSEEK_ALLOW_MODEL_PASSTHROUGH", False + upstream_model=as_str( + setting_value( + settings, + live_env, + "model", + "DEEPSEEK_MODEL", + ), + "deepseek-v4-pro", + ), + allow_model_passthrough=as_bool( + setting_value( + settings, + live_env, + "allow_model_passthrough", + "DEEPSEEK_ALLOW_MODEL_PASSTHROUGH", + ), + False, ), thinking=thinking, - reasoning_effort=values.get("DEEPSEEK_REASONING_EFFORT", "high"), - request_timeout=env_float(values, "PROXY_REQUEST_TIMEOUT", 300.0), - reasoning_content_path=env_path( - values, - ("REASONING_CONTENT_PATH",), - default_reasoning_content_path(), + reasoning_effort=as_str( + setting_value( + settings, + live_env, + "reasoning_effort", + "DEEPSEEK_REASONING_EFFORT", + ), + "high", ), - cursor_display_reasoning=env_bool(values, "CURSOR_DISPLAY_REASONING", True), - verbose=env_bool(values, "PROXY_VERBOSE", False), - log_bodies=env_bool(values, "PROXY_LOG_BODIES", False), - ngrok=env_bool(values, "PROXY_NGROK", False), - model_list=env_tuple( - values, - "PROXY_MODELS", - ("deepseek-v4-pro", "deepseek-v4-flash"), + request_timeout=as_float( + setting_value( + settings, + live_env, + "request_timeout", + "PROXY_REQUEST_TIMEOUT", + ), + 300.0, + ), + reasoning_content_path=as_path( + setting_value( + settings, + live_env, + "reasoning_content_path", + "REASONING_CONTENT_PATH", + ), + default_reasoning_content_path(), + config_dir, + ), + cursor_display_reasoning=as_bool( + setting_value( + settings, + live_env, + "display_reasoning", + "CURSOR_DISPLAY_REASONING", + ), + True, + ), + verbose=as_bool( + setting_value( + settings, + live_env, + "verbose", + "PROXY_VERBOSE", + ), + False, + ), + log_bodies=as_bool( + setting_value( + settings, + live_env, + "log_bodies", + "PROXY_LOG_BODIES", + ), + False, + ), + ngrok=as_bool( + setting_value( + settings, + live_env, + "ngrok", + "PROXY_NGROK", + ), + False, ), ) - - def validate(self) -> None: - if not self.upstream_api_key: - raise ValueError("DEEPSEEK_API_KEY is required") diff --git a/src/deepseek_cursor_proxy/server.py b/src/deepseek_cursor_proxy/server.py index 4c15d92..d130e66 100644 --- a/src/deepseek_cursor_proxy/server.py +++ b/src/deepseek_cursor_proxy/server.py @@ -88,18 +88,13 @@ class DeepSeekProxyHandler(BaseHTTPRequestHandler): 404, {"error": {"message": "Only /v1/chat/completions is supported"}} ) return - if not self._authorized(): + cursor_authorization = self._cursor_authorization() + if cursor_authorization is None: self._send_json( - 401, {"error": {"message": "Missing or invalid proxy API key"}} + 401, {"error": {"message": "Missing Authorization bearer token"}} ) return - try: - self.config.validate() - except ValueError as exc: - self._send_json(500, {"error": {"message": str(exc)}}) - return - try: payload = self._read_json_body() except ValueError as exc: @@ -148,7 +143,10 @@ class DeepSeekProxyHandler(BaseHTTPRequestHandler): upstream_url, data=upstream_body, method="POST", - headers=self._upstream_headers(stream=bool(prepared.payload.get("stream"))), + headers=self._upstream_headers( + stream=bool(prepared.payload.get("stream")), + authorization=cursor_authorization, + ), ) try: @@ -193,12 +191,12 @@ class DeepSeekProxyHandler(BaseHTTPRequestHandler): response, prepared.original_model, prepared.payload["messages"] ) - def _authorized(self) -> bool: - expected = self.config.proxy_api_key - if expected is None: - return True + def _cursor_authorization(self) -> str | None: auth_header = self.headers.get("Authorization", "") - return auth_header == f"Bearer {expected}" + scheme, separator, token = auth_header.strip().partition(" ") + if separator != " " or scheme.lower() != "bearer" or not token.strip(): + return None + return f"Bearer {token.strip()}" def _send_cors_headers(self) -> None: self.send_header("Access-Control-Allow-Origin", "*") @@ -223,20 +221,14 @@ class DeepSeekProxyHandler(BaseHTTPRequestHandler): def _send_models(self) -> None: created = int(time.time()) - seen: set[str] = set() - models = [] - for model_id in (self.config.upstream_model, *self.config.model_list): - if model_id in seen: - continue - seen.add(model_id) - models.append( - { - "id": model_id, - "object": "model", - "created": created, - "owned_by": "deepseek", - } - ) + models = [ + { + "id": self.config.upstream_model, + "object": "model", + "created": created, + "owned_by": "deepseek", + } + ] self._send_json(200, {"object": "list", "data": models}) def _read_json_body(self) -> dict[str, Any]: @@ -252,9 +244,9 @@ class DeepSeekProxyHandler(BaseHTTPRequestHandler): raise ValueError("Request body must be a JSON object") return payload - def _upstream_headers(self, stream: bool) -> dict[str, str]: + def _upstream_headers(self, stream: bool, authorization: str) -> dict[str, str]: headers = { - "Authorization": f"Bearer {self.config.upstream_api_key}", + "Authorization": authorization, "Content-Type": "application/json", "Accept": "text/event-stream" if stream else "application/json", "Accept-Encoding": "identity", @@ -399,19 +391,23 @@ def build_arg_parser() -> argparse.ArgumentParser: "--config", dest="config_path", type=Path, - help=f"Env config file, default {default_config_path()}", + help=f"YAML config file, default {default_config_path()}", ) parser.add_argument( - "--host", help="Bind host, default from PROXY_HOST or 127.0.0.1" + "--host", help="Bind host, default from config, PROXY_HOST, or 127.0.0.1" ) parser.add_argument( - "--port", type=int, help="Bind port, default from PROXY_PORT or 9000" + "--port", + type=int, + help="Bind port, default from config, PROXY_PORT, or 9000", ) parser.add_argument( - "--model", help="Upstream DeepSeek model, default from DEEPSEEK_MODEL" + "--model", + help="Upstream DeepSeek model, default from config, DEEPSEEK_MODEL, or deepseek-v4-pro", ) parser.add_argument( - "--base-url", help="DeepSeek base URL, default https://api.deepseek.com" + "--base-url", + help="DeepSeek base URL, default from config, DEEPSEEK_BASE_URL, or https://api.deepseek.com", ) parser.add_argument( "--reasoning-content-path", @@ -505,7 +501,11 @@ def main(argv: list[str] | None = None) -> int: level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s" ) args = build_arg_parser().parse_args(argv) - config = ProxyConfig.from_env(env_file_path=args.config_path) + try: + config = ProxyConfig.from_file(config_path=args.config_path) + except ValueError as exc: + LOG.error("%s", exc) + return 2 updates: dict[str, Any] = {} if args.host: updates["host"] = args.host @@ -528,12 +528,6 @@ def main(argv: list[str] | None = None) -> int: if updates: config = replace(config, **updates) - try: - config.validate() - except ValueError as exc: - LOG.error("%s", exc) - return 2 - store = ReasoningStore(config.reasoning_content_path) server = DeepSeekProxyServer((config.host, config.port), DeepSeekProxyHandler) server.config = config @@ -572,8 +566,6 @@ def main(argv: list[str] | None = None) -> int: return 2 LOG.info("ngrok tunnel forwarding %s -> %s", public_url, target_url) LOG.info("Cursor Base URL: %s/v1", public_url.rstrip("/")) - if config.proxy_api_key: - LOG.info("Cursor API key: value of PROXY_API_KEY") try: server.serve_forever() except KeyboardInterrupt: diff --git a/tests/test_config.py b/tests/test_config.py index 07679ac..688667b 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -2,6 +2,7 @@ from __future__ import annotations import os from pathlib import Path +import stat from tempfile import TemporaryDirectory import unittest from unittest.mock import patch @@ -14,12 +15,12 @@ from deepseek_cursor_proxy.config import ( class ConfigTests(unittest.TestCase): - def test_default_paths_live_in_user_app_directory(self) -> None: + def test_default_paths_live_in_visible_user_app_directory(self) -> None: home = Path("/tmp/home") with patch("deepseek_cursor_proxy.config.Path.home", return_value=home): self.assertEqual( - default_config_path(), home / ".deepseek-cursor-proxy" / ".env" + default_config_path(), home / ".deepseek-cursor-proxy" / "config.yaml" ) self.assertEqual( default_reasoning_content_path(), @@ -30,63 +31,103 @@ class ConfigTests(unittest.TestCase): home / ".deepseek-cursor-proxy" / "reasoning_content.sqlite3", ) - def test_loads_config_from_user_env_file(self) -> None: + def test_missing_default_config_file_is_populated(self) -> None: with TemporaryDirectory() as temp_dir: - env_file_path = Path(temp_dir) / ".env" + home = Path(temp_dir) + + with patch("deepseek_cursor_proxy.config.Path.home", return_value=home): + config = ProxyConfig.from_file(env={}, config_path=None) + config_path = default_config_path() + + self.assertTrue(config_path.exists()) + self.assertIn( + "model: deepseek-v4-pro", config_path.read_text(encoding="utf-8") + ) + self.assertEqual(stat.S_IMODE(config_path.stat().st_mode), 0o600) + self.assertEqual(config.upstream_model, "deepseek-v4-pro") + + def test_missing_explicit_config_file_is_not_populated(self) -> None: + with TemporaryDirectory() as temp_dir: + config_path = Path(temp_dir) / "missing.yaml" + + config = ProxyConfig.from_file(env={}, config_path=config_path) + + self.assertFalse(config_path.exists()) + self.assertEqual(config.upstream_model, "deepseek-v4-pro") + + def test_loads_config_from_user_yaml_file(self) -> None: + with TemporaryDirectory() as temp_dir: + config_path = Path(temp_dir) / "config.yaml" reasoning_content_path = Path(temp_dir) / "reasoning_content.sqlite3" - env_file_path.write_text( + config_path.write_text( "\n".join( [ - "DEEPSEEK_API_KEY=file-key", - "PROXY_API_KEY=cursor-token", - "PROXY_PORT=9100", - f"REASONING_CONTENT_PATH={reasoning_content_path}", + "model: deepseek-v4-flash", + "port: 9100", + f"reasoning_content_path: {reasoning_content_path}", ] ), encoding="utf-8", ) - config = ProxyConfig.from_env(env={}, env_file_path=env_file_path) + config = ProxyConfig.from_file(env={}, config_path=config_path) - self.assertEqual(config.upstream_api_key, "file-key") - self.assertEqual(config.proxy_api_key, "cursor-token") + self.assertEqual(config.upstream_model, "deepseek-v4-flash") self.assertEqual(config.port, 9100) self.assertEqual(config.reasoning_content_path, reasoning_content_path) def test_environment_overrides_config_file(self) -> None: with TemporaryDirectory() as temp_dir: - env_file_path = Path(temp_dir) / ".env" - env_file_path.write_text( + config_path = Path(temp_dir) / "config.yaml" + config_path.write_text( "\n".join( [ - "DEEPSEEK_API_KEY=file-key", - "PROXY_VERBOSE=false", + "verbose: false", ] ), encoding="utf-8", ) - config = ProxyConfig.from_env( + config = ProxyConfig.from_file( env={ - "DEEPSEEK_API_KEY": "env-key", "PROXY_VERBOSE": "true", }, - env_file_path=env_file_path, + config_path=config_path, ) - self.assertEqual(config.upstream_api_key, "env-key") self.assertTrue(config.verbose) - def test_relative_reasoning_content_path_stays_inside_app_directory(self) -> None: + def test_relative_reasoning_content_path_in_config_is_relative_to_config_file( + self, + ) -> None: + with TemporaryDirectory() as temp_dir: + config_path = Path(temp_dir) / "config.yaml" + config_path.write_text( + "\n".join( + [ + "reasoning_content_path: custom.sqlite3", + ] + ), + encoding="utf-8", + ) + + config = ProxyConfig.from_file(env={}, config_path=config_path) + + self.assertEqual( + config.reasoning_content_path, Path(temp_dir) / "custom.sqlite3" + ) + + def test_relative_reasoning_content_path_from_env_stays_inside_app_directory( + self, + ) -> None: home = Path("/tmp/home") with patch("deepseek_cursor_proxy.config.Path.home", return_value=home): - config = ProxyConfig.from_env( + config = ProxyConfig.from_file( env={ - "DEEPSEEK_API_KEY": "key", "REASONING_CONTENT_PATH": "custom.sqlite3", }, - env_file_path=Path("/does/not/exist"), + config_path=None, ) self.assertEqual( @@ -95,71 +136,83 @@ class ConfigTests(unittest.TestCase): ) def test_verbose_and_body_logging_can_be_enabled_from_env(self) -> None: - config = ProxyConfig.from_env( + config = ProxyConfig.from_file( env={ - "DEEPSEEK_API_KEY": "key", "PROXY_VERBOSE": "true", "PROXY_LOG_BODIES": "1", "PROXY_NGROK": "yes", }, - env_file_path=Path("/does/not/exist"), + config_path=Path("/does/not/exist"), ) self.assertTrue(config.verbose) self.assertTrue(config.log_bodies) self.assertTrue(config.ngrok) - def test_cursor_reasoning_display_can_be_disabled_from_env(self) -> None: - config = ProxyConfig.from_env( - env={ - "DEEPSEEK_API_KEY": "key", - "CURSOR_DISPLAY_REASONING": "false", - }, - env_file_path=Path("/does/not/exist"), - ) + def test_cursor_reasoning_display_can_be_disabled_from_config(self) -> None: + with TemporaryDirectory() as temp_dir: + config_path = Path(temp_dir) / "config.yaml" + config_path.write_text( + "\n".join( + [ + "display_reasoning: false", + ] + ), + encoding="utf-8", + ) + + config = ProxyConfig.from_file(env={}, config_path=config_path) self.assertFalse(config.cursor_display_reasoning) def test_config_path_can_be_overridden_from_environment(self) -> None: with TemporaryDirectory() as temp_dir: - first_env_path = Path(temp_dir) / "first.env" - second_env_path = Path(temp_dir) / "second.env" - first_env_path.write_text("DEEPSEEK_API_KEY=first-key", encoding="utf-8") - second_env_path.write_text("DEEPSEEK_API_KEY=second-key", encoding="utf-8") + first_config_path = Path(temp_dir) / "first.yaml" + second_config_path = Path(temp_dir) / "second.yaml" + first_config_path.write_text("port: 9100\n", encoding="utf-8") + second_config_path.write_text("port: 9200\n", encoding="utf-8") - config = ProxyConfig.from_env( - env={"DEEPSEEK_CURSOR_PROXY_CONFIG_PATH": str(second_env_path)}, - env_file_path=None, + config = ProxyConfig.from_file( + env={"DEEPSEEK_CURSOR_PROXY_CONFIG_PATH": str(second_config_path)}, + config_path=None, ) - self.assertEqual(config.upstream_api_key, "second-key") + self.assertEqual(config.port, 9200) - def test_explicit_env_file_path_wins_over_config_path_environment_variable( + def test_explicit_config_file_path_wins_over_config_path_environment_variable( self, ) -> None: with TemporaryDirectory() as temp_dir: - first_env_path = Path(temp_dir) / "first.env" - second_env_path = Path(temp_dir) / "second.env" - first_env_path.write_text("DEEPSEEK_API_KEY=first-key", encoding="utf-8") - second_env_path.write_text("DEEPSEEK_API_KEY=second-key", encoding="utf-8") + first_config_path = Path(temp_dir) / "first.yaml" + second_config_path = Path(temp_dir) / "second.yaml" + first_config_path.write_text("port: 9100\n", encoding="utf-8") + second_config_path.write_text("port: 9200\n", encoding="utf-8") - config = ProxyConfig.from_env( - env={"DEEPSEEK_CURSOR_PROXY_CONFIG_PATH": str(second_env_path)}, - env_file_path=first_env_path, + config = ProxyConfig.from_file( + env={"DEEPSEEK_CURSOR_PROXY_CONFIG_PATH": str(second_config_path)}, + config_path=first_config_path, ) - self.assertEqual(config.upstream_api_key, "first-key") + self.assertEqual(config.port, 9100) - def test_from_env_does_not_mutate_process_environment(self) -> None: + def test_invalid_yaml_config_raises_value_error(self) -> None: + with TemporaryDirectory() as temp_dir: + config_path = Path(temp_dir) / "config.yaml" + config_path.write_text("- not\n- a\n- mapping\n", encoding="utf-8") + + with self.assertRaises(ValueError): + ProxyConfig.from_file(env={}, config_path=config_path) + + def test_from_file_does_not_mutate_process_environment(self) -> None: with patch.dict( "os.environ", { - "DEEPSEEK_API_KEY": "env-key", + "PROXY_VERBOSE": "true", }, clear=True, ): - ProxyConfig.from_env(env_file_path=Path("/does/not/exist")) - self.assertEqual(dict(os.environ), {"DEEPSEEK_API_KEY": "env-key"}) + ProxyConfig.from_file(config_path=Path("/does/not/exist")) + self.assertEqual(dict(os.environ), {"PROXY_VERBOSE": "true"}) if __name__ == "__main__": diff --git a/tests/test_live_deepseek_cursor_proxy.py b/tests/test_live_deepseek_cursor_proxy.py index 99b1fe1..e91d61c 100644 --- a/tests/test_live_deepseek_cursor_proxy.py +++ b/tests/test_live_deepseek_cursor_proxy.py @@ -13,7 +13,9 @@ from deepseek_cursor_proxy.reasoning_store import ReasoningStore from deepseek_cursor_proxy.server import DeepSeekProxyHandler, DeepSeekProxyServer -LIVE_DEEPSEEK = os.getenv("RUN_LIVE_DEEPSEEK_TESTS") == "1" +LIVE_DEEPSEEK = os.getenv("RUN_LIVE_DEEPSEEK_TESTS") == "1" and bool( + os.getenv("LIVE_DEEPSEEK_KEY") +) def post_json( @@ -37,12 +39,10 @@ def post_json( class ProxyFixture: - def __init__(self, api_key: str) -> None: + def __init__(self) -> None: self.store = ReasoningStore(":memory:") server = DeepSeekProxyServer(("127.0.0.1", 0), DeepSeekProxyHandler) server.config = ProxyConfig( - upstream_api_key=api_key, - proxy_api_key="cursor-local-token", upstream_base_url="https://api.deepseek.com", upstream_model="deepseek-v4-pro", request_timeout=180, @@ -68,17 +68,18 @@ class ProxyFixture: @unittest.skipUnless( - LIVE_DEEPSEEK, "set RUN_LIVE_DEEPSEEK_TESTS=1 to run live DeepSeek API tests" + LIVE_DEEPSEEK, + "set RUN_LIVE_DEEPSEEK_TESTS=1 and LIVE_DEEPSEEK_KEY to run live tests", ) class LiveDeepSeekProxyTests(unittest.TestCase): def test_proxy_repairs_real_deepseek_tool_call_history(self) -> None: - api_key = os.environ["DEEPSEEK_API_KEY"] - proxy = ProxyFixture(api_key).start() + api_key = os.environ["LIVE_DEEPSEEK_KEY"] + proxy = ProxyFixture().start() try: first_status, first_response = post_json( proxy.url, first_request(), - api_key="cursor-local-token", + api_key=api_key, ) self.assertEqual(first_status, 200, first_response.get("error")) assistant_with_reasoning = first_response["choices"][0]["message"] @@ -118,7 +119,7 @@ class LiveDeepSeekProxyTests(unittest.TestCase): proxy_status, second_response = post_json( proxy.url, missing_reasoning_payload, - api_key="cursor-local-token", + api_key=api_key, ) self.assertEqual(proxy_status, 200, second_response.get("error")) final_assistant = second_response["choices"][0]["message"] @@ -145,7 +146,7 @@ class LiveDeepSeekProxyTests(unittest.TestCase): followup_status, followup_response = post_json( proxy.url, followup_payload, - api_key="cursor-local-token", + api_key=api_key, ) self.assertEqual(followup_status, 200, followup_response.get("error")) finally: diff --git a/tests/test_proxy_end_to_end.py b/tests/test_proxy_end_to_end.py index d20863c..8ab5048 100644 --- a/tests/test_proxy_end_to_end.py +++ b/tests/test_proxy_end_to_end.py @@ -23,7 +23,7 @@ FINAL_CONTENT = "Final answer after using the tool." def post_json( - url: str, payload: dict, api_key: str = "cursor-local-token" + url: str, payload: dict, api_key: str = "sk-cursor-test" ) -> tuple[int, dict]: body = json.dumps(payload).encode("utf-8") request = Request( @@ -45,6 +45,7 @@ def post_json( class FakeDeepSeekHandler(BaseHTTPRequestHandler): requests: list[dict] = [] + auth_headers: list[str] = [] def log_message(self, fmt: str, *args: object) -> None: return @@ -53,6 +54,7 @@ class FakeDeepSeekHandler(BaseHTTPRequestHandler): length = int(self.headers.get("Content-Length") or 0) payload = json.loads(self.rfile.read(length).decode("utf-8")) self.__class__.requests.append(payload) + self.__class__.auth_headers.append(self.headers.get("Authorization", "")) for index, message in enumerate(payload.get("messages", [])): if not isinstance(message, dict) or message.get("role") != "assistant": @@ -383,14 +385,13 @@ class ServerFixture: class ProxyEndToEndTests(unittest.TestCase): def setUp(self) -> None: FakeDeepSeekHandler.requests = [] + FakeDeepSeekHandler.auth_headers = [] self.upstream = ServerFixture( ThreadingHTTPServer(("127.0.0.1", 0), FakeDeepSeekHandler) ).start() self.store = ReasoningStore(":memory:") proxy = DeepSeekProxyServer(("127.0.0.1", 0), DeepSeekProxyHandler) proxy.config = ProxyConfig( - upstream_api_key="upstream-key", - proxy_api_key="cursor-local-token", upstream_base_url=self.upstream.url, upstream_model="deepseek-v4-pro", ) @@ -451,6 +452,30 @@ class ProxyEndToEndTests(unittest.TestCase): third_upstream_messages[3]["reasoning_content"], FINAL_REASONING ) + def test_proxy_forwards_cursor_bearer_token_to_deepseek(self) -> None: + status, _ = post_json( + f"{self.proxy.url}/v1/chat/completions", + first_cursor_request(), + api_key="sk-from-cursor", + ) + + self.assertEqual(status, 200) + self.assertEqual(FakeDeepSeekHandler.auth_headers[0], "Bearer sk-from-cursor") + + def test_proxy_rejects_missing_cursor_bearer_token(self) -> None: + request = Request( + f"{self.proxy.url}/v1/chat/completions", + data=json.dumps(first_cursor_request()).encode("utf-8"), + method="POST", + headers={"Content-Type": "application/json"}, + ) + + with self.assertRaises(HTTPError) as caught: + urlopen(request, timeout=5) + + self.assertEqual(caught.exception.code, 401) + self.assertEqual(FakeDeepSeekHandler.requests, []) + def test_proxy_adds_fallback_reasoning_for_uncached_cursor_tool_history( self, ) -> None: @@ -473,8 +498,6 @@ class InterleavedConversationTests(unittest.TestCase): self.store = ReasoningStore(":memory:") proxy = DeepSeekProxyServer(("127.0.0.1", 0), DeepSeekProxyHandler) proxy.config = ProxyConfig( - upstream_api_key="upstream-key", - proxy_api_key="cursor-local-token", upstream_base_url=self.upstream.url, upstream_model="deepseek-v4-pro", ) @@ -580,8 +603,6 @@ class StreamingProxyTests(unittest.TestCase): self.store = ReasoningStore(":memory:") proxy = DeepSeekProxyServer(("127.0.0.1", 0), DeepSeekProxyHandler) proxy.config = ProxyConfig( - upstream_api_key="upstream-key", - proxy_api_key="cursor-local-token", upstream_base_url=self.upstream.url, upstream_model="deepseek-v4-pro", ) @@ -607,7 +628,7 @@ class StreamingProxyTests(unittest.TestCase): ).encode("utf-8"), method="POST", headers={ - "Authorization": "Bearer cursor-local-token", + "Authorization": "Bearer sk-cursor-test", "Content-Type": "application/json", }, ) @@ -629,8 +650,6 @@ class ReasoningStreamingProxyTests(unittest.TestCase): self.store = ReasoningStore(":memory:") proxy = DeepSeekProxyServer(("127.0.0.1", 0), DeepSeekProxyHandler) proxy.config = ProxyConfig( - upstream_api_key="upstream-key", - proxy_api_key="cursor-local-token", upstream_base_url=self.upstream.url, upstream_model="deepseek-v4-pro", ) @@ -657,7 +676,7 @@ class ReasoningStreamingProxyTests(unittest.TestCase): ).encode("utf-8"), method="POST", headers={ - "Authorization": "Bearer cursor-local-token", + "Authorization": "Bearer sk-cursor-test", "Content-Type": "application/json", }, ) diff --git a/tests/test_transform.py b/tests/test_transform.py index 9d27230..910be42 100644 --- a/tests/test_transform.py +++ b/tests/test_transform.py @@ -57,9 +57,7 @@ class TransformTests(unittest.TestCase): ], } - prepared = prepare_upstream_request( - payload, ProxyConfig(upstream_api_key="key"), self.store - ) + prepared = prepare_upstream_request(payload, ProxyConfig(), self.store) self.assertEqual(prepared.payload["messages"][1]["content"], "Visible answer.") @@ -72,7 +70,7 @@ class TransformTests(unittest.TestCase): "max_completion_tokens": 123, "parallel_tool_calls": True, } - config = ProxyConfig(upstream_api_key="key") + config = ProxyConfig() prepared = prepare_upstream_request(payload, config, self.store) @@ -97,9 +95,7 @@ class TransformTests(unittest.TestCase): "tool_choice": "required", } - prepared = prepare_upstream_request( - payload, ProxyConfig(upstream_api_key="key"), self.store - ) + prepared = prepare_upstream_request(payload, ProxyConfig(), self.store) self.assertEqual(prepared.payload["tool_choice"], "auto") @@ -147,9 +143,7 @@ class TransformTests(unittest.TestCase): ], } - prepared = prepare_upstream_request( - payload, ProxyConfig(upstream_api_key="key"), self.store - ) + prepared = prepare_upstream_request(payload, ProxyConfig(), self.store) self.assertEqual(prepared.patched_reasoning_messages, 1) self.assertEqual( @@ -212,9 +206,7 @@ class TransformTests(unittest.TestCase): ], } - prepared = prepare_upstream_request( - payload, ProxyConfig(upstream_api_key="key"), self.store - ) + prepared = prepare_upstream_request(payload, ProxyConfig(), self.store) self.assertEqual(prepared.patched_reasoning_messages, 1) self.assertEqual( @@ -261,12 +253,8 @@ class TransformTests(unittest.TestCase): ], } - prepared_a = prepare_upstream_request( - payload_a, ProxyConfig(upstream_api_key="key"), self.store - ) - prepared_b = prepare_upstream_request( - payload_b, ProxyConfig(upstream_api_key="key"), self.store - ) + prepared_a = prepare_upstream_request(payload_a, ProxyConfig(), self.store) + prepared_b = prepare_upstream_request(payload_b, ProxyConfig(), self.store) self.assertEqual( prepared_a.payload["messages"][1]["reasoning_content"], @@ -321,7 +309,7 @@ class TransformTests(unittest.TestCase): }, ], }, - ProxyConfig(upstream_api_key="key"), + ProxyConfig(), self.store, ) @@ -370,9 +358,7 @@ class TransformTests(unittest.TestCase): ], } - prepared = prepare_upstream_request( - payload, ProxyConfig(upstream_api_key="key"), self.store - ) + prepared = prepare_upstream_request(payload, ProxyConfig(), self.store) self.assertEqual(prepared.patched_reasoning_messages, 1) self.assertEqual(prepared.payload["messages"][1]["content"], "") @@ -415,7 +401,7 @@ class TransformTests(unittest.TestCase): }, ], }, - ProxyConfig(upstream_api_key="key"), + ProxyConfig(), self.store, ) @@ -453,9 +439,7 @@ class TransformTests(unittest.TestCase): ], } - prepared = prepare_upstream_request( - payload, ProxyConfig(upstream_api_key="key"), self.store - ) + prepared = prepare_upstream_request(payload, ProxyConfig(), self.store) self.assertEqual(prepared.patched_reasoning_messages, 0) self.assertEqual(prepared.fallback_reasoning_messages, 1) @@ -493,9 +477,7 @@ class TransformTests(unittest.TestCase): ], } - prepared = prepare_upstream_request( - payload, ProxyConfig(upstream_api_key="key"), self.store - ) + prepared = prepare_upstream_request(payload, ProxyConfig(), self.store) self.assertEqual(prepared.fallback_reasoning_messages, 1) self.assertIn("reasoning_content", prepared.payload["messages"][3]) @@ -510,9 +492,7 @@ class TransformTests(unittest.TestCase): ], } - prepared = prepare_upstream_request( - payload, ProxyConfig(upstream_api_key="key"), self.store - ) + prepared = prepare_upstream_request(payload, ProxyConfig(), self.store) self.assertEqual(prepared.fallback_reasoning_messages, 0) self.assertNotIn("reasoning_content", prepared.payload["messages"][1]) @@ -530,9 +510,7 @@ class TransformTests(unittest.TestCase): ], } - prepared = prepare_upstream_request( - payload, ProxyConfig(upstream_api_key="key"), self.store - ) + prepared = prepare_upstream_request(payload, ProxyConfig(), self.store) self.assertEqual( prepared.payload["messages"][0],