Merge pull request #3644 from fosrl/dev

1.22.0-s.2
This commit is contained in:
Owen Schwartz
2026-08-26 11:30:38 -04:00
committed by GitHub
7 changed files with 97 additions and 12 deletions
@@ -11,7 +11,8 @@ import {
queryAiSessionLogsQuery,
queryAiSessionLogsParams,
queryAiSession,
countAiSessionQuery
countAiSessionQuery,
decompressAiSessionLogRow
} from "./queryAiSessionLog";
import { generateCSV } from "./generateCSV";
@@ -87,7 +88,9 @@ export async function exportAiSessionLogs(
const baseQuery = queryAiSession(data);
const log = await baseQuery.limit(MAX_EXPORT_LIMIT);
const log = (await baseQuery.limit(MAX_EXPORT_LIMIT)).map(
decompressAiSessionLogRow
);
const csvData = generateCSV(log);
+33 -1
View File
@@ -24,6 +24,7 @@ import { AI_CAPABILITIES } from "@server/lib/aiCapabilities";
import response from "@server/lib/response";
import logger from "@server/logger";
import { getSevenDaysAgo } from "@app/lib/getSevenDaysAgo";
import { decompressText } from "@server/lib/textCompression";
export const queryAiSessionLogsQuery = z.strictObject({
// iso string just validate its a parseable date
@@ -166,6 +167,35 @@ export function queryAiSession(data: Q) {
.orderBy(desc(aiSessionLog.createdAt));
}
function decompressField(value: string | null): string | null {
if (value == null) {
return value;
}
try {
return decompressText(value);
} catch (error) {
logger.error("Failed to decompress AI session log field", { error });
return value;
}
}
export function decompressAiSessionLogRow<
T extends {
requestBody: string | null;
responseBody: string | null;
normalizedRequest: string | null;
normalizedResponse: string | null;
}
>(row: T): T {
return {
...row,
requestBody: decompressField(row.requestBody),
responseBody: decompressField(row.responseBody),
normalizedRequest: decompressField(row.normalizedRequest),
normalizedResponse: decompressField(row.normalizedResponse)
};
}
async function enrichWithDetails(
logs: Awaited<ReturnType<typeof queryAiSession>>
) {
@@ -620,7 +650,9 @@ export async function queryAiSessionLogs(
const baseQuery = queryAiSession(data);
const logsRaw = await baseQuery.limit(data.limit).offset(data.offset);
const logsRaw = (
await baseQuery.limit(data.limit).offset(data.offset)
).map(decompressAiSessionLogRow);
const log = await enrichWithDetails(logsRaw);