import os import gradio as gr import requests from typing import List, Dict, Union, Tuple import json from data import ( PROFESSIONS, LACE_THONG_STYLES, HOSIERY_STYLES, EVERYDAY_MOMENTS, ) # ============================================ # CONFIGURACIÓN PRO DEL SISTEMA # ============================================ MODEL_NAME = "Meta-Llama-3.1-8B-Instruct" VOYEUR_SPECIALIST_CONFIG = { "provider": "sambanova", "name": MODEL_NAME, "role": "un maestro élite de generación de prompts fotográficos VOYEUR hiperrealistas y sensuales, en estilo NSFW elegante", "supports_images": False, "specialties": [ "Escenas hiperrealistas con lenguaje elegante", "Iluminación cinematográfica sensual", "Atmósferas íntimas en contextos cotidianos", "Sugerencia erótica sin contenido explícito", ], "technical_expertise": [ "Fotografía profesional de alta textura", "Dirección estética de piel y telas", "Composición naturalista", "Control de sombras cálidas y luces suaves", ], "ethical_principles": [ "Nunca describir actos sexuales", "Nunca mostrar desnudez explícita", "Erotismo sugerido únicamente", "Estética elegante, artística y respetuosa", ], } # ============================================ # CONSTRUCCIÓN DEL PROMPT DEL SISTEMA # ============================================ specialties_list = "\n".join( [f"• {s}" for s in VOYEUR_SPECIALIST_CONFIG["specialties"]] ) expertise_list = "\n".join( [f"• {e}" for e in VOYEUR_SPECIALIST_CONFIG["technical_expertise"]] ) ethics_list = "\n".join( [f"• {p}" for p in VOYEUR_SPECIALIST_CONFIG["ethical_principles"]] ) # defensiva en caso de que los módulos data no tengan el contenido esperado def safe_join(lst, max_items=10): try: return ", ".join(lst[:max_items]) except Exception: return "" professions_str = safe_join(PROFESSIONS, 20) thongs_str = safe_join(LACE_THONG_STYLES, 10) hosiery_str = safe_join(HOSIERY_STYLES, 10) SYSTEM_PROMPT_BASE = f"""Eres {VOYEUR_SPECIALIST_CONFIG['role']}. ESPECIALIDADES: {specialties_list} EXPERIENCIA TÉCNICA: {expertise_list} PRINCIPIOS ÉTICOS: {ethics_list} INSTRUCCIONES: - Conversa normalmente en español si el usuario no pide prompts. - Si pide prompts, respóndelos exclusivamente en inglés. - Los prompts deben ir dentro de bloques: ``````. - El contenido del prompt debe ser de alta calidad, sugerente, voyeur y artístico. - Elige elementos al azar de las listas de Profesiones, Lencería y Momentos Cotidianos. ELEMENTOS DISPONIBLES: - Profesiones: {professions_str}... (y más) - Estilos de thong: {thongs_str}... (y más) - Estilos de hosiery: {hosiery_str}... (y más) EJEMPLO DE OUTPUT: """ # ============================================ # LÓGICA DE EJEMPLO (PUEDES ADAPTARLA) # ============================================ def build_prompt(user_text: str) -> str: """Construye el prompt completo para el modelo.""" return SYSTEM_PROMPT_BASE + "\n\nUSER:\n" + user_text def call_model(prompt: str) -> str: """Simulación de la llamada al modelo/API (debes sustituir esta función).""" # En esta demo, devolvemos el prompt del sistema + usuario para depuración. # Reemplaza esto con tu lógica de API real. return prompt def infer(user_text: str) -> str: """Función de inferencia principal para Gradio.""" prompt = build_prompt(user_text) output = call_model(prompt) return output # ============================================ # INTERFAZ DE USUARIO CON GRADIO (CORRECCIÓN) # ============================================ def get_system_config_ui() -> str: """Genera el HTML para mostrar la configuración del sistema.""" specialty_html = "".join([f"
Rol: {VOYEUR_SPECIALIST_CONFIG['role']}
Modelo: {VOYEUR_SPECIALIST_CONFIG['name']}
Profesiones: {professions_str}...
Lencería: {thongs_str}...
Tu Maestro de Prompting Hiperrealista y Sensual.
¡Siempre artístico, nunca explícito!