UNPKG

@juanpin/aicomponents

Version:

Components for AI, that I constantly use

167 lines (119 loc) 5.93 kB
[![CI](https://github.com/morewings/react-library-template/actions/workflows/merge-jobs.yml/badge.svg)](https://github.com/morewings/react-library-template/actions/workflows/merge-jobs.yml) [![Storybook deploy](https://github.com/morewings/react-library-template/actions/workflows/pages.yml/badge.svg)](https://github.com/morewings/react-library-template/actions/workflows/pages.yml) [![Use this template](https://img.shields.io/badge/use%20this-template-blue?logo=githu)](https://github.com/morewings/react-library-template/generate) # React Library Template [![NPM library Create React App template logo](./design/logo.jpg)](#) This template repository is your shortcut to building awesome React components and libraries! Forget about the tedious setup – we've got you covered. Focus on writing your code, and let this template handle the rest. ## Features - **TypeScript & JavaScript**: Write your code in the language you prefer. - **Blazing fast**: **pnpm** for speedy package management and **Vite** for lightning-fast builds. - **Husky** enforces pre-commit hooks, **Eslint** and **Stylelint** will keep your code tidy and consistent. - **Jest** and **react-testing-library** help you write robust tests. - **Storybook** lets you create interactive demos and docs for your components. - **Optional Tailwind CSS**: If you're into it, you can easily enable Tailwind CSS for styling. See it in action: [Demo Storybook](https://morewings.github.io/react-library-template/) This template is your starting point for building high-quality React libraries. Clone it, customize it, and let's build something amazing! ## Quickstart ### Prerequisites 1. Install **Node** >= 20.x. 2. Install **pnpm**. E.g. `corepack prepare pnpm@latest --activate`. ### Installation Manually clone repo or use `degit`. ```shell script # With CSS Modules config npx degit github:morewings/react-library-template my-library # With Tailwind CSS config npx degit github:morewings/react-library-template#tailwind my-library cd ./my-library pnpm i ``` ## Enable Tailwind CSS You can find all changes at this [PR](https://github.com/morewings/react-library-template/pull/161) and [tailwind](https://github.com/morewings/react-library-template/tree/tailwind) branch. ## Improve tree shaking The default settings allow modern bundlers such as Vite and esbuild successfully tree-shake unused modules from the bundle. Unfortunately there are problems with Next.js and Webpack not capable to tree-shake single file ES Module. In order to fix this enable `preserveModules` setting in Rollup options. ```ts import {defineConfig} from 'vite'; export default defineConfig(() => ({ // ... build: { lib: { // ... fileName: (format, entryName) => { // Create entry file(s) inside the bundle if (entryName === 'src/lib/index') { return `index.${format === 'es' ? 'js' : 'cjs'}`; // Organize external dependencies which included in the bundle } else if (entryName.includes('node_modules')) { return `external/module.${format === 'es' ? 'js' : 'cjs'}` } // Keep other modules in places return `${entryName}.${format === 'es' ? 'js' : 'cjs'}`; }, // Change bundle formats to ES Modules and commonJS. // UMD bundle will not work with preserveModules:true formats: ['es', 'cjs'], }, rollupOptions: { // ... output: { // ... preserveModules: true, }, }, }, })); ``` You can find all changes at corresponding [PR](https://github.com/morewings/react-library-template/pull/352) and [tree-shaking](https://github.com/morewings/react-library-template/tree/tree-shaking) branch. # @juanpin/aicomponents AI Components package with Tailwind CSS v4 and bb: prefix. ## Components ### LocalChat A configurable AI chat component with web worker support. #### Props - `workerFallbackPath?: string` - Custom worker fallback path (optional, absolute path) - `headerText?: string` - Header text to display in the chat component (default: "Chat with our AI ✨") - `contextFiles?: string[]` - Array of local file paths to use as LLM context (default: `[]`) - `systemPrompt?: string` - System prompt for the LLM (overrides default if set) - `modelName?: ModelName` - Model to use for inference (default: `ModelName.SMOLLM2_360M`) #### Available Models ```tsx import { ModelName } from '@juanpin/aicomponents'; // Available models: ModelName.ZR1_1_5B // 'onnx-community/ZR1-1.5B-ONNX' ModelName.DEEPSEEK_R1_DISTILL // 'onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX' ModelName.LLAMA_3_2_1B // 'onnx-community/Llama-3.2-1B-Instruct-q4f16' ModelName.SMOLLM2_1_7B // 'HuggingFaceTB/SmolLM2-1.7B-Instruct' ModelName.SMOLLM2_360M // 'HuggingFaceTB/SmolLM2-360M-Instruct' (default) ModelName.SMOLLM_135M // 'HuggingFaceTB/SmolLM-135M-Instruct' ``` #### Usage ```tsx import { LocalChat, ModelName } from '@juanpin/aicomponents'; // With default context (none) <LocalChat /> // With a specific model <LocalChat modelName={ModelName.LLAMA_3_2_1B} /> // With custom context files <LocalChat contextFiles={["/public/profile.md", "/public/extra.md"]} /> // With all props <LocalChat headerText="AI Assistant 🤖" workerFallbackPath="/custom-worker.js" contextFiles={["/public/profile.md", "/public/extra.md"]} systemPrompt="You are a helpful assistant." modelName={ModelName.SMOLLM2_1_7B} /> ``` ## Installation ```bash npm install @juanpin/aicomponents ``` ## CSS Import Don't forget to import the CSS: ```tsx import '@juanpin/aicomponents/dist/tailwind.css'; ``` The component uses the `browser-brains-chat` class wrapper with bb: prefixed Tailwind classes to avoid conflicts.