AIKit
AIKit ·

Bibliothèque de composants UI pour les chats IA, construite selon les principes de l'Atomic Design.
Description
@gravity-ui/aikit est une bibliothèque de composants React flexible et extensible pour construire des chats IA de toute complexité. La bibliothèque fournit un ensemble de composants prêts à l'emploi qui peuvent être utilisés tels quels ou personnalisés pour répondre à vos besoins.
Fonctionnalités clés
- 🎨 Atomic Design — hiérarchie claire des composants, des atomes aux pages
- 🔧 SDK Agnostique — indépendant des SDK IA spécifiques
- 🎭 Approche à deux niveaux — composants prêts à l'emploi + hooks pour la personnalisation
- 🎨 Variables CSS — thèmes faciles sans remplacements de composants
- 📦 TypeScript — sécurité de type complète dès le départ
- 🔌 Extensible — système d'enregistrement de types de messages personnalisés
Structure du projet
src/
├── components/
│ ├── atoms/ # Éléments UI de base indivisibles
│ ├── molecules/ # Groupes simples d'atomes
│ ├── organisms/ # Composants complexes avec logique
│ ├── templates/ # Mises en page complètes
│ └── pages/ # Intégrations complètes avec les données
├── hooks/ # Hooks à usage général
├── types/ # Types TypeScript
├── utils/ # Utilitaires
└── themes/ # Thèmes CSS et variables
Installation
npm install @gravity-ui/aikit
Démarrage rapide
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) => {
// Votre logique d'envoi
console.log('Message:', data.content);
}}
onSelectChat={setActiveChat}
onCreateChat={() => {
// Créer un nouveau chat
}}
onDeleteChat={(chat) => {
// Supprimer le chat
}}
/>
);
}
Architecture
La bibliothèque est construite sur les principes de l'Atomic Design :
🔹 Atomes
Éléments UI de base indivisibles sans logique métier :
ActionButton— bouton avec tooltip intégréAlert— messages d'alerte avec variantesChatDate— formatage de date avec dates relativesContextIndicator— indicateur d'utilisation du contexte de jetonContextItem— libellé de contexte avec action de suppressionDiffStat— affichage des statistiques de modification de codeDisclaimer— composant de texte d'avertissementInlineCitation— citations de texteLoader— indicateur de chargementMarkdownRenderer— rendu Yandex Flavored MarkdownMessageBalloon— conteneur de messageShimmer— effet d'animation de chargementSubmitButton— bouton de soumission avec étatsToolIndicator— indicateur d'état d'exécution de l'outil
🔸 Molécules
Combinaisons simples d'atomes :
BaseMessage— conteneur de base pour tous les types de messagesButtonGroup— groupe de boutons avec prise en charge de l'orientationInputContext— gestion du contextePromptInputBody— zone de texte avec redimensionnement automatiquePromptInputFooter— pied de page avec icônes d'action et bouton de soumissionPromptInputHeader— en-tête avec éléments de contexte et indicateurPromptInputPanel— panneau conteneur pour le contenu personnaliséSuggestions— boutons de suggestion cliquablesTabs— onglets de navigation avec fonctionnalité de suppressionToolFooter— pied de page du message de l'outil avec actionsToolHeader— en-tête du message de l'outil avec icône et actions
🔶 Organismes
Composants complexes avec logique interne :
AssistantMessage— message de l'assistant IAHeader— en-tête du chatMessageList— liste des messagesPromptInput— champ de saisie de messageThinkingMessage— processus de réflexion de l'IAToolMessage— exécution de l'outilUserMessage— message de l'utilisateur
📄 Modèles
Mises en page complètes :
ChatContent— contenu principal du chatEmptyContainer— état videHistory— historique du chat
📱 Pages
Intégrations complètes :
ChatContainer— chat entièrement assemblé
Documentation
Tests
Le projet utilise Playwright Component Testing pour les tests de régression visuelle.
Exécuter les tests
Important : Tous les tests doivent être exécutés via Docker pour garantir des captures d'écran cohérentes entre les différents environnements.
# Exécuter tous les tests de composants dans Docker (recommandé)
npm run playwright:docker
# Mettre à jour les bases de référence des captures d'écran dans Docker
npm run playwright:docker:update
# Exécuter un test spécifique par motif grep dans Docker
npm run playwright:docker -- --grep "@ComponentName"
# Effacer le cache Docker si nécessaire
npm run playwright:docker:clear-cache
Tests locaux (Linux uniquement)
Si vous êtes sous Linux, vous pouvez exécuter les tests localement :
# Installer les navigateurs Playwright (à exécuter une fois)
npm run playwright:install
# Exécuter tous les tests de composants
npm run playwright
# Mettre à jour les bases de référence des captures d'écran
npm run playwright:update
Pour une documentation détaillée sur les tests, consultez le Guide Playwright.
Développement
Les instructions de développement et de contribution sont disponibles dans CONTRIBUTING.md.
Licence
MIT