| 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 |
|
|
| |
| app = FastAPI() |
|
|
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=["*"], |
| allow_credentials=True, |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
|
|
| |
| GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY") |
| if GOOGLE_API_KEY: |
| genai.configure(api_key=GOOGLE_API_KEY) |
|
|
| |
| 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 = 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 |
|
|
| |
| 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)}" |
|
|
| |
| @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"} |
| |