feat: add OpenRouter audit generation pipeline
This commit is contained in:
@@ -2,6 +2,8 @@ import { defineSchema, defineTable } from "convex/server";
|
||||
import { v } from "convex/values";
|
||||
import { tables as authTables } from "./betterAuth/schema";
|
||||
import {
|
||||
AUDIT_GENERATION_STAGES,
|
||||
AUDIT_GENERATION_STATUSES,
|
||||
RUN_EVENT_LEVELS,
|
||||
RUN_STATUSES,
|
||||
RUN_TYPES,
|
||||
@@ -91,6 +93,35 @@ const websiteEnrichmentPageKind = v.union(
|
||||
);
|
||||
const runType = v.union(...RUN_TYPES.map((type) => v.literal(type)));
|
||||
const runStatus = v.union(...RUN_STATUSES.map((status) => v.literal(status)));
|
||||
const auditGenerationStatus = v.union(
|
||||
...AUDIT_GENERATION_STATUSES.map((status) => v.literal(status)),
|
||||
);
|
||||
const auditGenerationStage = v.union(
|
||||
...AUDIT_GENERATION_STAGES.map((stage) => v.literal(stage)),
|
||||
);
|
||||
const auditGenerationUsage = v.object({
|
||||
promptTokens: v.optional(v.number()),
|
||||
completionTokens: v.optional(v.number()),
|
||||
totalTokens: v.optional(v.number()),
|
||||
cacheReadTokens: v.optional(v.number()),
|
||||
totalCostUsd: v.optional(v.number()),
|
||||
});
|
||||
const auditGenerationParsedJson = v.union(
|
||||
v.string(),
|
||||
v.record(
|
||||
v.string(),
|
||||
v.union(
|
||||
v.string(),
|
||||
v.number(),
|
||||
v.boolean(),
|
||||
v.null(),
|
||||
v.array(v.string()),
|
||||
v.array(v.number()),
|
||||
v.array(v.boolean()),
|
||||
v.object({}),
|
||||
),
|
||||
),
|
||||
);
|
||||
const runEventLevel = v.union(
|
||||
...RUN_EVENT_LEVELS.map((level) => v.literal(level)),
|
||||
);
|
||||
@@ -323,6 +354,30 @@ export default defineSchema({
|
||||
.index("by_auditId", ["auditId"])
|
||||
.index("by_leadId_and_strategy", ["leadId", "strategy"]),
|
||||
|
||||
auditGenerations: defineTable({
|
||||
leadId: v.id("leads"),
|
||||
auditId: v.optional(v.id("audits")),
|
||||
runId: v.id("agentRuns"),
|
||||
stage: auditGenerationStage,
|
||||
modelProfile: v.string(),
|
||||
modelId: v.string(),
|
||||
prompt: v.string(),
|
||||
systemPrompt: v.optional(v.string()),
|
||||
rawResponse: v.optional(v.string()),
|
||||
parsedJson: v.optional(auditGenerationParsedJson),
|
||||
usage: v.optional(auditGenerationUsage),
|
||||
finishReason: v.optional(v.string()),
|
||||
status: auditGenerationStatus,
|
||||
errorSummary: v.optional(v.string()),
|
||||
createdAt: v.number(),
|
||||
updatedAt: v.number(),
|
||||
})
|
||||
.index("by_leadId", ["leadId"])
|
||||
.index("by_auditId", ["auditId"])
|
||||
.index("by_runId", ["runId"])
|
||||
.index("by_stage", ["stage"])
|
||||
.index("by_leadId_and_stage", ["leadId", "stage"]),
|
||||
|
||||
websiteCrawlPages: defineTable({
|
||||
leadId: v.id("leads"),
|
||||
runId: v.optional(v.id("agentRuns")),
|
||||
|
||||
Reference in New Issue
Block a user