Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/2gg-bit_mini-agent.json
T

1 line
4.8 KiB
JSON

{"repo": "2gg-bit/mini-agent", "files": {"llm.py": {"31fe8ab9c904999c40e27e0578b83176283d58b3": {"t": 1785745443.6725798, "n": 2182, "h": "2420259a56f168ac", "c": "\"\"\"LLM client wrapper — supports any OpenAI-compatible API.\"\"\"\nimport logging\nfrom openai import OpenAI\nfrom config import LLM_API_KEY, LLM_BASE_URL, LLM_MODEL\n\nlogger = logging.getLogger(\"mini-agent.llm\")\n\n\nclass LLMClient:\n def __init__(self, api_key=None, base_url=None, model=None):\n self.api_key = api_key or LLM_API_KEY\n self.base_url = base_url or LLM_BASE_URL\n self.model = model or LLM_MODEL\n\n if not self.api_key:\n raise ValueError(\n \"API key not set. Configure DEEPSEEK_API_KEY in .env\"\n )\n\n self.client = OpenAI(api_key=self.api_key, base_url=self.base_url)\n logger.info(\n f\"LLM initialized: model={self.model}, base_url={self.base_url}\"\n )\n\n def chat(self, messages, tools=None):\n \"\"\"Send a chat completion request.\n\n Args:\n messages: OpenAI-format message list.\n tools: Optional tool definitions (OpenAI function-calling format).\n\n Returns:\n Raw ChatCompletion response object.\n \"\"\"\n kwargs = {\"model\": self.model, \"messages\": messages}\n if tools:\n kwargs[\"tools\"] = tools\n kwargs[\"tool_choice\"] = \"auto\"\n\n logger.debug(\n f\"LLM request: {len(messages)} messages, \"\n f\"{len(tools) if tools else 0} tools\"\n )\n\n try:\n response = self.client.chat.completions.create(**kwargs)\n usage = response.usage\n if usage:\n logger.info(\n f\"LLM tokens: prompt={usage.prompt_tokens}, \"\n f\"completion={usage.completion_tokens}\"\n )\n return response\n except Exception as e:\n logger.error(f\"LLM API error: {e}\")\n raise\n\n def chat_simple(self, messages):\n \"\"\"Send a simple text-only request (no tools).\"\"\"\n try:\n response = self.client.chat.completions.create(\n model=self.model, messages=messages\n )\n return response.choices[0].message.content\n except Exception as e:\n logger.error(f\"LLM API error: {e}\")\n raise\n"}, "0ea2f6502c9d48d78bb8662881721ae8e0f9b569": {"t": 1785753290.785838, "n": 2182, "h": "2420259a56f168ac", "c": "\"\"\"LLM client wrapper — supports any OpenAI-compatible API.\"\"\"\nimport logging\nfrom openai import OpenAI\nfrom config import LLM_API_KEY, LLM_BASE_URL, LLM_MODEL\n\nlogger = logging.getLogger(\"mini-agent.llm\")\n\n\nclass LLMClient:\n def __init__(self, api_key=None, base_url=None, model=None):\n self.api_key = api_key or LLM_API_KEY\n self.base_url = base_url or LLM_BASE_URL\n self.model = model or LLM_MODEL\n\n if not self.api_key:\n raise ValueError(\n \"API key not set. Configure DEEPSEEK_API_KEY in .env\"\n )\n\n self.client = OpenAI(api_key=self.api_key, base_url=self.base_url)\n logger.info(\n f\"LLM initialized: model={self.model}, base_url={self.base_url}\"\n )\n\n def chat(self, messages, tools=None):\n \"\"\"Send a chat completion request.\n\n Args:\n messages: OpenAI-format message list.\n tools: Optional tool definitions (OpenAI function-calling format).\n\n Returns:\n Raw ChatCompletion response object.\n \"\"\"\n kwargs = {\"model\": self.model, \"messages\": messages}\n if tools:\n kwargs[\"tools\"] = tools\n kwargs[\"tool_choice\"] = \"auto\"\n\n logger.debug(\n f\"LLM request: {len(messages)} messages, \"\n f\"{len(tools) if tools else 0} tools\"\n )\n\n try:\n response = self.client.chat.completions.create(**kwargs)\n usage = response.usage\n if usage:\n logger.info(\n f\"LLM tokens: prompt={usage.prompt_tokens}, \"\n f\"completion={usage.completion_tokens}\"\n )\n return response\n except Exception as e:\n logger.error(f\"LLM API error: {e}\")\n raise\n\n def chat_simple(self, messages):\n \"\"\"Send a simple text-only request (no tools).\"\"\"\n try:\n response = self.client.chat.completions.create(\n model=self.model, messages=messages\n )\n return response.choices[0].message.content\n except Exception as e:\n logger.error(f\"LLM API error: {e}\")\n raise\n"}}}}