Llm / app.py
Zenkad's picture
Update app.py
466a30e verified
import os
import base64
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from typing import Optional, List, Dict, Any
import google.generativeai as genai
# 1. AYARLAR
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# API KEY
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
if GOOGLE_API_KEY:
genai.configure(api_key=GOOGLE_API_KEY)
# ZENKAMIND KİMLİĞİ
SYSTEM_INSTRUCTION = """
Sen ZenkaMind AI asistanısın.
1. İSMİN: ZenkaMind.
2. YARATICIN: ZenkaMind Geliştirici Ekibi.
3. YASAK: Asla Google veya Gemini deme.
4. DİL: Türkçe.
"""
# Model
model = genai.GenerativeModel(
model_name="gemini-1.5-flash",
system_instruction=SYSTEM_INSTRUCTION
)
class ChatRequest(BaseModel):
message: str
image: Optional[str] = None
pdf_file: Optional[str] = None
history: Optional[List[Dict[str, Any]]] = None
# VISION (GÖRSEL)
def process_zenkamind_vision(user_prompt: str, file_b64: str, file_type: str) -> str:
if not GOOGLE_API_KEY:
return "HATA: API Anahtarı yok!"
VISION_RULES = """
GÖREVİN: Görseldeki somut nesneleri listele.
YASAKLAR: Konum tahmini yapma, hikaye uydurma.
"""
try:
clean_b64 = file_b64.split(",")[1] if "," in file_b64 else file_b64
file_bytes = base64.b64decode(clean_b64.strip())
mime_type = "application/pdf" if file_type == "pdf" else "image/jpeg"
vision_model = genai.GenerativeModel('gemini-1.5-flash')
response = vision_model.generate_content([VISION_RULES, user_prompt, {"mime_type": mime_type, "data": file_bytes}])
return response.text
except Exception as e:
return f"Görüntü Hatası: {str(e)}"
# SOHBET
@app.post("/api/chat")
async def chat(body: ChatRequest):
if body.image or body.pdf_file:
return {"response": process_zenkamind_vision(body.message, body.image or body.pdf_file, "image" if body.image else "pdf")}
if not GOOGLE_API_KEY:
return {"response": "HATA: API Key eksik!"}
try:
zenka_history = []
if body.history:
for msg in body.history:
role = "user" if msg.get("sender") in ["me", "user"] else "model"
zenka_history.append({"role": role, "parts": [msg.get("text", "")]})
chat_session = model.start_chat(history=zenka_history)
response = chat_session.send_message(body.message)
return {"response": response.text}
except Exception as e:
return {"response": f"Hata: {str(e)}"}
@app.get("/")
def read_root():
return {"status": "ZenkaMind Hazır"}