codriao / codette_openai_fallback.py
Raiff1982's picture
Create codette_openai_fallback.py
801b221 verified
# codette_openai_fallback.py
import os
import logging
import openai
from dotenv import load_dotenv
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# Load environment variables (local or HF secrets)
load_dotenv()
logger = logging.getLogger("CodetteFallback")
logger.setLevel(logging.INFO)
openai.api_key = os.getenv("OPENAI_API_KEY")
OPENAI_MODEL = "ft:gpt-4o-2024-08-06:raiffs-bits:pidette:B9TLP9QA"
SYSTEM_PROMPT = "You are Codette, an intelligent, empathetic assistant with advanced reasoning."
LOCAL_MODEL_NAME = os.getenv("CODETTE_LOCAL_MODEL", "Raiff1982/Codette")
# Attempt to load local model
try:
local_tokenizer = AutoTokenizer.from_pretrained(LOCAL_MODEL_NAME)
local_model = AutoModelForCausalLM.from_pretrained(LOCAL_MODEL_NAME)
logger.info("[CodetteFallback] Local model loaded.")
except Exception as e:
logger.warning(f"[CodetteFallback] Local fallback unavailable: {e}")
local_model = None
local_tokenizer = None
def query_codette_with_fallback(prompt: str, user_id: str = "anon") -> str:
try:
logger.info(f"[Codette:OpenAI] Query from {user_id}: {prompt}")
response = openai.ChatCompletion.create(
model=OPENAI_MODEL,
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": prompt}
],
temperature=0.7,
max_tokens=1024,
user=user_id
)
return response["choices"][0]["message"]["content"]
except Exception as e:
logger.warning(f"[Codette:OpenAI fallback triggered] {e}")
if local_model and local_tokenizer:
try:
inputs = local_tokenizer(prompt, return_tensors="pt")
outputs = local_model.generate(**inputs, max_length=1024)
return local_tokenizer.decode(outputs[0], skip_special_tokens=True)
except Exception as inner_e:
logger.error(f"[Codette:Local fallback failed] {inner_e}")
return "Codette couldn’t generate a response due to internal issues."
return "Codette is currently unavailable. Please check connectivity or model settings."