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 la création de 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
- 🔧 Indépendant du SDK — 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 remplacement 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 textuellesLoader— 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 utilisateur
📄 Modèles
Mises en page complètes :
ChatContent— contenu principal du chatEmptyContainer— état videHistory— historique des chats
📱 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écute tous les tests de composants dans Docker (recommandé)
npm run playwright:docker
# Met à jour les bases de référence des captures d'écran dans Docker
npm run playwright:docker:update
# Exécute un test spécifique par motif grep dans Docker
npm run playwright:docker -- --grep "@ComponentName"
# Efface 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 :
# Installe les navigateurs Playwright (à exécuter une fois)
npm run playwright:install
# Exécute tous les tests de composants
npm run playwright
# Met à jour les bases de référence des captures d'écran
npm run playwright:update
Pour une documentation de test détaillée, consultez le Guide Playwright.
Développement
Les instructions de développement et de contribution sont disponibles dans CONTRIBUTING.md.
Licence
MIT
Pour les agents IA
Une bibliothèque de composants React pour la création d'interfaces de chat IA, organisée selon la conception atomique (atomes → molécules → organismes → modèles → pages) et indépendante du SDK — utilisez-la pour assembler une interface de chat (listes de messages, entrée de prompt, appels d'outils, pièces jointes) au lieu de composer ces primitives à partir de @gravity-ui/uikit manuellement.
Quand l'utiliser
- Création d'une interface de chat IA/LLM (messages assistant/utilisateur/outil, entrée de prompt avec suggestions, téléchargements de pièces jointes, états de réflexion).
- Vous souhaitez des mises en page de chat prêtes à l'emploi (
ChatContainer,MessageList,PromptInput) ainsi que des hooks pour personnaliser le comportement. - Intégration dans l'écosystème Gravity UI avec un thème partagé via des variables CSS.
Quand ne pas l'utiliser
- Pour des primitives d'interface utilisateur à usage général (boutons, champs de saisie, modales), utilisez
@gravity-ui/uikitdirectement — AIKit s'appuie sur celui-ci pour les besoins spécifiques au chat. - Pour afficher du markdown riche dans les messages,
MarkdownRendererd'AIKit encapsule@gravity-ui/markdown-editor; pour un rendu markdown autonome, utilisez ce package directement. - Pour une seule bulle de chat sans orchestration de chat, un
MarkdownRenderer/bloc de texte de uikit est plus léger que le pipeline de messages complet d'AIKit.
Pièges courants
- Halluciner une importation de SDK IA — AIKit est indépendant du SDK ; il fournit des composants/hooks, pas un client LLM. Apportez votre propre source de données et alimentez les messages via les props.
- Rechercher
<Chat>/<AIChat>— l'exportation au niveau de la page estChatContainer(etAIStudioChat) ; il n'y a pas de composant littéralement nomméChat. - Oublier d'enregistrer les types de messages personnalisés — les types de messages personnalisés doivent être enregistrés dans le système de types de messages, sinon ils seront rendus comme inconnus.
- Modifier les composants de base au lieu d'utiliser des hooks — la conception à deux niveaux s'attend à ce que vous personnalisiez via des hooks/composition ; la substitution directe des éléments internes casse les mises à niveau.
Documentation pour les agents IA
La documentation lisible par agent pour la version installée se trouve dans node_modules/@gravity-ui/aikit/build/docs/INDEX.md.