mirror of
https://github.com/domfelipe/mika-agent-assist.git
synced 2026-08-07 06:16:42 +00:00
Changes
Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com>
This commit is contained in:
parent
2fe5d4a33e
commit
9d9ca17ee7
1 changed files with 42 additions and 27 deletions
|
|
@ -103,12 +103,38 @@ Deno.serve(async (req) => {
|
||||||
persistedVersionId = skill_version_id;
|
persistedVersionId = skill_version_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cria registro running apenas no modo persistido
|
||||||
|
let runId: string | null = null;
|
||||||
|
if (persistedVersionId) {
|
||||||
|
const { data: runRow, error: runErr } = await admin
|
||||||
|
.from("skill_test_runs")
|
||||||
|
.insert({
|
||||||
|
skill_version_id: persistedVersionId,
|
||||||
|
user_id: userId,
|
||||||
|
test_input,
|
||||||
|
status: "running",
|
||||||
|
test_type: "dry_run",
|
||||||
|
})
|
||||||
|
.select("id")
|
||||||
|
.single();
|
||||||
|
|
||||||
|
if (runErr || !runRow) {
|
||||||
|
console.error("Failed to create test run:", runErr);
|
||||||
|
return new Response(JSON.stringify({ error: "Falha ao registrar teste" }), {
|
||||||
|
status: 500,
|
||||||
|
headers: { ...corsHeaders, "Content-Type": "application/json" },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
runId = runRow.id;
|
||||||
|
}
|
||||||
|
|
||||||
const runId = runRow.id;
|
|
||||||
const startedAt = Date.now();
|
const startedAt = Date.now();
|
||||||
|
|
||||||
|
const updateRun = async (patch: Record<string, unknown>) => {
|
||||||
|
if (!runId) return;
|
||||||
|
await admin.from("skill_test_runs").update(patch).eq("id", runId);
|
||||||
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const aiRes = await fetch("https://ai.gateway.lovable.dev/v1/chat/completions", {
|
const aiRes = await fetch("https://ai.gateway.lovable.dev/v1/chat/completions", {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
|
|
@ -122,7 +148,7 @@ Deno.serve(async (req) => {
|
||||||
{ role: "system", content: SYSTEM_PROMPT },
|
{ role: "system", content: SYSTEM_PROMPT },
|
||||||
{
|
{
|
||||||
role: "user",
|
role: "user",
|
||||||
content: `Definição da skill:\n\`\`\`\n${versionRow.markdown_content}\n\`\`\`\n\nInput do usuário: ${test_input}`,
|
content: `Definição da skill:\n\`\`\`\n${resolvedMarkdown}\n\`\`\`\n\nInput do usuário: ${test_input}`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}),
|
}),
|
||||||
|
|
@ -130,14 +156,11 @@ Deno.serve(async (req) => {
|
||||||
|
|
||||||
if (aiRes.status === 429) {
|
if (aiRes.status === 429) {
|
||||||
const duration = Date.now() - startedAt;
|
const duration = Date.now() - startedAt;
|
||||||
await admin
|
await updateRun({
|
||||||
.from("skill_test_runs")
|
|
||||||
.update({
|
|
||||||
status: "error",
|
status: "error",
|
||||||
error_message: "Muitas requisições. Aguarde 1 minuto.",
|
error_message: "Muitas requisições. Aguarde 1 minuto.",
|
||||||
duration_ms: duration,
|
duration_ms: duration,
|
||||||
})
|
});
|
||||||
.eq("id", runId);
|
|
||||||
return new Response(
|
return new Response(
|
||||||
JSON.stringify({ error: "Muitas requisições. Aguarde 1 minuto e tente novamente." }),
|
JSON.stringify({ error: "Muitas requisições. Aguarde 1 minuto e tente novamente." }),
|
||||||
{ status: 429, headers: { ...corsHeaders, "Content-Type": "application/json" } },
|
{ status: 429, headers: { ...corsHeaders, "Content-Type": "application/json" } },
|
||||||
|
|
@ -147,14 +170,11 @@ Deno.serve(async (req) => {
|
||||||
if (!aiRes.ok) {
|
if (!aiRes.ok) {
|
||||||
const txt = await aiRes.text();
|
const txt = await aiRes.text();
|
||||||
const duration = Date.now() - startedAt;
|
const duration = Date.now() - startedAt;
|
||||||
await admin
|
await updateRun({
|
||||||
.from("skill_test_runs")
|
|
||||||
.update({
|
|
||||||
status: "error",
|
status: "error",
|
||||||
error_message: `AI error ${aiRes.status}: ${txt.slice(0, 200)}`,
|
error_message: `AI error ${aiRes.status}: ${txt.slice(0, 200)}`,
|
||||||
duration_ms: duration,
|
duration_ms: duration,
|
||||||
})
|
});
|
||||||
.eq("id", runId);
|
|
||||||
return new Response(JSON.stringify({ error: "Falha ao executar teste." }), {
|
return new Response(JSON.stringify({ error: "Falha ao executar teste." }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, "Content-Type": "application/json" },
|
headers: { ...corsHeaders, "Content-Type": "application/json" },
|
||||||
|
|
@ -165,10 +185,7 @@ Deno.serve(async (req) => {
|
||||||
const test_output: string = (data?.choices?.[0]?.message?.content ?? "").trim();
|
const test_output: string = (data?.choices?.[0]?.message?.content ?? "").trim();
|
||||||
const duration = Date.now() - startedAt;
|
const duration = Date.now() - startedAt;
|
||||||
|
|
||||||
await admin
|
await updateRun({ status: "success", test_output, duration_ms: duration });
|
||||||
.from("skill_test_runs")
|
|
||||||
.update({ status: "success", test_output, duration_ms: duration })
|
|
||||||
.eq("id", runId);
|
|
||||||
|
|
||||||
return new Response(
|
return new Response(
|
||||||
JSON.stringify({ test_output, duration_ms: duration, status: "success" }),
|
JSON.stringify({ test_output, duration_ms: duration, status: "success" }),
|
||||||
|
|
@ -177,13 +194,11 @@ Deno.serve(async (req) => {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
const duration = Date.now() - startedAt;
|
const duration = Date.now() - startedAt;
|
||||||
const msg = e instanceof Error ? e.message : "Erro desconhecido";
|
const msg = e instanceof Error ? e.message : "Erro desconhecido";
|
||||||
await admin
|
await updateRun({ status: "error", error_message: msg, duration_ms: duration });
|
||||||
.from("skill_test_runs")
|
|
||||||
.update({ status: "error", error_message: msg, duration_ms: duration })
|
|
||||||
.eq("id", runId);
|
|
||||||
return new Response(JSON.stringify({ error: "Erro ao executar teste." }), {
|
return new Response(JSON.stringify({ error: "Erro ao executar teste." }), {
|
||||||
status: 500,
|
status: 500,
|
||||||
headers: { ...corsHeaders, "Content-Type": "application/json" },
|
headers: { ...corsHeaders, "Content-Type": "application/json" },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue