@dev-sergeev/datalab-kit 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +24 -3
- package/dist/datalab-provider.d.ts +2 -0
- package/dist/datalab-provider.js +45 -0
- package/dist/extension.js +2 -0
- package/docs/adr/0003-datalab-environment-provider.md +11 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.5
|
|
4
|
+
|
|
5
|
+
- GigaChat загружается через штатную точку входа расширения с интерактивным мастером `/gigachat`; пользовательские подключения и настройки сохраняются. Lockfile обновлён до `pi-gigachat` 0.6.1 без изменения upstream-кода; зависимость остаётся `latest`. Прежние утверждения для 0.5.1 о встроенных моделях и автоматическом default больше не применяются.
|
|
6
|
+
- Добавлен отдельный провайдер `DataLab` с моделями `glm-5.2 [DataLab]` и `Qwen3.5-397b [DataLab]`, только когда `GIGACHAT_API_URL` и `JPY_API_TOKEN` обе непусты после trim. Адрес задаёт корень API, токен передаётся как Bearer без сохранения в `auth.json`; `.env` автоматически не загружается, изменения окружения требуют перезапуска Pi.
|
|
7
|
+
- DataLab не меняет текущую модель или сохранённые defaults, не запрашивает каталог моделей и не проверяет сервер при запуске. Ошибки сервера возвращаются при обычном запросе к модели. Решение и границы ответственности описаны в ADR 0003.
|
|
8
|
+
|
|
3
9
|
## 0.1.4 — 2026-10-14
|
|
4
10
|
|
|
5
11
|
- GigaChat загружается через штатную точку входа расширения: доступны `/login`, мастер `/gigachat`, встроенные модели и собственная политика выбора default-модели. Lockfile обновлён до `pi-gigachat` 0.5.1; зависимость остаётся `latest`.
|
package/README.md
CHANGED
|
@@ -41,7 +41,28 @@ pi install ./dev-sergeev-datalab-kit-0.1.4.tgz
|
|
|
41
41
|
|
|
42
42
|
Одиннадцать фиксированных компонентов включены в архив npm вместе с их зависимостями. GigaChat устанавливается отдельно без закрепления версии.
|
|
43
43
|
|
|
44
|
-
Datalab Kit загружает штатное расширение GigaChat
|
|
44
|
+
Datalab Kit загружает штатное расширение GigaChat 0.6.1 без изменения его кода. `/gigachat` открывает интерактивный мастер подключений, авторизации и выбора моделей из каталогов серверов; это не интерфейс настройки через аргументы. Сохранённые подключения и пользовательские настройки остаются под управлением upstream. Основную модель выбирают через `/model`.
|
|
45
|
+
|
|
46
|
+
## DataLab из окружения
|
|
47
|
+
|
|
48
|
+
Дополнительно Datalab Kit регистрирует отдельный провайдер с идентификатором и именем `DataLab`, только если **обе** переменные окружения процесса Pi — `GIGACHAT_API_URL` и `JPY_API_TOKEN` — непусты после удаления пробелов по краям. Если хотя бы одна отсутствует, пуста или содержит только пробелы, провайдер и его модели не появляются в `/model`.
|
|
49
|
+
|
|
50
|
+
Задайте окружение до запуска Pi, например:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
export GIGACHAT_API_URL="https://your-server.example/v1"
|
|
54
|
+
export JPY_API_TOKEN="your-token"
|
|
55
|
+
pi
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`GIGACHAT_API_URL` — корень API с необходимым серверу префиксом пути (например, `/v1`), но без `/chat/completions`: этот суффикс добавляет адаптер. `JPY_API_TOKEN` передаётся как Bearer-токен и не сохраняется в `auth.json`. Datalab Kit не загружает `.env` автоматически; после изменения окружения перезапустите Pi.
|
|
59
|
+
|
|
60
|
+
| Модель в `/model` | Model ID на сервере | Контекст | Максимальный вывод |
|
|
61
|
+
| --- | --- | --- | --- |
|
|
62
|
+
| `glm-5.2 [DataLab]` | `glm-5.2` | 200000 токенов | 64000 токенов |
|
|
63
|
+
| `Qwen3.5-397b [DataLab]` | `Qwen3.5-397b` | 262144 токенов | 32768 токенов |
|
|
64
|
+
|
|
65
|
+
Этот фиксированный список не запрашивается у сервера. Регистрация не выбирает текущую модель и не меняет сохранённые defaults пользователя. При запуске нет HTTP-проверки сервера или пробной генерации; обычный запрос выполняется после обращения к модели, а ошибки сервера возвращаются пользователю. Штатный мастер `/gigachat` остаётся независимым от DataLab. Архитектурное решение — [ADR 0003](docs/adr/0003-datalab-environment-provider.md).
|
|
45
66
|
|
|
46
67
|
## Значения по умолчанию
|
|
47
68
|
|
|
@@ -55,7 +76,7 @@ Datalab Kit загружает штатное расширение GigaChat, н
|
|
|
55
76
|
- Подтверждения показывает штатный диалог `@gotgenes/pi-permission-system`: разрешение одного запуска или на сессию, отказ и отказ с причиной. Настройки клавиш и повторного нажатия управляются самим расширением; собственного диалога Datalab Kit нет.
|
|
56
77
|
- Одновременно работает один субагент. Инструмент `subagent` принимает одну задачу за вызов.
|
|
57
78
|
|
|
58
|
-
Уже заданные пользователем настройки имеют приоритет над значениями Datalab Kit, включая разрешения, настройки штатного диалога и число субагентов.
|
|
79
|
+
Уже заданные пользователем настройки имеют приоритет над значениями Datalab Kit, включая разрешения, настройки штатного диалога и число субагентов. Штатные подключения GigaChat управляются upstream; дополнительный DataLab не меняет выбор модели и defaults. Значения разрешений и числа субагентов действуют в памяти. Настройки разрешений остаются в штатных `extensions/pi-permission-system/config.json` внутри каталога агента и `.pi/extensions/pi-permission-system/config.json` внутри проекта. Субагенты используют `<agentDir>/subagents.json` и `<project>/.pi/subagents.json`.
|
|
59
80
|
|
|
60
81
|
В **Plan mode** допустимые инструменты и команды проверяет pi-plan-mode без дополнительных подтверждений по правилам набора. Явные пользовательские `ask` и `deny` продолжают действовать; некорректная конфигурация разрешений также не обходится. После выхода из Plan mode или перехода к реализации правила набора снова действуют. Это поведение сохраняется при восстановлении сессии и смене ветки. Plan mode допускает некоторые тесты и проверки, которые могут создавать артефакты.
|
|
61
82
|
|
|
@@ -91,7 +112,7 @@ GigaChat обновляется независимо от версии набо
|
|
|
91
112
|
|
|
92
113
|
Явно закреплённый пользователем источник GigaChat сохраняется. При удалении набора отдельная запись GigaChat остаётся; её можно удалить стандартным `pi remove npm:@dev-sergeev/pi-gigachat`. Установка с `-l` пока не проверена.
|
|
93
114
|
|
|
94
|
-
GigaChat загружается
|
|
115
|
+
GigaChat загружается через штатную точку входа как внутри набора, так и через отдельную запись пакета. Для 0.6.1 настройка подключений и моделей выполняется интерактивным `/gigachat`; прежние утверждения о встроенных GLM/Qwen и автоматическом default `gigachat/Qwen3.5-397b` относились к 0.5.1 и к этой версии неприменимы. Datalab Kit не переписывает исходники GigaChat, не очищает авторизацию или сохранённые подключения. Дополнительный провайдер DataLab не меняет текущую модель или defaults. Модель recap настраивается независимо.
|
|
95
116
|
|
|
96
117
|
## Разработка
|
|
97
118
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { createProvider } from '@earendil-works/pi-ai';
|
|
2
|
+
import { pathToFileURL } from 'node:url';
|
|
3
|
+
export default async function registerDataLab(pi, extensionPath) {
|
|
4
|
+
const baseUrl = process.env.GIGACHAT_API_URL?.trim();
|
|
5
|
+
const apiKey = process.env.JPY_API_TOKEN?.trim();
|
|
6
|
+
if (!baseUrl || !apiKey)
|
|
7
|
+
return;
|
|
8
|
+
// Pi may load an independently updated managed installation, not our dependency.
|
|
9
|
+
const { streamSimpleGigaChat } = await import(pathToFileURL(extensionPath).href);
|
|
10
|
+
const models = [
|
|
11
|
+
{ id: 'glm-5.2', name: 'GLM 5.2', contextWindow: 200000, maxTokens: 64000 },
|
|
12
|
+
{ id: 'Qwen3.5-397b', name: 'Qwen 3.5 397B', contextWindow: 262144, maxTokens: 32768 },
|
|
13
|
+
].map(model => ({
|
|
14
|
+
...model,
|
|
15
|
+
provider: 'DataLab',
|
|
16
|
+
api: 'gigachat-extension-api',
|
|
17
|
+
baseUrl,
|
|
18
|
+
input: ['text'],
|
|
19
|
+
reasoning: true,
|
|
20
|
+
thinkingLevelMap: { off: 'off', minimal: null, low: 'low', medium: 'medium', high: 'high', xhigh: null, max: null },
|
|
21
|
+
// Unknown USD prices; zero is not a free-tier claim.
|
|
22
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
23
|
+
}));
|
|
24
|
+
const stream = (model, context, options = {}) => streamSimpleGigaChat(model, context, {
|
|
25
|
+
...options,
|
|
26
|
+
apiKey,
|
|
27
|
+
// A saved credential or legacy GigaChat env must not redirect DataLab.
|
|
28
|
+
env: { ...options.env, GIGACHAT_BASE_URL: baseUrl },
|
|
29
|
+
});
|
|
30
|
+
pi.registerProvider(createProvider({
|
|
31
|
+
id: 'DataLab',
|
|
32
|
+
name: 'DataLab',
|
|
33
|
+
models,
|
|
34
|
+
auth: {
|
|
35
|
+
apiKey: {
|
|
36
|
+
name: 'JPY_API_TOKEN',
|
|
37
|
+
async resolve({ signal }) {
|
|
38
|
+
signal.throwIfAborted();
|
|
39
|
+
return { auth: { apiKey, baseUrl }, source: 'JPY_API_TOKEN' };
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
api: { stream, streamSimple: stream },
|
|
44
|
+
}));
|
|
45
|
+
}
|
package/dist/extension.js
CHANGED
|
@@ -2,10 +2,12 @@ import { getAgentDir } from '@earendil-works/pi-coding-agent';
|
|
|
2
2
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
4
|
import { gigaChatExtensionPath, hasConfiguredGigaChat, managedAgentDir, registerGigaChat } from './install.js';
|
|
5
|
+
import registerDataLab from './datalab-provider.js';
|
|
5
6
|
export default async function datalabKit(pi) {
|
|
6
7
|
const packageRoot = fileURLToPath(new URL('../', import.meta.url));
|
|
7
8
|
const agentDir = getAgentDir();
|
|
8
9
|
const configured = await hasConfiguredGigaChat(agentDir);
|
|
10
|
+
await registerDataLab(pi, gigaChatExtensionPath(packageRoot));
|
|
9
11
|
// On the first load, provide GigaChat immediately. Later Pi discovers the
|
|
10
12
|
// standalone source itself, so the provider must not be registered twice.
|
|
11
13
|
if (!configured) {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# ADR 0003: Отдельный провайдер DataLab из окружения
|
|
2
|
+
|
|
3
|
+
Status: accepted for implementation
|
|
4
|
+
|
|
5
|
+
В `pi-gigachat` 0.6.1 `/gigachat` — интерактивный мастер, а не программный интерфейс настройки через аргументы. Для подключения из окружения Datalab Kit владеет отдельным нативным провайдером с идентификатором и именем `DataLab`, повторно используя публичный stream/adapter upstream. Штатная точка входа GigaChat, мастер, сохранённые подключения и настройки пользователя остаются без изменений; код upstream не патчится и мастер не автоматизируется.
|
|
6
|
+
|
|
7
|
+
Провайдер регистрируется только при непустых после trim `GIGACHAT_API_URL` и `JPY_API_TOKEN` в окружении процесса Pi. URL задаёт корень API, включая нужный префикс вроде `/v1`, без `/chat/completions`; токен передаётся как Bearer и не сохраняется в `auth.json` или настройках. Окружение задаётся до запуска Pi, `.env` автоматически не загружается, новые значения требуют перезапуска. Регистрация не проверяет сервер и не выполняет пробных генераций: ошибки возвращаются при обычном запросе пользователя.
|
|
8
|
+
|
|
9
|
+
Datalab Kit задаёт только дополнительный фиксированный каталог: `glm-5.2 [DataLab]` (ID `glm-5.2`, контекст 200000, вывод 64000) и `Qwen3.5-397b [DataLab]` (ID `Qwen3.5-397b`, контекст 262144, вывод 32768), с reasoning maps соответствующих моделей upstream 0.5.1. Регистрация не выбирает текущую модель и не меняет сохранённые defaults.
|
|
10
|
+
|
|
11
|
+
Компромисс: набор отвечает за этот фиксированный каталог и совместимость с публичным адаптером, зато не зависит от автоматизации интерактивного мастера, не хранит секреты и не вводит собственный транспорт. Это ограниченно пересматривает запрет собственной политики моделей из [ADR 0002](0002-package-delivery.md) только для дополнительного DataLab; штатное поведение upstream и независимые настройки recap остаются вне этого пересмотра.
|