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() |