Add chat sources and citations

This commit is contained in:
Matthias
2026-06-16 10:58:15 +02:00
parent 85af9d7078
commit 9f17d4d1e1
9 changed files with 356 additions and 13 deletions

View File

@@ -13,6 +13,15 @@ const toolTraceValidator = v.object({
inputSummary: v.string(),
resultSummary: v.string(),
});
const sourceValidator = v.object({
id: v.string(),
title: v.string(),
description: v.optional(v.string()),
});
const citationValidator = v.object({
marker: v.string(),
sourceId: v.string(),
});
const chatRoleValidator = v.union(v.literal("user"), v.literal("assistant"));
@@ -20,6 +29,8 @@ const importMessageValidator = v.object({
role: chatRoleValidator,
content: v.string(),
toolTrace: v.optional(v.array(toolTraceValidator)),
sources: v.optional(v.array(sourceValidator)),
citations: v.optional(v.array(citationValidator)),
});
const sessionValidator = v.object({
@@ -43,6 +54,8 @@ const messageValidator = v.object({
content: v.string(),
createdAt: v.number(),
toolTrace: v.optional(v.array(toolTraceValidator)),
sources: v.optional(v.array(sourceValidator)),
citations: v.optional(v.array(citationValidator)),
});
const promptMessageValidator = v.object({
@@ -181,6 +194,8 @@ export const importLocalSession = mutation({
content: message.content,
createdAt: args.createdAt + index,
...(message.toolTrace ? { toolTrace: message.toolTrace } : {}),
...(message.sources ? { sources: message.sources } : {}),
...(message.citations ? { citations: message.citations } : {}),
});
}
@@ -219,6 +234,8 @@ export const appendAssistantMessage = internalMutation({
sessionId: v.id("chatSessions"),
content: v.string(),
toolTrace: v.optional(v.array(toolTraceValidator)),
sources: v.optional(v.array(sourceValidator)),
citations: v.optional(v.array(citationValidator)),
},
returns: v.object({ messageId: v.id("chatMessages") }),
handler: async (ctx, args) => {
@@ -232,6 +249,8 @@ export const appendAssistantMessage = internalMutation({
content: args.content,
createdAt: now,
...(args.toolTrace ? { toolTrace: args.toolTrace } : {}),
...(args.sources ? { sources: args.sources } : {}),
...(args.citations ? { citations: args.citations } : {}),
});
await ctx.db.patch(args.sessionId, {
updatedAt: now,