From 6a6ce518bfeb20780b9538d2e9385e732fa6b384 Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman Date: Thu, 2 Apr 2026 21:12:08 +0000 Subject: [PATCH] fix(provider): make LangChainChatProvider name and model_id mutable properties The LangChainChatProvider class defined name and model_id as read-only properties without setters, causing AttributeError when PlanService attempted to set these properties after provider instantiation. Root Cause: - LangChainChatProvider.name and .model_id were @property without @setter - PlanService._resolve_ai_provider_for_actor() attempts to mutate these properties at lines 411 and 413 - This caused: AttributeError: property 'name' of 'LangChainChatProvider' object has no setter Solution: Added property setters for both name and model_id: @name.setter def name(self, value: str) -> None: self._name = value @model_id.setter def model_id(self, value: str) -> None: self._model_id = value This allows PlanService to correctly resolve provider names and model IDs without raising AttributeError. Impact: - Fixes the agents build command crash when using agents tell - No regression: existing functionality unchanged - Properties remain type-safe (str -> str) ISSUES CLOSED: #1553 --- src/cleveragents/providers/llm/langchain_chat_provider.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cleveragents/providers/llm/langchain_chat_provider.py b/src/cleveragents/providers/llm/langchain_chat_provider.py index 9aa5cf601..b8d98abd8 100644 --- a/src/cleveragents/providers/llm/langchain_chat_provider.py +++ b/src/cleveragents/providers/llm/langchain_chat_provider.py @@ -79,10 +79,18 @@ class LangChainChatProvider(AIProviderInterface): def name(self) -> str: # pragma: no cover - simple accessor return self._name + @name.setter + def name(self, value: str) -> None: + self._name = value + @property def model_id(self) -> str: # pragma: no cover - simple accessor return self._model_id + @model_id.setter + def model_id(self, value: str) -> None: + self._model_id = value + def generate_changes( self, project: Project,