Spaces:
Sleeping
Sleeping
| 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) | |
| 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) |