Anas989898's picture
Add application file
f0aeabd
raw
history blame
2.29 kB
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)