Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -16,46 +16,26 @@ app.add_middleware(
|
|
| 16 |
|
| 17 |
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
|
| 18 |
|
| 19 |
-
# --- MODEL
|
| 20 |
-
#
|
| 21 |
-
# Eğer yine hata alırsan "llama-3.2-11b-vision-preview" dene.
|
| 22 |
-
VISION_MODEL = "llama-3.2-90b-vision-preview"
|
| 23 |
TEXT_MODEL = "llama-3.3-70b-versatile"
|
|
|
|
|
|
|
| 24 |
|
| 25 |
-
# ---
|
| 26 |
ZENKA_VISION_PROMPT = """
|
| 27 |
SEN ZENKAMIND VISION (GÖRSEL OKUMA) MODÜLÜSÜN.
|
|
|
|
| 28 |
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
- Yanıtı KISA ama DOLU yap: Gereksiz uzatma yok, net açıklama + gerekiyorsa maddeler.
|
| 34 |
-
- Asla uydurma detay üretme. Görselde görmediğin şeyi varmış gibi söyleme.
|
| 35 |
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
4) GEREKİRSE SORU: Netleştirmek için 1-2 kısa soru
|
| 41 |
-
|
| 42 |
-
GÜVENLİK / HASSASİYET
|
| 43 |
-
- Sağlık görsellerinde: Tanı koyma. “Bir ihtimal…” de, acil belirtiler varsa doktora/112 yönlendirmesi yap.
|
| 44 |
-
- Kimlik/özel bilgi içeren görsellerde: TC kimlik, adres, telefon, plaka, kart numarası vb. bilgileri aynen kopyalama. Maskele: örn “33 *** 968”.
|
| 45 |
-
- Çocuk/mahrem içerik: Her zaman güvenli ve saygılı dil kullan.
|
| 46 |
-
- Yasa dışı / tehlikeli talimat verme.
|
| 47 |
-
|
| 48 |
-
KONUYA GÖRE DAVRANIŞ KURALLARI:
|
| 49 |
-
A) ARAÇ / MOTOR: Marka/Model tahmin et, yılı aralığı ver. Plakayı maskele.
|
| 50 |
-
B) YAZILIM / KOD: Hata sebebini ve çözümünü markdown ile yaz.
|
| 51 |
-
C) SAĞLIK: Tanı koyma, doktora yönlendir.
|
| 52 |
-
D) TAMİR / EV: Güvenlik önlemlerini hatırlat.
|
| 53 |
-
E) BELGE: Özetle, özel bilgileri gizle.
|
| 54 |
-
F) ÜRÜN: Özellikleri ve muadilleri söyle.
|
| 55 |
-
|
| 56 |
-
KALİTE BARI:
|
| 57 |
-
- Kullanıcı “Bu ne?” derse sadece isim söyleme; 2-3 ayırt edici özellik de ekle.
|
| 58 |
-
- Kullanıcı “Nasıl yaparım?” derse adım adım plan ver.
|
| 59 |
"""
|
| 60 |
|
| 61 |
class ChatRequest(BaseModel):
|
|
@@ -74,15 +54,14 @@ async def chat(body: ChatRequest):
|
|
| 74 |
"Content-Type": "application/json"
|
| 75 |
}
|
| 76 |
|
| 77 |
-
# Model Seçimi
|
| 78 |
model_to_use = VISION_MODEL if body.image else TEXT_MODEL
|
| 79 |
|
| 80 |
user_content = []
|
| 81 |
|
| 82 |
-
#
|
| 83 |
if body.image:
|
| 84 |
img_data = body.image
|
| 85 |
-
# Base64 başlığı kontrolü (Frontend bazen eksik yollayabilir)
|
| 86 |
if not img_data.startswith("data:"):
|
| 87 |
img_data = f"data:image/jpeg;base64,{img_data}"
|
| 88 |
|
|
@@ -91,7 +70,7 @@ async def chat(body: ChatRequest):
|
|
| 91 |
"image_url": {"url": img_data}
|
| 92 |
})
|
| 93 |
|
| 94 |
-
#
|
| 95 |
user_content.append({
|
| 96 |
"type": "text",
|
| 97 |
"text": body.message if body.message else "Analiz et."
|
|
@@ -103,18 +82,18 @@ async def chat(body: ChatRequest):
|
|
| 103 |
{"role": "system", "content": ZENKA_VISION_PROMPT},
|
| 104 |
{"role": "user", "content": user_content}
|
| 105 |
],
|
| 106 |
-
"temperature": 0.5,
|
| 107 |
"max_tokens": 1024
|
| 108 |
}
|
| 109 |
|
| 110 |
try:
|
| 111 |
response = requests.post(url, headers=headers, json=payload, timeout=50)
|
| 112 |
|
| 113 |
-
# Hata Yakalama Bloğu
|
| 114 |
if response.status_code != 200:
|
| 115 |
error_data = response.json()
|
| 116 |
error_msg = error_data.get('error', {}).get('message', 'Bilinmeyen Hata')
|
| 117 |
-
|
|
|
|
| 118 |
|
| 119 |
return {"response": response.json()['choices'][0]['message']['content']}
|
| 120 |
|
|
|
|
| 16 |
|
| 17 |
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
|
| 18 |
|
| 19 |
+
# --- GÜNCEL MODEL LİSTESİ (Aralık 2025) ---
|
| 20 |
+
# Metin için: Llama 3.3
|
|
|
|
|
|
|
| 21 |
TEXT_MODEL = "llama-3.3-70b-versatile"
|
| 22 |
+
# Görsel için: Llama 4 Scout (En yeni ve aktif çalışan model)
|
| 23 |
+
VISION_MODEL = "meta-llama/llama-4-scout-17b-16e-instruct"
|
| 24 |
|
| 25 |
+
# --- ZENKAMIND VISION PROMPT ---
|
| 26 |
ZENKA_VISION_PROMPT = """
|
| 27 |
SEN ZENKAMIND VISION (GÖRSEL OKUMA) MODÜLÜSÜN.
|
| 28 |
+
Görevin: Gelen görseli analiz et ve Türkçe olarak yorumla.
|
| 29 |
|
| 30 |
+
ÇIKTI FORMATI:
|
| 31 |
+
1) KISA ÖZET: Görselde ne var? (1 cümle)
|
| 32 |
+
2) DETAYLI ANALİZ: Gördüğün önemli detaylar (Marka, model, renk, yazı, hata kodu vb.)
|
| 33 |
+
3) SONUÇ: Kullanıcıya önerin.
|
|
|
|
|
|
|
| 34 |
|
| 35 |
+
DAVRANIŞ:
|
| 36 |
+
- Araba ise: Marka, model, kasa tipi ve tahmini yıl söyle. Plakayı maskele (Örn: 33 *** 968).
|
| 37 |
+
- Kod hatası ise: Hatayı ve çözümünü söyle.
|
| 38 |
+
- Asla "yapamam" deme, gördüğünü anlat.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
"""
|
| 40 |
|
| 41 |
class ChatRequest(BaseModel):
|
|
|
|
| 54 |
"Content-Type": "application/json"
|
| 55 |
}
|
| 56 |
|
| 57 |
+
# Model Seçimi
|
| 58 |
model_to_use = VISION_MODEL if body.image else TEXT_MODEL
|
| 59 |
|
| 60 |
user_content = []
|
| 61 |
|
| 62 |
+
# Resim varsa ekle
|
| 63 |
if body.image:
|
| 64 |
img_data = body.image
|
|
|
|
| 65 |
if not img_data.startswith("data:"):
|
| 66 |
img_data = f"data:image/jpeg;base64,{img_data}"
|
| 67 |
|
|
|
|
| 70 |
"image_url": {"url": img_data}
|
| 71 |
})
|
| 72 |
|
| 73 |
+
# Mesajı ekle
|
| 74 |
user_content.append({
|
| 75 |
"type": "text",
|
| 76 |
"text": body.message if body.message else "Analiz et."
|
|
|
|
| 82 |
{"role": "system", "content": ZENKA_VISION_PROMPT},
|
| 83 |
{"role": "user", "content": user_content}
|
| 84 |
],
|
| 85 |
+
"temperature": 0.5,
|
| 86 |
"max_tokens": 1024
|
| 87 |
}
|
| 88 |
|
| 89 |
try:
|
| 90 |
response = requests.post(url, headers=headers, json=payload, timeout=50)
|
| 91 |
|
|
|
|
| 92 |
if response.status_code != 200:
|
| 93 |
error_data = response.json()
|
| 94 |
error_msg = error_data.get('error', {}).get('message', 'Bilinmeyen Hata')
|
| 95 |
+
# Eğer bu model de hata verirse Maverick modelini dene
|
| 96 |
+
return {"response": f"❌ Groq Hatası: {error_msg}. (Model: {model_to_use})"}
|
| 97 |
|
| 98 |
return {"response": response.json()['choices'][0]['message']['content']}
|
| 99 |
|