From 0feb674585697be5297e7dcff53a8c8453ebe39c Mon Sep 17 00:00:00 2001 From: Aidan Bleser Date: Tue, 17 Jun 2025 16:26:36 -0500 Subject: [PATCH] Update +server.ts --- src/routes/api/generate-message/+server.ts | 43 ++++++++++++++++------ 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/src/routes/api/generate-message/+server.ts b/src/routes/api/generate-message/+server.ts index 7feafd7..0b5dba4 100644 --- a/src/routes/api/generate-message/+server.ts +++ b/src/routes/api/generate-message/+server.ts @@ -4,7 +4,7 @@ import type { Doc, Id } from '$lib/backend/convex/_generated/dataModel'; import { Provider } from '$lib/types'; import { error, json, type RequestHandler } from '@sveltejs/kit'; import { ConvexHttpClient } from 'convex/browser'; -import { ResultAsync } from 'neverthrow'; +import { err, ok, Result, ResultAsync } from 'neverthrow'; import OpenAI from 'openai'; import { waitUntil } from '@vercel/functions'; @@ -325,7 +325,17 @@ ${attachedRules.map((r) => `- ${r.name}: ${r.rule}`).join('\n')}`, return; } - const generationStats = await getGenerationStats(generationId, key); + const generationStatsResult = await getGenerationStats(generationId, key); + + if (generationStatsResult.isErr()) { + log(`Background: Failed to get generation stats: ${generationStatsResult.error}`, startTime); + } + + // just default so we don't blow up + const generationStats = generationStatsResult.unwrapOr({ + tokens_completion: undefined, + total_cost: undefined, + }); log('Background: Got generation stats', startTime); @@ -351,7 +361,7 @@ ${attachedRules.map((r) => `- ${r.name}: ${r.rule}`).join('\n')}`, ResultAsync.fromPromise( client.mutation(api.conversations.updateCostUsd, { conversation_id: conversationId as Id<'conversations'>, - cost_usd: generationStats.total_cost, + cost_usd: generationStats.total_cost ?? 0, session_token: sessionToken, }), (e) => `Failed to update cost usd: ${e}` @@ -526,16 +536,27 @@ function parseMessageForRules(message: string, rules: Doc<'user_rules'>[]): Doc< return matchedRules; } -async function getGenerationStats(generationId: string, token: string): Promise { - const generation = await fetch(`https://openrouter.ai/api/v1/generation?id=${generationId}`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); +async function getGenerationStats( + generationId: string, + token: string +): Promise> { + try { + const generation = await fetch(`https://openrouter.ai/api/v1/generation?id=${generationId}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); - const { data } = await generation.json(); + const { data } = await generation.json(); - return data; + if (!data) { + return err('No data returned from OpenRouter'); + } + + return ok(data); + } catch { + return err('Failed to get generation stats'); + } } export interface ApiResponse {