Reporting & Audit
Velaは実行前の認可だけでなく、実行後の監査も前提にしています。Vela-managed relay endpointを呼ぶ場合、relayが completed / failed、usage、Vela Creditsのpost-charge settlementを記録します。アプリは同じrelay execution sessionを二重reportしません。
recordExecutionResult() と report helpers は、アプリがVela-managed relayを使わず、自前の実行backendを呼ぶ app-owned execution path のためのものです。
app-owned executionの完了報告
Section titled “app-owned executionの完了報告”declare const client: import("@vel4ai/sdk").VelaClient;declare const usage: { inputTokens: number; outputTokens: number; totalTokens: number; estimatedCostUsd: number;};
export async function reportCompleted() { await client.recordExecutionResult({ appId: "app_1", customerTenantId: "customer_1", delegationId: "delegation_1", requestedModel: "openai/gpt-4o-mini", resolvedExecutionTarget: "openai/gpt-4o-mini", status: "completed", usageSummary: usage, });}OpenAI互換usageの変換
Section titled “OpenAI互換usageの変換”import { createOpenAiCompatibleUsageReportInput } from "@vel4ai/sdk";
declare const appOwnedExecution: import("@vel4ai/sdk").PreparedExecutionAllowed;declare const providerBody: { usage?: unknown };
export async function reportOpenAiCompatibleResult() { await appOwnedExecution.reportCompletedWithUsage( createOpenAiCompatibleUsageReportInput(providerBody.usage), );}declare const client: import("@vel4ai/sdk").VelaClient;
export async function reportFailure(error: unknown) { await client.recordExecutionResult({ appId: "app_1", customerTenantId: "customer_1", delegationId: "delegation_1", requestedModel: "openai/gpt-4o-mini", resolvedExecutionTarget: "openai/gpt-4o-mini", status: "failed", errorMessage: error instanceof Error ? error.message : "Model execution failed.", });}streaming route ではreporterを共有する
Section titled “streaming route ではreporterを共有する”成功callbackと失敗callbackの両方が同じapp-owned実行に対して発火し得る場合、boolean flagを手書きせず createResultReporter() を使います。tryReport...() はreport APIの失敗をthrowせず、成功したmodel responseや元のprovider errorを上書きしません。
declare const appOwnedExecution: import("@vel4ai/sdk").PreparedExecutionAllowed;
export const reporter = appOwnedExecution.createResultReporter({ onReportError(error) { console.error("Vela audit report failed", error); },});
export async function onFinish() { await reporter.tryReportCompletedWithUsage({ inputTokens: 10, outputTokens: 20, });}
export async function onError(error: unknown) { await reporter.tryReportFailedWithError(error);}