llm-agent-api / main.py
caiocampos-hotmart
Add application file
244d22f
#!/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()