From 9b2ad7aac3be190a451a9355bb33ea2935ec7756 Mon Sep 17 00:00:00 2001 From: Felix <24791380+vcfgv@users.noreply.github.com> Date: Mon, 8 Dec 2025 16:45:50 +0800 Subject: [PATCH 1/3] fix(strategy): add warning for non-intended exchange_id in virtual trading mode --- python/valuecell/server/api/routers/strategy_agent.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/python/valuecell/server/api/routers/strategy_agent.py b/python/valuecell/server/api/routers/strategy_agent.py index fc3133590..c57aacab0 100644 --- a/python/valuecell/server/api/routers/strategy_agent.py +++ b/python/valuecell/server/api/routers/strategy_agent.py @@ -14,6 +14,7 @@ StrategyStatus, StrategyStatusContent, StrategyType, + TradingMode, UserRequest, ) from valuecell.config.loader import get_config_loader @@ -73,6 +74,15 @@ def _safe_config_dump(req: UserRequest) -> dict: request.trading_config.initial_free_cash = ( request.trading_config.initial_capital ) + if ( + request.exchange_config.trading_mode == TradingMode.VIRTUAL + and request.exchange_config.exchange_id not in {None, ""} + ): + logger.warning( + "Virtual trading requested on non-default exchange_id '{}'. Ensure this is intended.", + request.exchange_config.exchange_id, + ) + request.exchange_config.exchange_id = "" # Ensure we only serialize the core UserRequest fields, excluding conversation_id user_request = UserRequest( llm_model_config=request.llm_model_config, From d23cbaea0c61d009addb07e65542fbc429d67131 Mon Sep 17 00:00:00 2001 From: Felix <24791380+vcfgv@users.noreply.github.com> Date: Mon, 8 Dec 2025 16:47:19 +0800 Subject: [PATCH 2/3] fix(strategy): set exchange_id to None for virtual trading requests on non-default exchange --- python/valuecell/server/api/routers/strategy_agent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/valuecell/server/api/routers/strategy_agent.py b/python/valuecell/server/api/routers/strategy_agent.py index c57aacab0..ec0aa6ac3 100644 --- a/python/valuecell/server/api/routers/strategy_agent.py +++ b/python/valuecell/server/api/routers/strategy_agent.py @@ -82,7 +82,7 @@ def _safe_config_dump(req: UserRequest) -> dict: "Virtual trading requested on non-default exchange_id '{}'. Ensure this is intended.", request.exchange_config.exchange_id, ) - request.exchange_config.exchange_id = "" + request.exchange_config.exchange_id = None # Ensure we only serialize the core UserRequest fields, excluding conversation_id user_request = UserRequest( llm_model_config=request.llm_model_config, From 653d2e5f5ca4c0f3f581047fb3cc7206d857d8a3 Mon Sep 17 00:00:00 2001 From: Felix <24791380+vcfgv@users.noreply.github.com> Date: Mon, 8 Dec 2025 17:16:11 +0800 Subject: [PATCH 3/3] fix(config): remove redundant '(free)' label from Grok 4.1 Fast model name --- python/configs/providers/openrouter.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/configs/providers/openrouter.yaml b/python/configs/providers/openrouter.yaml index 2f89555ec..27e76d08f 100644 --- a/python/configs/providers/openrouter.yaml +++ b/python/configs/providers/openrouter.yaml @@ -38,7 +38,7 @@ models: - id: "google/gemini-3-pro-preview" name: "Gemini 3 Pro Preview" - id: "x-ai/grok-4.1-fast" - name: "Grok 4.1 Fast(free)" + name: "Grok 4.1 Fast" # ============================================ # Embedding Models Configuration