import os
import io
import base64
from flask import Flask, request, jsonify, Response
from PIL import Image
import google.generativeai as genai
import numpy as np
app = Flask(__name__)
# It is highly recommended to load API keys from environment variables
# instead of hardcoding them for security and flexibility.
# Example: API_KEY_INTERNAL = os.environ.get("GEMINI_API_KEY")
API_KEY_INTERNAL = "AIzaSyArKidc4o0MwbaCFKStlb2q2AwNg6Pnqns" # Replace with your actual Google Gemini API Key
html_template = """
EVA - Генератор постов
EVA
Генератор рекламных постов
"""
def generate_ai_content(image_data, language):
try:
genai.configure(api_key=API_KEY_INTERNAL)
except Exception as e:
raise ValueError(f"Не удалось настроить Google AI: {e}. Проверьте ключ API или подключение.")
if not image_data:
raise ValueError("Файл изображения пуст или не был передан.")
try:
image_stream = io.BytesIO(image_data)
image = Image.open(image_stream).convert('RGB')
except Exception as e:
raise ValueError(f"Не удалось обработать изображение. Убедитесь, что это действительный файл изображения. Ошибка: {e}")
base_prompt = "ты профессионал в сфере распознавание изображение на использование ИИ в его генерации или редактировании , проанализируй это изображение , выяви все нужные артефакты ИИ , выдай свой вердикт и скажи где именно использовалось ИИ."
lang_suffix = ""
if language == "Русский":
lang_suffix = " Пиши на русском языке."
elif language == "Кыргызский":
lang_suffix = " Пиши на кыргызском языке."
elif language == "Казахский":
lang_suffix = " Пиши на казахском языке."
elif language == "Узбекский":
lang_suffix = " Пиши на узбекском языке."
else:
raise ValueError("Выбран неподдерживаемый язык.")
final_prompt = f"{base_prompt}{lang_suffix}"
try:
model = genai.GenerativeModel('gemma-3-27b-it') # Using the latest flash model
response = model.generate_content([final_prompt, image])
if hasattr(response, 'text'):
return response.text
else:
# Fallback for models that might return content in parts, though .text is standard
if response.parts:
return "".join(part.text for part in response.parts if hasattr(part, 'text'))
else:
raise ValueError("Не удалось получить текст ответа от модели. Возможно, не было сгенерировано контента.")
except Exception as e:
error_message = str(e)
if "API key not valid" in error_message:
raise ValueError("Внутренняя ошибка конфигурации API. Проверьте ваш ключ Google Gemini API.")
elif "Billing account not found" in error_message or "CREDENTIALS_LOCATION_MISSING" in error_message:
raise ValueError("Проблема с биллингом аккаунта Google Cloud. Убедитесь, что биллинг включен.")
elif "Could not find model" in error_message:
raise ValueError(f"Модель 'gemini-1.5-flash-latest' не найдена или недоступна в вашем регионе.")
elif "resource has been exhausted" in error_message.lower():
raise ValueError("Квота запросов исчерпана. Пожалуйста, попробуйте позже.")
elif "content has been blocked" in error_message.lower() or (hasattr(response, 'prompt_feedback') and response.prompt_feedback.block_reason):
reason = response.prompt_feedback.block_reason if hasattr(response, 'prompt_feedback') else "неизвестна"
raise ValueError(f"Генерация контента заблокирована из-за политики безопасности (причина: {reason}). Попробуйте другое изображение или запрос.")
else:
raise ValueError(f"Ошибка при генерации контента: {e}")
@app.route('/')
def index():
return Response(html_template, mimetype='text/html')
@app.route('/generate', methods=['POST'])
def handle_generate():
if 'image' not in request.files:
return jsonify({"error": "Изображение не найдено в запросе."}), 400
if 'language' not in request.form:
return jsonify({"error": "Язык не найден в запросе."}), 400
image_file = request.files['image']
language = request.form['language']
image_data = image_file.read()
if not image_data:
return jsonify({"error": "Загруженный файл изображения пуст."}), 400
try:
result_text = generate_ai_content(image_data, language)
return jsonify({"text": result_text})
except ValueError as ve:
return jsonify({"error": str(ve)}), 400
except Exception as e:
return jsonify({"error": f"Внутренняя ошибка сервера: {e}"}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=False)