Spaces:
Runtime error
Runtime error
| /** | |
| * Basic Usage Example for RobotHub 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 { | |
| rootGet, | |
| healthCheckHealthGet, | |
| listSessionsSessionsGet, | |
| createSessionSessionsPost, | |
| startInferenceSessionsSessionIdStartPost, | |
| stopInferenceSessionsSessionIdStopPost, | |
| deleteSessionSessionsSessionIdDelete | |
| } from '../src'; | |
| import type { | |
| CreateSessionRequest, | |
| SessionStatusResponse | |
| } from '../src'; | |
| // Configuration | |
| const BASE_URL = 'http://localhost:8001/api'; | |
| // Helper function to wait for a specific session status | |
| async function waitForSessionStatus( | |
| sessionId: string, | |
| targetStatus: string, | |
| timeoutMs: number = 30000 | |
| ): Promise<SessionStatusResponse> { | |
| const startTime = Date.now(); | |
| while (Date.now() - startTime < timeoutMs) { | |
| const sessions = await listSessionsSessionsGet({ baseUrl: BASE_URL }); | |
| const session = sessions.data?.find(s => s.session_id === sessionId); | |
| if (session && session.status === targetStatus) { | |
| return session; | |
| } | |
| if (session && session.status === 'error') { | |
| throw new Error(`Session failed: ${session.error_message}`); | |
| } | |
| // Wait 1 second before checking again | |
| await new Promise(resolve => setTimeout(resolve, 1000)); | |
| } | |
| throw new Error(`Timeout waiting for session ${sessionId} to reach status ${targetStatus}`); | |
| } | |
| // Helper function to get session status | |
| async function getSessionStatus(sessionId: string): Promise<SessionStatusResponse> { | |
| const sessions = await listSessionsSessionsGet({ baseUrl: BASE_URL }); | |
| const session = sessions.data?.find(s => s.session_id === sessionId); | |
| if (!session) { | |
| throw new Error(`Session ${sessionId} not found`); | |
| } | |
| return session; | |
| } | |
| async function main() { | |
| try { | |
| console.log('π Checking server health...'); | |
| const healthResponse = await rootGet({ baseUrl: BASE_URL }); | |
| if (!healthResponse.data) { | |
| 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 | |
| console.log('π Getting detailed server status...'); | |
| const detailedHealth = await healthCheckHealthGet({ baseUrl: BASE_URL }); | |
| console.log('π Server status:', detailedHealth.data); | |
| // Create a session (using generated types) | |
| const sessionRequest: CreateSessionRequest = { | |
| session_id: 'example-session-' + Date.now(), | |
| policy_path: 'LaetusH/act_so101_beyond', // HuggingFace repo format | |
| camera_names: ['front', 'wrist'], // Update with your camera names | |
| transport_server_url: 'http://localhost:8000', // Update with your transport server URL | |
| workspace_id: null, // Let the server generate a workspace ID | |
| policy_type: 'act', | |
| language_instruction: null | |
| }; | |
| console.log('π Creating inference session...'); | |
| const sessionResponse = await createSessionSessionsPost({ | |
| body: sessionRequest, | |
| baseUrl: BASE_URL | |
| }); | |
| if (!sessionResponse.data) { | |
| throw new Error('Failed to create session'); | |
| } | |
| const session = sessionResponse.data; | |
| 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 startInferenceSessionsSessionIdStartPost({ | |
| path: { session_id: sessionRequest.session_id }, | |
| baseUrl: BASE_URL | |
| }); | |
| console.log('β Inference started!'); | |
| // Wait for the session to be running | |
| console.log('β³ Waiting for session to be running...'); | |
| const runningStatus = await 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 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)); | |
| } | |
| // List all sessions for debugging | |
| console.log('π Getting all sessions...'); | |
| const allSessions = await listSessionsSessionsGet({ baseUrl: BASE_URL }); | |
| console.log('π All sessions:', allSessions.data?.map(s => ({ | |
| id: s.session_id, | |
| status: s.status, | |
| policy_path: s.policy_path | |
| }))); | |
| // Stop inference | |
| console.log('βΉοΈ Stopping inference...'); | |
| await stopInferenceSessionsSessionIdStopPost({ | |
| path: { session_id: sessionRequest.session_id }, | |
| baseUrl: BASE_URL | |
| }); | |
| console.log('β Inference stopped!'); | |
| // Clean up - delete the session | |
| console.log('π§Ή Cleaning up session...'); | |
| await deleteSessionSessionsSessionIdDelete({ | |
| path: { session_id: sessionRequest.session_id }, | |
| baseUrl: BASE_URL | |
| }); | |
| console.log('β Session deleted!'); | |
| console.log('π Example completed successfully!'); | |
| } catch (error) { | |
| console.error('β Error:', error); | |
| process.exit(1); | |
| } | |
| } | |
| // Alternative: Using a more streamlined approach | |
| async function quickExample() { | |
| try { | |
| // Test health first | |
| console.log('π Testing server health...'); | |
| const healthResponse = await rootGet({ baseUrl: BASE_URL }); | |
| if (!healthResponse.data) { | |
| throw new Error('Server health check failed'); | |
| } | |
| console.log('β Server is healthy!'); | |
| // Create session | |
| const sessionId = 'quick-example-' + Date.now(); | |
| console.log('π Creating session...'); | |
| const sessionResponse = await createSessionSessionsPost({ | |
| body: { | |
| session_id: sessionId, | |
| policy_path: 'LaetusH/act_so101_beyond', // HuggingFace repo format | |
| camera_names: ['front'], | |
| transport_server_url: 'http://localhost:8000' | |
| }, | |
| baseUrl: BASE_URL | |
| }); | |
| if (!sessionResponse.data) { | |
| throw new Error(`Failed to create session: ${sessionResponse.error?.detail || 'Unknown error'}`); | |
| } | |
| console.log('β Session created!'); | |
| console.log('π Workspace ID:', sessionResponse.data.workspace_id); | |
| console.log('π· Camera rooms:', sessionResponse.data.camera_room_ids); | |
| // Start inference | |
| console.log('βΆοΈ Starting inference...'); | |
| await startInferenceSessionsSessionIdStartPost({ | |
| path: { session_id: sessionId }, | |
| baseUrl: BASE_URL | |
| }); | |
| console.log('β Inference started!'); | |
| // Wait a moment then get status | |
| console.log('π Checking status...'); | |
| await new Promise(resolve => setTimeout(resolve, 2000)); | |
| const status = await getSessionStatus(sessionId); | |
| console.log(`π Status: ${status.status}`); | |
| console.log('π Stats:', status.stats); | |
| // Clean up | |
| console.log('π§Ή Cleaning up...'); | |
| await deleteSessionSessionsSessionIdDelete({ | |
| path: { session_id: sessionId }, | |
| baseUrl: BASE_URL | |
| }); | |
| console.log('β Quick example completed!'); | |
| } catch (error) { | |
| console.error('β Quick example error:', error); | |
| } | |
| } | |
| // Run the main example | |
| if (import.meta.main) { | |
| console.log('=== RobotHub 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(); | |
| } | |
| } |