legends810's picture
Upload folder using huggingface_hub
d83e271 verified
import { NextRequest, NextResponse } from 'next/server';
import type { ConversationState } from '@/types/conversation';
declare global {
var conversationState: ConversationState | null;
}
// GET: Retrieve current conversation state
export async function GET() {
try {
if (!global.conversationState) {
return NextResponse.json({
success: true,
state: null,
message: 'No active conversation'
});
}
return NextResponse.json({
success: true,
state: global.conversationState
});
} catch (error) {
console.error('[conversation-state] Error getting state:', error);
return NextResponse.json({
success: false,
error: (error as Error).message
}, { status: 500 });
}
}
// POST: Reset or update conversation state
export async function POST(request: NextRequest) {
try {
const { action, data } = await request.json();
switch (action) {
case 'reset':
global.conversationState = {
conversationId: `conv-${Date.now()}`,
startedAt: Date.now(),
lastUpdated: Date.now(),
context: {
messages: [],
edits: [],
projectEvolution: { majorChanges: [] },
userPreferences: {}
}
};
console.log('[conversation-state] Reset conversation state');
return NextResponse.json({
success: true,
message: 'Conversation state reset',
state: global.conversationState
});
case 'clear-old':
// Clear old conversation data but keep recent context
if (!global.conversationState) {
return NextResponse.json({
success: false,
error: 'No active conversation to clear'
}, { status: 400 });
}
// Keep only recent data
global.conversationState.context.messages = global.conversationState.context.messages.slice(-5);
global.conversationState.context.edits = global.conversationState.context.edits.slice(-3);
global.conversationState.context.projectEvolution.majorChanges =
global.conversationState.context.projectEvolution.majorChanges.slice(-2);
console.log('[conversation-state] Cleared old conversation data');
return NextResponse.json({
success: true,
message: 'Old conversation data cleared',
state: global.conversationState
});
case 'update':
if (!global.conversationState) {
return NextResponse.json({
success: false,
error: 'No active conversation to update'
}, { status: 400 });
}
// Update specific fields if provided
if (data) {
if (data.currentTopic) {
global.conversationState.context.currentTopic = data.currentTopic;
}
if (data.userPreferences) {
global.conversationState.context.userPreferences = {
...global.conversationState.context.userPreferences,
...data.userPreferences
};
}
global.conversationState.lastUpdated = Date.now();
}
return NextResponse.json({
success: true,
message: 'Conversation state updated',
state: global.conversationState
});
default:
return NextResponse.json({
success: false,
error: 'Invalid action. Use "reset" or "update"'
}, { status: 400 });
}
} catch (error) {
console.error('[conversation-state] Error:', error);
return NextResponse.json({
success: false,
error: (error as Error).message
}, { status: 500 });
}
}
// DELETE: Clear conversation state
export async function DELETE() {
try {
global.conversationState = null;
console.log('[conversation-state] Cleared conversation state');
return NextResponse.json({
success: true,
message: 'Conversation state cleared'
});
} catch (error) {
console.error('[conversation-state] Error clearing state:', error);
return NextResponse.json({
success: false,
error: (error as Error).message
}, { status: 500 });
}
}