/
DME
/
NotesApp
Обзор
Документация
Войти
/
DME
/
NotesApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/server/api/routers/ai.ts
60 строк
3 KB
Karasique333
Commit
19 июн 2025, 15:09
19 июн 2025, 15:09
d96c829
Код
Авторство
О чём код?
import { publicProcedure, createTRPCRouter } from '@/server/api/trpc' import { note, task } from '@/server/db/schema' // ✅ вот это важно import { eq } from 'drizzle-orm' import OpenAI from 'openai' import { z } from 'zod' import { authProcedure } from '@/server/api/trpc' const openai = new OpenAI({ apiKey: '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', baseURL: 'https://openrouter.ai/api/v1', defaultHeaders: { 'HTTP-Referer': 'http://localhost:3000', 'X-Title': 'note-taking-web-app2', }, }) export const aiRouter = createTRPCRouter({ analyze: authProcedure .input(z.object({ content: z.string().optional() })) .mutation(async ({ ctx }) => { console.log('AI ANALYSIS STARTED') console.log('SESSION:', ctx.session) const notes = await ctx.db.select().from(note).where(eq(note.userId, ctx.session.userId)) const tasks = await ctx.db.select().from(task).where(eq(task.userId, ctx.session.userId)) console.log('NOTES:', notes) console.log('TASKS:', tasks) const prompt = [ 'Вот список всех заметок и задач пользователя:', ...notes.map(n => { const title = n.title ?? '' const content = n.content ?? '' return `Заметка: ${title}. ${content}` }), ...tasks.map(t => { const title = t.title ?? '' const desc = t.description ?? '' const date = t.dueDate instanceof Date ? t.dueDate.toISOString() : 'не указан' return `Задача: ${title}. ${desc} Срок: ${date}` }), 'Проведи анализ заметок и задач пользователя, потом дай свою оценку, советы, как лучше сделать поставленные задачи. При анализе опускай названия заметок и прочую информацию, которую писал пользователь и которую он следовательно сам знает, также обращайся к пользователю на вы', ].join('\n\n') console.log('📝 PROMPT:', prompt) const completion = await openai.chat.completions.create({ model: 'deepseek/deepseek-prover-v2:free', messages: [ { role: 'system', content: 'Ты ассистент веб-приложения для ведения заметок, который анализирует задачи и заметки. Учитывай, что ты общаешься напрямую с пользователем' }, { role: 'user', content: prompt } ] }) return { message: completion.choices[0]?.message?.content || 'Нет ответа.', } }), })