fix simulator

This commit is contained in:
songtianlun 2025-08-09 00:35:46 +08:00
parent a8a852051f
commit e1ecc48460
2 changed files with 73 additions and 15 deletions

View File

@ -0,0 +1,56 @@
import { NextRequest, NextResponse } from 'next/server'
import { prisma } from '@/lib/prisma'
import { createServerSupabaseClient } from '@/lib/supabase-server'
// GET /api/simulator/prompts - 获取用户的提示词列表,包含所有版本信息用于模拟器
export async function GET(request: NextRequest) {
try {
const supabase = await createServerSupabaseClient()
const { data: { user } } = await supabase.auth.getUser()
if (!user) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
const { searchParams } = new URL(request.url)
const limit = parseInt(searchParams.get('limit') || '100')
// 获取用户的提示词,包含所有版本
const prompts = await prisma.prompt.findMany({
where: {
userId: user.id,
},
include: {
versions: {
orderBy: { version: 'desc' },
select: {
id: true,
version: true,
content: true,
}
}
},
orderBy: { updatedAt: 'desc' },
take: limit,
})
// 转换数据结构,确保包含所有版本信息
const promptsWithVersions = prompts.map(prompt => ({
id: prompt.id,
name: prompt.name,
content: prompt.content,
versions: prompt.versions
}))
return NextResponse.json({
prompts: promptsWithVersions
})
} catch (error) {
console.error('Error fetching prompts for simulator:', error)
return NextResponse.json(
{ error: 'Failed to fetch prompts' },
{ status: 500 }
)
}
}

View File

@ -1,6 +1,6 @@
'use client'
import { useState, useEffect } from 'react'
import { useState, useEffect, useCallback } from 'react'
import { useTranslations } from 'next-intl'
import { useAuthUser } from '@/hooks/useAuthUser'
import { useRouter } from 'next/navigation'
@ -69,23 +69,14 @@ export default function NewSimulatorRunPage() {
const [frequencyPenalty, setFrequencyPenalty] = useState('0')
const [presencePenalty, setPresencePenalty] = useState('0')
const selectedPrompt = prompts.find(p => p.id === selectedPromptId)
const selectedVersion = selectedPrompt?.versions.find(v => v.id === selectedVersionId)
const selectedModel = models.find(m => m.id === selectedModelId)
const promptContent = selectedVersion?.content || selectedPrompt?.content || ''
useEffect(() => {
if (!authLoading && user) {
fetchData()
}
}, [user, authLoading])
const fetchData = async () => {
const fetchData = useCallback(async () => {
if (!user) return
try {
setIsLoading(true)
const [promptsResponse, modelsResponse] = await Promise.all([
fetch('/api/prompts?limit=100'),
fetch('/api/simulator/prompts?limit=100'),
fetch('/api/simulator/models')
])
@ -107,7 +98,18 @@ export default function NewSimulatorRunPage() {
} finally {
setIsLoading(false)
}
}
}, [user])
const selectedPrompt = prompts.find(p => p.id === selectedPromptId)
const selectedVersion = selectedPrompt?.versions.find(v => v.id === selectedVersionId)
const selectedModel = models.find(m => m.id === selectedModelId)
const promptContent = selectedVersion?.content || selectedPrompt?.content || ''
useEffect(() => {
if (!authLoading && user) {
fetchData()
}
}, [user, authLoading, fetchData])
const handlePromptChange = (promptId: string) => {
setSelectedPromptId(promptId)