Spaces:
Sleeping
Sleeping
#!/usr/bin/env python3 | |
# -*- coding: utf-8 -*- | |
""" | |
Aplicação Local para LLMs voltados para Agentes | |
Roda modelos GGUF localmente usando llama-cpp-python | |
""" | |
from llama_cpp import Llama | |
import os | |
import sys | |
# Força encoding UTF-8 | |
if sys.stdout.encoding != 'utf-8': | |
sys.stdout.reconfigure(encoding='utf-8') | |
if sys.stdin.encoding != 'utf-8': | |
sys.stdin.reconfigure(encoding='utf-8') | |
class LocalLLMAgent: | |
def __init__(self, n_ctx: int = 2048): | |
""" | |
Inicializa o agente LLM local | |
Args: | |
n_ctx: Tamanho do contexto (tokens) | |
""" | |
#llama-2-7b.Q2_K.gguf | |
model_path = "./models/llama-2-7b-chat.Q4_K_M.gguf" | |
print(f"Carregando modelo: {model_path}") | |
self.llm = Llama( | |
model_path=model_path, | |
chat_format="llama-2", | |
verbose=False | |
) | |
print("Modelo carregado com sucesso!") | |
# Inicializa com prompt do sistema em português | |
self.messages = [ | |
{"role": "system", "content": "Responda sempre em português brasileiro de forma natural e conversacional."} | |
] | |
def chat(self, user_message: str, max_tokens: int = 100, temperature: float = 0.7) -> str: | |
""" | |
Gera resposta usando o formato de chat nativo | |
Args: | |
user_message: Mensagem do usuário | |
max_tokens: Máximo de tokens na resposta | |
temperature: Controle de criatividade (0.0 a 1.0) | |
Returns: | |
Resposta do modelo | |
""" | |
# Adiciona mensagem do usuário | |
self.messages.append({"role": "user", "content": user_message}) | |
# Gera resposta usando create_chat_completion conforme documentação | |
response = self.llm.create_chat_completion( | |
messages=self.messages, | |
max_tokens=max_tokens, | |
temperature=0.75 | |
) | |
assistant_message = response['choices'][0]['message']['content'] | |
# Adiciona resposta do assistente ao histórico | |
self.messages.append({"role": "assistant", "content": assistant_message}) | |
return assistant_message | |
def main(): | |
"""Função principal - interface de terminal""" | |
print("🧠 Aplicação Local para LLMs Agentes") | |
print("=" * 40) | |
try: | |
agent = LocalLLMAgent() | |
print("\n🧠 Agente LLM Local iniciado!") | |
print("Digite 'sair' para encerrar\n") | |
while True: | |
try: | |
user_input = input("Você: ").strip() | |
except UnicodeDecodeError: | |
user_input = input("Voce: ").strip() | |
if user_input.lower() in ['sair', 'exit', 'quit']: | |
print("Encerrando...") | |
break | |
if not user_input: | |
continue | |
print("Agente: ", end="", flush=True) | |
response = agent.chat(user_input) | |
print(response) | |
print() | |
except Exception as e: | |
import traceback | |
print(f"Erro: {e}") | |
print("Detalhes do erro:") | |
traceback.print_exc() | |
if __name__ == "__main__": | |
main() |