UNPKG

cactus-ai-sdk-provider

Version:

Cactus provider for Vercel AI SDK - enables on-device LLM inference in React Native

165 lines (119 loc) 3.28 kB
# cactus-ai-sdk-provider Cactus provider for Vercel AI SDK - enables on-device LLM inference in React Native applications. ## Installation ```bash npm install cactus-ai-sdk-provider ai ``` For model download capabilities (optional): ```bash npm install react-native-fs # iOS only: cd ios && pod install ``` ### React Native Setup Since AI SDK v5 uses Web Streams API, you need to install a polyfill for React Native: ```bash npm install web-streams-polyfill ``` Then add this at the very top of your app's entry file (index.js or App.js): ```javascript import 'web-streams-polyfill/dist/polyfill'; ``` ## Usage ### Basic Usage (Direct Path) ```typescript import { cactus } from 'cactus-ai-sdk-provider'; import { generateText } from 'ai'; // Use a local model file const model = cactus('/path/to/model.gguf'); // Initialize the model await model.initialize(); // Generate text const { text } = await generateText({ model, prompt: 'What is the capital of France?', }); ``` ### Model Download (Requires react-native-fs) ```typescript import { cactus } from 'cactus-ai-sdk-provider'; // Create model from URL const model = cactus('https://example.com/llama-2-7b.gguf'); // Download with progress tracking await model.downloadModel({ onProgress: (progress) => { console.log(`Download progress: ${(progress * 100).toFixed(2)}%`); } }); // Initialize after download await model.initialize(); // Use with AI SDK const { text } = await generateText({ model, prompt: 'Explain quantum computing', }); ``` ### Streaming ```typescript import { streamText } from 'ai'; const { textStream } = await streamText({ model, prompt: 'Write a short story', }); for await (const chunk of textStream) { console.log(chunk); } ``` ### Model Management ```typescript // List downloaded models const models = await model.listDownloadedModels(); // Get storage info const { totalSize, modelCount } = await model.getStorageInfo(); console.log(`${modelCount} models using ${totalSize} bytes`); // Delete a model await model.deleteModel(); ``` ## API Reference ### Provider ```typescript import { cactus, createCactus } from 'cactus-ai-sdk-provider'; // Use default provider const model = cactus(modelUrlOrPath); // Create custom provider const customProvider = createCactus({ generateId: () => 'custom-id' }); ``` ### Model Lifecycle ```typescript // Model states enum ModelStatus { IDLE, DOWNLOADING, INITIALIZING, READY, ERROR } // Check status const status = model.getStatus(); const error = model.getLastError(); ``` ## Requirements - React Native >= 0.70.0 - AI SDK (ai) >= 5.0.0 - web-streams-polyfill (for React Native) - react-native-fs >= 2.20.0 (optional, for downloads) ## Platform Notes - **iOS**: Models are stored in the app's documents directory - **Android**: Models are stored in the app's files directory - **Model Format**: Supports GGUF format models ## Troubleshooting ### TransformStream Error If you see "Property 'TransformStream' doesn't exist", make sure you've added the web-streams-polyfill as shown in the React Native Setup section. ### Model Download Issues Ensure react-native-fs is properly linked: - iOS: Run `cd ios && pod install` - Android: Should auto-link with React Native 0.60+ ## License MIT