Documentation Index
Fetch the complete documentation index at: https://docs.sf-voice.sh/llms.txt
Use this file to discover all available pages before exploring further.
Esta guía te lleva desde la clave de API hasta el primer resultado de búsqueda con el SDK de TypeScript.
Instalación
pnpm add @sf-voice/media@latest
1. Crear un cliente
import { SfVoiceMedia } from "@sf-voice/media";
const client = new SfVoiceMedia({
baseUrl: "https://api.sf-voice.com",
apiKey: process.env.SF_VOICE_API_KEY!,
});
2. Ingerir un recurso
Usa un asset_id de tu propio sistema. Usa asset_class para agrupar recursos
que deban buscarse juntos, como todos los medios de un mismo cliente.
const ingest = await client.ingest({
source: "url",
asset_id: "video_123",
asset_class: "customer_acme",
url: "https://example.com/recording.mp4",
media_type: "video",
types: ["video", "audio", "transcript"],
metadata: {
title: "product demo",
customer_id: "acme",
},
});
La respuesta incluye un task_id para la indexación.
{
"asset_id": "video_123",
"task_id": "task_abc123",
"status": "pending"
}
3. Esperar la indexación
const task = await client.pollTask(ingest.task_id, {
intervalMs: 2_000,
timeoutMs: 120_000,
});
if (task.status === "failed") {
throw new Error(task.error ?? "ingest task failed");
}
4. Buscar
Busca dentro de la misma asset_class para que los resultados se mantengan acotados al cliente o
grupo previsto.
const search = await client.search({
query: "where does the customer mention pricing?",
asset_class: "customer_acme",
types: ["transcript"],
threshold: 0.7,
limit: 10,
});
console.log(search.results);
Ejemplo completo
import { SfVoiceMedia, SfVoiceMediaError } from "@sf-voice/media";
const client = new SfVoiceMedia({
baseUrl: "https://api.sf-voice.com",
apiKey: process.env.SF_VOICE_API_KEY!,
});
try {
const ingest = await client.ingest({
source: "url",
asset_id: "video_123",
asset_class: "customer_acme",
url: "https://example.com/recording.mp4",
media_type: "video",
types: ["video", "audio", "transcript"],
});
const task = await client.pollTask(ingest.task_id);
if (task.status === "failed") {
throw new Error(task.error ?? "ingest task failed");
}
const search = await client.search({
query: "pricing",
asset_class: "customer_acme",
types: ["transcript"],
});
console.log(search.results);
} catch (error) {
if (error instanceof SfVoiceMediaError) {
console.error(error.code, error.status, error.message);
}
throw error;
}
Próximos pasos
Cómo funciona
Aprende cómo encajan la ingestión, la indexación, el sondeo de tareas y la búsqueda acotada.
SDK de TypeScript
Consulta todos los formatos de entrada y salida expuestos por el SDK.