learning_ai_common_plat/services/extraction-service/src/server.ts
saravanakumardb1 cc3fbf8187 feat(extraction-service): add /api/transcribe route — speech-to-text via OpenAI Whisper API
- POST /api/transcribe: download audio from URL, call Whisper API, return transcript
- Types: TranscribeRequestSchema (Zod), TranscribeResponse, SUPPORTED_AUDIO_TYPES
- Guards: 25MB size limit, 30s download timeout, 120s Whisper timeout, 429 rate limit
- Config: OPENAI_API_KEY, OPENAI_BASE_URL, WHISPER_MODEL env vars
- 12 new tests (schema validation + constants)
- Registered in server.ts alongside extract + task routes
2026-04-06 11:10:57 -07:00

45 lines
1.4 KiB
TypeScript

/**
* Extraction Service — Fastify server entry point.
*
* Modules: extract, tasks.
* Port: 4005 (configurable via PORT env var).
* Product-agnostic: all data scoped by productId.
*
* Depends on a Python sidecar running LangExtract (default port 4006).
*/
// Resolve secrets from configured provider BEFORE config parsing
import { resolveSecrets, LYSNR_SECRETS } from '@bytelyst/config';
await resolveSecrets([
LYSNR_SECRETS.COSMOS_KEY,
LYSNR_SECRETS.COSMOS_ENDPOINT,
LYSNR_SECRETS.JWT_SECRET,
LYSNR_SECRETS.GEMINI_API_KEY,
]);
import { createServiceApp, startService } from '@bytelyst/fastify-core';
import { extractRoutes } from './modules/extract/routes.js';
import { taskRoutes } from './modules/tasks/routes.js';
import { transcribeRoutes } from './modules/transcribe/routes.js';
import { config } from './lib/config.js';
const app = await createServiceApp({
name: 'extraction-service',
version: '0.1.0',
description: 'LLM-powered structured extraction via LangExtract — product-agnostic',
corsOrigin: config.CORS_ORIGIN,
swagger: {
title: 'Extraction Service',
description: 'LLM-powered structured extraction via LangExtract',
port: config.PORT,
},
metrics: true,
});
// Register route modules
await app.register(extractRoutes, { prefix: '/api' });
await app.register(taskRoutes, { prefix: '/api' });
await app.register(transcribeRoutes, { prefix: '/api' });
await startService(app, { port: config.PORT, host: config.HOST });