+
+
+
- -
- При наличии каких либо технических проблем, в первую очередь рекомендуем очистить кеш браузера - и обновить версию браузера при необходимости. На данном ресурсе вы можете найти - инструкцию по очистке «кэша» во всех современных браузерах. После чего рекомендуем - авторизоваться в ЛКО. -
- -

В случае возникновения проблем при регистрации, воспользуйтесь формой обратной связи, - где в теме кратко укажите проблему, в тексте сообщения укажите ФИО, номер студенческого, факультет, - курс, группу (при наличии). Без указания перечисленных данных обращения в - службу техподдержки не рассматриваются.

- -

Форма «Регистрация» с использованием данных номера студенческого и идентификатора предназначена - для АКТИВАЦИИ учетной записи. После активации она работать не будет! Форма «Авторизации» - предназначена для входа ПОСЛЕ активации учетной записи с использованием данных электронного адреса - и пароля, который был отправлен по электронному адресу, указанному при активации или внесенному - в последствии в Профиль.

- -

В случае если вы забыли пароль, необходимо нажать «Восстановить пароль» - в форме «Авторизации» и использовать электронный адрес, с которым вы активировали личный кабинет, - или тот, который вы указывали в качестве контактного электронного адреса в «Профиле» личного - кабинета обучающегося. Инструкция доступна по ссылке - https://student.sechenov.ru/howto.php

- -

При возникновении вопросов/проблем с ЦТ необходимо выбирать соответствующий пункт в причинах - на форме. Письма, отправленные не через форму обратной связи с выбором соответствующей причины, - а по электронной почте рассматриваться не будут.

- -

Уважаемые первокурсники! Убедительная просьба не блокировать кампусные карты МИР - в личном кабинете Сбербанк Онлайн!

- -
-
-

Регистрация ( Получить пароль от портала )

- -
-
- - -
-
- - -
-
- - -
- -
-
- -
-

Авторизация ( Я уже активировал профиль )

- -
-
- - -
-
- - -
-
- - -
- -
-
+
+
- +

+ При наличии каких либо технических проблем, в первую очередь рекомендуем очистить кеш браузера + и обновить версию браузера при необходимости. На данном ресурсе вы можете найти + инструкцию по очистке «кэша» во всех современных браузерах. После чего рекомендуем + авторизоваться в ЛКО. +

- -
-

Claude Chat

+
+
+

В случае возникновения проблем при регистрации, воспользуйтесь формой обратной связи, + где в теме кратко укажите проблему, в тексте сообщения укажите ФИО, номер студенческого, факультет, + курс, группу (при наличии). + Без указания перечисленных данных обращения в службу техподдержки не рассматриваются.

+ +

Форма «Регистрация» с использованием данных номера студенческого и идентификатора предназначена + для АКТИВАЦИИ учетной записи. После активации она работать не будет! Форма «Авторизации» + предназначена для входа ПОСЛЕ активации учетной записи с использованием данных электронного адреса + и пароля, который был отправлен по электронному адресу, указанному при активации или внесенному + в последствии в Профиль.

+ +

В случае если вы забыли пароль, необходимо нажать + «Восстановить пароль» в форме «Авторизации» и использовать электронный адрес, с которым вы + активировали личный кабинет, или тот, который вы указывали в качестве контактного + электронного адреса в «Профиле» личного кабинета обучающегося. + Инструкция доступна по ссылке https://student.sechenov.ru/howto.php

+ +

При возникновении вопросов/проблем с ЦТ необходимо выбирать соответствующий пункт в причинах + на форме. Письма, отправленные не через форму обратной связи с выбором соответствующей причины, + а по электронной почте рассматриваться не будут.

+
+

Уважаемые первокурсники! Убедительная просьба не блокировать кампусные + карты МИР в личном кабинете Сбербанк Онлайн!

+
+
+ +
+ +
+

Регистрация Получить пароль от портала

+ +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ + +
+

Авторизация Я уже активировал профиль

+ +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + + + +
+
+
@@ -601,135 +463,150 @@ - +
Запрос
- +
Ответ
-
Ответ появится здесь...
+
Ответ появится здесь...
- - -
- + + +
+
+
- + + + }); + + // ── Chat ── + const inputEl = document.getElementById('chat-input'); + const outputEl = document.getElementById('chat-output'); + const sendBtn = document.getElementById('sendBtn'); + const clearBtn = document.getElementById('clearBtn'); + const modelSel = document.getElementById('modelSel'); + const statusEl = document.getElementById('chat-status'); + const spinnerEl= document.getElementById('spinner'); + const timerEl = document.getElementById('chat-timer'); + + let timerInterval = null; + + function setLoading(on) { + sendBtn.disabled = on; + spinnerEl.style.display = on ? 'inline-block' : 'none'; + if (on) { + const start = Date.now(); + timerInterval = setInterval(() => { + timerEl.textContent = ((Date.now()-start)/1000).toFixed(1)+'s'; + }, 100); + } else { + clearInterval(timerInterval); + } + } + + function renderMarkdown(text) { + let html = text.replace(/&/g,'&').replace(//g,'>'); + html = html.replace(/```[\w]*\n?([\s\S]*?)```/g, (_,c) => `
${c.trim()}
`); + html = html.replace(/`([^`]+)`/g, '$1'); + html = html.replace(/\*\*([^*]+)\*\*/g, '$1'); + return html; + } + + async function send() { + const text = inputEl.value.trim(); + if (!text) return; + outputEl.className = ''; + outputEl.innerHTML = ''; + setLoading(true); + statusEl.textContent = 'Генерирую...'; + let fullText = ''; + try { + const resp = await fetch('/api/chat', { + method: 'POST', + headers: {'Content-Type':'application/json'}, + body: JSON.stringify({text, model: modelSel.value}), + }); + const reader = resp.body.getReader(); + const decoder = new TextDecoder(); + let buf = ''; + while (true) { + const {done, value} = await reader.read(); + if (done) break; + buf += decoder.decode(value, {stream:true}); + const parts = buf.split('\n\n'); + buf = parts.pop(); + for (const part of parts) { + if (!part.startsWith('data: ')) continue; + const raw = part.slice(6).trim(); + if (raw === '[DONE]') continue; + try { + const obj = JSON.parse(raw); + if (obj.error) { + outputEl.innerHTML += `${obj.error}`; + } else if (obj.text) { + fullText += obj.text; + outputEl.innerHTML = renderMarkdown(fullText); + outputEl.scrollTop = outputEl.scrollHeight; + } + } catch(e) {} + } + } + } catch(e) { + outputEl.innerHTML = `Ошибка: ${e.message}`; + } finally { + setLoading(false); + statusEl.textContent = fullText ? `${fullText.length} символов` : ''; + } + } + + sendBtn.addEventListener('click', send); + inputEl.addEventListener('keydown', e => { if (e.ctrlKey && e.key==='Enter') send(); }); + clearBtn.addEventListener('click', () => { + inputEl.value = ''; + outputEl.innerHTML = 'Ответ появится здесь...'; + outputEl.className = 'empty'; + statusEl.textContent = ''; + timerEl.textContent = ''; + }); +