Spaces:
Sleeping
Sleeping
import os | |
from openai import OpenAI | |
import logging | |
from typing import List, Dict, Any | |
import json | |
import time | |
from modals.inputs import LLMConfig | |
class LLM: | |
def __init__(self, max_retries: int = 3, retry_delay: float = 1.0): | |
self.max_retries = max_retries | |
self.retry_delay = retry_delay | |
def parse_json(self, response: str) -> Dict[str, Any]: | |
import re | |
match = re.search(r'```json\s*(\{.*?\}|\[.*?\])\s*```', response, re.DOTALL) | |
if match: | |
json_str = match.group(1) | |
try: | |
parsed_json = json.loads(json_str) | |
return parsed_json | |
except json.JSONDecodeError as e: | |
raise | |
raise | |
def step(self, messages: List[Dict[str, str]] = None, llm_config: LLMConfig = None) -> str: | |
messages = messages or [] | |
llm = OpenAI( | |
api_key=llm_config.api_key, | |
base_url=llm_config.base_url | |
) | |
for attempt in range(self.max_retries): | |
try: | |
response = llm.chat.completions.create( | |
model=llm_config.model, | |
messages=messages, | |
temperature=0.2 | |
) | |
return response.choices[0].message.content | |
except Exception as e: | |
logging.error(f"Error in LLM step (attempt {attempt + 1}/{self.max_retries}): {e}") | |
if attempt < self.max_retries - 1: | |
time.sleep(self.retry_delay * (2 ** attempt)) # Exponential backoff | |
else: | |
raise | |
if __name__ == "__main__": | |
# llm_config = LLMConfig( | |
# base_url="https://openrouter.ai/api/v1", | |
# api_key="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", | |
# model="openai/gpt-4o-mini" | |
# ) | |
llm_config = LLMConfig( | |
api_key="AIzaSyCsstACK4dJx61ad2_fhWugtvCcEDcTiTE", | |
base_url="https://generativelanguage.googleapis.com/v1beta/openai/", | |
model="gemini-2.0-flash", | |
) | |
messages = [ | |
{"role": "system", "content": "You are a helpful AI assistant."}, | |
{"role": "user", "content": "Tell me a fun fact about space."} | |
] | |
llm = LLM() | |
response = llm.step(messages, llm_config) | |
print(response) | |