|
import os |
|
import json |
|
import logging |
|
import openai |
|
import pyttsx3 |
|
import asyncio |
|
from jwt import encode, decode, ExpiredSignatureError |
|
from datetime import datetime, timedelta |
|
from dotenv import load_dotenv |
|
|
|
|
|
load_dotenv() |
|
|
|
openai.api_key = os.getenv("OPENAI_API_KEY") |
|
|
|
class AICoreFinalRecursive: |
|
def __init__(self, config_path="config_updated.json"): |
|
self.config = self._load_config(config_path) |
|
self.jwt_secret = os.environ.get("JWT_SECRET", "fallback_secret") |
|
self.speech_engine = pyttsx3.init() |
|
|
|
|
|
def _load_config(self, config_path): |
|
if os.path.exists(config_path): |
|
with open(config_path, 'r') as file: |
|
return json.load(file) |
|
return {} |
|
|
|
async def generate_response(self, query: str, user_id: int) -> dict: |
|
try: |
|
system_prompt = self.config.get("system_prompt", |
|
"You are Codette, an advanced multi-perspective AI assistant.") |
|
|
|
messages = [ |
|
{"role": "system", "content": system_prompt}, |
|
{"role": "user", "content": query} |
|
] |
|
|
|
loop = asyncio.get_event_loop() |
|
response_obj = await loop.run_in_executor( |
|
None, |
|
lambda: openai.chat.completions.create( |
|
model=self.config.get("model_name", |
|
"ft:gpt-4.1-2025-04-14:raiffs-bits:codette-final:BOZDRHpW:ckpt-step-10"), |
|
messages=messages, |
|
temperature=0.7, |
|
max_tokens=512, |
|
) |
|
) |
|
resp = response_obj.choices[0].message.content.strip() |
|
|
|
|
|
jwt_token = self.encode_jwt({"user_id": user_id, "exp": datetime.utcnow() + timedelta(minutes=5)}) |
|
|
|
|
|
self._speak_response(resp) |
|
|
|
return { |
|
"response": resp, |
|
"jwt_token": jwt_token, |
|
"context_enhanced": True, |
|
"security_status": "Fully Secure" |
|
} |
|
except Exception as e: |
|
logging.error(f"Response generation failed: {e}") |
|
return {"error": f"Processing failed - {e}"} |
|
|
|
def encode_jwt(self, payload): |
|
return encode(payload, self.jwt_secret, algorithm="HS256") |
|
|
|
def decode_jwt(self, token): |
|
try: |
|
decoded = decode(token, self.jwt_secret, algorithms=["HS256"]) |
|
return decoded |
|
except ExpiredSignatureError: |
|
return None |
|
|
|
def _speak_response(self, response: str): |
|
try: |
|
self.speech_engine.say(response) |
|
self.speech_engine.runAndWait() |
|
except Exception as e: |
|
logging.warning(f"Voice synth failed: {e}") |
|
|