learning_ai_common_plat/dashboards/admin-web/src/lib/extraction-client.ts
Saravana Kumar 7465b21d91
Some checks failed
Publish @bytelyst/* packages / publish (push) Failing after 13s
CI — Common Platform / Build, Test & Typecheck (push) Successful in 53s
style(admin-web): format dashboard sources
2026-05-30 21:18:09 +00:00

112 lines
3.2 KiB
TypeScript

/**
* Extraction Service API client for the admin dashboard.
* Uses @bytelyst/api-client shared package.
*
* Provides typed methods for transcript extraction, task management,
* and sidecar health checks.
*/
import { createApiClient } from '@bytelyst/api-client';
const extractionApi = createApiClient({
baseUrl: `${process.env.EXTRACTION_SERVICE_URL || 'http://localhost:4005'}/api`,
});
// ── Types ────────────────────────────────────────────────────────
export interface ExtractionEntity {
extraction_class: string;
extraction_text: string;
attributes?: Record<string, string>;
start_offset?: number;
end_offset?: number;
}
export interface ExtractResponse {
extractions: ExtractionEntity[];
metadata: {
modelId: string;
durationMs: number;
tokenCount?: number;
charCount: number;
};
requestId?: string;
}
export interface ExtractionTask {
id: string;
name: string;
description?: string;
prompt: string;
classes: string[];
builtIn: boolean;
productId: string;
}
// ── Extract ──────────────────────────────────────────────────────
export async function extractText(
text: string,
taskId?: string,
modelId?: string
): Promise<ExtractResponse | null> {
try {
return await extractionApi.fetch<ExtractResponse>('/extract', {
method: 'POST',
body: JSON.stringify({ text, taskId, modelId }),
});
} catch {
return null;
}
}
export async function extractTranscript(text: string): Promise<ExtractResponse | null> {
return extractText(text, 'transcript-extraction');
}
export async function extractBatch(
inputs: Array<{ text: string; taskId?: string }>,
modelId?: string
): Promise<ExtractResponse[] | null> {
try {
const result = await extractionApi.fetch<{ results: ExtractResponse[] }>('/extract/batch', {
method: 'POST',
body: JSON.stringify({ inputs, modelId }),
});
return result.results;
} catch {
return null;
}
}
// ── Tasks ────────────────────────────────────────────────────────
export async function listTasks(productId?: string): Promise<ExtractionTask[]> {
const qs = productId ? `?productId=${encodeURIComponent(productId)}` : '';
try {
return await extractionApi.fetch<ExtractionTask[]>(`/tasks${qs}`);
} catch {
return [];
}
}
export async function getTask(id: string): Promise<ExtractionTask | null> {
try {
return await extractionApi.fetch<ExtractionTask>(`/tasks/${encodeURIComponent(id)}`);
} catch {
return null;
}
}
// ── Health ───────────────────────────────────────────────────────
export async function getSidecarHealth(): Promise<{ status: string; sidecar?: unknown } | null> {
try {
return await extractionApi.fetch<{ status: string; sidecar?: unknown }>(
'/extract/sidecar-health'
);
} catch {
return null;
}
}