* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
22 KiB
Playground Studio (Русский)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Функция: Playground Studio — единое рабочее пространство для тестирования ИИ по адресу
/dashboard/playground. Планы:17-playground-studio-redesign.plan.md+_orchestration/master-plan-group-C.mdСтатус: Выпущено в v3.8.6
Обзор
Playground Studio превращает /dashboard/playground из простого редактора на базе Monaco
в полнофункциональное рабочее пространство для тестирования. Оно заменяет устаревший page.tsx оболочкой PlaygroundStudio,
которая отображает четыре вкладки и общую панель конфигурации.
┌ Playground ──────────────────────────────────────────────────────────┐
│ [💬 Чат] [⚖ Сравнение] [{} API] [🔧 Сборка] 142↑ 38↓ · $0.002 </>│
├──────────────────────────────────────────┬───────────────────────────┤
│ {содержимое активной вкладки} │ ─ Конфигурация │
│ │ Эндпоинт [чат ∨] │
│ │ Модель [gpt-5.4 ∨] │
│ │ Система [текстовое поле]│
│ │ Темп. ▕▕▔▔ 0.7 │
│ │ Пресеты [▾ загрузить][сохранить]│
│ │ [✨ Улучшить промпт] │
└──────────────────────────────────────────┴───────────────────────────┘
Вкладки
Вкладка чата
Расширяет ChatPlayground.tsx, превращая его в рабочее пространство для многоходового взаимодействия с потоковой передачей:
- Полноценный рендеринг Markdown с помощью
MarkdownMessage.tsx(блоки кода, таблицы, списки, ссылки). - Системный промпт берётся из общей панели конфигурации.
- Количество токенов и стоимость для каждого сообщения (токены промпта + токены завершения).
- Повторная генерация последнего ответа.
- Отправляет запросы в
POST /v1/chat/completionsс потоковой передачей SSE.
Вкладка сравнения
Ключевое преимущество прокси: запуск одного промпта параллельно для 4 моделей.
- До 4 столбцов, каждый из которых независимо получает потоковые данные из
/v1/chat/completions. - Кнопка
+ Добавить модель(сочетание клавиш Cmd+K) для добавления столбцов. Запустить все ▶запускает все потоки одновременно с помощьюPromise.allи отдельногоAbortControllerдля каждого столбца.- Глобальная команда Отменить все прерывает каждый выполняющийся поток.
- Компонент
ProviderMetricsв каждом столбце показывает TTFT, TPS, количество токенов и расчётную стоимость в реальном времени. - Метрики помечены как «оценка на стороне клиента» (D12) — измерение начинается с первого фрагмента SSE.
Вкладка API
Полностью сохраняет исходный редактор Monaco для опытных пользователей (D14):
- 10 эндпоинтов: завершения чата, завершения, эмбеддинги, изображения, аудио, речь, транскрипции, модерация, переранжирование, поиск.
- Загрузка мультимодальных файлов.
- Потоковая передача SSE с выводом в реальном времени.
- Обёрнут в
ApiTab.tsx(ленивая загрузка,ssr: false).
Вкладка сборки
Интерфейс для инструментов/вызова функций и структурированного вывода:
ToolsBuilder.tsx— добавление, редактирование и удалениеtools[]с редактором схемы JSON для каждого инструмента. Проверяет параметры с помощьюToolDefinitionSchema(Zod).StructuredOutputEditor.tsx— переключатель режима JSON и редактор схемы JSON. Проверяет ответ на соответствие схеме с помощьюStructuredOutputSchema(Zod).- Отправляет запрос в
/v1/chat/completionsсtools[]и/илиresponse_format.
Панель конфигурации (общая)
StudioConfigPane.tsx — всегда видима, можно свернуть.
| Поле | Компонент | Примечания |
|---|---|---|
| Эндпоинт | <select> |
10 вариантов, соответствующих PlaygroundEndpoint |
| Модель | <input> |
произвольный текст, например openai/gpt-4o |
| Системный промпт | <textarea> |
передаётся во все вкладки |
| Параметры | ParamSliders |
temperature, max_tokens, top_p, presence/frequency penalty, seed, stop |
| Пресеты | PresetPicker |
загрузка/сохранение именованных снимков конфигурации (хранятся в БД) |
| Улучшение промпта | ImprovePromptButton |
открывает модальное окно с предупреждением о квоте, вызывает /api/playground/improve-prompt |
Состояние поднято в PlaygroundStudio.tsx и передаётся во все вкладки. При переключении вкладок
состояние конфигурации сохраняется.
Верхняя панель
StudioTopBar.tsx:
- Переключатель вкладок (role="tablist").
TokenCostCounter— отображение количества токенов (↑/↓) и оценочной стоимости в реальном времени.- Кнопка экспорта кода (
</>) — открываетExportCodeModal.
Модальное окно экспорта кода
ExportCodeModal.tsx использует codeExport.ts для генерации фрагментов curl / Python / TypeScript
из текущего PlaygroundState. В качестве заполнителя API-ключа всегда используется $OMNIROUTE_API_KEY (D11).
Улучшение промпта
ImprovePromptButton.tsx → useImprovePrompt.ts → POST /api/playground/improve-prompt:
- Модальное окно предупреждает: «будет израсходована квота».
- После подтверждения отправляет
{ system, prompt, model, tone }в маршрут. - Маршрут внутренне вызывает
/v1/chat/completionsсpromptImprover.META_SYSTEM_PROMPT. - Возвращает
{ improvedSystem?, improvedPrompt?, tokensIn, tokensOut }. - Интерфейс обновляет системный промпт панели конфигурации и пользовательский промпт вкладки чата.
Пресеты
PresetPicker.tsx → usePresets.ts → /api/playground/presets/*:
- Хранятся в таблице SQLite
playground_presets(миграция084_playground_presets.sql). - Каждый пресет содержит:
name,endpoint,model,system,params_json,created_at. - CRUD: список через
GET, создание черезPOST,GET /:id,PUT /:id,DELETE /:id.
Метрики потоковой передачи
useStreamMetrics.ts + streamMetrics.ts (чистая функция):
start()— записывает время начала запроса.onFirstChunk()— записывает TTFT.onChunk(n)— накапливает количество токенов завершения.finish(usage?)— вычисляет итоговые метрики:ttftMs,totalMs,tps,tokensIn,tokensOut,costUsd.- Цены берутся из статической таблицы в
src/lib/playground/types.ts(помечены как «оценочные» — D13).
Серверные маршруты
| Метод | Путь | Обработчик |
|---|---|---|
POST |
/api/playground/improve-prompt |
Проверяет ImprovePromptRequestSchema с помощью Zod; вызывает /v1/chat/completions с метапромптом |
GET |
/api/playground/presets |
Возвращает { presets: PlaygroundPresetListItem[] } |
POST |
/api/playground/presets |
Создаёт пресет; проверяет PlaygroundPresetCreateSchema |
GET |
/api/playground/presets/:id |
Возвращает один пресет или 404 |
PUT |
/api/playground/presets/:id |
Частичное обновление |
DELETE |
/api/playground/presets/:id |
204 |
Аутентификация: необязательная (REQUIRE_API_KEY). Ошибки формируются через buildErrorBody() (жёсткое правило №12).
Ключевые файлы
| Путь | Назначение |
|---|---|
src/app/(dashboard)/dashboard/playground/PlaygroundStudio.tsx |
Компонент-оболочка, управление вкладками |
src/app/(dashboard)/dashboard/playground/components/StudioTopBar.tsx |
Вкладки + счётчик + кнопка экспорта |
src/app/(dashboard)/dashboard/playground/components/StudioConfigPane.tsx |
Общая панель конфигурации |
src/app/(dashboard)/dashboard/playground/components/tabs/ChatTab.tsx |
Рабочая область чата |
src/app/(dashboard)/dashboard/playground/components/tabs/CompareTab.tsx |
Сравнение нескольких моделей |
src/app/(dashboard)/dashboard/playground/components/tabs/ApiTab.tsx |
Редактор Monaco (сохранён) |
src/app/(dashboard)/dashboard/playground/components/tabs/BuildTab.tsx |
Инструменты + структурированный вывод |
src/app/(dashboard)/dashboard/playground/components/ExportCodeModal.tsx |
Модальное окно экспорта кода |
src/app/(dashboard)/dashboard/playground/components/CompareColumn.tsx |
Отдельный столбец сравнения |
src/app/(dashboard)/dashboard/playground/components/ProviderMetrics.tsx |
Отображение TTFT/TPS |
src/app/(dashboard)/dashboard/playground/hooks/useStreamMetrics.ts |
Клиентский хук метрик |
src/app/(dashboard)/dashboard/playground/hooks/usePresets.ts |
Хук CRUD для пресетов |
src/app/(dashboard)/dashboard/playground/hooks/useImprovePrompt.ts |
Хук улучшения промпта |
src/lib/playground/codeExport.ts |
Генератор curl/Python/TS (общий с Search Tools) |
src/lib/playground/promptImprover.ts |
Конструктор метапромпта |
src/lib/playground/streamMetrics.ts |
Чистое вычисление метрик |
src/lib/db/playgroundPresets.ts |
Модуль БД (CRUD) |
src/app/api/playground/improve-prompt/route.ts |
REST-маршрут улучшения промпта |
src/app/api/playground/presets/route.ts |
Получение списка и создание пресетов |
src/app/api/playground/presets/[id]/route.ts |
Получение/обновление/удаление пресетов |
src/lib/db/migrations/084_playground_presets.sql |
Миграция БД |
Устранение неполадок
| Симптом | Причина | Решение |
|---|---|---|
| Редактор Monaco не отображается на вкладке API | Monaco загружен через SSR | Убедитесь, что ApiTab использует dynamic(..., { ssr: false }) |
| Сравниваемые потоки запускаются последовательно | Неправильное использование Promise.all |
Запуски всех потоков должны быть инициированы одним вызовом Promise.all |
В метриках TTFT отображается null |
Обработчик первого фрагмента не подключен | Проверьте, что useStreamMetrics.onFirstChunk() вызывается в цикле чтения SSE |
| Предустановка не сохраняется | Миграция БД не выполнена | Выполните npm run db:migrate или перезапустите сервер (миграция запускается автоматически при старте) |
| Функция улучшения промпта возвращает 502 | Модель не указана в Config | Перед улучшением пользователь должен ввести имя модели на панели Config |
В экспортированном коде отображается MISSING_API_KEY |
Заполнитель не вставлен | codeExport.ts всегда использует API_KEY_PLACEHOLDER = "$OMNIROUTE_API_KEY" |
Ссылки
- Основной план:
_tasks/features-v3.8.6/refactorpages/_orchestration/master-plan-group-C.md - План функции:
_tasks/features-v3.8.6/refactorpages/17-playground-studio-redesign.plan.md - Экспорт кода:
src/lib/playground/codeExport.ts - Улучшение промптов:
src/lib/playground/promptImprover.ts - Search Tools Studio:
docs/frameworks/SEARCH_TOOLS_STUDIO.md