#!/usr/bin/env bun /** * Basic Usage Example for LeRobot Arena Inference Server TypeScript Client * * This example demonstrates how to: * 1. Create a client instance * 2. Check server health * 3. Create an inference session * 4. Start inference * 5. Monitor session status * 6. Clean up resources */ import { LeRobotInferenceServerClient } from '../src/index'; import type { CreateSessionRequest, SessionStatusResponse } from '../src/generated'; async function main() { // Create client instance const client = new LeRobotInferenceServerClient('http://localhost:8001'); try { console.log('๐Ÿ” Checking server health...'); const isHealthy = await client.isHealthy(); if (!isHealthy) { console.error('โŒ Server is not healthy. Make sure the inference server is running.'); process.exit(1); } console.log('โœ… Server is healthy!'); // Get detailed health info const healthInfo = await client.getHealth(); console.log('๐Ÿ“Š Server status:', healthInfo); // Create a session (using generated types) const sessionRequest: CreateSessionRequest = { session_id: 'example-session-' + Date.now(), policy_path: './checkpoints/act_so101_beyond', // Update with your model path camera_names: ['front', 'wrist'], // Update with your camera names arena_server_url: 'http://localhost:8000', // Update with your arena server URL workspace_id: null // Let the server generate a workspace ID }; console.log('๐Ÿš€ Creating inference session...'); const session = await client.createSession(sessionRequest); console.log('โœ… Session created!'); console.log('๐Ÿ“ Workspace ID:', session.workspace_id); console.log('๐Ÿ“ท Camera rooms:', session.camera_room_ids); console.log('๐Ÿ”„ Joint input room:', session.joint_input_room_id); console.log('๐ŸŽฏ Joint output room:', session.joint_output_room_id); // Start inference console.log('โ–ถ๏ธ Starting inference...'); await client.startInference(sessionRequest.session_id); console.log('โœ… Inference started!'); // Wait for the session to be running console.log('โณ Waiting for session to be running...'); const runningStatus = await client.waitForSessionStatus( sessionRequest.session_id, 'running', 30000 // 30 second timeout ); console.log('๐Ÿƒ Session is now running!'); // Monitor the session for a few seconds console.log('๐Ÿ“Š Monitoring session status...'); for (let i = 0; i < 5; i++) { const status: SessionStatusResponse = await client.getSessionStatus(sessionRequest.session_id); console.log(`๐Ÿ“ˆ Status: ${status.status}, Stats:`, status.stats); // Wait 2 seconds before next check await new Promise(resolve => setTimeout(resolve, 2000)); } // Get system info for debugging console.log('๐Ÿ”ง Getting system information...'); const systemInfo = await client.getSystemInfo(); console.log('๐Ÿ’ป System info:', systemInfo); // Get session queue info console.log('๐Ÿ“‹ Getting session queue info...'); const queueInfo = await client.getSessionQueueInfo(sessionRequest.session_id); console.log('๐Ÿ“ Queue info:', queueInfo); // Stop inference console.log('โน๏ธ Stopping inference...'); await client.stopInference(sessionRequest.session_id); console.log('โœ… Inference stopped!'); // Clean up - delete the session console.log('๐Ÿงน Cleaning up session...'); await client.deleteSession(sessionRequest.session_id); console.log('โœ… Session deleted!'); console.log('๐ŸŽ‰ Example completed successfully!'); } catch (error) { console.error('โŒ Error:', error); process.exit(1); } } // Alternative: Using the convenience function async function quickExample() { const client = new LeRobotInferenceServerClient('http://localhost:8001'); try { // This creates a session and starts inference in one call const result = await client.createAndStartSession({ session_id: 'quick-example-' + Date.now(), policy_path: './checkpoints/act_so101_beyond', camera_names: ['front'], arena_server_url: 'http://localhost:8000' }); console.log('๐Ÿš€ Quick session created and started!'); console.log('Session:', result.session); console.log('Status:', result.status); // Clean up await client.deleteSession(result.status.session_id); console.log('โœ… Quick example completed!'); } catch (error) { console.error('โŒ Quick example error:', error); } } // Run the main example if (import.meta.main) { console.log('=== LeRobot Arena Inference Server Client Example ===\n'); // Choose which example to run based on command line argument const runQuick = process.argv.includes('--quick'); if (runQuick) { console.log('Running quick example...\n'); await quickExample(); } else { console.log('Running full example...\n'); await main(); } }