From 09ed97ca00d2336dd0414da8c63c24344aec7be2 Mon Sep 17 00:00:00 2001 From: Test Date: Sun, 24 May 2026 00:56:20 +0100 Subject: [PATCH 1/2] Fix Turbopack build errors - bad merge artifacts --- app/api/generate/route.ts | 2 -- components/PromptShell.tsx | 12 +++++------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/app/api/generate/route.ts b/app/api/generate/route.ts index 25698ca..33fe770 100644 --- a/app/api/generate/route.ts +++ b/app/api/generate/route.ts @@ -55,8 +55,6 @@ export async function POST(request: Request) { }, { status: 400 }) } - try { - return NextResponse.json(await generateAnswerForPrompt(body)) const chatMode = normalizeChatMode(body.chatMode) if (!chatMode) { diff --git a/components/PromptShell.tsx b/components/PromptShell.tsx index cfbe54e..e469fae 100644 --- a/components/PromptShell.tsx +++ b/components/PromptShell.tsx @@ -3,7 +3,6 @@ import React, { ChangeEvent, useCallback, useEffect, useRef, useState, useTransition } from 'react' import Image from 'next/image' import type { GenerateAnswerResult, GenerateProps, TeraChatMode } from '@/lib/generate-types' -import type { GenerateAnswerResult, GenerateProps } from '@/lib/generate-types' import { CHAT_MODES, getChatModeConfig, isChatMode, type ChatMode } from '@/lib/chat-modes' import type { TeacherTool } from './ToolCard' @@ -18,7 +17,6 @@ import { fetchChatHistory } from '@/app/actions/user' import { addNote } from '@/app/actions/notes' import { dispatchUsageRefresh } from '@/lib/usage-events' import { compressImage } from '@/lib/image-compression' -import { getChatModeConfig, isChatMode, type ChatMode } from '@/lib/ai/chat-modes' import UpgradePrompt from './UpgradePrompt' import VoiceControls from './VoiceControls' import LimitModal from './LimitModal' @@ -71,6 +69,8 @@ const inferChatMode = (tool: TeacherTool, researchMode: boolean): TeraChatMode = } return 'general' +} + const getChatModeForTool = (toolName: string): ChatMode => { const normalized = toolName.toLowerCase() @@ -434,7 +434,6 @@ export default function PromptShell({ sessionId: currentSessionId, chatId: editingMessageId ?? undefined, researchMode, - chatMode: inferChatMode(tool, researchMode) chatMode: outgoingChatMode, }) @@ -464,7 +463,6 @@ export default function PromptShell({ setQueuedMessage(null) }) }, [editingMessageId, hasBumpedInput, tool, user?.id, user?.email, currentSessionId, researchMode]) - }, [editingMessageId, hasBumpedInput, tool.name, user?.id, user?.email, currentSessionId, researchMode]) const handleSaveNote = async (assistantMessage: Message) => { if (!user?.id) { @@ -562,12 +560,12 @@ export default function PromptShell({ fetchChatHistory(user.id, sessionId).then(data => { if (data) { const loaded: ConversationEntry[] = data.map(s => { - const chatMode = getChatModeForTool(s.tool ?? tool.name) + const mode = getChatModeForTool(s.tool ?? tool.name) return { id: s.id, sessionId: s.id, - userMessage: { id: `${s.id}-user`, role: 'user', content: s.prompt, attachments: s.attachments as AttachmentReference[], timestamp: new Date(s.created_at).getTime(), chatMode }, - assistantMessage: { id: `${s.id}-assistant`, role: 'tera', content: s.response, timestamp: new Date(s.created_at).getTime() + 1000, chatMode } + userMessage: { id: `${s.id}-user`, role: 'user', content: s.prompt, attachments: s.attachments as AttachmentReference[], timestamp: new Date(s.created_at).getTime(), chatMode: mode }, + assistantMessage: { id: `${s.id}-assistant`, role: 'tera', content: s.response, timestamp: new Date(s.created_at).getTime() + 1000, chatMode: mode } } }) setConversations(prev => loaded.length === 0 && prev.length > 0 ? prev : loaded) From 33dc8a81e31dac70c8be830cd98a9685f2e1c5fe Mon Sep 17 00:00:00 2001 From: Test Date: Sun, 24 May 2026 01:12:44 +0100 Subject: [PATCH 2/2] Send backend chatMode enum instead of UI mode values --- app/api/generate/route.ts | 15 --------------- components/PromptShell.tsx | 4 ++-- lib/generate-answer.ts | 4 ---- lib/generate-types.ts | 3 --- 4 files changed, 2 insertions(+), 24 deletions(-) diff --git a/app/api/generate/route.ts b/app/api/generate/route.ts index 33fe770..955cad0 100644 --- a/app/api/generate/route.ts +++ b/app/api/generate/route.ts @@ -16,11 +16,6 @@ function isGenerateProps(value: unknown): value is GenerateProps { if (!value || typeof value !== 'object') return false const body = value as Partial - const validChatMode = body.chatMode === undefined - || body.chatMode === 'general' - || body.chatMode === 'learn' - || body.chatMode === 'research' - || body.chatMode === 'build' return typeof body.prompt === 'string' && typeof body.tool === 'string' @@ -29,7 +24,6 @@ function isGenerateProps(value: unknown): value is GenerateProps { && (body.sessionId === undefined || body.sessionId === null || typeof body.sessionId === 'string') && (body.chatId === undefined || typeof body.chatId === 'string') && (body.researchMode === undefined || typeof body.researchMode === 'boolean') - && validChatMode && (body.chatMode === undefined || isChatMode(body.chatMode)) && (body.attachments === undefined || Array.isArray(body.attachments)) } @@ -57,15 +51,6 @@ export async function POST(request: Request) { const chatMode = normalizeChatMode(body.chatMode) - if (!chatMode) { - return NextResponse.json({ - answer: 'Invalid message request.', - sessionId: body.sessionId ?? null, - chatId: body.chatId, - error: 'Invalid message request.', - }, { status: 400 }) - } - if (chatMode === 'image') { const message = 'Image creation is coming soon.' return NextResponse.json({ diff --git a/components/PromptShell.tsx b/components/PromptShell.tsx index e469fae..6d15786 100644 --- a/components/PromptShell.tsx +++ b/components/PromptShell.tsx @@ -2,7 +2,7 @@ import React, { ChangeEvent, useCallback, useEffect, useRef, useState, useTransition } from 'react' import Image from 'next/image' -import type { GenerateAnswerResult, GenerateProps, TeraChatMode } from '@/lib/generate-types' +import type { GenerateAnswerResult, GenerateProps } from '@/lib/generate-types' import { CHAT_MODES, getChatModeConfig, isChatMode, type ChatMode } from '@/lib/chat-modes' import type { TeacherTool } from './ToolCard' @@ -51,7 +51,7 @@ type QueuedMessage = { const createId = () => (crypto.randomUUID ? crypto.randomUUID() : String(Date.now())) -const inferChatMode = (tool: TeacherTool, researchMode: boolean): TeraChatMode => { +const inferChatMode = (tool: TeacherTool, researchMode: boolean) => { if (researchMode) return 'research' const searchable = `${tool.name} ${tool.description} ${tool.tags.join(' ')}`.toLowerCase() diff --git a/lib/generate-answer.ts b/lib/generate-answer.ts index fa2df37..c8b7283 100644 --- a/lib/generate-answer.ts +++ b/lib/generate-answer.ts @@ -31,8 +31,6 @@ function omitField, K extends keyof T>(payload: T, return rest } -export async function generateAnswerForPrompt({ prompt, tool, authorId, authorEmail, attachments = [], sessionId, chatId, researchMode = false, chatMode = researchMode ? 'research' : 'general' }: GenerateProps): Promise { - // Get user profile and check limits export async function generateAnswerForPrompt({ prompt, tool, @@ -126,7 +124,6 @@ export async function generateAnswerForPrompt({ chatId: chatId ?? null, resetDate, promptLength: prompt.length, - chatMode, chatMode: normalizedChatMode, }, }) @@ -180,7 +177,6 @@ export async function generateAnswerForPrompt({ } // Generate the AI response - const generationResult = await generateTeacherResponse({ prompt, tool, attachments, history, userId: authorId, researchMode, chatMode }) const generationResult = await generateTeacherResponse({ prompt, tool, diff --git a/lib/generate-types.ts b/lib/generate-types.ts index 7daf896..e9d150e 100644 --- a/lib/generate-types.ts +++ b/lib/generate-types.ts @@ -1,6 +1,4 @@ import type { AttachmentReference } from '@/lib/attachment' - -export type TeraChatMode = 'general' | 'learn' | 'research' | 'build' import type { ChatMode } from '@/lib/ai/chat-modes' export type GenerateProps = { @@ -12,7 +10,6 @@ export type GenerateProps = { sessionId?: string | null chatId?: string researchMode?: boolean - chatMode?: TeraChatMode chatMode?: ChatMode }