Transport
Usa createJsonTransport para el caso JSON simple:
import { createJsonTransport, mountForm } from "mlform";
mountForm(container, { transport: createJsonTransport({ endpoint: "/api/predict" }), schema,});Cuando necesites personalizar HTTP, crea el transporte de forma explícita:
import { createJsonTransport, mountForm } from "mlform";
mountForm(container, { schema, transport: createJsonTransport({ endpoint: "/api/predict", method: "PATCH", headers: { "x-client": "mlform" }, credentials: "include", }),});Para control total, pasa un transport:
mountForm(container, { schema, transport: { async submit(request) { return { reports: { prediction: await runLocalModel(request.serializedValues), }, }; }, },});Usa createRoutingTransport cuando MLForm deba elegir internamente un solo transporte. Los nombres de ruta son ids internos de política, no parte de form.submit():
import { createJsonTransport, createRoutingTransport, mountForm } from "mlform";
const transport = createRoutingTransport({ transports: { local: { async submit(request) { return { reports: { prediction: await runLocalModel(request.serializedValues) } }; }, }, remote: createJsonTransport({ endpoint: "/api/predict", }), }, selectTransport(request) { return request.serializedValues.mode === "offline" ? "local" : "remote"; },});
mountForm(container, { schema, transport,});Usa createFanoutTransport cuando un submit deba llamar a todos los transportes y combinar sus resultados:
import { createFanoutTransport, mountForm } from "mlform";
mountForm(container, { schema, transport: createFanoutTransport({ transports: [localModelTransport, remoteApiTransport], }),});Usa createFallbackTransport cuando quieras probar transportes posteriores solo si fallan los anteriores:
import { createFallbackTransport, mountForm } from "mlform";
mountForm(container, { schema, transport: createFallbackTransport({ transports: [primaryTransport, backupTransport], }),});Usa middleware para componer auth, retries, circuit breaker, rate limit, cache, dedup y transforms de request o response:
import { createJsonTransport, mountForm, pipe, withAuth, withCircuitBreaker, withRateLimit, withRetry,} from "mlform";
const transport = pipe( createJsonTransport({ endpoint: "/api/predict" }), withAuth({ type: "bearer", token: () => getAccessToken() }), withRetry({ attempts: 3 }), withCircuitBreaker({ failureThreshold: 5, resetTimeout: 60_000 }), withRateLimit({ maxConcurrent: 4, perSecond: 8 }),);
mountForm(container, { schema, transport,});Streaming es opcional. Cualquier transport puede exponer stream(request) ademas de submit(request). createJsonTransport puede hacerlo mediante stream(response, request).