#!/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()