nodes-ui-flow / src /components /SettingsDialog.jsx
markitzeroo
Deploy updated nodes UI flow
1dd9186
import { useEffect, useRef } from 'react';
export default function SettingsDialog({
backendUrl,
defaultBackendUrl,
liveDebugUrl,
llmProvider,
deepinfraApiKey,
deepinfraHasKey,
deepinfraKeyStatus,
isOpen,
onBackendUrlChange,
onLiveDebugUrlChange,
onLlmProviderChange,
onDeepinfraApiKeyChange,
onClose,
onResetToDefault,
onSave,
}) {
const inputRef = useRef(null);
useEffect(() => {
if (!isOpen || !inputRef.current) {
return;
}
inputRef.current.focus();
inputRef.current.select();
}, [isOpen]);
if (!isOpen) {
return null;
}
return (
<div
className="settings-overlay"
onMouseDown={(event) => {
if (event.target === event.currentTarget) {
onClose();
}
}}
>
<div className="settings-dialog">
<div className="settings-dialog__header">
<div>
<div className="settings-dialog__eyebrow">Настройки</div>
<h2 className="settings-dialog__title">Настройки графа</h2>
</div>
<button type="button" className="toolbar__button" onClick={onClose}>
Закрыть
</button>
</div>
<div className="settings-dialog__body">
<label className="field-stack">
<span className="field-label">Backend URL</span>
<input
ref={inputRef}
className="node-input"
type="text"
value={backendUrl}
placeholder="http://localhost:8000"
onChange={(event) => onBackendUrlChange(event.target.value)}
/>
</label>
<div className="settings-dialog__note">
Укажи адрес backend сервера, на который уходят запросы графа. Можно использовать локальный адрес вроде
`http://localhost:8000` или удалённый сервер.
</div>
<div className="settings-dialog__default">
<span>Значение из config:</span>
<code>{defaultBackendUrl}</code>
</div>
<label className="field-stack">
<span className="field-label">Live debug runtime URL</span>
<input
className="node-input"
type="text"
value={liveDebugUrl}
placeholder="http://localhost:8001"
onChange={(event) => onLiveDebugUrlChange(event.target.value)}
/>
</label>
<div className="settings-dialog__note">
Отдельный адрес runtime для подключения к рабочему Brains. Пустое значение означает стандартный Brains URL: `http://localhost:8001`.
</div>
<label className="field-stack">
<span className="field-label">LLM provider</span>
<select
className="node-input"
value={llmProvider}
onChange={(event) => onLlmProviderChange(event.target.value)}
>
<option value="deepinfra">DeepInfra</option>
<option value="ollama">Ollama</option>
</select>
</label>
<div className="settings-dialog__note">
Provider применяется ко всем LLM-вызовам графа: semantic branch, save memory, knowledge answer,
LLM-ноды ассистента, автоответ и evaluator в LLM-тесте.
</div>
{llmProvider === 'deepinfra' ? (
<>
<label className="field-stack">
<span className="field-label">DeepInfra API Key</span>
<input
className="node-input"
type="password"
value={deepinfraApiKey}
placeholder={deepinfraHasKey ? 'Ключ сохранен. Оставьте пустым, чтобы не менять.' : 'Введите DeepInfra API key'}
autoComplete="off"
onChange={(event) => onDeepinfraApiKeyChange(event.target.value)}
/>
</label>
<div className="settings-dialog__note">
{deepinfraKeyStatus ||
(deepinfraHasKey
? 'DeepInfra key уже сохранен локально на backend.'
: 'DeepInfra key обязателен и будет сохранен локально на backend.')}
</div>
</>
) : null}
</div>
<div className="settings-dialog__footer">
<button type="button" className="toolbar__button" onClick={onResetToDefault}>
Взять из config
</button>
<div className="button-row">
<button type="button" className="toolbar__button" onClick={onClose}>
Отмена
</button>
<button type="button" className="toolbar__button toolbar__button--primary" onClick={onSave}>
Сохранить настройки
</button>
</div>
</div>
</div>
</div>
);
}