Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from huggingface_hub import InferenceClient | |
| import os | |
| # Initialize client with token from environment | |
| client = InferenceClient(token=os.environ.get("HF_TOKEN")) | |
| def chat(message, history): | |
| """ | |
| Cascading chat function with multiple AI models | |
| Args: | |
| message: Current user message (string) | |
| history: Previous conversation | |
| Returns: | |
| Combined response from cascaded models (streaming) | |
| """ | |
| # Build messages in chat format | |
| messages = [] | |
| # Add conversation history | |
| if history: | |
| for msg in history: | |
| if isinstance(msg, dict): | |
| messages.append(msg) | |
| elif isinstance(msg, (list, tuple)) and len(msg) == 2: | |
| messages.append({"role": "user", "content": msg[0]}) | |
| messages.append({"role": "assistant", "content": msg[1]}) | |
| # Add current message | |
| messages.append({"role": "user", "content": message}) | |
| try: | |
| # ===== MODELO 1: Llama 3.2 (Processamento Inicial) ===== | |
| yield "🔄 **[Modelo 1/3]** Processando com Llama 3.2...\n\n" | |
| response1 = client.chat_completion( | |
| model="meta-llama/Llama-3.2-3B-Instruct", | |
| messages=messages, | |
| max_tokens=300, | |
| stream=False | |
| ) | |
| first_response = response1.choices[0].message.content | |
| yield f"✅ **[Modelo 1: Llama 3.2 3B]**\n{first_response}\n\n---\n\n🔄 **[Modelo 2/3]** Refinando com Qwen 2.5...\n\n" | |
| # ===== MODELO 2: Qwen 2.5 (Refinamento/Análise) ===== | |
| # Criar prompt para o segundo modelo analisar/refinar a resposta | |
| refinement_prompt = f"""Analise e refine a seguinte resposta, tornando-a mais clara e completa: | |
| Pergunta original: {message} | |
| Resposta para refinar: | |
| {first_response} | |
| Forneça uma versão melhorada e mais detalhada:""" | |
| response2 = client.chat_completion( | |
| model="Qwen/Qwen2.5-72B-Instruct", | |
| messages=[{"role": "user", "content": refinement_prompt}], | |
| max_tokens=400, | |
| stream=False | |
| ) | |
| second_response = response2.choices[0].message.content | |
| yield f"✅ **[Modelo 1: Llama 3.2 3B]**\n{first_response}\n\n---\n\n✅ **[Modelo 2: Qwen 2.5 72B]**\n{second_response}\n\n---\n\n🔄 **[Modelo 3/3]** Gerando síntese final com Gemma 2...\n\n" | |
| # ===== MODELO 3: Gemma 2 (Síntese Final) ===== | |
| # Criar prompt para o terceiro modelo fazer síntese das respostas anteriores | |
| synthesis_prompt = f"""Com base nas duas respostas abaixo, crie uma síntese final clara e completa: | |
| Pergunta original: {message} | |
| Resposta 1 (Llama 3.2): | |
| {first_response} | |
| Resposta 2 (Qwen 2.5): | |
| {second_response} | |
| Crie uma resposta final que combine os melhores pontos de ambas, de forma clara e estruturada:""" | |
| response3 = client.chat_completion( | |
| model="google/gemma-2-9b-it", | |
| messages=[{"role": "user", "content": synthesis_prompt}], | |
| max_tokens=500, | |
| stream=False | |
| ) | |
| third_response = response3.choices[0].message.content | |
| # Resposta final combinada com os 3 modelos | |
| final_response = f"""✅ **[Modelo 1: Llama 3.2 3B Instruct]** | |
| {first_response} | |
| --- | |
| ✅ **[Modelo 2: Qwen 2.5 72B Instruct]** | |
| {second_response} | |
| --- | |
| ✅ **[Modelo 3: Gemma 2 9B IT]** | |
| {third_response} | |
| --- | |
| 💡 **Modelos utilizados na cascata:** | |
| 1. **meta-llama/Llama-3.2-3B-Instruct** - Resposta inicial rápida | |
| 2. **Qwen/Qwen2.5-72B-Instruct** - Refinamento e análise detalhada | |
| 3. **google/gemma-2-9b-it** - Síntese final combinando ambas respostas""" | |
| yield final_response | |
| except Exception as e: | |
| yield f"❌ Erro ao processar: {str(e)}" | |
| # Create the Gradio interface | |
| demo = gr.ChatInterface( | |
| fn=chat, | |
| title="🤖 Chatbot em Cascata - 3 Modelos de IA", | |
| description="""**Arquitetura em Cascata com 3 Modelos:** | |
| 1️⃣ **Llama 3.2 3B Instruct** (Meta) - Processa a pergunta inicial | |
| 2️⃣ **Qwen 2.5 72B Instruct** (Alibaba) - Refina e expande a resposta | |
| 3️⃣ **Gemma 2 9B IT** (Google) - Sintetiza uma resposta final combinada | |
| Você verá as respostas dos 3 modelos trabalhando em cascata!""", | |
| examples=[ | |
| "Explique o que é machine learning", | |
| "O que é inteligência artificial?", | |
| "Como funciona uma rede neural?" | |
| ] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |