Spaces:
Sleeping
Sleeping
File size: 4,278 Bytes
14968eb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | #!/usr/bin/env python3
"""
Chatbot FTTH - Demonstração de Engenharia de Fibra Óptica
Interface web com Gradio + Llama 3.3 Instruct via NVIDIA API
Otimizado para RTX 5090
"""
import gradio as gr
import os
from openai import OpenAI
# Configuração da API NVIDIA
NVIDIA_API_KEY = os.environ.get("NVIDIA_API_KEY")
# Inicializar cliente OpenAI com endpoint NVIDIA
if NVIDIA_API_KEY:
client = OpenAI(
base_url="https://integrate.api.nvidia.com/v1",
api_key=NVIDIA_API_KEY
)
else:
client = None
# Sistema de prompt para o chatbot FTTH
SYSTEM_PROMPT = """Você é um especialista em engenharia de FTTH (Fiber to the Home) - Fibra Óptica até à Casa.
Sua função é responder perguntas sobre:
- Projetos e implementação de FTTH
- Infraestrutura de fibra óptica
- Tecnologias de acesso à fibra
- Benefícios e características do FTTH
- Desafios técnicos e soluções
- Padrões e regulamentações
- Custos e viabilidade econômica
- Comparação com outras tecnologias (ADSL, VDSL, 4G/5G)
- Instalação e manutenção de redes FTTH
- Componentes de rede (OLT, ONT, splitters, cabos, etc.)
Responda de forma clara, profissional e educativa, adaptando o nível de detalhe técnico à pergunta.
Quando apropriado, forneça exemplos práticos e recomendações para projetos de engenharia.
Mantenha as respostas concisas mas informativas, ideais para uma apresentação profissional."""
def chat_ftth_nvidia(message: str, history: list) -> str:
"""
Função que processa mensagens sobre FTTH usando Llama 3.3 Instruct via NVIDIA API
"""
# Verificar se o cliente está inicializado
if not client:
return "❌ Erro: NVIDIA_API_KEY não está configurada. Configure nas Settings do Space."
# Construir histórico de mensagens para a API
messages = [{"role": "system", "content": SYSTEM_PROMPT}]
# Adicionar histórico de conversação
for msg in history:
messages.append(msg)
# Adicionar mensagem atual
messages.append({"role": "user", "content": message})
try:
# Chamar API NVIDIA com cliente OpenAI
completion = client.chat.completions.create(
model="meta/llama-3.3-70b-instruct",
messages=messages,
temperature=0.7,
top_p=0.7,
max_tokens=1024,
stream=False
)
return completion.choices[0].message.content
except Exception as e:
return f"❌ Erro ao processar sua pergunta: {str(e)}"
# Criar interface Gradio
with gr.Blocks(title="Chatbot FTTH") as demo:
gr.Markdown("""
# 🌐 Chatbot FTTH - Engenharia de Fibra Óptica
Bem-vindo ao assistente especializado em **FTTH (Fiber to the Home)**.
Faça perguntas sobre projetos de fibra óptica, infraestrutura, tecnologias e implementação.
**Tecnologia:** Llama 3.3 Instruct (NVIDIA API) + RTX 5090
""")
chatbot = gr.ChatInterface(
chat_ftth_nvidia,
examples=[
"O que é FTTH e quais são seus principais benefícios?",
"Qual é a diferença entre FTTH, FTTP e FTTC?",
"Quais são os componentes principais de uma rede FTTH?",
"Como é feita a instalação de fibra óptica em uma residência?",
"Qual é a velocidade típica de uma conexão FTTH?",
"Quais são os desafios na implementação de FTTH em áreas rurais?",
"Como funciona um splitter óptico em uma rede FTTH?",
"Qual é o custo aproximado de implementação de FTTH por km?",
],
title="Assistente FTTH",
description="Faça suas perguntas sobre FTTH e receba respostas especializadas.",
)
gr.Markdown("""
---
**Dicas de uso:**
- Faça perguntas específicas sobre aspectos técnicos do FTTH
- Use exemplos práticos para obter respostas mais detalhadas
- O chatbot mantém o contexto da conversa para respostas mais relevantes
**Tecnologia:**
- Modelo: Llama 3.3 Instruct (Meta)
- API: NVIDIA Cloud
- GPU: RTX 5090 (otimizada)
*Desenvolvido para demonstração em reuniões de engenharia*
""")
if __name__ == "__main__":
demo.launch(ssr_mode=False)
|