From f83a163b1591a8c406aef4795e38679982f88d1a Mon Sep 17 00:00:00 2001 From: fdc310 <2213070223@qq.com> Date: Sat, 1 Aug 2026 20:36:16 +0800 Subject: [PATCH] fix(provider): preserve local agent model compatibility --- src/langbot/pkg/provider/runners/localagent.py | 9 +++------ tests/unit_tests/provider/test_model_service.py | 4 ++++ .../dynamic-form/DynamicFormItemComponent.tsx | 11 +++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/langbot/pkg/provider/runners/localagent.py b/src/langbot/pkg/provider/runners/localagent.py index 0b577c779..f460d45af 100644 --- a/src/langbot/pkg/provider/runners/localagent.py +++ b/src/langbot/pkg/provider/runners/localagent.py @@ -279,12 +279,9 @@ class LocalAgentRunner(runner.RequestRunner): else 'provider_default' ) reasoning_config = modelmgr_reasoning.normalize_reasoning_config({'level': level}) - return modelmgr_requester.RuntimeLLMModel( - execution_context=model.execution_context, - model_entity=model.model_entity, - provider=model.provider, - reasoning_config_override=reasoning_config, - ) + configured_model = copy.copy(model) + configured_model.reasoning_config_override = reasoning_config + return configured_model async def _invoke_with_fallback( self, diff --git a/tests/unit_tests/provider/test_model_service.py b/tests/unit_tests/provider/test_model_service.py index f71693594..bd11ccac1 100644 --- a/tests/unit_tests/provider/test_model_service.py +++ b/tests/unit_tests/provider/test_model_service.py @@ -377,6 +377,10 @@ async def test_local_agent_applies_reasoning_per_fallback_model(): {'level': 'low'}, {'level': 'high'}, ] + assert candidates[0] is not primary + assert candidates[1] is not fallback + assert primary.reasoning_config_override is None + assert fallback.reasoning_config_override is None def test_local_agent_rejects_invalid_pipeline_reasoning_level(): diff --git a/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx b/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx index 03e409a9a..861090ec4 100644 --- a/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx +++ b/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx @@ -915,9 +915,7 @@ export default function DynamicFormItemComponent({ ).filter( (entry): entry is [string, ReasoningLevel] => typeof entry[1] === 'string' && - REASONING_LEVELS.includes( - entry[1] as ReasoningLevel, - ), + REASONING_LEVELS.includes(entry[1] as ReasoningLevel), ), ) as Record) : {}, @@ -1108,15 +1106,16 @@ export default function DynamicFormItemComponent({ const renderReasoningPicker = (modelUuid: string) => { if (!modelUuid) return null; - const model = llmModels.find((candidate) => candidate.uuid === modelUuid); + const model = llmModels.find( + (candidate) => candidate.uuid === modelUuid, + ); const currentLevel = modelValue.reasoning[modelUuid] || 'provider_default'; const availableLevels = model?.reasoning_capabilities?.levels || [ 'provider_default', ]; const levels = REASONING_LEVELS.filter( - (level) => - availableLevels.includes(level) || level === currentLevel, + (level) => availableLevels.includes(level) || level === currentLevel, ); return (