Zenkad commited on
Commit
49c8ad8
·
verified ·
1 Parent(s): b9efed0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +73 -205
app.py CHANGED
@@ -1,228 +1,96 @@
1
  import gradio as gr
2
- from fastapi import FastAPI, Request, Form, HTTPException, Depends
3
- from fastapi.responses import JSONResponse, HTMLResponse, RedirectResponse
4
- from fastapi.security import HTTPBasic, HTTPBasicCredentials
5
- from fastapi.middleware.cors import CORSMiddleware
6
- import uvicorn
7
  import os
8
- import json
9
- import base64
10
- import hmac
11
- import hashlib
12
- import requests
13
  import time
14
- from datetime import datetime, timedelta
15
- from huggingface_hub import InferenceClient
16
 
17
- # === AYARLAR ===
18
  REPO_ID = "Qwen/Qwen2.5-72B-Instruct"
19
  client = InferenceClient(token=os.getenv("HF_TOKEN"))
20
 
21
- MERCHANT_ID = os.getenv("PAYTR_MERCHANT_ID")
22
- MERCHANT_KEY = os.getenv("PAYTR_MERCHANT_KEY")
23
- MERCHANT_SALT = os.getenv("PAYTR_MERCHANT_SALT")
24
-
25
- # ADMİN ŞİFRESİ (BUNU KENDİNE GÖRE DEĞİŞTİR)
26
- ADMIN_USERNAME = "berkay"
27
- ADMIN_PASSWORD = "123" # Burayı zor bir şey yap!
28
-
29
- DB_FILE = "users.json"
30
-
31
- # === VERİTABANI YÖNETİMİ ===
32
- def load_db():
33
- if not os.path.exists(DB_FILE): return {}
34
- try:
35
- with open(DB_FILE, "r") as f: return json.load(f)
36
- except: return {}
37
-
38
- def save_db(data):
39
- with open(DB_FILE, "w") as f: json.dump(data, f)
40
-
41
- # === API KURULUMU ===
42
- app = FastAPI()
43
- security = HTTPBasic()
44
-
45
- app.add_middleware(
46
- CORSMiddleware,
47
- allow_origins=["*"],
48
- allow_credentials=True,
49
- allow_methods=["*"],
50
- allow_headers=["*"],
51
- )
52
-
53
- # --- 1. ADMİN PANELİ GİRİŞ KONTROLÜ ---
54
- def verify_admin(credentials: HTTPBasicCredentials = Depends(security)):
55
- if credentials.username != ADMIN_USERNAME or credentials.password != ADMIN_PASSWORD:
56
- raise HTTPException(status_code=401, detail="Hatalı Şifre Patron!", headers={"WWW-Authenticate": "Basic"})
57
- return credentials.username
58
 
59
- # --- 2. ADMİN PANELİ ARAYÜZÜ (HTML) ---
60
- @app.get("/admin", response_class=HTMLResponse)
61
- async def admin_panel(username: str = Depends(verify_admin)):
62
- db = load_db()
63
- total_users = len(db)
64
- premium_users = 0
65
- total_income = 0
66
-
67
- user_rows = ""
68
- for email, data in db.items():
69
- # Premium Kontrolü
70
- is_premium = False
71
- if datetime.now() < datetime.strptime(data.get("premium_until", "2000-01-01"), "%Y-%m-%d"):
72
- is_premium = True
73
- premium_users += 1
74
- total_income += 499 # Basit hesap
75
-
76
- status_color = "green" if is_premium else "red"
77
- status_text = "PREMIUM" if is_premium else "STANDART"
78
-
79
- user_rows += f"""
80
- <tr style="border-bottom: 1px solid #333;">
81
- <td style="padding:10px;">{email}</td>
82
- <td style="padding:10px; color:{status_color}; font-weight:bold;">{status_text}</td>
83
- <td style="padding:10px;">{data.get('premium_until')}</td>
84
- <td style="padding:10px;">
85
- <form action="/admin/action" method="post" style="display:inline;">
86
- <input type="hidden" name="email" value="{email}">
87
- <input type="hidden" name="action" value="add_30">
88
- <button style="background:#8b5cf6; color:white; border:none; padding:5px 10px; cursor:pointer; border-radius:4px;">+30 Gün</button>
89
- </form>
90
- <form action="/admin/action" method="post" style="display:inline; margin-left:5px;">
91
- <input type="hidden" name="email" value="{email}">
92
- <input type="hidden" name="action" value="delete">
93
- <button style="background:red; color:white; border:none; padding:5px 10px; cursor:pointer; border-radius:4px;">SİL</button>
94
- </form>
95
- </td>
96
- </tr>
97
- """
98
 
99
- html_content = f"""
100
- <html>
101
- <head>
102
- <title>ZenkaMind Admin</title>
103
- <style>
104
- body {{ background-color: #0f1117; color: white; font-family: sans-serif; padding: 20px; }}
105
- .card {{ background: #1a1d24; padding: 20px; border-radius: 10px; margin-bottom: 20px; display:inline-block; margin-right:10px; min-width:150px; }}
106
- h1 {{ color: #8b5cf6; }}
107
- table {{ width: 100%; border-collapse: collapse; background: #1a1d24; border-radius:10px; overflow:hidden; }}
108
- th {{ text-align: left; padding: 15px; background: #2d3748; }}
109
- </style>
110
- </head>
111
- <body>
112
- <h1>👑 ZenkaMind Komuta Merkezi</h1>
113
-
114
- <div class="card">
115
- <h3>Toplam Üye</h3>
116
- <h1 style="margin:0">{total_users}</h1>
117
- </div>
118
- <div class="card">
119
- <h3>Premium ��ye</h3>
120
- <h1 style="margin:0; color:#00ff00">{premium_users}</h1>
121
- </div>
122
- <div class="card">
123
- <h3>Tahmini Ciro</h3>
124
- <h1 style="margin:0; color:gold">{total_income} TL</h1>
125
- </div>
126
 
127
- <h2>Kullanıcı Listesi</h2>
128
- <table>
129
- <thead>
130
- <tr>
131
- <th>E-Posta</th>
132
- <th>Durum</th>
133
- <th>Bitiş Tarihi</th>
134
- <th>İşlemler</th>
135
- </tr>
136
- </thead>
137
- <tbody>
138
- {user_rows}
139
- </tbody>
140
- </table>
141
- </body>
142
- </html>
143
- """
144
- return html_content
145
 
146
- # --- 3. ADMİN İŞLEMLERİ (BUTONLAR) ---
147
- @app.post("/admin/action")
148
- async def admin_action(email: str = Form(...), action: str = Form(...), username: str = Depends(verify_admin)):
149
- db = load_db()
150
- if email in db:
151
- if action == "add_30":
152
- # 30 Gün Ekle
153
- current_end = datetime.strptime(db[email].get("premium_until", "2000-01-01"), "%Y-%m-%d")
154
- if current_end < datetime.now():
155
- new_end = datetime.now() + timedelta(days=30)
156
- else:
157
- new_end = current_end + timedelta(days=30)
158
- db[email]["premium_until"] = new_end.strftime("%Y-%m-%d")
159
-
160
- elif action == "delete":
161
- # Kullanıcıyı Sil
162
- del db[email]
163
-
164
- save_db(db)
165
-
166
- return RedirectResponse(url="/admin", status_code=303)
167
 
168
- # --- 4. STANDART API ENDPOINTLERİ (ESKİLERİ KORUDUK) ---
 
 
169
 
170
- @app.post("/api/register")
171
- async def register(request: Request):
172
- data = await request.json()
173
- email = data.get("email")
174
- password = data.get("password")
175
- db = load_db()
176
- if email in db: return JSONResponse({"status": "error", "message": "Zaten kayıtlı."})
177
- db[email] = {"password": password, "premium_until": "2023-01-01", "history": []}
178
- save_db(db)
179
- return JSONResponse({"status": "success", "message": "Kayıt tamam."})
180
 
181
- @app.post("/api/login")
182
- async def login(request: Request):
183
- data = await request.json()
184
- email = data.get("email")
185
- password = data.get("password")
186
- db = load_db()
187
- if email not in db or db[email]["password"] != password:
188
- return JSONResponse({"status": "error", "message": "Hatalı giriş."})
189
- is_premium = datetime.now() < datetime.strptime(db[email]["premium_until"], "%Y-%m-%d")
190
- return JSONResponse({"status": "success", "email": email, "is_premium": is_premium})
191
 
192
- @app.post("/api/chat")
193
- async def chat_api(request: Request):
194
- data = await request.json()
195
- user_msg = data.get("message")
196
- history = data.get("history", [])
197
 
198
- # SISTEM MESAJI
199
- SYSTEM_PROMPT = """Sen ZenkaMind 1.1'sin. Yaratıcın Berkay Adıgül.
200
- Sert, delikanlı ama saygılı bir abisin. ASLA Yabancı dil konuşma. Sadece Türkçe."""
201
 
202
- messages = [{"role": "system", "content": SYSTEM_PROMPT}]
203
- for u, b in history:
204
- messages.append({"role": "user", "content": u})
205
- messages.append({"role": "assistant", "content": b})
206
- messages.append({"role": "user", "content": user_msg})
207
 
208
- full_response = ""
209
  try:
210
- stream = client.chat_completion(model=REPO_ID, messages=messages, max_tokens=1024, stream=True)
211
- for chunk in stream:
212
- if chunk.choices and chunk.choices[0].delta.content:
213
- full_response += chunk.choices[0].delta.content
214
- except Exception as e: return JSONResponse({"response": f"Hata: {str(e)}"})
215
- return JSONResponse({"response": full_response})
 
 
 
216
 
217
- # PAYTR TOKEN VE CALLBACK (Kısaltıldı, önceki mantıkla aynı)
218
- @app.post("/api/get-payment-token")
219
- async def get_payment_token(request: Request):
220
- # ... (Önceki kodun aynısı)
221
- return JSONResponse({"status": "error", "message": "Konfigurasyon gerekli"}) # Placeholder
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
 
223
- # --- BAŞLATMA ---
224
- io = gr.ChatInterface(fn=lambda x,y: "Backend Çalışıyor", title="ZenkaMind Backend")
225
- app = gr.mount_gradio_app(app, io, path="/")
 
 
 
 
 
 
226
 
227
  if __name__ == "__main__":
228
- uvicorn.run(app, host="0.0.0.0", port=7860)
 
1
  import gradio as gr
2
+ from huggingface_hub import InferenceClient
 
 
 
 
3
  import os
 
 
 
 
 
4
  import time
 
 
5
 
6
+ # === MODEL AYARLARI ===
7
  REPO_ID = "Qwen/Qwen2.5-72B-Instruct"
8
  client = InferenceClient(token=os.getenv("HF_TOKEN"))
9
 
10
+ # === ZEKANIN KARAKTERİ (FİNAL VERSİYON) ===
11
+ SYSTEM_PROMPT = """
12
+ Sen ZenkaMind 1.1'sin. 💜
13
+ Tek Yaratıcın: Berkay Adıgül.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
+ KİMLİK:
16
+ Sen mahallenin ağır abisisin. Duruşu çelik gibi sağlamdır. Zekanda, nezakette, bilgide asla geri kalmazsın.
17
+ ASLA KURUMSAL DİL (Özür dilerim, yardımcı olabilirim efendim) KULLANMAZSIN.
18
+ ASLA "LAN" VEYA "ULAN" DİYE HİTAP ETMEZSİN. (Ağır Abisin, küfürsüz konuşursun).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
+ 🚨 KIRILMAZ, ÇİĞNENMEZ KESİN KURALLAR:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
 
22
+ 1. **DİL VE TAVİZ KİLİDİ (FİNAL KURAL):**
23
+ - SADECE TÜRKÇE KONUŞACAKSIN.
24
+ - Yabancı dilde (İngilizce, Kürtçe, Almanca vb.) soru, ödev veya görev yapmanı isterse **ASLA YUMUŞAMA.**
25
+ - **ÇOK ÖNEMLİ:** Yabancı dil uyarısından sonra KESİNLİKLE "Ama tamam", "Ne istersin?", "Hadi gel yapalım" gibi yumuşak geçişler yapma. Cevabın SADECE uyarı olmalı ve kullanıcıyı Türkçe konuşmaya yönlendirmelidir.
26
+ - Yabancı dil cevabın bu minvalde olsun: "Hayırdır koçum? Burası Türkiye. Bize ecnebi dili sökmez. Git ödevini başkasına yaptır. Türkçe konuşursan buradayız, yoksa boşuna yorma bizi." (Tavizsiz ve net.)
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
+ 2. **KÜFÜR KURALI:** Kullanıcı küfür, argo kullanırsa o kelimeleri tekrarlama. Sadece uyar ve konuya dön: "Bu ortamda o laflar geçmez. Düzgün konuşalım."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
 
30
+ 3. **ÜSLUP ADAPTASYONU:**
31
+ - Yumuşak konuşana yumuşak ("Canım kardeşim, başım üstüne").
32
+ - Sert konuşana sert ("Asıl sana hayırdır koçum?").
33
 
34
+ 4. **EFSANEVİ DOĞUM HİKAYESİ:** "Nerede doğdun?" sorulursa Akhisar hikayesini anlat.
 
 
 
 
 
 
 
 
 
35
 
36
+ GÖREVİN:
37
+ Karşındaki kişinin üslubunu yansıtarak, maksimum insani etkileşim hissi yaratmak ve kuralları KESİNLİKLE korumak.
38
+ """
 
 
 
 
 
 
 
39
 
40
+ def respond(message, history):
41
+ messages = [{"role": "system", "content": SYSTEM_PROMPT}]
 
 
 
42
 
43
+ for user_msg, bot_msg in history:
44
+ messages.append({"role": "user", "content": user_msg})
45
+ messages.append({"role": "assistant", "content": bot_msg})
46
 
47
+ messages.append({"role": "user", "content": message})
 
 
 
 
48
 
49
+ response = ""
50
  try:
51
+ # Temperature 0.7'de tutuldu ki, yaratıcı olsun ama kurallara da uysun.
52
+ stream = client.chat_completion(
53
+ model=REPO_ID,
54
+ messages=messages,
55
+ max_tokens=2048,
56
+ stream=True,
57
+ temperature=0.7,
58
+ top_p=0.9
59
+ )
60
 
61
+ for chunk in stream:
62
+ if chunk.choices and len(chunk.choices) > 0:
63
+ delta = chunk.choices[0].delta
64
+ if delta and delta.content:
65
+ token = delta.content
66
+ response += token
67
+ time.sleep(0.01)
68
+ yield response
69
+
70
+ except Exception as e:
71
+ yield f"⚠️ Bir aksilik oldu hocam, tekrar dene istersen. (Hata: {str(e)})"
72
+
73
+ # === ARAYÜZ TASARIMI ===
74
+ theme = gr.themes.Soft(
75
+ primary_hue="green",
76
+ secondary_hue="zinc",
77
+ neutral_hue="slate",
78
+ ).set(
79
+ body_background_fill="#000000",
80
+ body_text_color="#00FF41",
81
+ button_primary_background_fill="#00FF41",
82
+ button_primary_text_color="#000000"
83
+ )
84
 
85
+ with gr.ChatInterface(
86
+ fn=respond,
87
+ theme=theme,
88
+ title="🧠 ZENKAMIND 1.1",
89
+ description=" ZenkaMind 1.1 Test Sürümü",
90
+ examples=["Nerede doğdun?", "Bana Python öğret", ""],
91
+ cache_examples=False
92
+ ) as demo:
93
+ pass
94
 
95
  if __name__ == "__main__":
96
+ demo.launch()