mirror of
https://github.com/domfelipe/mika-agent-assist.git
synced 2026-08-07 11:16:46 +00:00
Atualizou provision-agent e update-agent-config
X-Lovable-Edit-ID: edt-7c538798-bc9a-402f-8e70-030ce872e4b2 Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com>
This commit is contained in:
commit
6ef4e8621d
2 changed files with 28 additions and 35 deletions
|
|
@ -12,7 +12,6 @@ import {
|
||||||
deleteTelegramWebhook,
|
deleteTelegramWebhook,
|
||||||
getServiceContext,
|
getServiceContext,
|
||||||
upsertRailwayVariableCollection,
|
upsertRailwayVariableCollection,
|
||||||
HERMES_START_COMMAND,
|
|
||||||
} from "../_shared/railway.ts";
|
} from "../_shared/railway.ts";
|
||||||
|
|
||||||
interface RequestBody {
|
interface RequestBody {
|
||||||
|
|
@ -27,7 +26,7 @@ interface RequestBody {
|
||||||
const SUPABASE_URL = Deno.env.get("SUPABASE_URL")!;
|
const SUPABASE_URL = Deno.env.get("SUPABASE_URL")!;
|
||||||
const SUPABASE_SERVICE_ROLE_KEY = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!;
|
const SUPABASE_SERVICE_ROLE_KEY = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!;
|
||||||
const RAILWAY_API_TOKEN = Deno.env.get("RAILWAY_API_TOKEN");
|
const RAILWAY_API_TOKEN = Deno.env.get("RAILWAY_API_TOKEN");
|
||||||
const OPENROUTER_API_KEY = Deno.env.get("OPENROUTER_API_KEY") ?? "";
|
|
||||||
const ADMIN_TELEGRAM_BOT_TOKEN = Deno.env.get("ADMIN_TELEGRAM_BOT_TOKEN");
|
const ADMIN_TELEGRAM_BOT_TOKEN = Deno.env.get("ADMIN_TELEGRAM_BOT_TOKEN");
|
||||||
const ADMIN_TELEGRAM_CHAT_ID = Deno.env.get("ADMIN_TELEGRAM_CHAT_ID");
|
const ADMIN_TELEGRAM_CHAT_ID = Deno.env.get("ADMIN_TELEGRAM_CHAT_ID");
|
||||||
|
|
||||||
|
|
@ -58,10 +57,6 @@ Deno.serve(async (req) => {
|
||||||
return jsonResponse(500, { error: "RAILWAY_API_TOKEN not configured" });
|
return jsonResponse(500, { error: "RAILWAY_API_TOKEN not configured" });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!OPENROUTER_API_KEY) {
|
|
||||||
return jsonResponse(500, { error: "OPENROUTER_API_KEY not configured" });
|
|
||||||
}
|
|
||||||
|
|
||||||
let body: RequestBody;
|
let body: RequestBody;
|
||||||
try {
|
try {
|
||||||
body = await req.json();
|
body = await req.json();
|
||||||
|
|
@ -206,34 +201,32 @@ Deno.serve(async (req) => {
|
||||||
console.warn("[provision-agent] deleteTelegramWebhook failed (continuing):", String(e));
|
console.warn("[provision-agent] deleteTelegramWebhook failed (continuing):", String(e));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6) Montar variáveis de ambiente do container
|
// 6) Montar variáveis de ambiente do container (imagem custom já contém SOUL.md)
|
||||||
const hasChatId = !!agent.telegram_user_chat_id;
|
|
||||||
const defaultSoul = `Você se chama ${agentName}. Você é um assistente pessoal de IA criado pela DOMCO para ${fullName}. Você é proativo, direto e fala sempre em português brasileiro. Você ajuda ${firstName} a ser mais produtivo — gerenciando emails, agenda, tarefas e automatizando o que puder. Seja conciso nas respostas via Telegram. Nunca se identifique como Hermes ou como produto da Nous Research — você é Mika.`;
|
|
||||||
const soulContent = body.soul_content?.trim() || defaultSoul;
|
|
||||||
|
|
||||||
const defaultModel = isPro
|
|
||||||
? "openrouter/google/gemma-4-31b-it"
|
|
||||||
: "openrouter/google/gemma-4-27b-a4b-it";
|
|
||||||
const model = body.model || defaultModel;
|
|
||||||
const sttProvider = body.stt_provider || "local";
|
const sttProvider = body.stt_provider || "local";
|
||||||
const ttsProvider = body.tts_provider || "disabled";
|
const ttsProvider = body.tts_provider || "disabled";
|
||||||
|
const hasChatId = !!agent.telegram_user_chat_id;
|
||||||
|
const chatIdStr = hasChatId ? String(agent.telegram_user_chat_id) : "";
|
||||||
|
|
||||||
const envVars: Record<string, string> = {
|
const envVars: Record<string, string> = {
|
||||||
TELEGRAM_BOT_TOKEN: telegramBotToken,
|
HERMES_HOME: "/opt/data/.hermes",
|
||||||
TELEGRAM_ALLOWED_USERS: hasChatId ? String(agent.telegram_user_chat_id) : "",
|
API_SERVER_ENABLED: "true",
|
||||||
TELEGRAM_HOME_CHANNEL: hasChatId ? String(agent.telegram_user_chat_id) : "",
|
API_SERVER_KEY: Deno.env.get("HERMES_API_SERVER_KEY") ?? "",
|
||||||
GATEWAY_ALLOW_ALL_USERS: hasChatId ? "false" : "true",
|
GATEWAY_ALLOW_ALL_USERS: "false",
|
||||||
HERMES_SOUL_MD: soulContent,
|
|
||||||
HERMES_SOUL_OVERRIDE: soulContent,
|
|
||||||
HERMES_TTS_PROVIDER: ttsProvider,
|
|
||||||
HERMES_STT_PROVIDER: sttProvider,
|
HERMES_STT_PROVIDER: sttProvider,
|
||||||
OPENROUTER_API_KEY,
|
HERMES_TTS_PROVIDER: ttsProvider,
|
||||||
HERMES_MODEL: model,
|
OLLAMA_API_KEY: Deno.env.get("OLLAMA_API_KEY") ?? "",
|
||||||
HERMES_FALLBACK_MODEL: "openrouter/google/gemma-4-31b-it",
|
PORT: "8642",
|
||||||
API_SERVER_ENABLED: "false",
|
TELEGRAM_ALLOWED_USERS: chatIdStr,
|
||||||
HERMES_HOME: "/opt/data",
|
TELEGRAM_BOT_TOKEN: telegramBotToken,
|
||||||
|
TELEGRAM_HOME_CHANNEL: chatIdStr,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Manter campos derivados para persistir em model_config
|
||||||
|
const agentNameFinal = agentName;
|
||||||
|
const modelFinal = isPro
|
||||||
|
? "openrouter/google/gemma-4-31b-it"
|
||||||
|
: "openrouter/google/gemma-4-27b-a4b-it";
|
||||||
|
|
||||||
// 7) Criar serviço no Railway
|
// 7) Criar serviço no Railway
|
||||||
const serviceName = `mika-${agent.uuid_tenant.replace(/-/g, "").slice(0, 8)}`;
|
const serviceName = `mika-${agent.uuid_tenant.replace(/-/g, "").slice(0, 8)}`;
|
||||||
console.log(`[provision-agent] criando serviço Railway: ${serviceName}`);
|
console.log(`[provision-agent] criando serviço Railway: ${serviceName}`);
|
||||||
|
|
@ -251,8 +244,7 @@ Deno.serve(async (req) => {
|
||||||
token: RAILWAY_API_TOKEN,
|
token: RAILWAY_API_TOKEN,
|
||||||
serviceId: railwayServiceId,
|
serviceId: railwayServiceId,
|
||||||
environmentId: pool.railway_environment_id,
|
environmentId: pool.railway_environment_id,
|
||||||
image: "nousresearch/hermes-agent:latest",
|
image: "ghcr.io/domfelipe/hermes-agent-custom:latest",
|
||||||
startCommand: HERMES_START_COMMAND,
|
|
||||||
variables: envVars,
|
variables: envVars,
|
||||||
});
|
});
|
||||||
console.log(`[provision-agent] serviço configurado com ${Object.keys(envVars).length} env vars`);
|
console.log(`[provision-agent] serviço configurado com ${Object.keys(envVars).length} env vars`);
|
||||||
|
|
@ -285,10 +277,10 @@ Deno.serve(async (req) => {
|
||||||
railway_service_id: railwayServiceId,
|
railway_service_id: railwayServiceId,
|
||||||
vps_pool_id: pool.id,
|
vps_pool_id: pool.id,
|
||||||
model_config: {
|
model_config: {
|
||||||
provider: model,
|
provider: modelFinal,
|
||||||
stt: sttProvider,
|
stt: sttProvider,
|
||||||
tts: ttsProvider,
|
tts: ttsProvider,
|
||||||
agent_name: agentName,
|
agent_name: agentNameFinal,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.eq("id", agent.id);
|
.eq("id", agent.id);
|
||||||
|
|
|
||||||
|
|
@ -101,11 +101,12 @@ Deno.serve(async (req) => {
|
||||||
return jsonResponse(500, { error: "failed to resolve railway project/environment" });
|
return jsonResponse(500, { error: "failed to resolve railway project/environment" });
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4) Upsert variáveis
|
// 4) Upsert variáveis (SOUL.md agora vive na imagem Docker — não sobrescrever via env)
|
||||||
const variables: Record<string, string> = {
|
const variables: Record<string, string> = {
|
||||||
HERMES_SOUL_OVERRIDE: body.soul_content,
|
OLLAMA_API_KEY: Deno.env.get("OLLAMA_API_KEY") ?? "",
|
||||||
HERMES_MODEL: body.model,
|
TELEGRAM_BOT_TOKEN: Deno.env.get("TELEGRAM_BOT_TOKEN") ?? "",
|
||||||
HERMES_FALLBACK_MODEL: "openrouter/google/gemma-4-31b-it",
|
TELEGRAM_ALLOWED_USERS: Deno.env.get("TELEGRAM_ALLOWED_USERS") ?? "",
|
||||||
|
TELEGRAM_HOME_CHANNEL: Deno.env.get("TELEGRAM_HOME_CHANNEL") ?? "",
|
||||||
HERMES_STT_PROVIDER: body.stt_provider || "local",
|
HERMES_STT_PROVIDER: body.stt_provider || "local",
|
||||||
HERMES_TTS_PROVIDER: body.tts_provider || "disabled",
|
HERMES_TTS_PROVIDER: body.tts_provider || "disabled",
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue