AiService
IA de la instancia (ctx.services.ai). Permiso AI_GENERATE (o bloque ai del manifest); si falta, AI_PERMISSION_DENIED.
La politica (activada, funciones, cuotas, guardarrailes, clave del proveedor) la decide el administrador en /admin/ai; la extension
no maneja claves. Limite: 5 generaciones (generate/chat/json) por invocacion. Los errores son Error con .code (AiError).
No hay streaming: el puente es peticion/respuesta firmada y el sandbox no admite iteradores asincronos del host; usa maxTokens.
Firma
export interface AiService {
generate(input: AiGenerateInput): Promise<AiResult>;
generate(system: string, prompt: string, extra?: { response_format?: { type: "json_object" | "text"; }; feature?: AiFeature; maxTokens?: number; temperature?: number; }): Promise<string>;
chat(input: AiChatInput): Promise<AiResult>;
json<T = unknown>(input: string | (Partial<AiChatInput> & { prompt?: string; }), schema: JsonSchema, options?: Pick<AiCommonInput, "feature" | "system" | "maxTokens" | "temperature" | "parts"> & { retries?: 0 | 1 | 2; }): Promise<AiJsonResult<T>>;
status(feature?: AiFeature): Promise<AiStatus>;
isAvailable(feature?: AiFeature): Promise<boolean>;
}Miembros (6)
| Nombre | Tipo | Descripción |
|---|---|---|
| generate | generate(input: AiGenerateInput): Promise<AiResult> | Genera texto. Firma nueva |
| generate | generate(system: string, prompt: string, extra?: { response_format?: { type: "json_object" | "text"; }; feature?: AiFeature; maxTokens?: number; temperature?: number; }): Promise<string> | Sin descripción. |
| chat | chat(input: AiChatInput): Promise<AiResult> | Conversacion con varios mensajes. |
| json | json<T = unknown>(input: string | (Partial<AiChatInput> & { prompt?: string; }), schema: JsonSchema, options?: Pick<AiCommonInput, "feature" | "system" | "maxTokens" | "temperature" | "parts"> & { retries?: 0 | 1 | 2; }): Promise<AiJsonResult<T>> | Salida estructurada: la instancia valida contra |
| status | status(feature?: AiFeature): Promise<AiStatus> | Estado de la IA (no consume cuota de generacion; 20 consultas por invocacion). |
| isAvailable | isAvailable(feature?: AiFeature): Promise<boolean> |
|
Ejemplos
module.exports.summarize = async (ctx) => {
const ai = ctx.services.ai;
if (!(await ai.isAvailable("summarize"))) return { text: "", degraded: true };
const r = await ai.generate({ prompt: String(ctx.args.text), system: "Resume en una frase.", feature: "summarize", maxTokens: 200 });
return { text: r.text };
};Usado en / Referenciado por
Fuente: bloomx-extensions/_shared/sdk/ctx.d.ts:274 · ctx.d.ts