import os import requests from datetime import datetime, date from fastapi import FastAPI, Request from fastapi.responses import JSONResponse, HTMLResponse from fastapi.middleware.cors import CORSMiddleware # ==================== AYARLAR ==================== app = FastAPI(title="ZenkaAI") app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) HF_TOKEN = os.getenv("HF_TOKEN", "") MODEL = "microsoft/DialoGPT-small" API_URL = f"https://api-inference.huggingface.co/models/{MODEL}" users_db = {} LIMIT = 30 SHOPIER = "https://shopier.com/42153760" # ==================== FONKSİYONLAR ==================== def get_user(email): email = email.lower().strip() today = date.today().isoformat() if email not in users_db: users_db[email] = {"count": 0, "date": today} user = users_db[email] if user["date"] != today: user["count"] = 0 user["date"] = today return user def get_ai_response(message): if not HF_TOKEN: return "🤖 ZenkaAI: Hoşgeldiniz! Token ayarlanmamış." try: response = requests.post( API_URL, headers={"Authorization": f"Bearer {HF_TOKEN}"}, json={"inputs": f"Soru: {message}\nCevap:"}, timeout=15 ) if response.status_code == 200: result = response.json() if isinstance(result, list) and result: text = result[0].get('generated_text', '') if text: return f"🤖 {text.split('Cevap:')[-1].strip()}" return "🤖 Size nasıl yardımcı olabilirim?" except: return "🤖 Teknik bir sorun oluştu." # ==================== ROTALAR ==================== @app.get("/") async def home(): html = """ ZenkaAI - Türkçe AI

🤖 ZenkaAI

✅ Sistem Çalışıyor
AI: Merhaba! Ben ZenkaAI. Size nasıl yardımcı olabilirim?

Günlük limit: 30 sorgu • Premium: """ + SHOPIER + """

""" return HTMLResponse(content=html) @app.get("/health") async def health(): return { "status": "ok", "service": "ZenkaAI", "time": datetime.now().isoformat(), "token": "var" if HF_TOKEN else "yok" } @app.post("/api/chat") async def chat(request: Request): try: data = await request.json() except: return JSONResponse({"error": "Geçersiz JSON"}, status_code=400) email = data.get("email", "").strip() message = data.get("message", "").strip() if not email or "@" not in email: return JSONResponse({"error": "Geçerli email gerekli"}, status_code=400) if not message: return JSONResponse({"error": "Mesaj boş olamaz"}, status_code=400) user = get_user(email) if user["count"] >= LIMIT: return JSONResponse({ "response": f"Günlük limit ({LIMIT}) doldu. Premium: {SHOPIER}", "status": "limit" }, status_code=429) response = get_ai_response(message) user["count"] += 1 return { "response": response, "status": "success", "remaining": LIMIT - user["count"], "used": user["count"] } # ==================== ÇALIŞTIRMA ==================== if __name__ == "__main__": import uvicorn print("🚀 ZenkaAI Başlatılıyor...") print(f"🔑 Token: {'✅ Var' if HF_TOKEN else '⚠️ Yok'}") uvicorn.run(app, host="0.0.0.0", port=7860)