import os import gradio as gr from qdrant_client import QdrantClient from transformers import ClapModel, ClapProcessor from huggingface_hub import Repository # Récupérer le référentiel (repository) de votre espace Hugging Face repo = Repository() # Récupérer les secrets à partir des paramètres secrets qdrant_url = repo.config.get("QDRANT_URL") qdrant_key = repo.config.get("QDRANT_KEY") if not qdrant_url or not qdrant_key: raise ValueError("QDRANT_URL and QDRANT_KEY must be set as environment variables.") client = QdrantClient(qdrant_url, qdrant_key) # Chargement de la base de données Qdrant en local print("[INFO] Client créé...") # Chargement du modèle print("[INFO] Chargement du modèle...") model_name = "laion/clap-large-v2" model = ClapModel.from_pretrained(model_name) processor = ClapProcessor.from_pretrained(model_name) # Interface Gradio max_results = 10 def sound_search(query): text_inputs = processor(text=query, return_tensors="pt") text_embed = model.get_text_features(**text_inputs)[0] hits = client.search( collection_name="demo_spaces_db", query_vector=text_embed.tolist(), # Convertir le tenseur en liste limit=max_results, ) return [ gr.Audio( value=hit.payload['audio_path'], label=f"style: {hit.payload['style']} -- score: {hit.score}") for hit in hits ] with gr.Blocks() as demo: gr.Markdown( """# Base de données de recherche de sons """ ) inp = gr.Textbox(placeholder="Quel son recherchez-vous ?") out = [gr.Audio(label=f"{x}") for x in range(max_results)] # Nécessaire d'avoir des objets différents inp.change(fn=sound_search, inputs=inp, outputs=out) demo.launch()