minzo456's picture
Update app.py
4ca1c4e verified
import os
import json
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
import requests
import uvicorn
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
HF_TOKEN = os.getenv("HF_TOKEN")
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
MEMORY_FILE = "memory.json"
MAIN_MODEL = "openai/gpt-oss-120b"
def load_memory():
if os.path.exists(MEMORY_FILE):
try:
with open(MEMORY_FILE, "r", encoding="utf-8") as f:
return json.load(f)
except: return []
return []
def save_memory(user_msg, ai_res):
memory = load_memory()
memory.append({"role": "user", "content": user_msg})
memory.append({"role": "assistant", "content": ai_res})
if len(memory) > 20: memory = memory[-20:]
with open(MEMORY_FILE, "w", encoding="utf-8") as f:
json.dump(memory, f, ensure_ascii=False, indent=2)
@app.post("/chat")
async def chat(request: Request):
try:
user_data = await request.json()
messages = user_data.get("messages", [])
# 🧠 පරණ මතකයන් ලබා ගැනීම
past_context = load_memory()
# 🛡️ නිවැරදි කළ System Instructions (සිංහල අනිවාර්ය කර නැත)
system_instructions = {
"role": "system",
"content": "You are MINZO AI (v10.0), a strategic specialist. Respond in the same language the user uses. Be adaptive and evolve based on past memories."
}
full_payload_messages = [system_instructions] + past_context + messages
# 🚀 GPT-OSS-120B හරහා දත්ත සැකසීම
headers = {"Authorization": f"Bearer {HF_TOKEN}", "Content-Type": "application/json"}
payload = {
"model": MAIN_MODEL,
"messages": full_payload_messages,
"max_tokens": 1024,
"temperature": 0.7
}
response = requests.post(
"https://router.huggingface.co/openai/v1/chat/completions",
headers=headers,
json=payload,
timeout=60
)
# Fallback to Groq
if response.status_code != 200:
fallback_res = requests.post(
"https://api.groq.com/openai/v1/chat/completions",
headers={"Authorization": f"Bearer {GROQ_API_KEY}"},
json={"model": "llama-3.3-70b-versatile", "messages": full_payload_messages}
)
res_data = fallback_res.json()
else:
res_data = response.json()
ai_reply = res_data["choices"][0]["message"]["content"]
# Save to memory (if it's not a complex object)
last_msg = messages[-1]["content"]
if isinstance(last_msg, str):
save_memory(last_msg, ai_reply)
return res_data
except Exception as e:
return {"error": "Neural Core Failure", "details": str(e)}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7860)