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"}