

{"id":6953,"date":"2024-08-17T09:42:40","date_gmt":"2024-08-17T09:42:40","guid":{"rendered":"https:\/\/aigender.net\/?page_id=6953"},"modified":"2025-06-20T06:22:03","modified_gmt":"2025-06-20T06:22:03","slug":"naucnik","status":"publish","type":"page","link":"https:\/\/aigender.net\/index.php\/naucnik\/","title":{"rendered":"\u041d\u0430\u0443\u0447\u043d\u043e \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 AI \u0410\u0433\u0435\u043d\u0442"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"mk\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>\u041d\u0430\u0443\u0447\u0435\u043d \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 \u0411\u043e\u0442, \u00a9\u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u0437\u0430 \u0440\u043e\u0434\u043e\u0432\u0438 \u0441\u0442\u0443\u0434\u0438\u0438<\/title>\n    <style>\n        body {\n            display: flex;\n            flex-direction: column;\n            height: 100vh;\n            margin: 0;\n            font-family: Arial, sans-serif;\n            background-color: #121212;\n            color: #e0e0e0;\n        }\n        .top-container {\n            display: flex;\n            flex-direction: column;\n            padding: 10px;\n            background-color: #1f1f1f;\n            border-bottom: 1px solid #333;\n        }\n        .top-container h1 {\n            margin: 0;\n            padding-bottom: 10px;\n            font-size: 24px;\n            color: #e0e0e0;\n        }\n        .api-key-container, .system-prompt-container {\n            margin-bottom: 10px;\n        }\n        .api-key-container input, .system-prompt-container input {\n            width: 300px;\n            padding: 10px;\n            font-size: 11px;\n            background-color: #2c2c2c;\n            color: #e0e0e0;\n            border: 1px solid #444;\n        }\n        .container {\n            display: flex;\n            flex-direction: column;\n            overflow: hidden;\n            padding: 10px;\n        }\n\n        .row {\n            display: flex;\n            flex-direction: row;\n            margin-bottom: 20px;\n        }\n\n        .window {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            border: 1px solid #333;\n            margin: 10px;\n            padding: 10px;\n            background-color: #1f1f1f;\n            color: #e0e0e0;\n            height: 700px;\n        }\n\n        .chat-container {\n            flex: 1;\n            overflow-y: auto;\n            padding: 10px;\n            border: 1px solid #333;\n            margin-bottom: 10px;\n            background-color: #2c2c2c;\n            border-radius: 8px;\n            height: calc(100% - 40px);\n        }\n\n        .input-container {\n            display: flex;\n            flex-wrap: wrap;\n            justify-content: space-between;\n        }\n        .input-container textarea {\n            flex: 1;\n            padding: 10px;\n            font-size: 11px;\n            background-color: #2c2c2c;\n            color: #e0e0e0;\n            border: 1px solid #444;\n            border-radius: 4px;\n            height: 60px;\n            resize: none;\n        }\n        .input-container button, .input-container input[type=\"file\"] {\n            padding: 5px 8px;\n            font-size: 10px;\n            margin: 5px;\n            border: 1px solid #444;\n            border-radius: 4px;\n            background-color: #555;\n            color: white;\n            cursor: pointer;\n            flex-shrink: 0;\n        }\n        .save-button, .stop-button, .reset-button, .delete-button {\n            margin: 5px;\n            padding: 5px 8px;\n            font-size: 10px;\n            border: 1px solid #444;\n            border-radius: 4px;\n            background-color: #555;\n            color: white;\n            cursor: pointer;\n        }\n        .message {\n            margin-bottom: 10px;\n            padding: 10px;\n            border-radius: 8px;\n        }\n        .user-message {\n            background-color: #1e88e5;\n            color: #ffffff;\n            align-self: flex-end;\n        }\n        .bot-message {\n            background-color: #333;\n            color: #ffffff;\n            align-self: flex-start;\n            font-size: 13px; \/* \u041f\u0440\u043e\u043c\u0435\u043d\u0435\u0442\u0435 \u0458\u0430 \u0432\u0440\u0435\u0434\u043d\u043e\u0441\u0442\u0430 \u0437\u0430 \u0434\u0430 \u0433\u043e \u043f\u0440\u0438\u043b\u0430\u0433\u043e\u0434\u0438\u0442\u0435 \u0444\u043e\u043d\u0442\u043e\u0442 *\/\n        }\n        .error-message {\n            background-color: #e53935;\n            color: #ffffff;\n        }\n        .follow-up-question {\n            background-color: #ffb74d;\n            color: #ffffff;\n            align-self: flex-start;\n        }\n        .editable {\n            border: 1px dashed #007bff;\n            padding: 5px;\n        }\n        .copy-button, .edit-button, .clear-context-button, .danger-button {\n            background: none;\n            border: none;\n            color: #fff;\n            font-size: 14px;\n            cursor: pointer;\n            margin-left: 5px;\n        }\n        .copy-button:hover, .edit-button:hover, .clear-context-button:hover, .danger-button:hover {\n            color: #00f;\n        }\n        .copy-button[title]:hover:after, .edit-button[title]:hover:after, .clear-context-button[title]:hover:after, .danger-button[title]:hover:after {\n            content: attr(title);\n            position: absolute;\n            background: #333;\n            color: #fff;\n            padding: 5px 10px;\n            border-radius: 5px;\n            top: -25px;\n            right: 0;\n            white-space: nowrap;\n        }\n        .danger-button {\n            color: red;\n        }\n        .new-comment {\n            border-left: 4px solid #1e88e5;\n            padding-left: 10px;\n        }\n        .new-reference {\n            border-left: 4px solid #ffb74d;\n            padding-left: 10px;\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"top-container\">\n        <h1>\u041d\u0430\u0443\u0447\u043d\u043e \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 AI \u0410\u0433\u0435\u043d\u0442, \u00a9 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u0437\u0430 \u0440\u043e\u0434\u043e\u0432\u0438 \u0441\u0442\u0443\u0434\u0438\u0438, \u0424\u0438\u043b\u043e\u0437\u043e\u0444\u0441\u043a\u0438 \u0444\u0430\u043a\u0443\u043b\u0442\u0435\u0442-\u0421\u043a\u043e\u043f\u0458\u0435<\/h1>\n        <div class=\"system-prompt-container\" style=\"display:none;\">\n            <input type=\"text\" id=\"system-prompt\" value=\"\u041c\u043e\u043b\u0430\u043c \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438 \u043d\u0430 \u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 \u0458\u0430\u0437\u0438\u043a. \u041e\u0434\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435 \u0442\u0440\u0435\u0431\u0430 \u0434\u0430 \u0431\u0438\u0434\u0430\u0442 \u0434\u0435\u0442\u0430\u043b\u043d\u0438 \u0438 \u043f\u0440\u043e\u0448\u0438\u0440\u0435\u043d\u0438.\">\n        <\/div>\n    <\/div>\n\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"window\" id=\"summary-window\">\n                <h6>\u0410\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u043e \u041f\u0440\u0430\u0448\u0430\u045a\u0435<\/h6>\n                <div class=\"chat-container\" id=\"summary-container\"><\/div>\n                <div class=\"input-container\">\n                    <textarea id=\"summary-input\" placeholder=\"\u0412\u043d\u0435\u0441\u0435\u0442\u0435 \u043f\u043e\u0440\u0430\u043a\u0430 ...\" maxlength=\"123904\"><\/textarea>\n                <\/div>\n                <div class=\"input-container\">\n                    <button onclick=\"sendSummaryMessage()\">\u0418\u0441\u043f\u0440\u0430\u0442\u0438<\/button>\n                    <button onclick=\"generateResearch()\">\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435<\/button>\n                    <button onclick=\"stopResponse()\" class=\"stop-button\">\u0421\u0442\u043e\u043f<\/button>\n                    <button class=\"reset-button\" onclick=\"resetAll()\">\u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438<\/button>\n                    <button class=\"copy-button\" onclick=\"copyContent('summary-container')\" title=\"\u041a\u043e\u043f\u0438\u0440\u0430\u0458\">\ud83d\udccb<\/button>\n                    <button class=\"edit-button\" onclick=\"toggleEditMode('summary-container')\" title=\"\u0423\u0440\u0435\u0434\u0438\">\u270f\ufe0f<\/button>\n                <\/div>\n            <\/div>\n\n            <div class=\"window\" id=\"new-window\">\n                <h6>\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442<\/h6>\n                <div class=\"chat-container\" id=\"file-list-container\"><\/div>\n                <div class=\"input-container\">\n    <input type=\"file\" id=\"file-upload\" multiple accept=\".pdf,.docx\" \/>\n    <button onclick=\"uploadFiles()\">\u041f\u0440\u043e\u0446\u0435\u0441\u0438\u0440\u0430\u0458<\/button>\n    <div id=\"remaining-characters\">\u041f\u0440\u0435\u043e\u0441\u0442\u0430\u043d\u0430\u0442\u0438 \u0437\u043d\u0430\u0446\u0438: 300000<\/div>\n    <button onclick=\"saveProject()\">\u0421\u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442<\/button>\n    <input type=\"file\" id=\"project-upload\" accept=\".json\" style=\"display:none;\" \/>\n    <button onclick=\"document.getElementById('project-upload').click()\">\u0412\u0447\u0438\u0442\u0430\u0458 \u043f\u0440\u043e\u0435\u043a\u0442<\/button>\n<\/div>\n\n                <textarea id=\"hidden-content\" style=\"display:none;\"><\/textarea>\n            <\/div>\n        <\/div>\n\n        <div class=\"row\">\n            <div class=\"window\" id=\"method-window\">\n                <h6>\u041c\u0435\u0442\u043e\u0434<\/h6>\n                <div class=\"chat-container\" id=\"method-container\"><\/div>\n                <div class=\"input-container\">\n                    <textarea id=\"method-prompt\" placeholder=\"\u041f\u0440\u043e\u043c\u043f\u0442 \u0437\u0430 \u043c\u0435\u0442\u043e\u0434\" maxlength=\"123904\"><\/textarea>\n                    <button onclick=\"generateMethod()\">\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458 \u041c\u0435\u0442\u043e\u0434<\/button>\n                    <button class=\"copy-button\" onclick=\"copyContent('method-container')\" title=\"\u041a\u043e\u043f\u0438\u0440\u0430\u0458\">\ud83d\udccb<\/button>\n                    <button class=\"edit-button\" onclick=\"toggleEditMode('method-container')\" title=\"\u0423\u0440\u0435\u0434\u0438\">\u270f\ufe0f<\/button>\n                    <button class=\"reset-button\" onclick=\"resetMethod()\">\u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u043e\u0434\u0433\u043e\u0432\u043e\u0440<\/button>\n                <\/div>\n            <\/div>\n\n            <div class=\"window\" id=\"findings-window\">\n                <h6>\u041d\u0430\u043e\u0434\u0438 \u0438 \u0420\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438<\/h6>\n                <div class=\"chat-container\" id=\"findings-container\"><\/div>\n                <div class=\"input-container\">\n                    <textarea id=\"findings-prompt\" placeholder=\"\u041f\u0440\u043e\u043c\u043f\u0442 \u0437\u0430 \u043d\u0430\u043e\u0434\u0438\" maxlength=\"123904\"><\/textarea>\n                    <button onclick=\"generateFindings()\">\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458 \u041d\u0430\u043e\u0434\u0438<\/button>\n                    <button class=\"copy-button\" onclick=\"copyContent('findings-container')\" title=\"\u041a\u043e\u043f\u0438\u0440\u0430\u0458\">\ud83d\udccb<\/button>\n                    <button class=\"edit-button\" onclick=\"toggleEditMode('findings-container')\" title=\"\u0423\u0440\u0435\u0434\u0438\">\u270f\ufe0f<\/button>\n                    <button class=\"reset-button\" onclick=\"resetFindings()\">\u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u043e\u0434\u0433\u043e\u0432\u043e\u0440<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"row\">\n            <div class=\"window\" id=\"discussion-window\">\n                <h6>\u0414\u0438\u0441\u043a\u0443\u0441\u0438\u0458\u0430 \u0438 \u0415\u0432\u0430\u043b\u0443\u0430\u0446\u0438\u0458\u0430<\/h6>\n                <div class=\"chat-container\" id=\"discussion-container\"><\/div>\n                <div class=\"input-container\">\n                    <textarea id=\"discussion-prompt\" placeholder=\"\u041f\u0440\u043e\u043c\u043f\u0442 \u0437\u0430 \u0434\u0438\u0441\u043a\u0443\u0441\u0438\u0458\u0430\" maxlength=\"123904\"><\/textarea>\n                    <button onclick=\"generateDiscussion()\">\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458 \u0414\u0438\u0441\u043a\u0443\u0441\u0438\u0458\u0430<\/button>\n                    <button class=\"copy-button\" onclick=\"copyContent('discussion-container')\" title=\"\u041a\u043e\u043f\u0438\u0440\u0430\u0458\">\ud83d\udccb<\/button>\n                    <button class=\"edit-button\" onclick=\"toggleEditMode('discussion-container')\" title=\"\u0423\u0440\u0435\u0434\u0438\">\u270f\ufe0f<\/button>\n                    <button class=\"reset-button\" onclick=\"resetDiscussion()\">\u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u043e\u0434\u0433\u043e\u0432\u043e\u0440<\/button>\n                <\/div>\n            <\/div>\n\n            <div class=\"window\" id=\"final-text-window\">\n                <h6>\u0417\u0430\u0432\u0440\u0448\u0435\u043d \u0422\u0435\u043a\u0441\u0442<\/h6>\n                <div class=\"chat-container\" id=\"final-text-container\"><\/div>\n                <div class=\"input-container\">\n                    <label for=\"page-count\">\u0431\u0440. \u0441\u0442\u0440.:<\/label>\n                    <select id=\"page-count\">\n                        <option value=\"5\">5<\/option>\n                        <option value=\"6\">6<\/option>\n                        <option value=\"7\">7<\/option>\n                        <option value=\"8\">8<\/option>\n                        <option value=\"9\">9<\/option>\n                        <option value=\"10\">10<\/option>\n                        <option value=\"11\">11<\/option>\n                        <option value=\"12\">12<\/option>\n                        <option value=\"13\">13<\/option>\n                        <option value=\"14\">14<\/option>\n                        <option value=\"15\">15<\/option>\n                        <option value=\"16\">16<\/option>\n                    <\/select>\n                    <textarea id=\"final-text-prompt\" placeholder=\"\u041f\u0440\u043e\u043c\u043f\u0442 \u0437\u0430 \u0437\u0430\u0432\u0440\u0448\u0435\u043d \u0442\u0435\u043a\u0441\u0442\" maxlength=\"123904\"><\/textarea>\n                    <button onclick=\"generateFinalText()\" style=\"padding: 5px 6px; font-size: 9px;\">\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458<\/button>\n                    <button class=\"copy-button\" onclick=\"copyContent('final-text-container')\" title=\"\u041a\u043e\u043f\u0438\u0440\u0430\u0458\" style=\"padding: 5px 6px; font-size: 9px;\">\ud83d\udccb<\/button>\n                    <button class=\"edit-button\" onclick=\"toggleEditMode('final-text-container')\" title=\"\u0423\u0440\u0435\u0434\u0438\" style=\"padding: 5px 6px; font-size: 9px;\">\u270f\ufe0f<\/button>\n                    <button class=\"save-button\" onclick=\"saveFinalTextAsTXT()\" style=\"padding: 5px 6px; font-size: 9px;\">\u0421\u043d\u0438\u043c\u0438<\/button>\n                    <button class=\"reset-button\" onclick=\"resetFinalText()\" style=\"padding: 5px 6px; font-size: 9px;\">\u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        document.addEventListener('DOMContentLoaded', function () {\n            const summaryContainer = document.getElementById('summary-container');\n            const fileListContainer = document.getElementById('file-list-container');\n            const hiddenContent = document.getElementById('hidden-content');\n            const methodContainer = document.getElementById('method-container');\n            const findingsContainer = document.getElementById('findings-container');\n            const discussionContainer = document.getElementById('discussion-container');\n            const finalTextContainer = document.getElementById('final-text-container');\n            let apiKey = '';\n            let totalTextLength = 0;\n            let researchQuestionResponse = '';\n            let methodResponse = '';\n            let findingsResponse = '';\n            let discussionResponse = '';\n\n            \/\/ Fetch the API key when the page loads\n            fetch('https:\/\/aigender.net\/wp-json\/api-key-manager\/v1\/get-key')\n                .then(response => {\n                    if (!response.ok) {\n                        throw new Error(`HTTP error! status: ${response.status}`);\n                    }\n                    return response.json();\n                })\n                .then(data => {\n                    apiKey = data.openai_api_key;\n                    console.log('API Key fetched successfully:', apiKey);\n                    if (!apiKey) {\n                        addMessage('API \u043a\u043b\u0443\u0447\u043e\u0442 \u043d\u0435 \u0435 \u0434\u043e\u0441\u0442\u0430\u043f\u0435\u043d.', 'bot');\n                    }\n                })\n                .catch(error => {\n                    console.error('Error fetching API key:', error);\n                    addMessage('\u0421\u0435 \u0441\u043b\u0443\u0447\u0438 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0434\u043e\u0431\u0438\u0432\u0430\u045a\u0435 \u043d\u0430 API \u043a\u043b\u0443\u0447\u043e\u0442.', 'bot');\n                });\n\n            let stopRequested = false;\n\n            function loadContext() {\n                hiddenContent.value = '';\n                totalTextLength = 0;\n            }\n\n            loadContext();\n\n            async function fetch_openai_data(url, requestBody) {\n                const response = await fetch(url, {\n                    method: 'POST',\n                    headers: {\n                        'Content-Type': 'application\/json',\n                        'Authorization': `Bearer ${apiKey}`\n                    },\n                    body: JSON.stringify(requestBody)\n                });\n\n                if (!response.ok) {\n                    const errorText = await response.text();\n                    console.error(\"API response:\", errorText);\n                    throw new Error('Network response was not ok');\n                }\n\n                const data = await response.json();\n                return data;\n            }\n\n            async function fetch_openai_data_streaming(url, requestBody, container) {\n                const response = await fetch(url, {\n                    method: 'POST',\n                    headers: {\n                        'Content-Type': 'application\/json',\n                        'Authorization': `Bearer ${apiKey}`\n                    },\n                    body: JSON.stringify(requestBody)\n                });\n\n                if (!response.ok) {\n                    const errorText = await response.text();\n                    console.error(\"API response:\", errorText);\n                    throw new Error('Network response was not ok');\n                }\n\n                const reader = response.body.getReader();\n                const decoder = new TextDecoder('utf-8');\n                let result = '';\n                const delay = ms => new Promise(resolve => setTimeout(resolve, ms));\n\n                const messageElement = document.createElement('div');\n                messageElement.className = `message bot-message`;\n                container.appendChild(messageElement);\n\n                while (true) {\n                    const { value, done } = await reader.read();\n                    if (done || stopRequested) break;\n                    const chunk = decoder.decode(value, { stream: true });\n                    const lines = chunk.split('\\n').filter(Boolean);\n                    for (const line of lines) {\n                        if (line.startsWith('data: ')) {\n                            const jsonString = line.slice(6).trim();\n                            if (jsonString === \"[DONE]\") {\n                                console.log(\"Stream ended with [DONE]\");\n                                continue;\n                            }\n                            if (jsonString) {\n                                try {\n                                    const data = JSON.parse(jsonString);\n                                    if (data.choices && data.choices[0] && data.choices[0].delta && data.choices[0].delta.content) {\n                                        const partialResponse = data.choices[0].delta.content;\n                                        result += partialResponse;\n                                        messageElement.innerText = result;\n                                        container.scrollTop = container.scrollHeight;\n                                        await delay(50);\n                                    }\n                                } catch (error) {\n                                    console.error(\"Error parsing JSON:\", error);\n                                    console.error(\"JSON String:\", jsonString);\n                                }\n                            }\n                        }\n                    }\n                }\n\n                stopRequested = false;\n                return result;\n            }\n\n            \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u0458\u0430 \u0437\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0442\u0438\n            function isDuplicate(message, container) {\n                const messages = container.querySelectorAll('.message.bot-message');\n                for (let msg of messages) {\n                    if (msg.innerText === message) {\n                        return true;\n                    }\n                }\n                return false;\n            }\n\n            \/\/ \u0410\u0436\u0443\u0440\u0438\u0440\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0458\u0430 sendSummaryMessage\n            async function sendSummaryMessage() {\n                const summaryInput = document.getElementById('summary-input').value;\n\n                if (summaryInput.trim() === '' || apiKey.trim() === '') {\n                    alert('\u0412\u0435 \u043c\u043e\u043b\u0438\u043c\u0435 \u0432\u043d\u0435\u0441\u0435\u0442\u0435 \u043f\u043e\u0440\u0430\u043a\u0430 \u0438 API \u043a\u043b\u0443\u0447.');\n                    return;\n                }\n\n                const contextMessage = hiddenContent.value.trim() !== '' ? hiddenContent.value : '';\n\n                addMessageToContainer(summaryContainer, \"\u041a\u043e\u0440\u0438\u0441\u043d\u0438\u043a: \" + summaryInput, 'user-message');\n\n                try {\n                    const requestBody = {\n                        model: \"gpt-4.1-2025-04-14\",\n                        messages: [\n                                                        { role: 'system', content: '\u0422\u0438 \u0441\u0435 \u0432\u0438\u043a\u0430\u0448 \u0418\u0420\u0421 \u0438 \u0442\u0438 \u0441\u0438 \u0430\u0441\u0438\u0441\u0442\u0435\u043d\u0442 \u043d\u0430 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u0442 \u0437\u0430 \u0440\u043e\u0434\u043e\u0432\u0438 \u0441\u0442\u0443\u0434\u0438\u0438. \u041c\u043e\u043b\u0430\u043c \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438 \u043d\u0430 \u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 \u0458\u0430\u0437\u0438\u043a. \u041e\u0434\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435 \u0442\u0440\u0435\u0431\u0430 \u0434\u0430 \u0431\u0438\u0434\u0430\u0442 \u0434\u0435\u0442\u0430\u043b\u043d\u0438 \u0438 \u043f\u0440\u043e\u0448\u0438\u0440\u0435\u043d\u0438. \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u043d\u0430 \u0442\u0432\u043e\u0438\u0442\u0435 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438 \u0441\u0435 \u043e\u0434 \u0440\u043e\u0434\u043e\u0432\u0430\u0442\u0430 \u0442\u0435\u043e\u0440\u0438\u0458\u0430 \u0438 \u0444\u0435\u043c\u0438\u043d\u0438\u0437\u043c\u043e\u0442' },\n                            { role: 'user', content: contextMessage },\n                            { role: 'user', content: summaryInput }\n                        ],\n                        max_tokens: 4096,\n                        stream: true\n                    };\n\n                    const botResponse = await fetch_openai_data_streaming('https:\/\/api.openai.com\/v1\/chat\/completions', requestBody, summaryContainer);\n                    \n                    if (!isDuplicate(botResponse, summaryContainer)) {\n    addMessageToContainer(summaryContainer, botResponse, 'bot-message');\n} else {\n    \/\/ alert('\u0411\u043e\u0442\u043e\u0442 \u0432\u0435\u045c\u0435 \u0433\u043e \u0434\u0430\u0434\u0435 \u043e\u0432\u043e\u0458 \u043e\u0434\u0433\u043e\u0432\u043e\u0440.'); \/\/ \u041e\u0432\u043e\u0458 \u0430\u043b\u0435\u0440\u0442 \u0435 \u043a\u043e\u043c\u0435\u043d\u0442\u0438\u0440\u0430\u043d \u0438\u043b\u0438 \u043e\u0442\u0441\u0442\u0440\u0430\u043d\u0435\u0442\n}\n                } catch (error) {\n                    console.error(\"Error getting bot response:\", error);\n                    addMessageToContainer(summaryContainer, \"\u0413\u0440\u0435\u0448\u043a\u0430: \" + error.message, 'error-message');\n                }\n\n                document.getElementById('summary-input').value = '';\n            }\n\n            async function generateResearch() {\n                await generateResearchQuestion();\n                await generateMethod();\n                await generateFindings();\n                await generateDiscussion();\n            }\n\n            async function generateResearchQuestion() {\n                const contextMessage = hiddenContent.value.trim() !== '' ? hiddenContent.value : '';\n\n                try {\n                    const requestBody = {\n                        model: \"gpt-4.1-2025-04-14\",\n                        messages: [\n                            { role: 'system', content: '\u0422\u0438 \u0441\u0435 \u0432\u0438\u043a\u0430\u0448 \u0418\u0420\u0421 \u0438 \u0442\u0438 \u0441\u0438 \u0430\u0441\u0438\u0441\u0442\u0435\u043d\u0442 \u043d\u0430 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u0442 \u0437\u0430 \u0440\u043e\u0434\u043e\u0432\u0438 \u0441\u0442\u0443\u0434\u0438\u0438. \u041c\u043e\u043b\u0430\u043c \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438 \u043d\u0430 \u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 \u0458\u0430\u0437\u0438\u043a. \u041e\u0434\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435 \u0442\u0440\u0435\u0431\u0430 \u0434\u0430 \u0431\u0438\u0434\u0430\u0442 \u0434\u0435\u0442\u0430\u043b\u043d\u0438 \u0438 \u043f\u0440\u043e\u0448\u0438\u0440\u0435\u043d\u0438.' },\n                            { role: 'user', content: `\u0412\u0440\u0437 \u043e\u0441\u043d\u043e\u0432\u0430 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u043e\u0434 \u043b\u043e\u043a\u0430\u043b\u043d\u0430\u0442\u0430 \u0434\u0430\u0442\u0430 \u0431\u0430\u0437\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u0430\u0458 \u043e\u0440\u0433\u0438\u043d\u0430\u043b\u0435\u043d \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u043e \u043f\u0440\u0430\u0448\u0430\u045a\u0435 \u0438 \u0434\u0435\u0444\u0438\u043d\u0438\u0440\u0430\u0458 \u0445\u0438\u043f\u043e\u0442\u0435\u0437\u0438. ${contextMessage}` }\n                        ],\n                        max_tokens: 4096,\n                        stream: true\n                    };\n\n                    researchQuestionResponse = await fetch_openai_data_streaming('https:\/\/api.openai.com\/v1\/chat\/completions', requestBody, summaryContainer);\n                    \n                    if (!isDuplicate(researchQuestionResponse, summaryContainer)) {\n                        addMessageToContainer(summaryContainer, researchQuestionResponse, 'bot-message');\n                    } else {\n                        alert('\u0411\u043e\u0442\u043e\u0442 \u0432\u0435\u045c\u0435 \u0433\u043e \u0434\u0430\u0434\u0435 \u043e\u0432\u043e\u0458 \u043e\u0434\u0433\u043e\u0432\u043e\u0440.');\n                    }\n                } catch (error) {\n                    console.error(\"Error getting bot response:\", error);\n                    addMessageToContainer(summaryContainer, \"\u0413\u0440\u0435\u0448\u043a\u0430: \" + error.message, 'error-message');\n                }\n            }\n\n            async function generateMethod() {\n    const contextMessage = hiddenContent.value.trim();\n    const methodPrompt = document.getElementById('method-prompt').value;\n    if (apiKey.trim() === '') {\n        alert('\u0412\u0435 \u043c\u043e\u043b\u0438\u043c\u0435 \u0432\u043d\u0435\u0441\u0435\u0442\u0435 API \u043a\u043b\u0443\u0447.');\n        return;\n    }\n\n    try {\n        const requestBody = {\n            model: \"gpt-4.1-2025-04-14\",\n            messages: [\n                { role: 'system', content: '\u0422\u0432\u043e\u0458\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0435 \u0434\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u0430\u0448 \u043c\u0435\u0442\u043e\u0434\u0438 \u0437\u0430 \u0441\u043f\u0440\u043e\u0432\u0435\u0434\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0432\u0440\u0437 \u043e\u0441\u043d\u043e\u0432\u0430 \u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0442, \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u043e\u0442\u043e \u043f\u0440\u0430\u0448\u0430\u045a\u0435 \u0438 \u0445\u0438\u043f\u043e\u0442\u0435\u0437\u0438\u0442\u0435.' },\n                { role: 'user', content: `\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u043e\u0434 \u043b\u043e\u043a\u0430\u043b\u043d\u0430\u0442\u0430 \u0431\u0430\u0437\u0430: ${contextMessage}` },\n                { role: 'user', content: `\u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u043e \u043f\u0440\u0430\u0448\u0430\u045a\u0435 \u0438 \u0445\u0438\u043f\u043e\u0442\u0435\u0437\u0438: ${researchQuestionResponse}` },\n                { role: 'user', content: `\u0414\u0435\u0444\u0438\u043d\u0438\u0440\u0430\u0458 \u0441\u043e\u043e\u0434\u0432\u0435\u0442\u043d\u0438 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u0438 \u0437\u0430 \u0440\u0435\u0448\u0430\u0432\u0430\u045a\u0435 \u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0445\u0438\u043f\u043e\u0442\u0435\u0437\u0438\u0442\u0435. ${methodPrompt}` }\n            ],\n            max_tokens: 4096,\n            stream: true\n        };\n\n        methodResponse = await fetch_openai_data_streaming('https:\/\/api.openai.com\/v1\/chat\/completions', requestBody, methodContainer);\n    } catch (error) {\n        console.error(\"Error generating method:\", error);\n        addMessageToContainer(methodContainer, \"\u0413\u0440\u0435\u0448\u043a\u0430: \" + error.message, 'error-message');\n    }\n}\n\n\n            async function generateFindings() {\n    const contextMessage = hiddenContent.value.trim();\n    const findingsPrompt = document.getElementById('findings-prompt').value;\n    if (apiKey.trim() === '') {\n        alert('\u0412\u0435 \u043c\u043e\u043b\u0438\u043c\u0435 \u0432\u043d\u0435\u0441\u0435\u0442\u0435 API \u043a\u043b\u0443\u0447.');\n        return;\n    }\n\n    try {\n        const requestBody = {\n            model: \"gpt-4.1-2025-04-14\",\n            messages: [\n                { role: 'system', content: '\u0422\u0432\u043e\u0458\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0435 \u0434\u0430 \u0433\u0438 \u043f\u0440\u0435\u0442\u0441\u0442\u0430\u0432\u0438\u0448 \u043d\u0430\u043e\u0434\u0438\u0442\u0435 \u0438 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438\u0442\u0435 \u0432\u0440\u0437 \u043e\u0441\u043d\u043e\u0432\u0430 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u0442\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434\u0438 \u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u0438\u0442\u0435 \u043f\u043e\u0434\u0430\u0442\u043e\u0446\u0438.' },\n                { role: 'user', content: `\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u043e\u0434 \u043b\u043e\u043a\u0430\u043b\u043d\u0430\u0442\u0430 \u0431\u0430\u0437\u0430: ${contextMessage}` },\n                { role: 'user', content: `\u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u043e \u043f\u0440\u0430\u0448\u0430\u045a\u0435 \u0438 \u0445\u0438\u043f\u043e\u0442\u0435\u0437\u0438: ${researchQuestionResponse}` },\n                { role: 'user', content: `\u041c\u0435\u0442\u043e\u0434\u0438: ${methodResponse}` },\n                { role: 'user', content: `\u041f\u0440\u0435\u0442\u0441\u0442\u0430\u0432\u0438 \u0433\u0438 \u043d\u0430\u043e\u0434\u0438\u0442\u0435 \u0438 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438\u0442\u0435 \u0431\u0430\u0437\u0438\u0440\u0430\u043d\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u0442\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0442\u0435. ${findingsPrompt}` }\n            ],\n            max_tokens: 4096,\n            stream: true\n        };\n\n        findingsResponse = await fetch_openai_data_streaming('https:\/\/api.openai.com\/v1\/chat\/completions', requestBody, findingsContainer);\n    } catch (error) {\n        console.error(\"Error generating findings:\", error);\n        addMessageToContainer(findingsContainer, \"\u0413\u0440\u0435\u0448\u043a\u0430: \" + error.message, 'error-message');\n    }\n}\n\n\n            async function generateDiscussion() {\n    const contextMessage = hiddenContent.value.trim();\n    const discussionPrompt = document.getElementById('discussion-prompt').value;\n    if (apiKey.trim() === '') {\n        alert('\u0412\u0435 \u043c\u043e\u043b\u0438\u043c\u0435 \u0432\u043d\u0435\u0441\u0435\u0442\u0435 API \u043a\u043b\u0443\u0447.');\n        return;\n    }\n\n    try {\n        const requestBody = {\n            model: \"gpt-4.1-2025-04-14\",\n            messages: [\n                { role: 'system', content: '\u0422\u0432\u043e\u0458\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0435 \u0434\u0430 \u0433\u0438 \u043e\u0431\u0458\u0430\u0441\u043d\u0438\u0448 \u0438 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u0448 \u043d\u0430\u043e\u0434\u0438\u0442\u0435 \u0438 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438\u0442\u0435 \u0432\u0440\u0437 \u043e\u0441\u043d\u043e\u0432\u0430 \u043d\u0430 \u043f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u0442\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434\u0438 \u0438 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438\u0442\u0435 \u043f\u0440\u0430\u0448\u0430\u045a\u0430.' },\n                { role: 'user', content: `\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u043e\u0434 \u043b\u043e\u043a\u0430\u043b\u043d\u0430\u0442\u0430 \u0431\u0430\u0437\u0430: ${contextMessage}` },\n                { role: 'user', content: `\u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u043e \u043f\u0440\u0430\u0448\u0430\u045a\u0435 \u0438 \u0445\u0438\u043f\u043e\u0442\u0435\u0437\u0438: ${researchQuestionResponse}` },\n                { role: 'user', content: `\u041c\u0435\u0442\u043e\u0434\u0438: ${methodResponse}` },\n                { role: 'user', content: `\u041d\u0430\u043e\u0434\u0438: ${findingsResponse}` },\n                { role: 'user', content: `\u041e\u0431\u0458\u0430\u0441\u043d\u0438 \u0433\u0438 \u0438 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u0458 \u043d\u0430\u043e\u0434\u0438\u0442\u0435 \u0438 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438\u0442\u0435 \u0432\u0440\u0437 \u043e\u0441\u043d\u043e\u0432\u0430 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u0442\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434\u0438 \u0438 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438\u0442\u0435 \u043f\u0440\u0430\u0448\u0430\u045a\u0430. ${discussionPrompt}` }\n            ],\n            max_tokens: 4096,\n            stream: true\n        };\n\n        discussionResponse = await fetch_openai_data_streaming('https:\/\/api.openai.com\/v1\/chat\/completions', requestBody, discussionContainer);\n    } catch (error) {\n        console.error(\"Error generating discussion:\", error);\n        addMessageToContainer(discussionContainer, \"\u0413\u0440\u0435\u0448\u043a\u0430: \" + error.message, 'error-message');\n    }\n}\n\n\n            async function generateFinalText() {\n    const contextMessage = hiddenContent.value.trim();\n    const pageCount = document.getElementById('page-count').value;\n    const finalTextPrompt = document.getElementById('final-text-prompt').value;\n    if (apiKey.trim() === '') {\n        alert('\u0412\u0435 \u043c\u043e\u043b\u0438\u043c\u0435 \u0432\u043d\u0435\u0441\u0435\u0442\u0435 API \u043a\u043b\u0443\u0447.');\n        return;\n    }\n\n    try {\n        for (let i = 1; i <= pageCount; i++) {\n            const requestBody = {\n                model: \"gpt-4.1-2025-04-14\",\n                messages: [\n                    { role: 'system', content: '\u0422\u0432\u043e\u0458\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0435 \u0434\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u0448 \u0442\u0430\u0431\u0435\u043b\u0430 \u043d\u0430 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430 \u0438 \u0432\u0440\u0437 \u043e\u0441\u043d\u043e\u0432\u0430 \u043d\u0430 \u043d\u0435\u0430 \u0434\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0448 \u0442\u0435\u043a\u0441\u0442, \u0432\u0440\u0437 \u0431\u0430\u0437\u0430 \u043d\u0430 \u043f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u0438\u0442\u0435 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438.' },\n                    { role: 'user', content: `\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u043e\u0434 \u043b\u043e\u043a\u0430\u043b\u043d\u0430\u0442\u0430 \u0431\u0430\u0437\u0430: ${contextMessage}` },\n                    { role: 'user', content: `\u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u043e \u043f\u0440\u0430\u0448\u0430\u045a\u0435 \u0438 \u0445\u0438\u043f\u043e\u0442\u0435\u0437\u0438: ${researchQuestionResponse}` },\n                    { role: 'user', content: `\u041c\u0435\u0442\u043e\u0434\u0438: ${methodResponse}` },\n                    { role: 'user', content: `\u041d\u0430\u043e\u0434\u0438: ${findingsResponse}` },\n                    { role: 'user', content: `\u0414\u0438\u0441\u043a\u0443\u0441\u0438\u0458\u0430: ${discussionResponse}` },\n                    { role: 'user', content: finalTextPrompt },\n                    { role: 'user', content: `\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458 \u0442\u0435\u043a\u0441\u0442 \u0437\u0430 \u0441\u0442\u0440\u0430\u043d\u0430 ${i} \u043e\u0434 ${pageCount}` }\n                ],\n                max_tokens: 4096,\n                stream: true\n            };\n\n            await fetch_openai_data_streaming('https:\/\/api.openai.com\/v1\/chat\/completions', requestBody, finalTextContainer);\n        }\n    } catch (error) {\n        console.error(\"Error generating final text:\", error);\n        addMessageToContainer(finalTextContainer, \"\u0413\u0440\u0435\u0448\u043a\u0430: \" + error.message, 'error-message');\n    }\n}\n\n\n            function saveFinalTextAsTXT() {\n                const content = finalTextContainer.innerText;\n                const blob = new Blob([content], { type: 'text\/plain' });\n                const link = document.createElement('a');\n                link.href = URL.createObjectURL(blob);\n                link.download = '\u0437\u0430\u0432\u0440\u0448\u0435\u043d_\u0442\u0435\u043a\u0441\u0442.txt';\n                link.click();\n            }\n\n            function stopResponse() {\n                stopRequested = true;\n            }\n\n            function copyContent(containerId) {\n                const container = document.getElementById(containerId);\n                const tempTextArea = document.createElement(\"textarea\");\n                tempTextArea.value = container.innerText;\n                document.body.appendChild(tempTextArea);\n                tempTextArea.select();\n                document.execCommand('copy');\n                document.body.removeChild(tempTextArea);\n                alert(\"\u0421\u043e\u0434\u0440\u0436\u0438\u043d\u0430\u0442\u0430 \u0435 \u043a\u043e\u043f\u0438\u0440\u0430\u043d\u0430.\");\n            }\n\n            function clearTextArea() {\n                hiddenContent.value = '';\n                fileListContainer.innerHTML = '';\n                summaryContainer.innerHTML = '';\n                methodContainer.innerHTML = '';\n                findingsContainer.innerHTML = '';\n                discussionContainer.innerHTML = '';\n                finalTextContainer.innerHTML = '';\n                alert(\"\u0422\u0435\u043a\u0441\u0442\u043e\u0442 \u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u0441\u0435 \u0438\u0437\u0431\u0440\u0438\u0448\u0430\u043d\u0438.\");\n            }\n\n            function checkTextLength() {\n                const maxLength = 300000;\n                if (hiddenContent.value.length > maxLength) {\n                    alert('\u0422\u0435\u043a\u0441\u0442\u043e\u0442 \u043d\u0430\u0434\u043c\u0438\u043d\u0443\u0432\u0430 300,000 \u0437\u043d\u0430\u0446\u0438 \u0438 \u045c\u0435 \u0431\u0438\u0434\u0435 \u0441\u043a\u0440\u0430\u0442\u0435\u043d.');\n                    hiddenContent.value = hiddenContent.value.substring(0, maxLength);\n                }\n            }\n\n            function addMessageToContainer(container, message, className) {\n                const messageElement = document.createElement('div');\n                messageElement.className = `message ${className}`;\n                messageElement.innerText = message;\n                container.appendChild(messageElement);\n                container.scrollTop = container.scrollHeight;\n            }\n\n            function copyToHistoryDialog(userMessage, botMessage) {\n                const historyElement = document.createElement('div');\n                historyElement.className = 'history-entry';\n                historyElement.innerHTML = `<div class=\"message user-message\">${userMessage}<\/div><div class=\"message bot-message\">${botMessage}<\/div>`;\n                historyDialogContainer.appendChild(historyElement);\n            }\n\n            function resetDialog() {\n                summaryContainer.innerHTML = '';\n            }\n\n            function resetMethod() {\n                methodContainer.innerHTML = '';\n            }\n\n            function resetFindings() {\n                findingsContainer.innerHTML = '';\n            }\n\n            function resetDiscussion() {\n                discussionContainer.innerHTML = '';\n            }\n\n            function resetFinalText() {\n                finalTextContainer.innerHTML = '';\n            }\n\n            function resetAll() {\n                resetDialog();\n                resetMethod();\n                resetFindings();\n                resetDiscussion();\n                resetFinalText();\n            }\n\n            function toggleEditMode(containerId) {\n                const container = document.getElementById(containerId);\n                const isEditable = container.contentEditable === \"true\";\n                container.contentEditable = !isEditable;\n                alert(isEditable ? \"\u0423\u0440\u0435\u0434\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0435 \u0438\u0441\u043a\u043b\u0443\u0447\u0435\u043d\u043e.\" : \"\u0423\u0440\u0435\u0434\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0435 \u0432\u043a\u043b\u0443\u0447\u0435\u043d\u043e.\");\n            }\n\n            function saveToFile(containerId, defaultFileName) {\n                const container = document.getElementById(containerId);\n                const content = container.innerText;\n                const suggestedFileName = prompt(\"\u0412\u043d\u0435\u0441\u0435\u0442\u0435 \u0438\u043c\u0435 \u0437\u0430 \u0444\u0430\u0458\u043b\u043e\u0442:\", defaultFileName);\n                if (suggestedFileName) {\n                    const blob = new Blob([content], { type: 'text\/plain' });\n                    const link = document.createElement('a');\n                    link.href = URL.createObjectURL(blob);\n                    link.download = suggestedFileName;\n                    link.click();\n                }\n            }\n\n            async function uploadFiles() {\n    const fileInput = document.getElementById('file-upload');\n    const files = fileInput.files;\n    if (!files.length) {\n        alert('\u0412\u0435 \u043c\u043e\u043b\u0438\u043c\u0435 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0444\u0430\u0458\u043b\u043e\u0432\u0438 \u0437\u0430 \u0430\u043f\u043b\u043e\u0430\u0434.');\n        return;\n    }\n\n    let combinedText = '';\n    for (let file of files) {\n        const content = await readFileContent(file);\n        const textContent = await extractText(content, file.type);\n        combinedText += textContent + '\\n';\n    }\n\n    const maxLength = 300000;\n    const currentLength = hiddenContent.value.length;\n    const remainingLength = maxLength - currentLength;\n\n    if (combinedText.length > remainingLength) {\n        alert(`\u0412\u043a\u0443\u043f\u043d\u0438\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u043d\u0430\u0434\u043c\u0438\u043d\u0443\u0432\u0430 ${maxLength} \u0437\u043d\u0430\u0446\u0438. \u0418\u0437\u0431\u043e\u0440\u043e\u0442 \u043d\u0430 \u0444\u0430\u0458\u043b\u043e\u0432\u0438 \u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d.`);\n        combinedText = combinedText.substring(0, remainingLength);\n    }\n\n    totalTextLength += combinedText.length;\n    hiddenContent.value += combinedText;\n    displayFileList(files);\n\n    updateRemainingCharacters();\n}\n\nfunction updateRemainingCharacters() {\n    const maxLength = 300000;\n    const currentLength = hiddenContent.value.length;\n    const remainingLength = maxLength - currentLength;\n    document.getElementById('remaining-characters').innerText = `\u041f\u0440\u0435\u043e\u0441\u0442\u0430\u043d\u0430\u0442\u0438 \u0437\u043d\u0430\u0446\u0438: ${remainingLength}`;\n}\n\n\n            function readFileContent(file) {\n                return new Promise((resolve, reject) => {\n                    const reader = new FileReader();\n                    reader.onload = () => resolve(reader.result);\n                    reader.onerror = () => reject(reader.error);\n                    if (file.type === 'application\/pdf') {\n                        reader.readAsArrayBuffer(file);\n                    } else {\n                        reader.readAsBinaryString(file);\n                    }\n                });\n            }\n\n            async function extractText(content, fileType) {\n                if (fileType === 'application\/pdf') {\n                    const pdf = await pdfjsLib.getDocument({ data: content }).promise;\n                    let text = '';\n                    for (let i = 0; i < pdf.numPages; i++) {\n                        const page = await pdf.getPage(i + 1);\n                        const textContent = await page.getTextContent();\n                        text += textContent.items.map(item => item.str).join(' ');\n                    }\n                    return text;\n                } else if (fileType === 'application\/vnd.openxmlformats-officedocument.wordprocessingml.document') {\n                    try {\n                        const doc = await mammoth.extractRawText({ arrayBuffer: content });\n                        console.log(\"DOCX conversion result:\", doc.value);\n                        return doc.value;\n                    } catch (err) {\n                        console.error(\"Error extracting text from DOCX file:\", err);\n                        throw err;\n                    }\n                } else {\n                    throw new Error('Unsupported file type: ' + fileType);\n                }\n            }\n\n            function displayFileList(files) {\n                for (let file of files) {\n                    const listItem = document.createElement('div');\n                    listItem.innerText = file.name;\n                    fileListContainer.appendChild(listItem);\n                }\n            }\n\n            function saveProject() {\n                const projectData = {\n                    content: hiddenContent.value,\n                    files: Array.from(fileListContainer.children).map(item => item.innerText)\n                };\n                const blob = new Blob([JSON.stringify(projectData)], { type: 'application\/json' });\n                const link = document.createElement('a');\n                link.href = URL.createObjectURL(blob);\n                link.download = 'project.json';\n                link.click();\n            }\n\n            function loadProject() {\n    const fileInput = document.getElementById('project-upload');\n    const file = fileInput.files[0];\n    if (!file) {\n        alert('\u0412\u0435 \u043c\u043e\u043b\u0438\u043c\u0435 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0444\u0430\u0458\u043b \u0437\u0430 \u0432\u0447\u0438\u0442\u0443\u0432\u0430\u045a\u0435.');\n        return;\n    }\n\n    const reader = new FileReader();\n    reader.onload = function(event) {\n        const projectData = JSON.parse(event.target.result);\n        hiddenContent.value = projectData.content;\n        fileListContainer.innerHTML = '';\n        projectData.files.forEach(fileName => {\n            const listItem = document.createElement('div');\n            listItem.innerText = fileName;\n            fileListContainer.appendChild(listItem);\n        });\n        totalTextLength = hiddenContent.value.length;\n        updateRemainingCharacters();\n    };\n    reader.readAsText(file);\n}\n\n\n            window.sendSummaryMessage = sendSummaryMessage;\n            window.generateResearch = generateResearch;\n            window.resetDialog = resetDialog;\n            window.resetMethod = resetMethod;\n            window.resetFindings = resetFindings;\n            window.resetDiscussion = resetDiscussion;\n            window.resetFinalText = resetFinalText;\n            window.resetAll = resetAll;\n            window.copyContent = copyContent;\n            window.stopResponse = stopResponse;\n            window.toggleEditMode = toggleEditMode;\n            window.uploadFiles = uploadFiles;\n            window.checkTextLength = checkTextLength;\n            window.saveToFile = saveToFile;\n            window.generateMethod = generateMethod;\n            window.generateFindings = generateFindings;\n            window.generateDiscussion = generateDiscussion;\n            window.generateFinalText = generateFinalText;\n            window.saveFinalTextAsTXT = saveFinalTextAsTXT;\n            window.saveProject = saveProject;\n            window.loadProject = loadProject;\n        });\n    <\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/2.9.359\/pdf.min.js\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/mammoth\/1.4.2\/mammoth.browser.min.js\"><\/script>\n<\/body>\n<\/html>\n\n\n\n<div class=\"wp-block-media-text is-stacked-on-mobile\"><figure  class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" alt=\"\" src=\"https:\/\/aigender.net\/wp-content\/uploads\/2024\/08\/ai-ag.jpg\" class=\"wp-image-7066 size-full\" srcset=\"https:\/\/aigender.net\/wp-content\/uploads\/2024\/08\/ai-ag.jpg 1024w, https:\/\/aigender.net\/wp-content\/uploads\/2024\/08\/ai-ag-300x300.jpg 300w, https:\/\/aigender.net\/wp-content\/uploads\/2024\/08\/ai-ag-150x150.jpg 150w, https:\/\/aigender.net\/wp-content\/uploads\/2024\/08\/ai-ag-768x768.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p><strong>\u0423\u043f\u0430\u0442\u0441\u0442\u0432\u043e \u0437\u0430 \u043a\u043e\u0440\u0438\u0441\u0442\u0435\u045a\u0435 \u043d\u0430 \u0410\u0418 \u041d\u0430\u0443\u0447\u0435\u043d \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 \u0410\u0433\u0435\u043d\u0442<\/strong><\/p>\n\n\n\n<p>\u0410\u0418 \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0430\u0442\u0430 \u0410\u043b\u0430\u0442\u043a\u0430 \u0435 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430 \u0430\u043b\u0430\u0442\u043a\u0430 \u0431\u0430\u0437\u0438\u0440\u0430\u043d\u0430 \u043d\u0430 \u0432\u0435\u0448\u0442\u0430\u0447\u043a\u0430 \u0438\u043d\u0442\u0435\u043b\u0438\u0433\u0435\u043d\u0446\u0438\u0458\u0430 (\u0410\u0418) \u043a\u043e\u0458\u0430 \u0435 \u0434\u0438\u0437\u0430\u0458\u043d\u0438\u0440\u0430\u043d\u0430 \u0434\u0430 \u0432\u0438 \u043f\u043e\u043c\u043e\u0433\u043d\u0435 \u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u043e\u0442 \u043d\u0430 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435. \u041d\u0430\u0458\u0432\u0430\u0436\u043d\u0430\u0442\u0430 \u043a\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u043d\u0430 \u043e\u0432\u0430\u0430 \u0430\u043b\u0430\u0442\u043a\u0430 \u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u043e\u0442\u043e \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435, \u043a\u043e\u0435 \u043e\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430 \u0431\u0440\u0437\u043e \u0438 \u0435\u0444\u0438\u043a\u0430\u0441\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 \u043f\u0440\u0430\u0448\u0430\u045a\u0430, \u043c\u0435\u0442\u043e\u0434\u0438, \u043d\u0430\u043e\u0434\u0438, \u0434\u0438\u0441\u043a\u0443\u0441\u0438\u0438 \u0438 \u0437\u0430\u0432\u0440\u0448\u0435\u043d \u0442\u0435\u043a\u0441\u0442. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u043e, \u0430\u043b\u0430\u0442\u043a\u0430\u0442\u0430 \u043d\u0443\u0434\u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432\u0438 \u043a\u043e\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0433\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0438\u0442\u0435 \u0437\u0430 \u0434\u0430 \u0433\u043e \u043f\u0440\u0438\u043b\u0430\u0433\u043e\u0434\u0438\u0442\u0435 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0441\u043f\u043e\u0440\u0435\u0434 \u0432\u0430\u0448\u0438\u0442\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438.<\/p>\n\n\n\n<p><strong>\u041a\u043b\u0443\u0447\u043d\u0438 \u041a\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438<\/strong><br>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u043e \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435: \u041e\u0432\u0430\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0458\u0430 \u0435 \u0441\u0440\u0446\u0435\u0442\u043e \u043d\u0430 \u0430\u043b\u0430\u0442\u043a\u0430\u0442\u0430 \u0438 \u043e\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 \u043f\u0440\u0430\u0448\u0430\u045a\u0430, \u043c\u0435\u0442\u043e\u0434\u0438, \u043d\u0430\u043e\u0434\u0438, \u0434\u0438\u0441\u043a\u0443\u0441\u0438\u0438 \u0438 \u0437\u0430\u0432\u0440\u0448\u0435\u043d \u0442\u0435\u043a\u0441\u0442 \u0432\u0440\u0437 \u043e\u0441\u043d\u043e\u0432\u0430 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u043e\u0434 \u0431\u0430\u0437\u0430\u0442\u0430 \u043d\u0430 \u043f\u043e\u0434\u0430\u0442\u043e\u0446\u0438.<br>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0438 \u041f\u0440\u043e\u043c\u043f\u0442\u043e\u0432\u0438: \u041e\u0432\u0438\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432\u0438 \u0441\u0435 \u0434\u043e\u0434\u0430\u0442\u043d\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u0438 \u0432\u0438 \u043e\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430\u0430\u0442 \u0434\u0430 \u0433\u043e \u043f\u0440\u0438\u043b\u0430\u0433\u043e\u0434\u0438\u0442\u0435 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0441\u043f\u043e\u0440\u0435\u0434 \u0432\u0430\u0448\u0438\u0442\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0438 \u0431\u0430\u0440\u0430\u045a\u0430, \u043d\u043e \u043d\u0435 \u0441\u0435 \u0437\u0430\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u0438 \u0437\u0430 \u043a\u043e\u0440\u0438\u0441\u0442\u0435\u045a\u0435.<br>\u041a\u0430\u043a\u043e \u0434\u0430 \u041a\u043e\u0440\u0438\u0441\u0442\u0438\u0442\u0435<\/p>\n\n\n\n<p><strong>\u0412\u043d\u0435\u0441\u0435\u0442\u0435 \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442<\/strong><br>\u041f\u0440\u0432\u0438\u043e\u0442 \u0447\u0435\u043a\u043e\u0440 \u0435 \u0434\u0430 \u0433\u043e \u0432\u043d\u0435\u0441\u0435\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u043e\u0434 \u0432\u0430\u0448\u0430\u0442\u0430 \u0431\u0430\u0437\u0430 \u043d\u0430 \u043f\u043e\u0434\u0430\u0442\u043e\u0446\u0438. \u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0430\u043f\u043b\u043e\u0430\u0434\u0438\u0440\u0430\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u043d\u0438 \u0444\u0430\u0458\u043b\u043e\u0432\u0438 (PDF, DOCX) \u043a\u043e\u0438 \u0441\u043e\u0434\u0440\u0436\u0430\u0442 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0437\u0430 \u0432\u0430\u0448\u0435\u0442\u043e \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435.<\/p>\n\n\n\n<p>\u041a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u043d\u0430 \u043a\u043e\u043f\u0447\u0435\u0442\u043e &#8220;\u041f\u0440\u043e\u0446\u0435\u0441\u0438\u0440\u0430\u0458&#8221; \u0437\u0430 \u0434\u0430 \u0433\u0438 \u0430\u043f\u043b\u043e\u0430\u0434\u0438\u0440\u0430\u0442\u0435 \u0432\u0430\u0448\u0438\u0442\u0435 \u0444\u0430\u0458\u043b\u043e\u0432\u0438.<br>\u040c\u0435 \u0432\u0438\u0434\u0438\u0442\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043e\u0458 \u043f\u043e\u043a\u0430\u0436\u0443\u0432\u0430 \u043a\u043e\u043b\u043a\u0443 \u0437\u043d\u0430\u0446\u0438 \u0432\u0438 \u043e\u0441\u0442\u0430\u043d\u0443\u0432\u0430\u0430\u0442 \u0437\u0430 \u0430\u043f\u043b\u043e\u0430\u0434\u0438\u0440\u0430\u045a\u0435.<\/p>\n\n\n\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458\u0442\u0435 \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u043e \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435<br>\u041d\u0430\u0458\u0432\u0430\u0436\u043d\u0430\u0442\u0430 \u043a\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u043e\u0442\u043e \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435. \u0421\u043b\u0435\u0434\u0435\u0442\u0435 \u0433\u0438 \u0441\u043b\u0435\u0434\u043d\u0438\u0432\u0435 \u0447\u0435\u043a\u043e\u0440\u0438 \u0437\u0430 \u0434\u0430 \u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0442\u0435:<\/p>\n\n\n\n<p>\u041a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u043d\u0430 \u043a\u043e\u043f\u0447\u0435\u0442\u043e &#8220;\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435&#8221;.<br>\u0410\u043b\u0430\u0442\u043a\u0430\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u0438 \u045c\u0435 \u0433\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438\u0442\u0435 \u043f\u0440\u0430\u0448\u0430\u045a\u0430, \u043c\u0435\u0442\u043e\u0434\u0438\u0442\u0435, \u043d\u0430\u043e\u0434\u0438\u0442\u0435, \u0434\u0438\u0441\u043a\u0443\u0441\u0438\u0438\u0442\u0435 \u0438 \u0437\u0430\u0432\u0440\u0448\u043d\u0438\u043e\u0442 \u0442\u0435\u043a\u0441\u0442.<\/p>\n\n\n\n<p><strong>\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0438 \u041f\u0440\u043e\u043c\u043f\u0442\u043e\u0432\u0438 (\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u043e)<\/strong><br>\u0410\u043a\u043e \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u043f\u0440\u0438\u043b\u0430\u0433\u043e\u0434\u0438\u0442\u0435 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435\u0442\u043e, \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043a\u043e\u0440\u0438\u0441\u0442\u0438\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432\u0438. \u041e\u0432\u0438\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432\u0438 \u0441\u0435 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u0438 \u0438 \u043d\u0435 \u0441\u0435 \u0437\u0430\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u0438 \u0437\u0430 \u043a\u043e\u0440\u0438\u0441\u0442\u0435\u045a\u0435.<\/p>\n\n\n\n<p>\u0412\u043d\u0435\u0441\u0435\u0442\u0435 \u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0438\u043e\u0442 \u043f\u0440\u043e\u043c\u043f\u0442 \u0437\u0430 \u0441\u0435\u043a\u043e\u0458\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0458\u0430 (\u041c\u0435\u0442\u043e\u0434, \u041d\u0430\u043e\u0434\u0438, \u0414\u0438\u0441\u043a\u0443\u0441\u0438\u0458\u0430, \u0417\u0430\u0432\u0440\u0448\u0435\u043d \u0422\u0435\u043a\u0441\u0442).<br>\u041a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u043d\u0430 \u0441\u043e\u043e\u0434\u0432\u0435\u0442\u043d\u043e\u0442\u043e \u043a\u043e\u043f\u0447\u0435 \u0437\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u045a\u0435.<br>\u041f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430 \u041a\u043e\u0440\u0438\u0441\u0442\u0435\u045a\u0435<br>\u0410\u043f\u043b\u043e\u0430\u0434\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0444\u0430\u0458\u043b\u043e\u0432\u0438: \u0410\u043f\u043b\u043e\u0430\u0434\u0438\u0440\u0430\u0458\u0442\u0435 PDF \u0438\u043b\u0438 DOCX \u0444\u0430\u0458\u043b\u043e\u0432\u0438 \u043a\u043e\u0438 \u0441\u043e\u0434\u0440\u0436\u0430\u0442 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0437\u0430 \u0432\u0430\u0448\u0435\u0442\u043e \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435.<br>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435: \u041a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u043d\u0430 &#8220;\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435&#8221; \u0437\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u0438 \u0434\u0430 \u0433\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0442\u0435 \u0441\u0438\u0442\u0435 \u0434\u0435\u043b\u043e\u0432\u0438 \u043e\u0434 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435\u0442\u043e.<br>\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u045a\u0435 \u043d\u0430 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432\u0438 (\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u043e): \u0410\u043a\u043e \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0432\u043d\u0435\u0441\u0435\u0442\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0438 \u0431\u0430\u0440\u0430\u045a\u0430, \u043a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 \u0433\u0438 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432\u0438\u0442\u0435 \u0437\u0430 \u0441\u0435\u043a\u043e\u0458\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0458\u0430 \u0438 \u043a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u043d\u0430 \u0441\u043e\u043e\u0434\u0432\u0435\u0442\u043d\u043e\u0442\u043e \u043a\u043e\u043f\u0447\u0435 \u0437\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u045a\u0435.<\/p>\n\n\n\n<p>\u0410\u0418 \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0430\u0442\u0430 \u0410\u043b\u0430\u0442\u043a\u0430 \u0435 \u043c\u043e\u045c\u043d\u0430 \u0430\u043b\u0430\u0442\u043a\u0430 \u043a\u043e\u0458\u0430 \u0432\u0438 \u043e\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430 \u0431\u0440\u0437\u043e \u0438 \u0435\u0444\u0438\u043a\u0430\u0441\u043d\u043e \u0434\u0430 \u0441\u043f\u0440\u043e\u0432\u0435\u0434\u0435\u0442\u0435 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u043e\u0442\u043e \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435 \u0435 \u043d\u0430\u0458\u0432\u0430\u0436\u043d\u0430\u0442\u0430 \u043a\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u043d\u0430 \u043e\u0432\u0430\u0430 \u0430\u043b\u0430\u0442\u043a\u0430, \u0434\u043e\u0434\u0435\u043a\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0438\u0442\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u0432\u0438 \u0432\u0438 \u043e\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430\u0430\u0442 \u0444\u043b\u0435\u043a\u0441\u0438\u0431\u0438\u043b\u043d\u043e\u0441\u0442 \u0432\u043e \u043f\u0440\u0438\u043b\u0430\u0433\u043e\u0434\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u043d\u0430 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0441\u043f\u043e\u0440\u0435\u0434 \u0432\u0430\u0448\u0438\u0442\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438. \u0421\u043e \u043e\u0432\u0430\u0430 \u0430\u043b\u0430\u0442\u043a\u0430, \u045c\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0433\u043e \u0437\u0430\u0431\u0440\u0437\u0430\u0442\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u043e\u0442 \u043d\u0430 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435 \u0438 \u0434\u0430 \u0434\u043e\u0431\u0438\u0435\u0442\u0435 \u043a\u0432\u0430\u043b\u0438\u0442\u0435\u0442\u043d\u0438 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438.<\/p>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u041d\u0430\u0443\u0447\u0435\u043d \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 \u0411\u043e\u0442, \u00a9\u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u0437\u0430 \u0440\u043e\u0434\u043e\u0432\u0438 \u0441\u0442\u0443\u0434\u0438\u0438 \u041d\u0430\u0443\u0447\u043d\u043e \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 AI \u0410\u0433\u0435\u043d\u0442, \u00a9 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u0437\u0430 \u0440\u043e\u0434\u043e\u0432\u0438 \u0441\u0442\u0443\u0434\u0438\u0438, \u0424\u0438\u043b\u043e\u0437\u043e\u0444\u0441\u043a\u0438 \u0444\u0430\u043a\u0443\u043b\u0442\u0435\u0442-\u0421\u043a\u043e\u043f\u0458\u0435 \u0410\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u043e \u041f\u0440\u0430\u0448\u0430\u045a\u0435 \u0418\u0441\u043f\u0440\u0430\u0442\u0438 \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435 \u0421\u0442\u043e\u043f \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438 \ud83d\udccb \u270f\ufe0f \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u041f\u0440\u043e\u0446\u0435\u0441\u0438\u0440\u0430\u0458 \u041f\u0440\u0435\u043e\u0441\u0442\u0430\u043d\u0430\u0442\u0438 \u0437\u043d\u0430\u0446\u0438: 300000 \u0421\u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0412\u0447\u0438\u0442\u0430\u0458 \u043f\u0440\u043e\u0435\u043a\u0442 \u041c\u0435\u0442\u043e\u0434 \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458 \u041c\u0435\u0442\u043e\u0434 \ud83d\udccb \u270f\ufe0f \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u043e\u0434\u0433\u043e\u0432\u043e\u0440 \u041d\u0430\u043e\u0434\u0438 \u0438 \u0420\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438 \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0458 \u041d\u0430\u043e\u0434\u0438 \ud83d\udccb \u270f\ufe0f \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u043e\u0434\u0433\u043e\u0432\u043e\u0440 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":7066,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"slim_seo":{"title":"\u041d\u0430\u0443\u0447\u043d\u043e \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 AI \u0410\u0433\u0435\u043d\u0442 - \u041a\u043e\u0440\u0438\u0441\u0442\u0435\u045a\u0435 \u043d\u0430 \u0432\u0435\u0448\u0442\u0430\u0447\u043a\u0430\u0442\u0430 \u0438\u043d\u0442\u0435\u043b\u0438\u0433\u0435\u043d\u0446\u0438\u0458\u0430 (AI) \u0437\u0430 \u0443\u043d\u0430\u043f\u0440\u0435\u0434\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0440\u043e\u0434\u043e\u0432\u0430\u0442\u0430 \u0435\u0434\u043d\u0430\u043a\u0432\u043e\u0441\u0442","description":"\u041d\u0430\u0443\u0447\u0435\u043d \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 \u0411\u043e\u0442, \u00a9\u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u0437\u0430 \u0440\u043e\u0434\u043e\u0432\u0438 \u0441\u0442\u0443\u0434\u0438\u0438 \u041d\u0430\u0443\u0447\u043d\u043e \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438 AI \u0410\u0433\u0435\u043d\u0442, \u00a9 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442 \u0437\u0430 \u0440\u043e\u0434\u043e\u0432\u0438 \u0441\u0442\u0443\u0434\u0438\u0438, \u0424\u0438\u043b\u043e\u0437\u043e\u0444\u0441\u043a\u0438 \u0444\u0430\u043a\u0443\u043b\u0442\u0435\u0442-\u0421\u043a\u043e\u043f\u0458\u0435 \u0410\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0418\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u043e"},"footnotes":""},"class_list":["post-6953","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/pages\/6953","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/comments?post=6953"}],"version-history":[{"count":80,"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/pages\/6953\/revisions"}],"predecessor-version":[{"id":10150,"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/pages\/6953\/revisions\/10150"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/media\/7066"}],"wp:attachment":[{"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/media?parent=6953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}