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)