From ee398ff8a0bef8018986f465484b719b359a8b3b Mon Sep 17 00:00:00 2001 From: marco Date: Thu, 3 Sep 2026 15:01:16 -0300 Subject: [PATCH] refactor(config): simplify AI provider configuration with provider selector Remove StepFun provider support and consolidate AI configuration under DEFAULT_AI_PROVIDER variable supporting openrouter, llamacpp, and openai. Update .env, README.md, and main.py to use the new provider-based structure. Add "Qualidade Total na Empresa" to topics list. --- .env | 26 ++++---------- README.md | 100 +++++++++++------------------------------------------- main.py | 26 +++++++------- 3 files changed, 39 insertions(+), 113 deletions(-) diff --git a/.env b/.env index cf77c43..bd96a17 100644 --- a/.env +++ b/.env @@ -9,30 +9,19 @@ DAYS_OF_WEEK=1,2,3,4,5,6,7 INTERVAL_MINUTES=120 # Assuntos (20 assuntos separados por vírgula) -TOPICS=Marketing,Negócios,Pensamentos de Empresários Famosos,Lei da Atração,Lei do Triunfo (Autor: Napoleon Hill),Administração de Pequenos Negócios,CRM,Vendas,Compras para Empresas,Planejamento Estratégico Empresarial,Recursos Humanos,A Arte de Fazer Amigos,Inteligência Emocional,Produtividade,Liderança,Inovação,Experiência do Cliente,Networking,Marca Pessoal,Storytelling,As 36 Estratégias dos Chineses (Autores: Wee Chow Hou & Lan Luh Luh),Como garantir três vendas extras por dia (Autor: Evaldo Costa), 100 Segredos das Pessoas de Sucesso (Autor: David Niven),Como Fazer Amigos e Influenciar Pessoas(Autor: Dale Carnegie),Economia,Investimentos,Renda Passiva,A Arte de Vender(Autor: Paul W. Ivey),Educação Financeira,Planejamento Financeiro Pessoal,Planejamento Financeiro Empresarial,Fluxo de Caixa,Controle Financeiro Empresarial +TOPICS=Marketing,Negócios,Pensamentos de Empresários Famosos,Lei da Atração,Lei do Triunfo (Autor: Napoleon Hill),Administração de Pequenos Negócios,CRM,Vendas,Compras para Empresas,Planejamento Estratégico Empresarial,Recursos Humanos,A Arte de Fazer Amigos,Inteligência Emocional,Produtividade,Liderança,Inovação,Experiência do Cliente,Networking,Marca Pessoal,Storytelling,As 36 Estratégias dos Chineses (Autores: Wee Chow Hou & Lan Luh Luh),Como garantir três vendas extras por dia (Autor: Evaldo Costa), 100 Segredos das Pessoas de Sucesso (Autor: David Niven),Como Fazer Amigos e Influenciar Pessoas(Autor: Dale Carnegie),Economia,Investimentos,Renda Passiva,A Arte de Vender(Autor: Paul W. Ivey),Educação Financeira,Planejamento Financeiro Pessoal,Planejamento Financeiro Empresarial,Fluxo de Caixa,Controle Financeiro Empresarial,Qualidade Total na Empresa -# Modelo de IA padrão -# DEFAULT_AI_MODEL=inclusionai/ling-3.0-flash -#DEFAULT_AI_MODEL=minimax/minimax-m3:free -DEFAULT_AI_MODEL=step-3.5-flash +# Provedor de IA padrão (openrouter | llamacpp | openai) +DEFAULT_AI_PROVIDER=openrouter -# OPENAI_API_KEY=sua_api_key_openai_aqui +# Modelo de IA padrão (depende do provedor escolhido) +DEFAULT_AI_MODEL=minimax/minimax-m3:free -# Provedor OpenRouter +# Chave de API do provedor escolhido OPENROUTER_API_KEY=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 -#OPENROUTER_MODEL=poolside/laguna-xs-2.1:free -#OPENROUTER_MODEL=inclusionai/ling-3.0-flash -OPENROUTER_MODEL=minimax/minimax-m3:free - -# Provedor StepFun -STEPFUN_BASE_URL=https://api.stepfun.ai/v1 -STEPFUN_API_KEY=4RJZ4kHTbMNqWNn7IgahHF1kzcTi8zzUMv7YLQqjChCH5DftV2bSbGif1HllC44nv -STEPFUN_MODEL=step-3.5-flash - -# Provedor LlamaCPP local LLAMACPP_BASE_URL=http://localhost:8080/v1/ LLAMACPP_API_KEY=not-needed -LLAMACPP_MODEL=qwen2.5-coder-3b-instruct-q4_k_m.gguf +# OPENAI_API_KEY=sua_api_key_openai_aqui # Configuração do Telegram TELEGRAM_BOT_TOKEN=8903949501:AAGXMQOS1q3z4_w1tUhBZZbYCZ8F0fkbi7E @@ -41,4 +30,3 @@ TELEGRAM_CHAT_ID=-1003832867367 # Idioma LANGUAGE=pt-BR MIN_LINES=20 - diff --git a/README.md b/README.md index 8349aee..56a803e 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,12 @@ Sistema automatizado de envio de insights via Telegram, utilizando inteligência - Funciona de segunda a domingo (dias configuráveis). - Intervalo entre envios configurável. - Seleção aleatória de tópicos cadastrados. -- Suporte a múltiplos provedores de IA: OpenAI, OpenRouter, StepFun ou LlamaCPP local. +- Suporte a múltiplos provedores de IA: OpenRouter, LlamaCPP local ou OpenAI. ## Pré-requisitos - Python 3.10 ou superior -- Chave de API de IA: OpenAI, OpenRouter, StepFun ou LlamaCPP local +- Chave de API de IA: OpenRouter, LlamaCPP local ou OpenAI - Bot criado no Telegram via BotFather - Sistema Linux (Debian 12 recomendado) @@ -29,26 +29,23 @@ TELEGRAM_CHAT_ID=seu_chat_id INTERVAL_MINUTES=60 START_HOUR=7 END_HOUR=22 -TOPICS=Marketing,Negócios,Lei da Atração,... +TOPICS=Marketing,Negócios,... -# Provedor preferencial: OpenRouter +# Provedor de IA (openrouter | llamacpp | openai) +DEFAULT_AI_PROVIDER=openrouter + +# Modelo de IA (depende do provedor escolhido) +DEFAULT_AI_MODEL=minimax/minimax-m3:free + +# Chave de API do provedor escolhido OPENROUTER_API_KEY=sua_chave_openrouter -OPENROUTER_MODEL=inclusionai/ling-3.0-tiny:free - -# Alternativa: StepFun -STEPFUN_BASE_URL=https://api.stepfun.ai/step_plan/v1/ -STEPFUN_API_KEY=sua_chave_stepfun -STEPFUN_MODEL=step-3.7-flash - -# Alternativa: LlamaCPP local -LLAMACPP_BASE_URL=http://localhost:8080/v1/ -LLAMACPP_API_KEY=not-needed -LLAMACPP_MODEL=qwen2.5-coder-3b-instruct-q4_k_m.gguf +# LLAMACPP_API_KEY=not-needed # se usar LlamaCPP +# OPENAI_API_KEY=sua_chave_openai # se usar OpenAI direto ``` 2. **Crie um bot no Telegram** via @BotFather e obtenha o token. -3. **Obtenha o identificador do canal** após adicionar o bot como administrador no canal. Use o username do canal no formato `@nome_do_canal` ou o ID numérico `-100xxxxxxxxxx`. Para descobrir o ID, consulte a seção "Descobrindo o chat ID do canal" abaixo. +3. **Obtenha o identificador do canal** após adicionar o bot como administrador no canal. Use o username do canal no formato `@nome_do_canal` ou o ID numérico `-100xxxxxxxxxx`. ## Instalação @@ -57,11 +54,6 @@ chmod +x iniciar.sh ./iniciar.sh ``` -O script irá: -- Criar o ambiente virtual Python -- Instalar todas as dependências -- Preparar o sistema para execução - ## Execução ```bash @@ -69,24 +61,18 @@ source venv/bin/activate python3 main.py ``` -Para rodar como serviço em background no Linux, utilize `systemd` ou `screen`/`tmux`. - ## Variáveis de Ambiente | Variável | Descrição | Padrão | |---|---|---| -| `OPENAI_API_KEY` | Chave da API da OpenAI | opcional | +| `DEFAULT_AI_PROVIDER` | Provedor de IA (`openrouter`, `llamacpp`, `openai`) | `openrouter` | +| `DEFAULT_AI_MODEL` | Nome do modelo no provedor escolhido | obrigatório | | `OPENROUTER_API_KEY` | Chave da API OpenRouter | opcional | -| `OPENROUTER_MODEL` | Modelo no OpenRouter | inclusionai/ling-3.0-tiny:free | -| `STEPFUN_BASE_URL` | URL base StepFun | https://api.stepfun.ai/step_plan/v1/ | -| `STEPFUN_API_KEY` | Chave StepFun | opcional | -| `STEPFUN_MODEL` | Modelo StepFun | step-3.7-flash | -| `LLAMACPP_BASE_URL` | URL base LlamaCPP | http://localhost:8080/v1/ | -| `LLAMACPP_API_KEY` | Chave LlamaCPP | not-needed | -| `LLAMACPP_MODEL` | Modelo LlamaCPP | qwen2.5-coder-3b-instruct-q4_k_m.gguf | -| `DEFAULT_AI_MODEL` | Modelo usado quando houver apenas OpenAI | gpt-4o-mini | +| `LLAMACPP_BASE_URL` | URL base da API LlamaCPP local | `http://localhost:8080/v1/` | +| `LLAMACPP_API_KEY` | Chave da API LlamaCPP | `not-needed` | +| `OPENAI_API_KEY` | Chave da API OpenAI | opcional | | `TELEGRAM_BOT_TOKEN` | Token do bot Telegram | obrigatório | -| `TELEGRAM_CHAT_ID` | Username do canal (ex: `@nome_do_canal`) ou ID numérico (ex: `-100xxxxxxxxxx`) | obrigatório | +| `TELEGRAM_CHAT_ID` | Username do canal ou ID numérico | obrigatório | | `INTERVAL_MINUTES` | Intervalo entre envios (minutos) | 60 | | `START_HOUR` | Hora inicial de funcionamento | 7 | | `END_HOUR` | Hora final de funcionamento | 22 | @@ -94,51 +80,3 @@ Para rodar como serviço em background no Linux, utilize `systemd` ou `screen`/` | `TOPICS` | Lista de tópicos separados por vírgula | ver `.env` | | `LANGUAGE` | Idioma dos insights | pt-BR | | `MIN_LINES` | Mínimo de linhas por insight | 20 | - -> Prioridade de provedor: OpenRouter > StepFun > LlamaCPP > OpenAI - -## Estrutura do Projeto - -``` -ThorAgenteIA/ -├── .env # Configurações sensíveis (não versionar) -├── .gitignore -├── iniciar.sh # Script de setup automático -├── main.py # Código principal -├── requirements.txt # Dependências Python -├── RULES.md # Regras para IA coder -└── README.md # Documentação -``` - -## Descobrindo o chat ID do canal - -Após adicionar o bot como administrador no canal, use um dos métodos abaixo: - -### Método 1: Usando o username - -Se o canal tiver um username público, basta usar o formato `@nome_do_canal` em `TELEGRAM_CHAT_ID`. - -### Método 2: Usando o ID numérico - -1. Envie qualquer mensagem do canal para o bot ou adicione o bot ao canal. -2. Consulte as atualizações com: - -```bash -python3 -c " -import requests, os -from dotenv import load_dotenv -load_dotenv() -token = os.getenv('TELEGRAM_BOT_TOKEN') -r = requests.get(f'https://api.telegram.org/bot{token}/getUpdates', timeout=15) -print(r.text) -" -``` - -3. Procure por `"chat":{"id":-100xxxxxxxxxx` nas mensagens relacionadas ao canal. - -## Solução de Problemas - -- **Erro de API Key**: Verifique se pelo menos um provedor está configurado no `.env`. -- **Mensagem não enviada**: Confira o token do bot e o identificador do canal. -- **Horário incorreto**: Verifique o fuso horário do servidor Linux. -- **Bot sem permissão no canal**: Certifique-se de que o bot é administrador do canal com permissão para postar mensagens. diff --git a/main.py b/main.py index 56ea83a..1e3a4b3 100644 --- a/main.py +++ b/main.py @@ -11,16 +11,12 @@ load_dotenv() TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID") -OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") +DEFAULT_AI_PROVIDER = os.getenv("DEFAULT_AI_PROVIDER", "openrouter").lower() +DEFAULT_AI_MODEL = os.getenv("DEFAULT_AI_MODEL", "") OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY") -OPENROUTER_MODEL = os.getenv("OPENROUTER_MODEL") -STEPFUN_BASE_URL = os.getenv("STEPFUN_BASE_URL") -STEPFUN_API_KEY = os.getenv("STEPFUN_API_KEY") -STEPFUN_MODEL = os.getenv("STEPFUN_MODEL") -LLAMACPP_BASE_URL = os.getenv("LLAMACPP_BASE_URL") -LLAMACPP_API_KEY = os.getenv("LLAMACPP_API_KEY") -LLAMACPP_MODEL = os.getenv("LLAMACPP_MODEL") -DEFAULT_AI_MODEL = os.getenv("DEFAULT_AI_MODEL", OPENROUTER_MODEL or STEPFUN_MODEL or LLAMACPP_MODEL or "gpt-4o-mini") +LLAMACPP_BASE_URL = os.getenv("LLAMACPP_BASE_URL", "http://localhost:8080/v1/") +LLAMACPP_API_KEY = os.getenv("LLAMACPP_API_KEY", "not-needed") +OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") LANGUAGE = os.getenv("LANGUAGE", "pt-BR") MIN_LINES = int(os.getenv("MIN_LINES", "20")) INTERVAL_MINUTES = int(os.getenv("INTERVAL_MINUTES", "60")) @@ -34,10 +30,14 @@ if not TELEGRAM_BOT_TOKEN or TELEGRAM_BOT_TOKEN == "seu_bot_token_aqui": if not TELEGRAM_CHAT_ID or TELEGRAM_CHAT_ID == "seu_chat_id_aqui": raise ValueError("TELEGRAM_CHAT_ID não configurado no .env") -if OPENROUTER_API_KEY and OPENROUTER_API_KEY != "sk-or-v1-...": +if DEFAULT_AI_PROVIDER == "openrouter" and OPENROUTER_API_KEY and OPENROUTER_API_KEY != "sk-or-v1-...": + client = openai.OpenAI(base_url="https://openrouter.ai/api/v1", api_key=OPENROUTER_API_KEY) +elif DEFAULT_AI_PROVIDER == "llamacpp" and LLAMACPP_API_KEY: + client = openai.OpenAI(base_url=LLAMACPP_BASE_URL, api_key=LLAMACPP_API_KEY) +elif DEFAULT_AI_PROVIDER == "openai" and OPENAI_API_KEY: + client = openai.OpenAI(api_key=OPENAI_API_KEY) +elif OPENROUTER_API_KEY and OPENROUTER_API_KEY != "sk-or-v1-...": client = openai.OpenAI(base_url="https://openrouter.ai/api/v1", api_key=OPENROUTER_API_KEY) -elif STEPFUN_API_KEY: - client = openai.OpenAI(base_url=STEPFUN_BASE_URL, api_key=STEPFUN_API_KEY) elif LLAMACPP_API_KEY: client = openai.OpenAI(base_url=LLAMACPP_BASE_URL, api_key=LLAMACPP_API_KEY) elif OPENAI_API_KEY: @@ -94,7 +94,6 @@ def send_telegram_message(text, topic): f"🤖 *Syspanel Insights - by ThorAgentIA*\n" f"🤖 *https://syspanel.com.br*\n" f"🕒 {now.strftime('%d/%m/%Y %H:%M:%S')}\n" - # f"🧠 Modelo: `{DEFAULT_AI_MODEL}`\n" f"📌 Assunto: {topic}\n\n" ) message = header + text @@ -154,6 +153,7 @@ def job(): def main(): print("=== ThorAgentIA iniciado ===") + print(f"Provedor: {DEFAULT_AI_PROVIDER} | Modelo: {DEFAULT_AI_MODEL}") print(f"Horário permitido: {START_HOUR}h às {END_HOUR}h") print(f"Dias permitidos: {DAYS_OF_WEEK}") print(f"Intervalo: {INTERVAL_MINUTES} minutos")