55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import { ServiceError } from '@bytelyst/errors';
|
|
|
|
type DependencyKind = 'extraction-service' | 'llm' | 'blob';
|
|
|
|
function causeMessage(error: unknown): string {
|
|
return error instanceof Error ? error.message : String(error);
|
|
}
|
|
|
|
function dependencyError(
|
|
dependency: DependencyKind,
|
|
statusCode: number,
|
|
message: string,
|
|
code: string,
|
|
error: unknown,
|
|
): ServiceError {
|
|
return new ServiceError(statusCode, message, {
|
|
code,
|
|
dependency,
|
|
cause: causeMessage(error),
|
|
});
|
|
}
|
|
|
|
export function mapExtractionFailure(error: unknown): ServiceError {
|
|
return dependencyError(
|
|
'extraction-service',
|
|
502,
|
|
'Extraction service failed',
|
|
'EXTRACTION_SERVICE_FAILURE',
|
|
error,
|
|
);
|
|
}
|
|
|
|
export function mapLlmFailure(error: unknown): ServiceError {
|
|
const message = causeMessage(error).toLowerCase();
|
|
const timedOut = message.includes('timed out') || message.includes('timeout');
|
|
|
|
return dependencyError(
|
|
'llm',
|
|
timedOut ? 504 : 502,
|
|
timedOut ? 'LLM request timed out' : 'LLM request failed',
|
|
timedOut ? 'LLM_TIMEOUT' : 'LLM_FAILURE',
|
|
error,
|
|
);
|
|
}
|
|
|
|
export function mapBlobFailure(error: unknown): ServiceError {
|
|
return dependencyError(
|
|
'blob',
|
|
502,
|
|
'Blob service failed',
|
|
'BLOB_SERVICE_FAILURE',
|
|
error,
|
|
);
|
|
}
|