import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useMutation } from '@tanstack/react-query'; import { Link } from 'react-router-dom'; import { Shield, LayoutDashboard } from 'lucide-react'; import toast from 'react-hot-toast'; import { DropZone } from '../components/DropZone'; import { documentsApi } from '../api/client'; import { useAuthStore } from '../store/auth'; import type { Task } from '../types'; export function Check() { const { isAuthenticated } = useAuthStore(); const navigate = useNavigate(); const [file, setFile] = useState(null); const [submittedTask, setSubmittedTask] = useState(null); const upload = useMutation({ mutationFn: () => documentsApi.uploadForCheck(file!), onSuccess: (response) => { const task: Task = response.data; setSubmittedTask(task); toast.success('Файл загружен, проверка начата!'); }, onError: (error: any) => { const msg = error.response?.data?.detail || 'Ошибка загрузки'; if (error.response?.status === 401) { toast.error('Войдите для проверки плагиата'); navigate('/login'); } else { toast.error(msg); } }, }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!file) return; if (!isAuthenticated) { toast.error('Необходима авторизация'); navigate('/login'); return; } upload.mutate(); }; if (submittedTask) { return (

Проверка запущена

Файл {(submittedTask.input_data as any).filename} передан на проверку.

Вы получите email когда проверка завершится. Обычно это занимает 1-3 минуты.

Следить за прогрессом Личный кабинет
); } return (

Проверка плагиата

Загрузите документ для проверки на 4 уровнях: точные совпадения, нечёткий поиск, семантика и LLM-анализ парафраза.

setFile(null)} /> {!isAuthenticated && (
Войдите или{' '} зарегистрируйтесь{' '} для проверки плагиата
)} {/* Описание уровней */}

4 уровня проверки:

1. Winnowing + MinHash — точные и нечёткие совпадения (~мс)
2. n-граммы + Jaccard — перестановки слов (~сек)
3. FAISS GPU cosine — семантическая близость (~мс)
4. Ollama Llama3 — анализ парафраза (~2 сек)
); }