

{"id":6642,"date":"2024-08-06T10:06:54","date_gmt":"2024-08-06T10:06:54","guid":{"rendered":"https:\/\/aigender.net\/?page_id=6642"},"modified":"2025-08-06T17:53:41","modified_gmt":"2025-08-06T17:53:41","slug":"triplet","status":"publish","type":"page","link":"https:\/\/aigender.net\/index.php\/triplet\/","title":{"rendered":"AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\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"},"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>\u0427\u0435\u0442 \u0411\u043e\u0442<\/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 \u0441\u043e\u043b\u0438\u0434 #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 \u0441\u043e\u043b\u0438\u0434 #444;\n        }\n        .container {\n            flex: 1;\n            display: flex;\n            flex-direction: row;\n            padding: 10px;\n            background-color: #121212;\n            height: calc(100vh - 40px); \/* \u0412\u0438\u0441\u0438\u043d\u0430\u0442\u0430 \u043d\u0430 \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0458\u0430\u0442\u0430 *\/\n            overflow: hidden; \/* \u0421\u043a\u0440\u0438\u0432\u0430\u045a\u0435 \u043d\u0430 \u0432\u0438\u0448\u043e\u043a\u043e\u0442 *\/\n        }\n        .window {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            border: 1px \u0441\u043e\u043b\u0438\u0434 #333;\n            margin: 10px;\n            padding: 10px;\n            background-color: #1f1f1f;\n            color: #e0e0e0;\n            height: calc(100% - 20px); \/* \u0412\u0438\u0441\u0438\u043d\u0430 \u043d\u0430 \u043f\u0440\u043e\u0437\u043e\u0440\u0446\u0438\u0442\u0435 *\/\n        }\n        .window h6 {\n            font-size: 12px;\n            margin-bottom: 10px;\n        }\n        .chat-container {\n            flex: 1;\n            overflow-y: auto; \/* \u0414\u043e\u0434\u0430\u0432\u0430\u045a\u0435 \u043d\u0430 \u0441\u043a\u0440\u043e\u043b\u0435\u0440 \u0437\u0430 \u043a\u043e\u043d\u0442\u0435\u0458\u043d\u0435\u0440\u043e\u0442 \u0441\u043e \u043f\u043e\u0440\u0430\u043a\u0438 *\/\n            padding: 10px;\n            border: 1px \u0441\u043e\u043b\u0438\u0434 #333;\n            margin-bottom: 10px;\n            background-color: #2c2c2c;\n            border-radius: 8px;\n            height: calc(100% - 40px); \/* \u0412\u0438\u0441\u0438\u043d\u0430 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u0458\u043d\u0435\u0440\u043e\u0442 \u0437\u0430 \u043f\u043e\u0440\u0430\u043a\u0438 *\/\n        }\n        .input-container {\n            display: flex;\n            flex-wrap: wrap; \/* \u0414\u043e\u0434\u0430\u0432\u0430\u045a\u0435 \u043d\u0430 \u043e\u0432\u0430 \u0437\u0430 \u0434\u0430 \u0441\u0435 \u043e\u0441\u0438\u0433\u0443\u0440\u0430\u043c\u0435 \u0434\u0435\u043a\u0430 \u043a\u043e\u043f\u0447\u0438\u045a\u0430\u0442\u0430 \u0441\u0435 \u0432\u0438\u0434\u043b\u0438\u0432\u0438 *\/\n            justify-content: space-between; \/* \u0414\u043e\u0434\u0430\u0432\u0430\u045a\u0435 \u043d\u0430 \u043e\u0432\u0430 \u0437\u0430 \u0434\u0430 \u0441\u0435 \u043e\u0441\u0438\u0433\u0443\u0440\u0430\u043c\u0435 \u0434\u0435\u043a\u0430 \u043a\u043e\u043f\u0447\u0438\u045a\u0430\u0442\u0430 \u0441\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0440\u0435\u0434\u0435\u043d\u0438 *\/\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 \u0441\u043e\u043b\u0438\u0434 #444;\n            border-radius: 4px;\n            height: 60px; \/* \u041f\u043e\u0441\u0442\u0430\u0432\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0432\u0438\u0441\u0438\u043d\u0430\u0442\u0430 \u043d\u0430 textarea *\/\n            resize: none; \/* \u041e\u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u043f\u0440\u043e\u043c\u0435\u043d\u0430 \u043d\u0430 \u0433\u043e\u043b\u0435\u043c\u0438\u043d\u0430\u0442\u0430 *\/\n        }\n        .input-container button, .input-container input[type=\"file\"] {\n            padding: 5px 8px; \/* \u041d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 padding *\/\n            font-size: 10px; \/* \u041d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 font-size *\/\n            margin: 5px; \/* \u041d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u043c\u0430\u0440\u0433\u0438\u043d\u0438\u0442\u0435 \u043e\u043a\u043e\u043b\u0443 \u043a\u043e\u043f\u0447\u0438\u045a\u0430\u0442\u0430 *\/\n            border: 1px \u0441\u043e\u043b\u0438\u0434 #444;\n            border-radius: 4px;\n            background-color: #555;\n            color: white;\n            cursor: pointer;\n            flex-shrink: 0; \/* \u041e\u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u043d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 *\/\n        }\n        .save-button, .stop-button, .reset-button, .delete-button {\n            margin: 5px; \/* \u041d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u043c\u0430\u0440\u0433\u0438\u043d\u0438\u0442\u0435 \u043e\u043a\u043e\u043b\u0443 \u043a\u043e\u043f\u0447\u0438\u045a\u0430\u0442\u0430 *\/\n            padding: 5px 8px; \/* \u041d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 padding *\/\n            font-size: 10px; \/* \u041d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 font-size *\/\n            border: 1px \u0441\u043e\u043b\u0438\u0434 #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        }\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; \/* \u041d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 font-size \u0437\u0430 \u0438\u043a\u043e\u043d\u0438\u0442\u0435 *\/\n            cursor: pointer;\n            margin-left: 5px; \/* \u041d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u043c\u0430\u0440\u0433\u0438\u043d\u0438\u0442\u0435 *\/\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; \/* \u0426\u0440\u0432\u0435\u043d\u0430 \u0431\u043e\u0458\u0430 \u0437\u0430 \u043f\u043e\u043e\u043f\u0430\u0441\u043d\u0430\u0442\u0430 \u0438\u043a\u043e\u043d\u0430 *\/\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>AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\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=\"window\" id=\"summary-window\">\n            <h6>\u0414\u0438\u0458\u0430\u043b\u043e\u0433<\/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=\"stopResponse()\" class=\"stop-button\">\u0421\u0442\u043e\u043f<\/button>\n                <button class=\"reset-button\" onclick=\"resetDialog()\">\u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u0434\u0438\u0458\u0430\u043b\u043e\u0433<\/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-viewer-container\">\n                <div id=\"file-viewer\" style=\"width: 100%; height: calc(100% - 60px); background: #2c2c2c;\"><\/div>\n            <\/div>\n            <div class=\"input-container\">\n                <input type=\"file\" id=\"file-upload\" accept=\".pdf,.docx\" \/>\n                <button onclick=\"uploadFile()\">\u041f\u0440\u043e\u0446\u0435\u0441\u0438\u0440\u0430\u0458<\/button>\n            <\/div>\n            <textarea id=\"hidden-content\" style=\"display:none;\"><\/textarea>\n        <\/div>\n    <\/div>\n\n    <div class=\"container\">\n        <div class=\"window\" id=\"history-window\">\n            <h6>\u0418\u0441\u0442\u043e\u0440\u0438\u0458\u0430 \u043d\u0430 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440<\/h6>\n            <div class=\"chat-container\" id=\"history-dialog-container\"><\/div>\n            <div class=\"input-container\">\n                <button onclick=\"copyContent('history-dialog-container')\" title=\"\u041a\u043e\u043f\u0438\u0440\u0430\u0458\">\ud83d\udccb<\/button>\n                <button onclick=\"toggleEditMode('history-dialog-container')\" title=\"\u0423\u0440\u0435\u0434\u0438\">\u270f\ufe0f<\/button>\n                <button onclick=\"saveToFile('history-dialog-container', '\u0438\u0441\u0442\u043e\u0440\u0438\u0458\u0430_\u043d\u0430_\u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440.txt')\" title=\"\u0421\u043d\u0438\u043c\u0438\">\ud83d\udcbe<\/button>\n                <button class=\"reset-button\" onclick=\"resetHistory()\">\u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u0438\u0441\u0442\u043e\u0440\u0438\u0458\u0430<\/button>\n            <\/div>\n        <\/div>\n\n        <div class=\"window\" id=\"comments-window\">\n            <h6>\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438<\/h6>\n            <div class=\"chat-container\" id=\"comments-container\"><\/div>\n            <div class=\"input-container\">\n                <button onclick=\"copyContent('comments-container')\" title=\"\u041a\u043e\u043f\u0438\u0440\u0430\u0458\">\ud83d\udccb<\/button>\n                <button onclick=\"toggleEditMode('comments-container')\" title=\"\u0423\u0440\u0435\u0434\u0438\">\u270f\ufe0f<\/button>\n                <button onclick=\"saveToFile('comments-container', '\u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438.txt')\" title=\"\u0421\u043d\u0438\u043c\u0438\">\ud83d\udcbe<\/button>\n                <button class=\"reset-button\" onclick=\"resetComments()\">\u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438<\/button>\n            <\/div>\n        <\/div>\n\n        <div class=\"window\" id=\"references-window\">\n            <h6>\u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438<\/h6>\n            <div class=\"chat-container\" id=\"references-container\"><\/div>\n            <div class=\"input-container\">\n                <button onclick=\"copyContent('references-container')\" title=\"\u041a\u043e\u043f\u0438\u0440\u0430\u0458\">\ud83d\udccb<\/button>\n                <button onclick=\"toggleEditMode('references-container')\" title=\"\u0423\u0440\u0435\u0434\u0438\">\u270f\ufe0f<\/button>\n                <button onclick=\"saveToFile('references-container', '\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438.txt')\" title=\"\u0421\u043d\u0438\u043c\u0438\">\ud83d\udcbe<\/button>\n                <button class=\"reset-button\" onclick=\"resetReferences()\">\u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438<\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        document.addEventListener('DOMContentLoaded', function () {\n            const summaryContainer = document.getElementById('summary-container');\n            const fileViewer = document.getElementById('file-viewer');\n            const hiddenContent = document.getElementById('hidden-content');\n            const historyDialogContainer = document.getElementById('history-dialog-container');\n            const commentsContainer = document.getElementById('comments-container');\n            const referencesContainer = document.getElementById('references-container');\n            let apiKey = '';\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                \/\/ \u0418\u0441\u0447\u0438\u0441\u0442\u0438 \u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u043d\u0430 \u043f\u043e\u0447\u0435\u0442\u043e\u043a\u043e\u0442\n                hiddenContent.value = '';\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)); \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u0458\u0430 \u0437\u0430 \u043e\u0434\u043b\u043e\u0436\u0443\u0432\u0430\u045a\u0435\n\n                \/\/ \u041a\u0440\u0435\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\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; \/\/ \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0458\u0442\u0435 \u0433\u043e [DONE] \u0442\u043e\u043a\u0435\u043d\u043e\u0442\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                                        \/\/ \u0410\u0436\u0443\u0440\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0442 \u0441\u043e \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\n                                        messageElement.innerText = result;\n                                        container.scrollTop = container.scrollHeight;\n                                        await delay(10); \/\/ \u041d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0431\u0440\u0437\u0438\u043d\u0430\u0442\u0430 \u0441\u043e \u043e\u0434\u043b\u043e\u0436\u0443\u0432\u0430\u045a\u0435 \u043e\u0434 100ms\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            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-4o-2024-08-06\",\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                    addMessageToContainer(summaryContainer, \"\u0411\u043e\u0442: \" + botResponse, 'bot-message');\n                    \/\/ \u041a\u043e\u043f\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0434\u0438\u0458\u0430\u043b\u043e\u0433\u043e\u0442 \u0432\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0458\u0430\u0442\u0430\n                    copyToHistoryDialog(\"\u041a\u043e\u0440\u0438\u0441\u043d\u0438\u043a: \" + summaryInput, \"\u0411\u043e\u0442: \" + botResponse);\n                    \/\/ API \u043f\u043e\u0432\u0438\u043a \u0437\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438\n                    await getComments(botResponse);\n                    \/\/ API \u043f\u043e\u0432\u0438\u043a \u0437\u0430 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\n                    await getReferences(botResponse);\n                    resetDialog(); \/\/ \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u043e \u0440\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0434\u0438\u0458\u0430\u043b\u043e\u0433\u043e\u0442 \u043f\u043e \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u043e\u0442 \u043d\u0430 \u0431\u043e\u0442\u043e\u0442\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            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                fileViewer.innerHTML = '';\n                summaryContainer.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                console.log(\"\u0414\u043e\u0434\u0430\u0432\u0430\u043c \u043f\u043e\u0440\u0430\u043a\u0430 \u0432\u043e \u043a\u043e\u043d\u0442\u0435\u0458\u043d\u0435\u0440\u043e\u0442:\", message);\n                const messageElement = document.createElement('div');\n                messageElement.className = `message ${className}`;\n                messageElement.innerText = message;\n                console.log(\"\u0414\u043e\u0434\u0430\u0432\u0430\u043c \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u043e \u043a\u043e\u043d\u0442\u0435\u0458\u043d\u0435\u0440\u043e\u0442:\", messageElement);\n                container.appendChild(messageElement);\n                container.scrollTop = container.scrollHeight;\n            }\n\n            function copyToHistoryDialog(userMessage, botMessage) {\n                \/\/ \u0414\u043e\u0434\u0430\u0432\u0430\u045a\u0435 \u043d\u0430 \u0442\u0435\u043a\u043e\u0432\u043d\u0438\u043e\u0442 \u0434\u0438\u0458\u0430\u043b\u043e\u0433 \u0432\u043e \u043d\u043e\u0432\u0438\u043e\u0442 \u043f\u0440\u043e\u0437\u043e\u0440 \u0437\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0458\u0430\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                \/\/ \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0458\u0430\u0442\u0430 \u043d\u0430 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0442\n                summaryContainer.innerHTML = '';\n            }\n\n            function resetHistory() {\n                \/\/ \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0458\u0430\u0442\u0430 \u043d\u0430 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0442\n                historyDialogContainer.innerHTML = '';\n            }\n\n            function resetComments() {\n                \/\/ \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0442\u0435\n                commentsContainer.innerHTML = '';\n            }\n\n            function resetReferences() {\n                \/\/ \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438\u0442\u0435\n                referencesContainer.innerHTML = '';\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 uploadFile() {\n                const fileInput = document.getElementById('file-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 \u0444\u0430\u0458\u043b \u0437\u0430 \u0430\u043f\u043b\u043e\u0430\u0434.');\n                    return;\n                }\n\n                const reader = new FileReader();\n                reader.onload = async function(event) {\n                    const fileContent = event.target.result;\n                    const textContent = await extractText(fileContent, file.type);\n                    hiddenContent.value = textContent.substring(0, 300000); \/\/ \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 300,000 \u0437\u043d\u0430\u0446\u0438\n                    displayFile(file, fileContent, file.type);\n                };\n                if (file.type === 'application\/pdf') {\n                    reader.readAsArrayBuffer(file);\n                } else {\n                    reader.readAsBinaryString(file);  \/\/ Use readAsBinaryString instead of readAsText\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); \/\/ Debug log\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 displayFile(file, fileContent, fileType) {\n                const fileURL = URL.createObjectURL(file);\n                if (fileType === 'application\/pdf') {\n                    fileViewer.innerHTML = `<iframe src=\"${fileURL}\" style=\"width: 100%; height: 100%; border: none;\"><\/iframe>`;\n                } else if (fileType === 'application\/vnd.openxmlformats-officedocument.wordprocessingml.document') {\n                    mammoth.convertToHtml({ arrayBuffer: fileContent })\n                        .then(function(result) {\n                            console.log(\"DOCX to HTML conversion result:\", result.value); \/\/ Debug log\n                            fileViewer.innerHTML = result.value;\n                        })\n                        .catch(function(err) {\n                            console.error(\"Error displaying DOCX file:\", err);\n                        });\n                } else {\n                    throw new Error('Unsupported file type for display: ' + fileType);\n                }\n            }\n\n            async function getComments(botResponse) {\n                const requestBody = JSON.stringify({\n                    model: \"gpt-4o-2024-08-06\",\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. \u041a\u043e\u043c\u0435\u043d\u0442\u0430\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 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\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: botResponse }\n                    ],\n                    max_tokens: 4096,\n                    stream: true\n                });\n\n                const response = await fetch('https:\/\/api.openai.com\/v1\/chat\/completions', {\n                    method: 'POST',\n                    headers: {\n                        'Content-Type': 'application\/json',\n                        'Authorization': `Bearer ${apiKey}`\n                    },\n                    body: 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 comments = '';\n                const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u0458\u0430 \u0437\u0430 \u043e\u0434\u043b\u043e\u0436\u0443\u0432\u0430\u045a\u0435\n\n                \/\/ \u041a\u0440\u0435\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u0442 \u043d\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u043e\u0442\n                const commentElement = document.createElement('div');\n                commentElement.className = `message bot-message new-comment`;\n                commentsContainer.appendChild(commentElement);\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; \/\/ \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0458\u0442\u0435 \u0433\u043e [DONE] \u0442\u043e\u043a\u0435\u043d\u043e\u0442\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 partialComment = data.choices[0].delta.content;\n                                        comments += partialComment;\n                                        \/\/ \u0410\u0436\u0443\u0440\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0442 \u0441\u043e \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u0442 \u043d\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u043e\u0442\n                                        commentElement.innerText = comments;\n                                        commentsContainer.scrollTop = commentsContainer.scrollHeight;\n                                        await delay(10); \/\/ \u041d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0431\u0440\u0437\u0438\u043d\u0430\u0442\u0430 \u0441\u043e \u043e\u0434\u043b\u043e\u0436\u0443\u0432\u0430\u045a\u0435 \u043e\u0434 100ms\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 comments;\n            }\n\n            async function getReferences(botResponse) {\n                const requestBody = JSON.stringify({\n                    model: \"gpt-4o-2024-08-06\",\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. \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0442\u0435 \u0442\u0440\u0435\u0431\u0430 \u0434\u0430 \u0431\u0438\u0434\u0430\u0442 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u0438 \u0437\u0430 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435 \u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0442\u0435. \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u043d\u0430 \u0442\u0432\u043e\u0438\u0442\u0435 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\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: botResponse }\n                    ],\n                    max_tokens: 4096,\n                    stream: true\n                });\n\n                const response = await fetch('https:\/\/api.openai.com\/v1\/chat\/completions', {\n                    method: 'POST',\n                    headers: {\n                        'Content-Type': 'application\/json',\n                        'Authorization': `Bearer ${apiKey}`\n                    },\n                    body: 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 references = '';\n                const delay = ms => new Promise(resolve => setTimeout(resolve, ms)); \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u0458\u0430 \u0437\u0430 \u043e\u0434\u043b\u043e\u0436\u0443\u0432\u0430\u045a\u0435\n\n                \/\/ \u041a\u0440\u0435\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u0442 \u043d\u0430 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\n                const referenceElement = document.createElement('div');\n                referenceElement.className = `message bot-message new-reference`;\n                referencesContainer.appendChild(referenceElement);\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; \/\/ \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0458\u0442\u0435 \u0433\u043e [DONE] \u0442\u043e\u043a\u0435\u043d\u043e\u0442\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 partialReference = data.choices[0].delta.content;\n                                        references += partialReference;\n                                        \/\/ \u0410\u0436\u0443\u0440\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0442 \u0441\u043e \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u0442 \u043d\u0430 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\n                                        referenceElement.innerText = references;\n                                        referencesContainer.scrollTop = referencesContainer.scrollHeight;\n                                        await delay(10); \/\/ \u041d\u0430\u043c\u0430\u043b\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0431\u0440\u0437\u0438\u043d\u0430\u0442\u0430 \u0441\u043e \u043e\u0434\u043b\u043e\u0436\u0443\u0432\u0430\u045a\u0435 \u043e\u0434 100ms\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 references;\n            }\n\n            window.sendSummaryMessage = sendSummaryMessage;\n            window.resetDialog = resetDialog;\n            window.resetHistory = resetHistory;\n            window.resetComments = resetComments;\n            window.resetReferences = resetReferences;\n            window.copyContent = copyContent;\n            window.stopResponse = stopResponse;\n            window.toggleEditMode = toggleEditMode;\n            window.uploadFile = uploadFile;\n            window.checkTextLength = checkTextLength;\n            window.saveToFile = saveToFile;\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<p class=\"has-primary-color has-text-color has-link-color wp-elements-254d21198ee5cd4fec54dd2c29bad66a\">\u0412\u043e \u043c\u043e\u0434\u0435\u0440\u043d\u0430\u0442\u0430 \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u0430 \u0435\u0440\u0430, \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438\u0442\u0435 \u043a\u043e\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0430\u0442 \u0432\u0435\u0448\u0442\u0430\u0447\u043a\u0430 \u0438\u043d\u0442\u0435\u043b\u0438\u0433\u0435\u043d\u0446\u0438\u0458\u0430 (\u0412\u0418) \u0441\u0442\u0430\u043d\u0443\u0432\u0430\u0430\u0442 \u0441\u00e8 \u043f\u043e\u043f\u0440\u0435\u0434\u043e\u043c\u0438\u043d\u0430\u043d\u0442\u043d\u0438, \u043e\u0441\u043e\u0431\u0435\u043d\u043e \u0432\u043e \u0430\u043a\u0430\u0434\u0435\u043c\u0441\u043a\u0438\u0442\u0435 \u0438 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u043a\u0438\u0442\u0435 \u0441\u0444\u0435\u0440\u0438. \u0415\u0434\u043d\u0430 \u0442\u0430\u043a\u0432\u0430 \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0458\u0430 \u043a\u043e\u0458\u0430 \u0433\u043e \u0437\u0430\u0441\u043b\u0443\u0436\u0443\u0432\u0430 \u0432\u0430\u0448\u0435\u0442\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0435 AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\u0442, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0435\u043d\u0430 \u043e\u0434 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u0442 \u0437\u0430 \u0420\u043e\u0434\u043e\u0432\u0438 \u0421\u0442\u0443\u0434\u0438\u0438 \u043f\u0440\u0438 \u0424\u0438\u043b\u043e\u0437\u043e\u0444\u0441\u043a\u0438\u043e\u0442 \u0444\u0430\u043a\u0443\u043b\u0442\u0435\u0442 \u0432\u043e \u0421\u043a\u043e\u043f\u0458\u0435. \u041d\u043e \u0437\u043e\u0448\u0442\u043e \u043e\u0432\u0430\u0430 \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0458\u0430 \u0435 \u0432\u0438\u0441\u0442\u0438\u043d\u0441\u043a\u0438 \u0410\u0418 \u0430\u0433\u0435\u043d\u0442 \u0438 \u043a\u0430\u043a\u043e \u043d\u0435\u0458\u0437\u0438\u043d\u0438\u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0458\u0441 \u0441\u0435 \u0438\u0437\u0434\u0432\u043e\u0458\u0443\u0432\u0430 \u0441\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u0458\u043d\u0438\u043e\u0442 \u043f\u0440\u0438\u0441\u0442\u0430\u043f \u043d\u0430 \u043f\u0440\u043e\u0437\u043e\u0440\u0438\u0442\u0435?\u0417\u043e\u0448\u0442\u043e AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\u0442 \u0435 \u0412\u0438\u0441\u0442\u0438\u043d\u0441\u043a\u0438 \u0410\u0418 \u0410\u0433\u0435\u043d\u0442?<\/p>\n\n\n\n<p>\u0421\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442 \u0437\u0430 \u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u045a\u0435 \u0438 \u041e\u0434\u0433\u043e\u0432\u043e\u0440\u0438<br>AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0435 \u043e\u0431\u0438\u0447\u0435\u043d \u0447\u0435\u0442 \u0431\u043e\u0442. \u041e\u0432\u0430\u0430 \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0458\u0430 \u043a\u043e\u0440\u0438\u0441\u0442\u0438 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438 \u0437\u0430 \u043c\u0430\u0448\u0438\u043d\u0441\u043a\u043e \u0443\u0447\u0435\u045a\u0435 \u0438 \u043f\u0440\u0438\u0440\u043e\u0434\u043d\u043e \u0458\u0430\u0437\u0438\u0447\u043d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0438\u0440\u0430\u045a\u0435 (NLP) \u0437\u0430 \u0434\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435 \u0438 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438 \u043d\u0430 \u0441\u043b\u043e\u0436\u0435\u043d\u0438 \u043f\u0440\u0430\u0448\u0430\u045a\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u0438 \u043d\u0430 \u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 \u0458\u0430\u0437\u0438\u043a. \u0412\u0440\u0437 \u043e\u0441\u043d\u043e\u0432\u0430 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u043d\u0430 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0442 \u0438 \u0434\u043e\u0434\u0430\u0434\u0435\u043d\u0438\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438, \u0431\u043e\u0442\u043e\u0442 \u043c\u043e\u0436\u0435 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e \u0434\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0438 \u0434\u0435\u0442\u0430\u043b\u043d\u0438 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438, \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u0438 \u0437\u0430 \u043f\u043e\u043b\u0435\u0442\u043e \u043d\u0430 \u0440\u043e\u0434\u043e\u0432\u0438\u0442\u0435 \u0441\u0442\u0443\u0434\u0438\u0438 \u0438 \u0444\u0435\u043c\u0438\u043d\u0438\u0437\u043c\u043e\u0442.<\/p>\n\n\n\n<p>\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0438 \u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438 \u0438 \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438<br>\u0415\u0434\u043d\u0430 \u043e\u0434 \u043a\u043b\u0443\u0447\u043d\u0438\u0442\u0435 \u043a\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043d\u0430 AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\u0442 \u0435 \u043d\u0435\u0433\u043e\u0432\u0430\u0442\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442 \u0434\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438 \u0438 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438. \u041a\u043e\u0433\u0430 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u043a\u043e\u0442 \u045c\u0435 \u0434\u043e\u0431\u0438\u0435 \u043e\u0434\u0433\u043e\u0432\u043e\u0440 \u043e\u0434 \u0431\u043e\u0442\u043e\u0442, \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0458\u0430\u0442\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u043e \u043e\u0431\u0435\u0437\u0431\u0435\u0434\u0443\u0432\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438 \u0438 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043a\u043e\u0438 \u0433\u043e \u043f\u043e\u0434\u0434\u0440\u0436\u0443\u0432\u0430\u0430\u0442 \u0438 \u043f\u0440\u043e\u0448\u0438\u0440\u0443\u0432\u0430\u0430\u0442 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u043e\u0442. \u041e\u0432\u0430 \u043e\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438\u0442\u0435 \u0434\u0430 \u0434\u043e\u0431\u0438\u0458\u0430\u0442 \u043f\u043e\u0446\u0435\u043b\u043e\u0441\u043d\u0438 \u0438 \u043f\u043e\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u0438 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438.<\/p>\n\n\n\n<p>\u0420\u0435\u0430\u043b\u043d\u0430 \u0412\u0440\u0435\u043c\u0435 \u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0446\u0438\u0458\u0430<br>\u0410\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0458\u0430\u0442\u0430 \u043f\u043e\u0434\u0434\u0440\u0436\u0443\u0432\u0430 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433 \u043d\u0430 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435, \u0448\u0442\u043e \u0437\u043d\u0430\u0447\u0438 \u0434\u0435\u043a\u0430 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438\u0442\u0435 \u0434\u043e\u0431\u0438\u0432\u0430\u0430\u0442 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438 \u0432\u043e \u0440\u0435\u0430\u043b\u043d\u043e \u0432\u0440\u0435\u043c\u0435, \u043a\u0430\u043a\u043e \u0434\u0430 \u0440\u0430\u0437\u0433\u043e\u0432\u0430\u0440\u0430\u0430\u0442 \u0441\u043e \u0432\u0438\u0441\u0442\u0438\u043d\u0441\u043a\u0438 \u0430\u0441\u0438\u0441\u0442\u0435\u043d\u0442. \u041e\u0432\u0430\u0430 \u043a\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u0458\u0430 \u043f\u0440\u0430\u0432\u0438 \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0458\u0430\u0442\u0430 \u0438\u0441\u043a\u043b\u0443\u0447\u0438\u0442\u0435\u043b\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430 \u0438 \u043a\u043e\u0440\u0438\u0441\u043d\u0430 \u0437\u0430 \u0431\u0440\u0437\u043e \u0434\u043e\u0431\u0438\u0432\u0430\u045a\u0435 \u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n\n\n\n<p>\u0421\u0430\u043c\u043e\u0441\u0442\u043e\u0458\u043d\u043e \u0410\u043f\u043b\u0438\u0446\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u041f\u0440\u043e\u0437\u043e\u0440\u0438\u0442\u0435<br>\u041c\u0443\u043b\u0442\u0438\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0458\u0441<br>AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\u0442 \u0441\u0435 \u0438\u0441\u0442\u0430\u043a\u043d\u0443\u0432\u0430 \u0441\u043e \u0441\u0432\u043e\u0458\u043e\u0442 \u043c\u0443\u043b\u0442\u0438\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0458\u0441 \u043a\u043e\u0458 \u043e\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438\u0442\u0435 \u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442 \u0441\u043e \u043f\u043e\u0432\u0435\u045c\u0435 \u043f\u0440\u043e\u0437\u043e\u0440\u0438 \u0438\u0441\u0442\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043e. \u041e\u0432\u043e\u0458 \u043f\u0440\u0438\u0441\u0442\u0430\u043f \u043e\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430 \u043b\u0435\u0441\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u0443\u0432\u0430\u045a\u0435 \u0441\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0438 \u0430\u0441\u043f\u0435\u043a\u0442\u0438 \u043d\u0430 \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0458\u0430\u0442\u0430:<\/p>\n\n\n\n<p>\u041f\u0440\u043e\u0437\u043e\u0440 \u0437\u0430 \u0414\u0438\u0458\u0430\u043b\u043e\u0433: \u0413\u043b\u0430\u0432\u043d\u0438\u043e\u0442 \u043f\u0440\u043e\u0437\u043e\u0440 \u043a\u0430\u0434\u0435 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438\u0442\u0435 \u043c\u043e\u0436\u0430\u0442 \u0434\u0430 \u0432\u043d\u0435\u0441\u0443\u0432\u0430\u0430\u0442 \u043f\u0440\u0430\u0448\u0430\u045a\u0430 \u0438 \u0434\u0430 \u0434\u043e\u0431\u0438\u0432\u0430\u0430\u0442 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438 \u043e\u0434 \u0431\u043e\u0442\u043e\u0442.<br>\u041f\u0440\u043e\u0437\u043e\u0440 \u0437\u0430 \u0418\u0441\u0442\u043e\u0440\u0438\u0458\u0430 \u043d\u0430 \u0420\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0438: \u041f\u0440\u043e\u0437\u043e\u0440 \u043a\u0430\u0434\u0435 \u0441\u0435 \u0447\u0443\u0432\u0430\u0430\u0442 \u0441\u0438\u0442\u0435 \u043f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u0438 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0438, \u043e\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430\u0458\u045c\u0438 \u043b\u0435\u0441\u043d\u043e \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u0430\u045a\u0435 \u0438 \u0437\u0430\u0447\u0443\u0432\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0458\u0430\u0442\u0430.<br>\u041f\u0440\u043e\u0437\u043e\u0440 \u0437\u0430 \u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438: \u041f\u0440\u043e\u0437\u043e\u0440 \u043a\u0430\u0434\u0435 \u0441\u0435 \u043f\u0440\u0438\u043a\u0430\u0436\u0443\u0432\u0430\u0430\u0442 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0438 \u043e\u0434 \u0431\u043e\u0442\u043e\u0442 \u0432\u0440\u0437 \u043e\u0441\u043d\u043e\u0432\u0430 \u043d\u0430 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435.<br>\u041f\u0440\u043e\u0437\u043e\u0440 \u0437\u0430 \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438: \u041f\u0440\u043e\u0437\u043e\u0440 \u043a\u0430\u0434\u0435 \u0441\u0435 \u043f\u0440\u0438\u043a\u0430\u0436\u0443\u0432\u0430\u0430\u0442 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u0438 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0438 \u0438\u0437\u0432\u043e\u0440\u0438 \u043a\u043e\u0438 \u0433\u043e \u043f\u043e\u0434\u0434\u0440\u0436\u0443\u0432\u0430\u0430\u0442 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u043e\u0442 \u043d\u0430 \u0431\u043e\u0442\u043e\u0442.<br>\u041f\u0440\u043e\u0437\u043e\u0440 \u0437\u0430 \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442: \u041f\u0440\u043e\u0437\u043e\u0440 \u043a\u0430\u0434\u0435 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438\u0442\u0435 \u043c\u043e\u0436\u0430\u0442 \u0434\u0430 \u0430\u043f\u043b\u043e\u0430\u0434\u0438\u0440\u0430\u0430\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438 \u0438 \u0434\u0430 \u0434\u043e\u0434\u0430\u0432\u0430\u0430\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0437\u0430 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0442.<br>\u0421\u0430\u043c\u043e\u0441\u0442\u043e\u0458\u043d\u043e\u0441\u0442 \u0438 \u0424\u043b\u0435\u043a\u0441\u0438\u0431\u0438\u043b\u043d\u043e\u0441\u0442<br>\u0421\u0430\u043c\u043e\u0441\u0442\u043e\u0458\u043d\u0438\u043e\u0442 \u043f\u0440\u0438\u0441\u0442\u0430\u043f \u043d\u0430 \u043f\u0440\u043e\u0437\u043e\u0440\u0438\u0442\u0435 \u043e\u0432\u043e\u0437\u043c\u043e\u0436\u0443\u0432\u0430 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438\u0442\u0435 \u0434\u0430 \u0438\u043c\u0430\u0430\u0442 \u043f\u043e\u0433\u043e\u043b\u0435\u043c\u0430 \u0444\u043b\u0435\u043a\u0441\u0438\u0431\u0438\u043b\u043d\u043e\u0441\u0442 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u0432\u0440\u0437 \u043d\u0438\u0432\u043d\u0430\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430. \u041c\u043e\u0436\u0430\u0442 \u0434\u0430 \u0441\u0435 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0430\u0430\u0442 \u043d\u0430 \u043e\u0434\u0440\u0435\u0434\u0435\u043d \u0430\u0441\u043f\u0435\u043a\u0442 \u043d\u0430 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0442 \u0438\u043b\u0438 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0431\u0435\u0437 \u0434\u0430 \u0431\u0438\u0434\u0430\u0442 \u043f\u0440\u0435\u043a\u0438\u043d\u0443\u0432\u0430\u043d\u0438 \u043e\u0434 \u0434\u0440\u0443\u0433\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438. \u041e\u0432\u0430 \u0433\u043e \u043f\u0440\u0430\u0432\u0438 AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\u0442 \u0438\u0441\u043a\u043b\u0443\u0447\u0438\u0442\u0435\u043b\u043d\u043e \u043a\u043e\u0440\u0438\u0441\u0435\u043d \u0437\u0430 \u0430\u043a\u0430\u0434\u0435\u043c\u0441\u043a\u0438 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u0438 \u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0438 \u043a\u043e\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442 \u0441\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438 \u0438 \u043e\u0431\u0435\u043c\u043d\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n\n\n\n<p class=\"has-primary-color has-text-color has-link-color wp-elements-4190a7a12a4a529f859b56a72b4d5a90\">\u0417\u0430\u043a\u043b\u0443\u0447\u043e\u043a<br>AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\u0442 \u0435 \u0432\u0438\u0441\u0442\u0438\u043d\u0441\u043a\u0438 \u0410\u0418 \u0430\u0433\u0435\u043d\u0442 \u043a\u043e\u0458 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430 \u0432\u0435\u0448\u0442\u0430\u0447\u043a\u0430 \u0438\u043d\u0442\u0435\u043b\u0438\u0433\u0435\u043d\u0446\u0438\u0458\u0430 \u0441\u043e \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u0435\u043d \u0438 \u043c\u0443\u043b\u0442\u0438\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0458\u0441. \u0421\u043e \u0441\u0432\u043e\u0458\u0430\u0442\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442 \u0437\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u045a\u0435 \u0438 \u043e\u0434\u0433\u043e\u0432\u043e\u0440\u0438, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438 \u0438 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u0458\u043d\u0438\u043e\u0442 \u043f\u0440\u0438\u0441\u0442\u0430\u043f \u043d\u0430 \u043f\u0440\u043e\u0437\u043e\u0440\u0438\u0442\u0435, \u043e\u0432\u0430\u0430 \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0458\u0430 \u043d\u0443\u0434\u0438 \u0443\u043d\u0438\u043a\u0430\u0442\u043d\u043e \u0438 \u043c\u043e\u045c\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430 \u0438\u0441\u0442\u0440\u0430\u0436\u0443\u0432\u0430\u0447\u0438\u0442\u0435 \u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0438\u0442\u0435 \u0432\u043e \u043f\u043e\u043b\u0435\u0442\u043e \u043d\u0430 \u0440\u043e\u0434\u043e\u0432\u0438\u0442\u0435 \u0441\u0442\u0443\u0434\u0438\u0438 \u0438 \u0444\u0435\u043c\u0438\u043d\u0438\u0437\u043c\u043e\u0442.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0427\u0435\u0442 \u0411\u043e\u0442 AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\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 \u0414\u0438\u0458\u0430\u043b\u043e\u0433 \u0418\u0441\u043f\u0440\u0430\u0442\u0438 \u0421\u0442\u043e\u043f \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u0434\u0438\u0458\u0430\u043b\u043e\u0433 \ud83d\udccb \u270f\ufe0f \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u041f\u0440\u043e\u0446\u0435\u0441\u0438\u0440\u0430\u0458 \u0418\u0441\u0442\u043e\u0440\u0438\u0458\u0430 \u043d\u0430 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \ud83d\udccb \u270f\ufe0f \ud83d\udcbe \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u0438\u0441\u0442\u043e\u0440\u0438\u0458\u0430 \u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438 \ud83d\udccb \u270f\ufe0f \ud83d\udcbe \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438 \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438 \ud83d\udccb \u270f\ufe0f \ud83d\udcbe \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0446\u0438 \u0412\u043e \u043c\u043e\u0434\u0435\u0440\u043d\u0430\u0442\u0430 \u0434\u0438\u0433\u0438\u0442\u0430\u043b\u043d\u0430 \u0435\u0440\u0430, \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438\u0442\u0435 \u043a\u043e\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0430\u0442 \u0432\u0435\u0448\u0442\u0430\u0447\u043a\u0430 \u0438\u043d\u0442\u0435\u043b\u0438\u0433\u0435\u043d\u0446\u0438\u0458\u0430 (\u0412\u0418) \u0441\u0442\u0430\u043d\u0443\u0432\u0430\u0430\u0442 \u0441\u00e8 \u043f\u043e\u043f\u0440\u0435\u0434\u043e\u043c\u0438\u043d\u0430\u043d\u0442\u043d\u0438, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6700,"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":"AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\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 - \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":"\u0427\u0435\u0442 \u0411\u043e\u0442 AI Agent \u0441\u043e \u0442\u0435\u043a\u0441\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 \u0414\u0438\u0458\u0430\u043b\u043e\u0433 \u0418\u0441\u043f\u0440\u0430\u0442\u0438 \u0421\u0442\u043e\u043f \u0420\u0435\u0441\u0435\u0442\u0438\u0440\u0430\u0458 \u0434\u0438\u0458\u0430\u043b\u043e\u0433 \ud83d\udccb \u270f\ufe0f \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u041f\u0440\u043e\u0446\u0435\u0441\u0438\u0440\u0430\u0458 \u0418\u0441\u0442\u043e\u0440\u0438\u0458\u0430 \u043d\u0430 \u0440"},"footnotes":""},"class_list":["post-6642","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/pages\/6642","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=6642"}],"version-history":[{"count":26,"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/pages\/6642\/revisions"}],"predecessor-version":[{"id":10983,"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/pages\/6642\/revisions\/10983"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/media\/6700"}],"wp:attachment":[{"href":"https:\/\/aigender.net\/index.php\/wp-json\/wp\/v2\/media?parent=6642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}