Files

1 line
2.7 KiB
JSON

{"repo": "bmounim/argerai", "files": {"backend/grok.py": {"d69ab259bcc33dc5350c7633d4a09054d62bd18b": {"t": 1785674549.6455944, "n": 2443, "h": "0353b78a7b87fc51", "c": "import aiohttp\nimport logging\nimport os\nfrom dotenv import load_dotenv\nfrom tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type\n\nlogger = logging.getLogger(__name__)\nload_dotenv()\n\nclass Grok:\n def __init__(self, model=\"grok-2-latest\", temperature=0.7, max_tokens=3000, system_prompt=\"\"):\n logger.info(\"Initializing Grok with model: %s\", model)\n self.model = model\n self.temperature = temperature\n self.max_tokens = max_tokens\n self.system_prompt = system_prompt\n self.api_key = os.environ.get(\"XAI_API_KEY\")\n self.api_url = os.environ.get(\"XAI_API_URL\", \"https://api.x.ai/v1/chat/completions\")\n if not self.api_key:\n logger.error(\"XAI_API_KEY environment variable not set\")\n raise ValueError(\"XAI_API_KEY environment variable not set\")\n logger.info(\"Grok initialized successfully\")\n\n @retry(\n stop=stop_after_attempt(3),\n wait=wait_exponential(multiplier=1, min=1, max=10),\n retry=retry_if_exception_type(aiohttp.ClientError)\n )\n async def invoke(self, prompt, reset_event=None):\n if reset_event and reset_event.is_set():\n logger.info(\"Operation canceled by reset event\")\n raise Exception(\"Operation canceled\")\n headers = {\n \"Content-Type\": \"application/json\",\n \"Authorization\": f\"Bearer {self.api_key}\",\n }\n data = {\n \"messages\": [\n {\"role\": \"system\", \"content\": self.system_prompt},\n {\"role\": \"user\", \"content\": prompt},\n ],\n \"model\": self.model,\n \"temperature\": self.temperature,\n \"max_tokens\": self.max_tokens,\n \"stream\": False,\n }\n async with aiohttp.ClientSession() as session:\n async with session.post(self.api_url, headers=headers, json=data) as response:\n if response.status == 200:\n result = await response.json()\n content = result[\"choices\"][0][\"message\"][\"content\"].strip()\n logger.info(\"Grok API call successful, content length: %d\", len(content))\n return {\"content\": content}\n else:\n logger.error(\"Grok API request failed: %s\", await response.text())\n raise Exception(f\"Grok API request failed: {response.status} - {await response.text()}\")"}}}}