UNPKG

venice-dev-tools

Version:

unOfficial SDK for the Venice AI API

85 lines (76 loc) 2.57 kB
/** * HTTP error handling utilities * * This module provides utilities for handling HTTP errors and transforming * them into appropriate SDK-specific error types. */ import { AxiosError } from 'axios'; import { Logger } from '../../utils/logger'; import { VeniceApiError, VeniceNetworkError, VeniceTimeoutError } from '../../errors'; /** * Handle API request errors and transform them into appropriate SDK errors * @param error - The Axios error * @param logger - The logger instance * @param timeout - The request timeout in milliseconds * @throws A transformed SDK-specific error */ export function handleRequestError( error: AxiosError, logger: Logger, timeout: number ): never { if (error.response) { // The request was made and the server responded with a status code outside the range of 2xx const responseData = error.response.data as Record<string, any> || {}; const errorMessage = responseData.error || 'API request failed'; const details = responseData.details; logger.error(`API error: ${errorMessage}`, { status: error.response.status, details: details }); throw new VeniceApiError(errorMessage, error.response.status, details); } else if (error.request) { // The request was made but no response was received if (error.code === 'ECONNABORTED') { logger.error(`Request timed out after ${timeout}ms`); throw new VeniceTimeoutError('Request timed out'); } logger.error('Network error', { message: error.message, code: error.code }); throw new VeniceNetworkError('Network error', { cause: error }); } else { // Something happened in setting up the request that triggered an Error logger.error('Request setup error', { message: error.message }); throw new Error(error.message || 'Request setup error'); } } /** * Handle streaming request errors * @param error - The error that occurred * @param logger - The logger instance * @param requestId - The request ID * @throws A transformed SDK-specific error */ export function handleStreamError( error: any, logger: Logger, requestId: string ): never { if (error instanceof VeniceApiError) { throw error; } if ((error as Error).name === 'AbortError') { logger.warn(`Stream request ${requestId} aborted`); throw new Error('Request was aborted'); } logger.error(`Stream request ${requestId} failed`, { error: (error as Error).message }); throw new VeniceNetworkError('Stream request failed', { cause: error }); }