@juspay/neurolink
Version:
The pipe layer of an AI nervous system: one interface connecting provider neurons to your application, across three inference types — generate, stream and decide. `decide` returns typed, calibrated judgements from a non-generative model (~400ms, ~$0.00002
75 lines (74 loc) • 3.44 kB
JavaScript
/**
* Video Adapter Module — Image-to-Video Generation Integration for NeuroLink
*
* Provides video-generation capability across providers (Vertex Veo, Kling,
* Runway, Replicate-hosted video models).
*
* Use `VideoProcessor.generate(provider, image, prompt, options)` to
* dispatch to the registered handler for `provider`.
*
* Importing this module does NOT register any handlers as a side effect.
* Call `registerDefaultVideoHandlers()` explicitly (or go through
* `ProviderRegistry.registerAllProviders()`, which every documented
* `NeuroLink` entry point already calls) to register every shipped video
* handler whose backing API key is present in `process.env`. Registration
* is idempotent and silently skipped if a provider is already registered or
* its constructor throws.
*
* @module adapters/video
*/
import { MEDIA_HANDLER_CATALOG } from "../../factories/mediaHandlerCatalog.js";
import { logger } from "../../utils/logger.js";
import { VideoProcessor } from "../../utils/videoProcessor.js";
export { VIDEO_ERROR_CODES, VideoError, VideoProcessor, } from "../../utils/videoProcessor.js";
// ============================================================================
// HANDLER CLASSES
// ============================================================================
export { KlingVideoHandler } from "./klingVideoHandler.js";
export { ReplicateVideoHandler } from "./replicateVideoHandler.js";
export { RunwayVideoHandler } from "./runwayVideoHandler.js";
export { isVertexVideoConfigured, VertexVideoHandler, } from "./vertexVideoHandler.js";
// ============================================================================
// AUTO-REGISTRATION
// ============================================================================
import { KlingVideoHandler } from "./klingVideoHandler.js";
import { ReplicateVideoHandler } from "./replicateVideoHandler.js";
import { RunwayVideoHandler } from "./runwayVideoHandler.js";
import { VertexVideoHandler } from "./vertexVideoHandler.js";
// Provider names are the Task-8 catalog's job — only the factory (which
// needs the imported handler class) stays local to this module.
const VIDEO_HANDLER_FACTORIES = {
vertex: () => new VertexVideoHandler(),
kling: () => new KlingVideoHandler(),
runway: () => new RunwayVideoHandler(),
replicate: () => new ReplicateVideoHandler(),
};
const VIDEO_HANDLER_CANDIDATES = MEDIA_HANDLER_CATALOG.filter((entry) => entry.kind === "video").map((entry) => {
const factory = VIDEO_HANDLER_FACTORIES[entry.name];
if (!factory) {
throw new Error(`[video] no handler factory for catalog entry "${entry.name}"`);
}
return { name: entry.name, factory };
});
/**
* Register every shipped video handler whose backing credentials are
* present in the environment. Safe to call multiple times — existing
* registrations are preserved.
*/
export function registerDefaultVideoHandlers() {
for (const { name, factory } of VIDEO_HANDLER_CANDIDATES) {
if (VideoProcessor.supports(name)) {
continue;
}
try {
const handler = factory();
if (!handler.isConfigured()) {
continue;
}
VideoProcessor.registerHandler(name, handler);
}
catch (err) {
logger.debug(`[video] ${name} auto-registration skipped: ${err instanceof Error ? err.message : String(err)}`);
}
}
}