| from fastapi import FastAPI, Request |
| from fastapi.middleware.cors import CORSMiddleware |
| from fastapi.responses import JSONResponse |
| import requests, os |
| from datetime import datetime, date |
|
|
| |
| |
| |
| HF_MODEL = "google/mt5-small" |
| HF_API_URL = f"https://api-inference.huggingface.co/models/{HF_MODEL}" |
| HF_TOKEN = os.getenv("HF_TOKEN", "") |
|
|
| SHOPIER_LINK = "https://shopier.com/42153760" |
| FREE_DAILY_LIMIT = 30 |
|
|
| |
| |
| |
| app = FastAPI(title="ZenkaMind API") |
|
|
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=["*"], |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
|
|
| |
| |
| |
| USERS = {} |
|
|
| def get_user(email): |
| today = date.today().isoformat() |
| if email not in USERS: |
| USERS[email] = { |
| "count": 0, |
| "date": today, |
| "premium": False |
| } |
| if USERS[email]["date"] != today: |
| USERS[email]["count"] = 0 |
| USERS[email]["date"] = today |
| return USERS[email] |
|
|
| |
| |
| |
| def ask_ai(prompt: str): |
| headers = {} |
| if HF_TOKEN: |
| headers["Authorization"] = f"Bearer {HF_TOKEN}" |
|
|
| payload = { |
| "inputs": prompt, |
| "parameters": { |
| "max_length": 300, |
| "temperature": 0.6 |
| } |
| } |
|
|
| r = requests.post( |
| HF_API_URL, |
| headers=headers, |
| json=payload, |
| timeout=20 |
| ) |
|
|
| if r.status_code != 200: |
| return None |
|
|
| data = r.json() |
| if isinstance(data, list) and len(data) > 0: |
| return data[0].get("generated_text", "").strip() |
|
|
| return None |
|
|
| |
| |
| |
| def build_prompt(user_message: str): |
| return f""" |
| Sen ZenkaMind’sin. |
| |
| - Sadece Türkçe konuş. |
| - Net, açık ve kararlı cevaplar ver. |
| - Eğlence botu gibi davranma. |
| - Kullanıcıyı geliştirmeyi hedefle. |
| - Gereksiz uzatma yapma. |
| - Yanlış bir şey sorulursa açıkça yanlış olduğunu söyle. |
| |
| Kullanıcı: {user_message} |
| |
| ZenkaMind: |
| """ |
|
|
| |
| |
| |
| @app.get("/") |
| async def root(): |
| return {"status": "ZenkaMind API çalışıyor"} |
|
|
| @app.get("/health") |
| async def health(): |
| return { |
| "status": "ok", |
| "model": HF_MODEL, |
| "time": datetime.now().isoformat() |
| } |
|
|
| @app.post("/api/chat") |
| async def chat(req: Request): |
| data = await req.json() |
| email = data.get("email", "").lower() |
| message = data.get("message", "").strip() |
|
|
| if not email or "@" not in email: |
| return JSONResponse(400, {"error": "Email gerekli"}) |
|
|
| if not message: |
| return JSONResponse(400, {"error": "Mesaj boş"}) |
|
|
| user = get_user(email) |
|
|
| if not user["premium"] and user["count"] >= FREE_DAILY_LIMIT: |
| return { |
| "response": f"Günlük limit doldu.\n💎 Premium: {SHOPIER_LINK}", |
| "status": "limit" |
| } |
|
|
| prompt = build_prompt(message) |
| answer = ask_ai(prompt) |
|
|
| if not answer: |
| return { |
| "response": "Sunucu yoğun. Lütfen biraz sonra tekrar deneyin.", |
| "status": "error" |
| } |
|
|
| user["count"] += 1 |
|
|
| if not user["premium"]: |
| answer += f"\n\n💎 Premium ile limitsiz kullanım: {SHOPIER_LINK}" |
|
|
| return { |
| "response": answer, |
| "remaining": "unlimited" if user["premium"] else max(0, FREE_DAILY_LIMIT - user["count"]) |
| } |
|
|