Kfkjfjd / app.py
Ffftdtd5dtft's picture
Rename main.py to app.py
e73408f verified
raw
history blame
5.27 kB
import os
import random
import gradio as gr
import wget
import whisper
from gpt4all import GPT4All
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 el chatbot
def initialize_chatbot(model_files):
model_path = random.choice(model_files) # Selecciona un modelo aleatorio
chatbot = GPT4All(model_path=model_path)
return chatbot, model_path
# 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 el chatbot con Gradio
def chatbot_response(user_input, chatbot, model_path, whisper_model=None, audio_path=None):
if user_input.lower() == "salir":
return "Conexión terminada."
# Verificar si el modelo es flux1-schnell y debe generar una imagen
if "flux1-schnell" in model_path.lower():
if "imagen" in user_input.lower():
image_path = "output_image.png"
chatbot.generate_image(user_input, output=image_path) # Asumiendo que el chatbot tiene este método
return image_path # Devuelve la ruta de la imagen generada
else:
return chatbot.chat(user_input)
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 chatbot.chat(user_input)
# Crear la interfaz de Gradio
def create_gradio_interface(chatbot, model_path, whisper_model):
def gradio_chat(user_input, audio_input=None):
response = chatbot_response(user_input, chatbot, model_path, 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 GPT4All 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
chatbot, model_path = initialize_chatbot(model_files)
whisper_model = initialize_whisper() # Inicializar el modelo de Whisper
iface = create_gradio_interface(chatbot, model_path, whisper_model)
iface.launch()
if __name__ == "__main__":
run_chatbot_with_gradio()