@ykurilov/agent-chat-storage-postgres
v0.75.0
Published
Хранилище чатов с агентом на PostgreSQL (Drizzle и `pg`).
Readme
@ykurilov/agent-chat-storage-postgres
Хранилище чатов с агентом на PostgreSQL (Drizzle и pg).
import { createPostgresChatStorage } from "@ykurilov/agent-chat-storage-postgres";
const storage = await createPostgresChatStorage({ connectionString: process.env.DATABASE_URL! });
// …
await chat.flush({ waitForAnswersMs: 20_000 }); // сначала дождитесь и запишите идущие ответы
await storage.close(); // при остановке сервера- Колонка
titleдля списка чатов добавляется миграцией; названия старых чатов заполняются по их первому сообщению. Удаление чата — одна транзакция. - Последний выбор модели человека (для новых чатов) лежит в таблице
agent_chat.user_model_choices, её создаёт миграция. - Состояние лимитов расходов лежит в таблице
agent_chat.spending_limit_states(запись по версии: из двух одновременных записей с одной версией проходит одна), её создаёт миграция. - Создание асинхронное: при запуске оно подключается к базе и применяет миграции. Если база недоступна, бросается понятная ошибка без пароля.
- Таблицы лежат в отдельной схеме
agent_chat: ваши таблицыchatsиmessages, если они есть, не затрагиваются. Пользователю базы нужно право создавать схему и таблицы. - Миграции идут под блокировкой базы: два сервера, стартующих одновременно, друг другу не мешают. Хранилища других
пакетов SDK в той же схеме можно открывать одновременно с этим, даже на пустой базе: схему
agent_chatони создают под общей блокировкой (migratePostgresSchemaиз core), а свои миграции — каждый под своей. - Сообщения не переписываются задним числом: меняется только ответ, который ещё пишется.
- Настройки:
poolSize(соединений в пуле, по умолчанию 10),logError(куда писать обрывы соединений). - Расход помечается «примерно» (колонка
estimated), идущий ответ — «жив» (alive_at); обе миграции применяются сами. - Несколько копий сервера на одной базе можно: идущий ответ отмечает «жив» (
alive_at), и копия прерывает только брошенные ответы. Время отметки берётся из часов базы, часы машин с копиями могут расходиться. Запросы одного чата держите на одной копии: поток ответа и «Стоп» живут в её памяти.
Тесты. Общий набор проверок хранилища идёт на встроенном PostgreSQL (pglite), ничего ставить не нужно. Чтобы прогнать
тот же набор на настоящей базе, задайте AGENT_CHAT_TEST_POSTGRES_URL.
Тесты на настоящей базе стирают схему agent_chat целиком (drop schema agent_chat cascade) вместе со всеми чатами в ней.
Берите только отдельную тестовую базу. Тесты откажутся работать, если в имени базы нет test; стирание другой базы нужно
подтвердить явно: AGENT_CHAT_TEST_POSTGRES_WIPE=yes.
Подключение целиком: docs/getting-started.md.
Журнал изменений и что делать при обновлении: CHANGELOG.md. Все пакеты SDK выходят вместе и с одной версией; обновление — pnpm update "@ykurilov/agent-chat-*" --latest.
