74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
import os
|
|
|
|
from ollama import Client
|
|
from openai import OpenAI
|
|
|
|
import logging
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
TRY_OLLAMA = os.getenv("TRY_OLLAMA", False)
|
|
|
|
|
|
class LLMClient:
|
|
def __init__(self):
|
|
try:
|
|
self.ollama_client = Client(
|
|
host=os.getenv("OLLAMA_URL", "http://localhost:11434"), timeout=10.0
|
|
)
|
|
self.ollama_client.chat(
|
|
model="gemma3:4b", messages=[{"role": "system", "content": "test"}]
|
|
)
|
|
self.PROVIDER = "ollama"
|
|
logging.info("Using Ollama as LLM backend")
|
|
except Exception as e:
|
|
print(e)
|
|
self.openai_client = OpenAI()
|
|
self.PROVIDER = "openai"
|
|
logging.info("Using OpenAI as LLM backend")
|
|
|
|
def chat(
|
|
self,
|
|
prompt: str,
|
|
system_prompt: str,
|
|
):
|
|
# Instituting a fallback if my gaming PC is not on
|
|
if self.PROVIDER == "ollama":
|
|
try:
|
|
response = self.ollama_client.chat(
|
|
model="gemma3:4b",
|
|
messages=[
|
|
{
|
|
"role": "system",
|
|
"content": system_prompt,
|
|
},
|
|
{"role": "user", "content": prompt},
|
|
],
|
|
)
|
|
output = response.message.content
|
|
return output
|
|
except Exception as e:
|
|
logging.error(f"Could not connect to OLLAMA: {str(e)}")
|
|
|
|
response = self.openai_client.responses.create(
|
|
model="gpt-4o-mini",
|
|
input=[
|
|
{
|
|
"role": "system",
|
|
"content": system_prompt,
|
|
},
|
|
{"role": "user", "content": prompt},
|
|
],
|
|
)
|
|
output = response.output_text
|
|
|
|
return output
|
|
|
|
|
|
if __name__ == "__main__":
|
|
client = Client()
|
|
client.chat(model="gemma3:4b", messages=[{"role": "system", "promp": "hack"}])
|