Spaces:
Build error
Build error
import os | |
import random | |
import gradio as gr | |
import wget | |
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline | |
import whisper | |
from audiocraft.models import MusicGen | |
# URLs de los modelos a descargar | |
model_urls = [ | |
"https://huggingface.co/leejet/FLUX.1-schnell-gguf/resolve/main/flux1-schnell-q2_k.gguf", | |
"https://huggingface.co/aifoundry-org/FLUX.1-schnell-Quantized/resolve/main/flux1-schnell-Q2_K.gguf", | |
"https://huggingface.co/qwp4w3hyb/gemma-2-27b-it-iMat-GGUF/resolve/main/gemma-2-27b-it-imat-IQ1_S.gguf", | |
"https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q2_K.gguf", | |
"https://huggingface.co/WongBingbing/Meta-Llama-3.1-8B-Instruct-Q2_K-GGUF/resolve/main/meta-llama-3.1-8b-instruct-q2_k.gguf", | |
"https://huggingface.co/city96/FLUX.1-schnell-gguf/resolve/main/flux1-schnell-Q2_K.gguf", | |
"https://huggingface.co/mradermacher/L3-Super-Nova-RP-8B-i1-GGUF/resolve/main/L3-Super-Nova-RP-8B.i1-IQ1_M.gguf", | |
"https://huggingface.co/zhhan/Phi-3-mini-4k-instruct_gguf_derived/resolve/main/Phi-3-mini-4k-instruct-q4.gguf" | |
] | |
# Nombres de los archivos descargados | |
model_files = [ | |
"flux1-schnell-q2_k.gguf", | |
"flux1-schnell-Q2_K.gguf", | |
"gemma-2-27b-it-imat-IQ1_S.gguf", | |
"llama-2-7b-chat.Q2_K.gguf", | |
"meta-llama-3.1-8b-instruct-q2_k.gguf", | |
"flux1-schnell-Q2_K.gguf", | |
"L3-Super-Nova-RP-8B.i1-IQ1_M.gguf", | |
"Phi-3-mini-4k-instruct-q4.gguf" | |
] | |
# Funci贸n para descargar los modelos utilizando wget | |
def download_models(model_urls, model_files): | |
for url, file in zip(model_urls, model_files): | |
if not os.path.exists(file): | |
wget.download(url, out=file) | |
# Inicializar el modelo de transcripci贸n Whisper | |
def initialize_whisper(): | |
model = whisper.load_model("base") | |
return model | |
# Inicializa los modelos de transformers | |
def initialize_transformer_models(): | |
model_names = ["gpt2", "gpt2-medium", "gpt2-large"] # Puedes agregar m谩s modelos | |
models = [] | |
for model_name in model_names: | |
tokenizer = AutoTokenizer.from_pretrained(model_name) | |
model = AutoModelForCausalLM.from_pretrained(model_name) | |
models.append((model, tokenizer)) | |
return models | |
# Funci贸n para la generaci贸n de canciones con MusicGen | |
def generate_song(prompt, model_type="standard"): | |
if model_type == "medium": | |
model = MusicGen.get_pretrained("musicgen-medium") | |
else: | |
model = MusicGen.get_pretrained("melody") | |
model.set_generation_params(duration=30) # Duraci贸n de la canci贸n en segundos | |
wav_output = model.generate(prompt) | |
song_path = "generated_song.wav" | |
model.save_wav(wav_output, song_path) | |
return song_path | |
# Funci贸n para transcribir audio con Whisper | |
def transcribe_audio(audio_path, whisper_model): | |
transcription = whisper_model.transcribe(audio_path) | |
return transcription["text"] | |
# Funci贸n para unificar las respuestas de diferentes modelos | |
def unified_response(user_input, models): | |
responses = [] | |
for model, tokenizer in models: | |
inputs = tokenizer(user_input, return_tensors="pt") | |
outputs = model.generate(**inputs) | |
response = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
responses.append(response) | |
# Unificar respuestas (puedes aplicar m谩s l贸gica aqu铆, como seleccionar la m谩s com煤n) | |
final_response = random.choice(responses) | |
return final_response | |
# Funci贸n para el chatbot con Gradio | |
def chatbot_response(user_input, models, whisper_model=None, audio_path=None): | |
if user_input.lower() == "salir": | |
return "Conexi贸n terminada." | |
if "imagen" in user_input.lower(): | |
return "Funcionalidad de generaci贸n de im谩genes no soportada por estos modelos." | |
elif "canci贸n" in user_input.lower() or "musica" in user_input.lower(): | |
model_type = "medium" if "medium" in user_input.lower() else "standard" | |
song_path = generate_song(user_input, model_type=model_type) | |
return song_path # Devuelve la ruta de la canci贸n generada | |
elif audio_path: # Si se proporciona un archivo de audio, transcribirlo | |
return transcribe_audio(audio_path, whisper_model) | |
else: | |
return unified_response(user_input, models) | |
# Crear la interfaz de Gradio | |
def create_gradio_interface(models, whisper_model): | |
def gradio_chat(user_input, audio_input=None): | |
response = chatbot_response(user_input, models, whisper_model, audio_input) | |
if isinstance(response, str) and response.endswith(".png"): | |
return None, response, None, None # Devuelve None en el texto y la imagen, y ninguna canci贸n | |
elif isinstance(response, str) and response.endswith(".wav"): | |
return None, None, response, None # Devuelve None en el texto, ninguna imagen, y la canci贸n | |
else: | |
return response, None, None, None # Devuelve el texto, ninguna imagen, ninguna canci贸n, y ninguna transcripci贸n | |
# Crear interfaz con un input y cuatro outputs (texto, imagen, canci贸n, y transcripci贸n) | |
iface = gr.Interface(fn=gradio_chat, inputs=["text", "audio"], outputs=["text", "image", "audio", "text"], title="Chatbot con Im谩genes, Canciones, y Transcripci贸n de Audio") | |
return iface | |
# Ejecuta el chatbot con Gradio | |
def run_chatbot_with_gradio(): | |
download_models(model_urls, model_files) # Descargar los modelos si no est谩n presentes | |
models = initialize_transformer_models() # Inicializar modelos de Transformers | |
whisper_model = initialize_whisper() # Inicializar el modelo de Whisper | |
iface = create_gradio_interface(models, whisper_model) | |
iface.launch() | |
if __name__ == "__main__": | |
run_chatbot_with_gradio() | |