From 9e6b40dba452f23a51ba54a5bd3e63512dc8c209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=B8=D0=BD=D0=B0=D1=80=20=D0=9C=D0=B8=D1=80=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D0=B8=D1=82=D0=BE=D0=B2?= Date: Thu, 18 Jun 2026 09:05:40 +0000 Subject: [PATCH] Solution ready for publish: update main.py --- main.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/main.py b/main.py index ec66a4f..735581a 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,10 @@ """LangGraph code review agent. -This implementation follows the assignment specification: +Implementation follows assignment: - State: CodeReviewState with 4 criteria. - Nodes: draft_review, reflect, rewrite. - Graph: START -> draft_review -> reflect -> (ok -> END) or (needs_revision & round rewrite -> reflect). -- Uses LangGraph and LangChain OpenAI (or Ollama) for LLM calls. +- Uses LangGraph and LangChain OpenAI for LLM calls. - Structured output for reflect via Pydantic model. - Demo function sort_numbers. """ @@ -30,11 +30,8 @@ class CodeReviewState(TypedDict): max_rounds: int # ---------- LLM ---------- -# Use OpenAI if key present, else Ollama fallback -if os.getenv("OPENAI_API_KEY"): - llm = ChatOpenAI(temperature=0) -else: - llm = ChatOpenAI(model="ollama/llama3", temperature=0) +# Use OpenAI only +llm = ChatOpenAI(temperature=0) # ---------- Nodes ---------- @@ -73,11 +70,7 @@ def reflect(state: CodeReviewState) -> CodeReviewState: Return a JSON object with keys: scores (dict), weakest_criterion (string), verdict ('ok' if all scores >=7 else 'needs_revision'). """ response = llm.invoke([HumanMessage(content=prompt)]) - try: - data = ReflectOutput.model_validate_json(response.content) - except Exception: - # Fallback simple parsing - data = ReflectOutput.model_validate_json("{\"scores\":{\"pep8\":5,\"type_hints\":5,\"edge_cases\":5,\"naming\":5},\"weakest_criterion\":\"pep8\",\"verdict\":\"needs_revision\"}") + data = ReflectOutput.model_validate_json(response.content) state["criteria_scores"] = data.scores state["weakest_criterion"] = data.weakest_criterion state["verdict"] = data.verdict