AIKit
AIKit ·

Библиотека UI-компонентов для AI-чатов, построенная на принципах атомарного дизайна.
Описание
@gravity-ui/aikit — это гибкая и расширяемая библиотека React-компонентов для создания AI-чатов любой сложности. Библиотека предоставляет набор готовых компонентов, которые можно использовать как есть или кастомизировать под ваши нужды.
Ключевые особенности
- 🎨 Атомарный дизайн — чёткая иерархия компонентов от атомов до страниц
- 🔧 Независимость от SDK — не привязана к конкретным AI SDK
- 🎭 Двухуровневый подход — готовые компоненты + хуки для кастомизации
- 🎨 CSS-переменные — простая кастомизация темы без переопределения компонентов
- 📦 TypeScript — полная типобезопасность из коробки
- 🔌 Расширяемость — система регистрации пользовательских типов сообщений
Структура проекта
src/
├── components/
│ ├── atoms/ # Базовые неделимые UI-элементы
│ ├── molecules/ # Простые группы атомов
│ ├── organisms/ # Сложные компоненты с логикой
│ ├── templates/ # Готовые макеты
│ └── pages/ # Полные интеграции с данными
├── hooks/ # Хуки общего назначения
├── types/ # TypeScript-типы
├── utils/ # Утилиты
└── themes/ # CSS-темы и переменные
Установка
npm install @gravity-ui/aikit
Быстрый старт
import { ChatContainer } from '@gravity-ui/aikit';
import type { ChatType, TChatMessage } from '@gravity-ui/aikit';
function App() {
const [messages, setMessages] = useState<TChatMessage[]>([]);
const [chats, setChats] = useState<ChatType[]>([]);
const [activeChat, setActiveChat] = useState<ChatType | null>(null);
return (
<ChatContainer
chats={chats}
activeChat={activeChat}
messages={messages}
onSendMessage={async (data) => {
// Ваша логика отправки
console.log('Сообщение:', data.content);
}}
onSelectChat={setActiveChat}
onCreateChat={() => {
// Создание нового чата
}}
onDeleteChat={(chat) => {
// Удаление чата
}}
/>
);
}
Архитектура
Библиотека построена на принципах атомарного дизайна:
🔹 Атомы
Базовые неделимые UI-элементы без бизнес-логики:
ActionButton— кнопка со встроенным тултипомAlert— сообщения с различными вариантами оформленияChatDate— форматирование даты с относительными датамиContextIndicator— индикатор использования контекста токеновContextItem— метка контекста с возможностью удаленияDiffStat— отображение статистики изменений кодаDisclaimer— компонент текста-дисклеймераInlineCitation— текстовые цитатыLoader— индикатор загрузкиMarkdownRenderer— рендерер Yandex Flavored MarkdownMessageBalloon— обёртка сообщенияShimmer— эффект анимации загрузкиSubmitButton— кнопка отправки с состояниямиToolIndicator— индикатор статуса выполнения инструмента
🔸 Молекулы
Простые комбинации атомов:
BaseMessage— базовая обёртка для всех типов сообщенийButtonGroup— группа кнопок с поддержкой ориентацииInputContext— управление контекстомPromptInputBody— текстовое поле с авторастягиваниемPromptInputFooter— футер с иконками действий и кнопкой отправкиPromptInputHeader— хедер с элементами контекста и индикаторомPromptInputPanel— панель-контейнер для пользовательского контентаSuggestions— кликабельные кнопки предложенийTabs— навигационные вкладки с функцией удаленияToolFooter— футер сообщения инструмента с действиямиToolHeader— хедер сообщения инструмента с иконкой и действиями
🔶 Организмы
Сложные компоненты с внутренней логикой:
AssistantMessage— сообщение AI-ассистентаHeader— хедер чатаMessageList— список сообщенийPromptInput— поле ввода сообщенияThinkingMessage— процесс размышления AIToolMessage— выполнение инструментаUserMessage— сообщение пользователя
📄 Шаблоны
Готовые макеты:
ChatContent— основной контент чатаEmptyContainer— пустое состояниеHistory— история чатов
📱 Страницы
Полные интеграции:
ChatContainer— полностью собранный чат
Документация
- Руководство по быстрому старту
- Архитектура
- Структура проекта
- Руководство по тестированию
- Руководство по Playwright
Тестирование
Проект использует Playwright Component Testing для визуального регрессионного тестирования.
Запуск тестов
Важно: Все тесты должны запускаться через Docker для обеспечения консистентности скриншотов в различных окружениях.
# Запуск всех компонентных тестов в Docker (рекомендуется)
npm run playwright:docker
# Обновление эталонных скриншотов в Docker
npm run playwright:docker:update
# Запуск конкретного теста по grep-паттерну в Docker
npm run playwright:docker -- --grep "@ComponentName"
# Очистка кэша Docker при необходимости
npm run playwright:docker:clear-cache
Локальное тестирование (только Linux)
Если вы работаете на Linux, вы можете запускать тесты локально:
# Установка браузеров Playwright (выполняется один раз)
npm run playwright:install
# Запуск всех компонентных тестов
npm run playwright
# Обновление эталонных скриншотов
npm run playwright:update
Подробная документация по тестированию доступна в Руководстве по Playwright.
Разработка
Инструкции по разработке и контрибьютингу доступны в CONTRIBUTING.md.
Лицензия
MIT