Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/anhthuhoang0518_day4-2a202600666-hoanganhthu.json

1 line
3.6 KiB
JSON

{"repo": "anhthuhoang0518/day4-2a202600666-hoanganhthu", "files": {"src/core/llm.py": {"ac5ae2d60b5a0de2be009f430a51816bfddce719": {"t": 1785846937.9799209, "n": 3328, "h": "e421bdaf1d2ba0a1", "c": "from __future__ import annotations\n\nimport json\nimport os\nimport re\nfrom typing import Any\n\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\n\ndef normalize_content(raw: Any) -> str:\n if isinstance(raw, str):\n return raw.strip()\n if isinstance(raw, dict):\n text = raw.get(\"text\")\n return str(text).strip() if text is not None else str(raw).strip()\n if isinstance(raw, list):\n parts: list[str] = []\n for item in raw:\n text = normalize_content(item)\n if text:\n parts.append(text)\n return \"\\n\".join(parts).strip()\n return str(raw).strip()\n\n\ndef build_chat_model(\n *,\n provider: str | None = None,\n model_name: str | None = None,\n temperature: float = 0.0,\n):\n effective_provider = provider or os.getenv(\"DEFAULT_PROVIDER\", \"openai\")\n effective_model = model_name or os.getenv(\"MODEL\") or os.getenv(\"DEFAULT_MODEL\") or os.getenv(\"LLM_MODEL\")\n\n if effective_provider == \"openai\":\n from langchain_openai import ChatOpenAI\n\n return ChatOpenAI(\n model=effective_model or \"deepseek-v4-flash\",\n temperature=temperature,\n api_key=os.getenv(\"API_KEY\") or os.getenv(\"OPENAI_API_KEY\"),\n base_url=os.getenv(\"LLM_ENDPOINT\") or os.getenv(\"OPENAI_BASE_URL\", \"https://opencode.ai/zen/go/v1\"),\n )\n if effective_provider == \"google\":\n from langchain_google_genai import ChatGoogleGenerativeAI\n\n return ChatGoogleGenerativeAI(\n model=effective_model or \"gemini-2.5-flash\",\n temperature=temperature,\n google_api_key=os.getenv(\"GOOGLE_API_KEY\"),\n )\n if effective_provider == \"ollama\":\n from langchain_ollama import ChatOllama\n\n return ChatOllama(\n model=model_name or os.getenv(\"OLLAMA_MODEL\", \"qwen3.5:3b\"),\n base_url=os.getenv(\"OLLAMA_BASE_URL\", \"http://localhost:11434\"),\n temperature=temperature,\n )\n raise ValueError(\"This lab supports only the `openai`, `google`, and `ollama` providers.\")\n\n\ndef extract_json_object(raw: Any) -> dict[str, Any]:\n text = normalize_content(raw)\n if \"```\" in text:\n blocks = re.findall(r\"```(?:json)?\\s*(.*?)```\", text, re.DOTALL)\n if blocks:\n text = blocks[0].strip()\n start = text.find(\"{\")\n end = text.rfind(\"}\")\n if start == -1 or end == -1:\n raise ValueError(\"No JSON object found in model output.\")\n return json.loads(text[start : end + 1])\n\n\ndef judge_answer_with_llm(\n *,\n query: str,\n answer: str,\n rubric: str,\n provider: str,\n model_name: str | None = None,\n) -> dict[str, Any]:\n model = build_chat_model(provider=provider, model_name=model_name, temperature=0.0)\n prompt = f\"\"\"\nYou are grading a student order-agent answer.\nReturn JSON only with:\n- score: integer from 0 to 10\n- verdict: short string\n- feedback: short list of strings\n\nRubric:\n{rubric}\n\nUser query:\n{query}\n\nStudent answer:\n{answer}\n\"\"\".strip()\n payload = extract_json_object(model.invoke(prompt).content)\n score = max(0, min(10, int(payload.get(\"score\", 0))))\n return {\n \"score\": score,\n \"verdict\": str(payload.get(\"verdict\", \"\")).strip(),\n \"feedback\": [str(item).strip() for item in payload.get(\"feedback\", []) if str(item).strip()],\n }\n"}}}}