UNPKG

@gravityai-dev/gravity-server

Version:

Integration SDK for the Gravity AI orchestration platform - Connect any AI platform in minutes

178 lines (133 loc) 4.95 kB
# @gravityai-dev/gravity-server Integration SDK for the Gravity AI orchestration platform. Connect any AI platform to Gravity in minutes. ## Features - 🚀 **Simple Integration** - Connect to Gravity with just a few lines of code - 🔌 **Platform Agnostic** - Works with n8n, LangChain, and any Node.js application - 📡 **Real-time Communication** - Built on Redis pub/sub for instant message delivery - 🎯 **Type-Safe** - Full TypeScript support with comprehensive type definitions - 🔧 **Minimal Dependencies** - Only requires Redis and a few core libraries ## Installation ```bash npm install @gravityai-dev/gravity-server ``` ## Quick Start ### Basic Publisher ```typescript import { Publisher } from '@gravityai-dev/gravity-server'; // Initialize publisher const publisher = Publisher.fromCredentials( 'https://api.gravityai.dev', // Your Gravity server URL 'your-api-key', // Your API key 'my-service' // Your service identifier ); // Send a message await publisher.publish('gravity:query', { chatId: 'chat-123', conversationId: 'conv-456', message: 'Hello from my service!', userId: 'user-456' }); ``` ### High-Performance Singleton Publishers (Recommended) ```typescript import { getProgressPublisher, getMessageChunkPublisher, getBatchPublisher, getTextPublisher, getSystemPublisher } from '@gravityai-dev/gravity-server'; // Initialize once - reuses connections and instances forever const progressPublisher = getProgressPublisher( 'https://api.gravityai.dev', 'your-api-key', 'my-service' ); // Subsequent calls are instant - no new objects created const sameInstance = getProgressPublisher(); // Ultra fast! // Publish progress update await progressPublisher.publishProgressUpdate( "Processing data...", 75, { chatId: 'chat-123', conversationId: 'conv-456', userId: 'user-789' } ); // Stream text chunks const messageChunkPublisher = getMessageChunkPublisher(); await messageChunkPublisher.publishMessageChunk( "Hello world!", { chatId: 'chat-123', conversationId: 'conv-456', userId: 'user-789' } ); // Send final text message const textPublisher = getTextPublisher(); await textPublisher.publishText( "Task completed successfully!", { chatId: 'chat-123', conversationId: 'conv-456', userId: 'user-789' } ); // System notifications const systemPublisher = getSystemPublisher(); await systemPublisher.publishSystemMessage( "Service started", "info", { chatId: 'chat-123', conversationId: 'conv-456', userId: 'user-789' } ); ``` ### Maximum Performance Batch Operations ```typescript import { getBatchPublisher } from '@gravityai-dev/gravity-server'; const batchPublisher = getBatchPublisher(serverUrl, apiKey, 'my-service'); // Send multiple messages in single Redis operation await batchPublisher.publishBatch([ { message: progressUpdate1, channel: 'gravity:output' }, { message: messageChunk1, channel: 'gravity:output' }, { message: textMessage1, channel: 'gravity:output' } ]); // Stream multiple chunks ultra-fast await batchPublisher.publishStreamingBatch( ['Hello', ' world', '!'], baseMessage, 'gravity:output' ); ``` ### Event Subscription ```typescript import { EventBus } from '@gravityai-dev/gravity-server'; // Create event bus const eventBus = EventBus.fromCredentials( 'https://api.gravityai.dev', // Your Gravity server URL 'your-api-key', // Your API key 'my-service' // Your service identifier ); // Subscribe to messages const unsubscribe = await eventBus.subscribe('gravity:query', async (message) => { console.log('Received message:', message); // Process the message // ... }); // Later: cleanup await unsubscribe(); ``` ## API Reference ### Publisher The `Publisher` class handles sending messages to Gravity. #### Methods - `Publisher.fromCredentials(serverUrl, apiKey, providerId)` - Create a publisher instance - `publish(channel, message)` - Send a message to a specific channel - `publishQueryMessage(message)` - Send a query message - `publishResponseMessage(message)` - Send a response message - `publishStreamMessage(message)` - Send a stream message - `publishUpdateMessage(message)` - Send an update message ### EventBus The `EventBus` class handles bidirectional communication with Gravity. #### Methods - `EventBus.fromCredentials(serverUrl, apiKey, providerId)` - Create an event bus instance - `subscribe(channel, handler)` - Subscribe to messages on a channel - `publish(channel, message)` - Send a message to a channel ### Message Types All messages must include: - `chatId` - Unique chat identifier - `conversationId` - Conversation thread identifier - `userId` - User identifier ## n8n Integration This SDK is designed to work seamlessly with n8n workflows. See the [n8n-nodes-gravity](https://github.com/gravityai-dev/n8n-nodes-gravity) package for pre-built n8n nodes. ## License MIT