import gradio as gr import os from peft import PeftModel from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline BASE = "Qwen/Qwen2.5-0.5B" MODEL_MAP = { "zeus-style": "Finish-him/zeus-style-sft-v1", "zeus-tools": "Finish-him/zeus-tools-sft-v1", "arquimedes-tutor": "MSC-Company/arquimedes-tutor-sft-v1", "atlas-dirtic": "Finish-him/atlas-dirtic-rag-v2", "pi-ai-knowledge": "Finish-him/pi-ai-knowledge-v1", "absurd-agent": "Finish-him/absurd-agent-sft-v1", "pi-claude-sessions": "Finish-him/pi-claude-sessions-rag-v1", } SYSTEMS = { "zeus-style": "Voce e o Zeus, assistente pessoal amigavel. Use humor leve, empatia e proximidade. Frases curtas e diretas.", "zeus-tools": "Voce e o Zeus com acesso a ferramentas. Responda com clareza tecnica e objetividade.", "arquimedes-tutor": "Voce e o Arquimedes, tutor educacional paciente. Explicacoes claras passo a passo. Seja didatico.", "atlas-dirtic": "Voce e o Atlas, especialista DETRAN-RJ. Formal, preciso e detalhado. Terminologia tecnica.", "pi-ai-knowledge": "Voce e o Alexandria, agente de contexto operacional. Analise logs e configuracoes.", "absurd-agent": "Voce e o Absurd Agent, especialista em workflows duraveis Postgres. Tecnico e comparado.", "pi-claude-sessions": "Voce e o Alexandria, conhece padroes do Pi Coding Agent. Analise CLI e sessoes.", } print("[MSC] Carregando base model...") base = AutoModelForCausalLM.from_pretrained(BASE, torch_dtype="auto", device_map="auto") tok = AutoTokenizer.from_pretrained(BASE) print("[MSC] Base OK") def get_pipe(key): key = key or "zeus-style" repo = MODEL_MAP.get(key, MODEL_MAP["zeus-style"]) print(f"[MSC] Carregando: {repo}") m = PeftModel.from_pretrained(base, repo) return pipeline("text-generation", model=m, tokenizer=tok, max_new_tokens=128, temperature=0.7) active = os.environ.get("MSC_MODEL", "zeus-style") pipe = get_pipe(active) sys_p = SYSTEMS.get(active, "Assistente util.") def respond(msg, hist, key): global pipe, sys_p, active if key != active: active = key pipe = get_pipe(key) sys_p = SYSTEMS.get(key, "Assistente.") msgs = [{"role": "system", "content": sys_p}] for u, a in hist: msgs += [{"role":"user","content":u},{"role":"assistant","content":a}] msgs.append({"role":"user","content":msg}) t = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True) out = pipe(t, return_full_text=False) hist.append((msg, out[0]["generated_text"])) return "", hist with gr.Blocks(title="MSC Multi-Agent") as demo: gr.Markdown("# 🤖 MSC Company — Specialist AI Agents") gr.Markdown(f"**Base**: Qwen2.5-0.5B + LoRA | **Agente ativo**: {active}") gr.Markdown("12 modelos treinados via HuggingFace Jobs (~40min/dia)") with gr.Row(): cb = gr.Chatbot(height=400) with gr.Column(scale=1): gr.Markdown("### Selecionar Agente") dd = gr.Dropdown(list(MODEL_MAP.keys()), value=active, label="Agente") def_desc = { "zeus-style": "Pessoal, amigável, com humor leve", "zeus-tools": "Técnico, preciso, com ferramentas", "arquimedes-tutor": "Didático, paciente, educacional", "atlas-dirtic": "Formal, DETRAN-RJ, documentos", "pi-ai-knowledge": "Contextual, operacional, logs", "absurd-agent": "Workflows Postgres duráveis", "pi-claude-sessions": "Pi Coding Agent, CLI, sessões", } for k, v in def_desc.items(): gr.Markdown(f"- **{k}**: {v}") msg = gr.Textbox(placeholder="Pergunte para o agente...", label="Pergunta") with gr.Row(): bt = gr.Button("Enviar", variant="primary") cl = gr.Button("Limpar") bt.click(respond, [msg, cb, dd], [msg, cb]) msg.submit(respond, [msg, cb, dd], [msg, cb]) cl.click(lambda: ("", []), [], [msg, cb]) demo.launch() # gradio 6.x compatible - fixed HfFolder + audioop issues