From ec88053a8e424ff099e209071027401399834cec Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 22 Jun 2026 08:02:01 +0000 Subject: [PATCH] chore: sync workflow templates from Workflows repo Automated sync from stranske/Workflows Template hash: 1243c652ce3c Changes synced from sync-manifest.yml --- scripts/langchain/progress_reviewer.py | 6 ++-- tools/llm_provider.py | 50 +++++++++++++++++--------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/scripts/langchain/progress_reviewer.py b/scripts/langchain/progress_reviewer.py index ec7471f5..32eca9ef 100755 --- a/scripts/langchain/progress_reviewer.py +++ b/scripts/langchain/progress_reviewer.py @@ -427,11 +427,11 @@ def review_progress_with_llm( rounds_without_completion, ) try: - from tools.langchain_client import build_chat_client + from scripts.langchain._llm_client import build_client except ImportError: - build_chat_client = None + build_client = None - resolved = build_chat_client(model=model) if build_chat_client else None + resolved = build_client(model=model) if build_client else None if not resolved: score, aligned, unaligned = heuristic_alignment_check( acceptance_criteria, recent_commits, files_changed diff --git a/tools/llm_provider.py b/tools/llm_provider.py index 7fb0603a..fd9cbc7b 100644 --- a/tools/llm_provider.py +++ b/tools/llm_provider.py @@ -42,6 +42,14 @@ SHORT_ANALYSIS_CONFIDENCE_CAP = 0.4 +def _configured_langchain_model(provider: str, *, fallback: str) -> str: + try: + from tools.llm_registry import configured_model_for_provider + except ImportError: + return fallback + return configured_model_for_provider(provider, fallback=fallback) or fallback + + def _setup_langsmith_tracing() -> bool: """ Configure LangSmith tracing if API key is available. @@ -585,16 +593,17 @@ def supports_quality_context(self) -> bool: def _get_client(self): """Get LangChain ChatOpenAI client.""" try: - from langchain_openai import ChatOpenAI + from tools.langchain_client import build_chat_client except ImportError: - logger.warning("langchain_openai not installed") + logger.warning("LangChain client helper not available") return None - return ChatOpenAI( - model="gpt-5.1-codex", # Purpose-built for analyzing Codex coding sessions - api_key=os.environ.get("OPENAI_API_KEY"), - temperature=0.1, - ) + model_name = _configured_langchain_model("openai", fallback="gpt-5.1-codex") + resolved = build_chat_client(provider="openai", model=model_name) + if resolved: + self._model_name = resolved.model + return resolved.client + return None def analyze_completion( self, @@ -626,7 +635,11 @@ def analyze_completion( confidence=result.confidence, reasoning=result.reasoning, provider_used=self.name, - model_name="gpt-5.1-codex", # Actual model used by OpenAIProvider + model_name=getattr( + self, + "_model_name", + _configured_langchain_model("openai", fallback="gpt-5.1-codex"), + ), raw_confidence=result.raw_confidence, confidence_adjusted=result.confidence_adjusted, quality_warnings=result.quality_warnings, @@ -651,16 +664,17 @@ def supports_quality_context(self) -> bool: def _get_client(self): try: - from langchain_anthropic import ChatAnthropic + from tools.langchain_client import build_chat_client except ImportError: - logger.warning("langchain_anthropic not installed") + logger.warning("LangChain client helper not available") return None - return ChatAnthropic( - model="claude-sonnet-4-5-20250929", - anthropic_api_key=os.environ.get(ANTHROPIC_API_KEY_ENV), - temperature=0.1, - ) + model_name = _configured_langchain_model("anthropic", fallback="claude-sonnet-4-5-20250929") + resolved = build_chat_client(provider="anthropic", model=model_name) + if resolved: + self._model_name = resolved.model + return resolved.client + return None def analyze_completion( self, @@ -702,7 +716,11 @@ def analyze_completion( confidence=result.confidence, reasoning=result.reasoning, provider_used=self.name, - model_name="claude-sonnet-4-5-20250929", + model_name=getattr( + self, + "_model_name", + _configured_langchain_model("anthropic", fallback="claude-sonnet-4-5-20250929"), + ), raw_confidence=result.raw_confidence, confidence_adjusted=result.confidence_adjusted, quality_warnings=result.quality_warnings,