Infrastructure Layer

Каждый вендор — за одним контрактом.

Кеш, базы данных, vector stores, event bus, LLM и другие — всё через стабильные интерфейсы. Меняете вендора одной строчкой в конфиге; код вашего сервиса не меняется.

Что живёт за контрактом

Абстракция вендоров по категориям

Кеш, SQL и document базы, vector stores, object storage, event bus, LLM, embeddings, observability — каждая внешняя зависимость доходит до платформы через один стабильный интерфейс.

Меняйте вендора одной строчкой в конфиге

Когда нужно перейти от одного провайдера к другому, вы меняете одну запись в конфиге. Producer и consumer код в ваших сервисах остаётся таким же.

Точка расширения уже открыта

Нужен Kafka, RabbitMQ, NATS или что-то ещё, чего нет в каталоге? Пишете свой адаптер под тот же контракт — в своём репо, приватном или публичном — и он загружается идентично нашим.

Около 21 открытого адаптера сегодня

OpenAI, SQLite, MongoDB, Redis, Qdrant, Pino, Docker, локальная файловая система, git worktrees и другие. Каталог растёт открыто, и ваш может расти так же.

Multi-tenant routing встроен

Per-tenant лимиты, контроль бюджета, audit и observability — часть слоя, а не то, что каждый продукт реализует заново.

Self-hosted, open source, без чёрных ящиков

Работает на вашей инфраструктуре. Данные не покидают вашу сеть, если вы это не настроили. Каждая строка каждого адаптера доступна для аудита.

Как это работает

1

Ваш сервис зависит от контракта

Producer и consumer код вашего сервиса импортирует типизированный интерфейс из @kb-labs/core-platform. Никогда не импортирует SDK вендора напрямую.

2

Runtime загружает адаптер

При старте runtime читает конфиг, загружает adapter-пакет по имени и привязывает его к контракту. Референсный, ваш приватный, или будущий открытый — все загружаются идентично.

3

Меняете backend — код не двигается

Меняете одну строку в .kb/kb.config.json. Код вашего сервиса не меняется. Вендор под контрактом заменяется, поведение над контрактом сохраняется.

// .kb/kb.config.json — change the adapter, code stays the same
{
  "platform": {
    "adapters": {
      "cache":      "@kb-labs/adapters-redis",
      "db":         "@kb-labs/adapters-sqlite",
      "documentDb": "@kb-labs/adapters-mongodb",
      "vectorStore":"@kb-labs/adapters-qdrant",
      "eventBus":   "@kb-labs/adapters-eventbus-cache",
      "llm":        "@kb-labs/adapters-openai",
      "logger":     "@kb-labs/adapters-pino",
      "storage":    "@kb-labs/adapters-fs"
    }
  }
}

Хватит реализовывать одну и ту же вендорную обвязку в каждом продукте.

Один слой контрактов. Адаптеры, которые вы меняете в конфиге. На том же движке, который вы устанавливаете одной командой.