@browserlessapi/inferlo 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +7 -4
  2. package/dist/ai/ai-sdk.d.ts +48 -0
  3. package/dist/ai/ai-sdk.js +235 -0
  4. package/dist/ai/ai-sdk.js.map +1 -0
  5. package/dist/ai/index.d.ts +37 -3
  6. package/dist/ai/index.js +96 -7
  7. package/dist/ai/index.js.map +1 -1
  8. package/dist/ai/public.d.ts +5 -1
  9. package/dist/ai/public.js +2 -0
  10. package/dist/ai/public.js.map +1 -1
  11. package/dist/ai/ui.d.ts +47 -0
  12. package/dist/ai/ui.js +33 -0
  13. package/dist/ai/ui.js.map +1 -0
  14. package/dist/app.d.ts +31 -4
  15. package/dist/app.js +106 -29
  16. package/dist/app.js.map +1 -1
  17. package/dist/astro.d.ts +60 -0
  18. package/dist/astro.js +68 -0
  19. package/dist/astro.js.map +1 -0
  20. package/dist/audit.d.ts +8 -1
  21. package/dist/audit.js +9 -2
  22. package/dist/audit.js.map +1 -1
  23. package/dist/auth.d.ts +1 -0
  24. package/dist/auth.js +1 -0
  25. package/dist/auth.js.map +1 -1
  26. package/dist/azure.d.ts +66 -0
  27. package/dist/azure.js +119 -0
  28. package/dist/azure.js.map +1 -0
  29. package/dist/cache.d.ts +13 -9
  30. package/dist/cache.js +11 -9
  31. package/dist/cache.js.map +1 -1
  32. package/dist/cli/main.js +4 -4
  33. package/dist/cli/main.js.map +1 -1
  34. package/dist/client-ip.d.ts +36 -1
  35. package/dist/client-ip.js +80 -1
  36. package/dist/client-ip.js.map +1 -1
  37. package/dist/db/memory.js +2 -1
  38. package/dist/db/memory.js.map +1 -1
  39. package/dist/db/postgres.js +4 -1
  40. package/dist/db/postgres.js.map +1 -1
  41. package/dist/db/table.d.ts +37 -5
  42. package/dist/db/table.js +96 -15
  43. package/dist/db/table.js.map +1 -1
  44. package/dist/db/types.d.ts +2 -0
  45. package/dist/describe.d.ts +15 -4
  46. package/dist/describe.js +10 -2
  47. package/dist/describe.js.map +1 -1
  48. package/dist/events.d.ts +134 -0
  49. package/dist/events.js +196 -0
  50. package/dist/events.js.map +1 -0
  51. package/dist/index.d.ts +12 -5
  52. package/dist/index.js +4 -1
  53. package/dist/index.js.map +1 -1
  54. package/dist/jobs.d.ts +50 -10
  55. package/dist/jobs.js +66 -13
  56. package/dist/jobs.js.map +1 -1
  57. package/dist/langchain.d.ts +58 -0
  58. package/dist/langchain.js +220 -0
  59. package/dist/langchain.js.map +1 -0
  60. package/dist/model.d.ts +23 -6
  61. package/dist/model.js +35 -6
  62. package/dist/model.js.map +1 -1
  63. package/dist/rate-limit.d.ts +5 -3
  64. package/dist/rate-limit.js +3 -3
  65. package/dist/rate-limit.js.map +1 -1
  66. package/dist/redis-events.d.ts +27 -0
  67. package/dist/redis-events.js +163 -0
  68. package/dist/redis-events.js.map +1 -0
  69. package/dist/redis-jobs.d.ts +24 -0
  70. package/dist/redis-jobs.js +203 -0
  71. package/dist/redis-jobs.js.map +1 -0
  72. package/dist/redis.d.ts +30 -0
  73. package/dist/redis.js +106 -0
  74. package/dist/redis.js.map +1 -0
  75. package/dist/response-body.d.ts +6 -0
  76. package/dist/response-body.js +7 -0
  77. package/dist/response-body.js.map +1 -0
  78. package/dist/route.d.ts +14 -1
  79. package/dist/route.js.map +1 -1
  80. package/dist/schema.d.ts +2 -2
  81. package/dist/serve.d.ts +6 -1
  82. package/dist/serve.js +64 -7
  83. package/dist/serve.js.map +1 -1
  84. package/dist/service-client.d.ts +91 -0
  85. package/dist/service-client.js +177 -0
  86. package/dist/service-client.js.map +1 -0
  87. package/dist/sessions.d.ts +2 -0
  88. package/dist/sessions.js +1 -0
  89. package/dist/sessions.js.map +1 -1
  90. package/dist/tracing.d.ts +7 -3
  91. package/dist/tracing.js +8 -2
  92. package/dist/tracing.js.map +1 -1
  93. package/llms.txt +1 -0
  94. package/package.json +36 -4
  95. package/templates/app/AGENTS.md +5 -3
package/dist/jobs.d.ts CHANGED
@@ -15,6 +15,7 @@ import type { Audit } from "./audit.ts";
15
15
  import type { Cache } from "./cache.ts";
16
16
  import { type CronDef } from "./cron.ts";
17
17
  import type { Adapter } from "./db/types.ts";
18
+ import { type AppEvents, type EventTransport, type Events, type OnDef } from "./events.ts";
18
19
  import type { AppDb } from "./route.ts";
19
20
  import { type AnySchema, type Infer, type InferInput } from "./schema.ts";
20
21
  import type { JobTraceContext, JobTracing } from "./tracing.ts";
@@ -33,12 +34,19 @@ export interface JobContext<Input> {
33
34
  ai: AI;
34
35
  /** Enqueue follow-up jobs. */
35
36
  jobs: Jobs;
37
+ /** Publish events: await events.publish(orderPaid, { orderId }) queues the jobs subscribed with on(event, job). */
38
+ events: Events;
36
39
  /** The app cache, the same as ctx.cache in routes and app.cache. */
37
40
  cache: Cache;
38
41
  /** Job id. */
39
42
  id: string;
40
43
  /** 1 on the first run, 2 on the first retry, and so on. */
41
44
  attempt: number;
45
+ /**
46
+ * The tenant the job works for (the tenant of the request or job that queued it, or enqueue's tenantId), or null.
47
+ * ctx.db is scoped to it, and jobs and events queued from this job keep it.
48
+ */
49
+ tenantId: string | null;
42
50
  /**
43
51
  * Write an audit log entry (needs AuditLog in createApp({ models })). Jobs have no signed-in user: pass the
44
52
  * userId of the user who asked for the work, or leave it out for work the system does on its own.
@@ -58,6 +66,11 @@ export type JobInput<J> = J extends JobDef<infer I, any> ? I : never;
58
66
  export interface EnqueueOptions {
59
67
  /** Run no earlier than this time. Default: now. */
60
68
  runAt?: Date;
69
+ /**
70
+ * The tenant the job works for: its ctx.db is scoped to it (tenant-scoped models). Default: the tenant of the
71
+ * request or job that enqueues it, none from app.jobs. Pass null to queue it without a tenant.
72
+ */
73
+ tenantId?: string | null;
61
74
  }
62
75
  export type JobStatus = "pending" | "running" | "done" | "failed";
63
76
  export interface JobRecord {
@@ -76,6 +89,8 @@ export interface JobRecord {
76
89
  lastError?: string;
77
90
  /** With createApp({ tracing }): the trace (W3C traceparent and tracestate) of the request or job that enqueued it, which its runs continue. */
78
91
  trace?: JobTraceContext;
92
+ /** The tenant the job works for (multi-tenancy): its ctx.db is scoped to it. */
93
+ tenantId?: string;
79
94
  createdAt: Date;
80
95
  updatedAt: Date;
81
96
  }
@@ -87,8 +102,9 @@ export interface JobQueueConfig {
87
102
  /**
88
103
  * Where queued jobs are kept. "memory" (default): in this process, for development and tests.
89
104
  * "database": in the inferlo_jobs table of the app's Postgres database, shared by every instance.
105
+ * "redis": in the Redis of createApp({ redis }), shared by every instance.
90
106
  */
91
- store?: "memory" | "database";
107
+ store?: "memory" | "database" | "redis";
92
108
  }
93
109
  /** Where queued jobs are kept. */
94
110
  export interface JobStore {
@@ -98,7 +114,7 @@ export interface JobStore {
98
114
  claim(now: Date, limit: number, names: readonly string[]): Promise<JobRecord[]>;
99
115
  update(id: string, patch: Partial<Pick<JobRecord, "status" | "runAt" | "lastError">>): Promise<void>;
100
116
  get(id: string): Promise<JobRecord | null>;
101
- /** Record that a running job is still alive (database store), so it is not picked up again as stuck. */
117
+ /** Record that a running job is still alive (database and Redis stores), so it is not picked up again as stuck. */
102
118
  touch?(id: string): Promise<void>;
103
119
  }
104
120
  export interface RunResult {
@@ -120,14 +136,17 @@ export interface AppJobs extends Jobs {
120
136
  /** The registered crons: cron(schedule, job) values in createApp({ jobs }). */
121
137
  readonly crons: readonly CronDef[];
122
138
  /** Where queued jobs are kept (createApp({ jobQueue: { store } })). */
123
- readonly queue: "memory" | "database";
139
+ readonly queue: "memory" | "database" | "redis";
124
140
  /** A queued job by id, or null. */
125
141
  get(id: string): Promise<JobRecord | null>;
126
142
  /** Run every job that is due now (or at options.now), one after another, including follow-ups they enqueue, then return. For tests and scripts. */
127
143
  runDue(options?: {
128
144
  now?: Date;
129
145
  }): Promise<RunResult>;
130
- /** Run due jobs in this process every pollMs (default 1000) until stop() is called. Also queues each cron's job at every tick after the start. */
146
+ /**
147
+ * Run due jobs in this process every pollMs (default 1000) until stop() is called. Also queues each cron's job at
148
+ * every tick after the start, and with an events transport, the jobs of the events it receives.
149
+ */
131
150
  start(options?: {
132
151
  pollMs?: number;
133
152
  }): Worker;
@@ -146,13 +165,15 @@ export declare class JobBuilder<I extends AnySchema> {
146
165
  /** Define a background job: job("send-email", { input: t.object({ to: t.email() }) }).handle(fn). */
147
166
  export declare function job<I extends AnySchema>(name: string, options: JobOptions<I>): JobBuilder<I>;
148
167
  export declare function isJob(value: unknown): value is JobDef;
149
- /** Anything that contains jobs: a job, a cron, an array, or a module (import * as jobs from "./jobs.ts"). */
150
- export type JobSource = JobDef | CronDef | readonly JobSource[] | {
168
+ /** Anything that contains jobs: a job, a cron, an event subscription (on), an array, or a module (import * as jobs from "./jobs.ts"). */
169
+ export type JobSource = JobDef | CronDef | OnDef | readonly JobSource[] | {
151
170
  readonly [name: string]: unknown;
152
171
  };
153
172
  /** The jobs and crons in createApp({ jobs }). A cron's job is registered with it. */
154
173
  export declare function collectJobs(sources: readonly JobSource[] | undefined): JobDef[];
155
174
  export declare function collectCrons(sources: readonly JobSource[] | undefined): CronDef[];
175
+ /** The event subscriptions, on(event, job), in createApp({ jobs }). */
176
+ export declare function collectSubscriptions(sources: readonly JobSource[] | undefined): OnDef[];
156
177
  /** Jobs kept in this process. They are lost when it stops, so use it for development and tests. */
157
178
  export declare function memoryJobStore(): JobStore;
158
179
  /** A running job whose worker has not reported for this long is treated as stuck (its process stopped) and run again. */
@@ -168,8 +189,11 @@ export declare const STOPPED_MESSAGE = "The worker stopped while running this jo
168
189
  export declare function databaseJobStore(adapter: Adapter, options?: {
169
190
  staleAfterMs?: number;
170
191
  }): JobStore;
171
- /** Pick the job store for createApp({ jobQueue }). Raises IL6011 for an unknown store, IL6012 for "database" without Postgres. */
172
- export declare function jobStoreFor(config: JobQueueConfig | undefined, adapter: Adapter): JobStore;
192
+ /**
193
+ * Pick the job store for createApp({ jobQueue }). Raises IL6011 for an unknown store, IL6012 for "database" without
194
+ * Postgres. "redis" uses the redis option, a function that returns the Redis store (or throws IL6031 without a client).
195
+ */
196
+ export declare function jobStoreFor(config: JobQueueConfig | undefined, adapter: Adapter, redis?: () => JobStore): JobStore;
173
197
  export interface JobRuntime {
174
198
  db: AppDb;
175
199
  ai: AI;
@@ -178,10 +202,11 @@ export interface JobRuntime {
178
202
  audit(job: {
179
203
  name: string;
180
204
  id: string;
205
+ tenantId: string | null;
181
206
  }): Audit;
182
207
  store: JobStore;
183
208
  /** Name of the store, shown as app.jobs.queue. Default "memory". */
184
- queue?: "memory" | "database";
209
+ queue?: "memory" | "database" | "redis";
185
210
  /** How often a running job is reported alive to stores that support it. Default HEARTBEAT_MS. */
186
211
  heartbeatMs?: number;
187
212
  logger: {
@@ -192,10 +217,25 @@ export interface JobRuntime {
192
217
  onRun?(name: string, outcome: keyof RunResult, durationMs: number): void;
193
218
  /** With createApp({ tracing }): a span per attempt that continues the trace the job was enqueued in. */
194
219
  tracing?: JobTracing;
220
+ /** With createApp({ events: { transport } }): carries published events between services. */
221
+ eventTransport?: EventTransport;
195
222
  }
196
223
  /** app.jobs plus what the framework tests reach directly. */
197
224
  export interface InternalJobs extends AppJobs {
198
225
  /** Queue the job of each cron's latest tick in (from, to]. */
199
226
  queueCrons(from: Date, to: Date): Promise<void>;
227
+ /** app.events: publishing queues the jobs subscribed with on(event, job). */
228
+ readonly events: AppEvents;
200
229
  }
201
- export declare function createJobs(list: readonly JobDef[], runtime: JobRuntime, crons?: readonly CronDef[]): InternalJobs;
230
+ export declare function createJobs(list: readonly JobDef[], runtime: JobRuntime, crons?: readonly CronDef[], subscriptions?: readonly OnDef[]): InternalJobs;
231
+ /**
232
+ * ctx.jobs and ctx.events for one tenant: jobs and events queued through them carry the tenant unless the call
233
+ * names another (tenantId) or none (null). Internal: used for requests and jobs with a tenant.
234
+ */
235
+ export declare function withTenant(base: {
236
+ jobs: Jobs;
237
+ events: Events;
238
+ }, tenantId: string): {
239
+ jobs: Jobs;
240
+ events: Events;
241
+ };
package/dist/jobs.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { cronTickId, isCron } from "./cron.js";
2
+ import { checkTenantId } from "./db/table.js";
2
3
  import { InferloError } from "./errors.js";
4
+ import { createEvents, isOn } from "./events.js";
3
5
  import { ValidationError } from "./schema.js";
4
6
  /** Workers started with app.jobs.start() that have not been stopped, so app.close() can stop them. */
5
7
  const workers = new WeakMap();
@@ -61,9 +63,14 @@ export function collectJobs(sources) {
61
63
  export function collectCrons(sources) {
62
64
  return collect(sources).crons;
63
65
  }
66
+ /** The event subscriptions, on(event, job), in createApp({ jobs }). */
67
+ export function collectSubscriptions(sources) {
68
+ return collect(sources).subscriptions;
69
+ }
64
70
  function collect(sources) {
65
71
  const out = [];
66
72
  const crons = [];
73
+ const subscriptions = [];
67
74
  const seen = new Set();
68
75
  const visit = (source) => {
69
76
  if (!source || typeof source !== "object" || seen.has(source))
@@ -75,11 +82,15 @@ function collect(sources) {
75
82
  crons.push(source);
76
83
  visit(source.job);
77
84
  }
85
+ else if (isOn(source)) {
86
+ subscriptions.push(source);
87
+ visit(source.job);
88
+ }
78
89
  else if (Array.isArray(source))
79
90
  source.forEach(visit);
80
91
  else
81
92
  for (const value of Object.values(source))
82
- if (isJob(value) || isCron(value) || Array.isArray(value))
93
+ if (isJob(value) || isCron(value) || isOn(value) || Array.isArray(value))
83
94
  visit(value);
84
95
  };
85
96
  visit(sources);
@@ -89,7 +100,7 @@ function collect(sources) {
89
100
  throw new InferloError("IL6009", `Two jobs are named "${j.name}".`, { fix: "Give each job a unique name." });
90
101
  names.set(j.name, j);
91
102
  }
92
- return { jobs: out, crons };
103
+ return { jobs: out, crons, subscriptions };
93
104
  }
94
105
  /** Jobs kept in this process. They are lost when it stops, so use it for development and tests. */
95
106
  export function memoryJobStore() {
@@ -125,7 +136,7 @@ export const STALE_AFTER_MS = 5 * 60_000;
125
136
  /** How often a worker reports that a running job is still alive. */
126
137
  export const HEARTBEAT_MS = 30_000;
127
138
  export const STOPPED_MESSAGE = "The worker stopped while running this job (the process exited or lost its database connection).";
128
- const JOB_COLUMNS = `"id", "name", "input", "status", "attempts", "max_attempts", "run_at", "last_error", "created_at", "updated_at", "traceparent", "tracestate"`;
139
+ const JOB_COLUMNS = `"id", "name", "input", "status", "attempts", "max_attempts", "run_at", "last_error", "created_at", "updated_at", "traceparent", "tracestate", "tenant_id"`;
129
140
  function fromRow(row) {
130
141
  const record = {
131
142
  id: String(row.id),
@@ -145,6 +156,8 @@ function fromRow(row) {
145
156
  if (typeof row.tracestate === "string")
146
157
  record.trace.tracestate = row.tracestate;
147
158
  }
159
+ if (typeof row.tenant_id === "string")
160
+ record.tenantId = row.tenant_id;
148
161
  return record;
149
162
  }
150
163
  /**
@@ -167,9 +180,9 @@ export function databaseJobStore(adapter, options = {}) {
167
180
  "id" uuid PRIMARY KEY, "name" text NOT NULL, "input" jsonb NOT NULL, "status" text NOT NULL,
168
181
  "attempts" integer NOT NULL, "max_attempts" integer NOT NULL, "run_at" timestamptz NOT NULL,
169
182
  "last_error" text, "created_at" timestamptz NOT NULL, "updated_at" timestamptz NOT NULL,
170
- "traceparent" text, "tracestate" text)`);
171
- // Tables created by Inferlo 0.5 and earlier get the trace columns.
172
- await sql('ALTER TABLE "inferlo_jobs" ADD COLUMN IF NOT EXISTS "traceparent" text, ADD COLUMN IF NOT EXISTS "tracestate" text');
183
+ "traceparent" text, "tracestate" text, "tenant_id" text)`);
184
+ // Tables created by earlier versions get the trace (Inferlo 0.6) and tenant (0.7) columns.
185
+ await sql('ALTER TABLE "inferlo_jobs" ADD COLUMN IF NOT EXISTS "traceparent" text, ADD COLUMN IF NOT EXISTS "tracestate" text, ADD COLUMN IF NOT EXISTS "tenant_id" text');
173
186
  await sql('CREATE INDEX IF NOT EXISTS "inferlo_jobs_due_idx" ON "inferlo_jobs" ("status", "run_at")');
174
187
  }
175
188
  catch {
@@ -187,8 +200,8 @@ export function databaseJobStore(adapter, options = {}) {
187
200
  return {
188
201
  async add(r) {
189
202
  await table();
190
- await sql(`INSERT INTO "inferlo_jobs" (${JOB_COLUMNS}) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) ON CONFLICT ("id") DO NOTHING`, [
191
- r.id, r.name, JSON.stringify(r.input), r.status, r.attempts, r.maxAttempts, r.runAt, r.lastError ?? null, r.createdAt, r.updatedAt, r.trace?.traceparent ?? null, r.trace?.tracestate ?? null,
203
+ await sql(`INSERT INTO "inferlo_jobs" (${JOB_COLUMNS}) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) ON CONFLICT ("id") DO NOTHING`, [
204
+ r.id, r.name, JSON.stringify(r.input), r.status, r.attempts, r.maxAttempts, r.runAt, r.lastError ?? null, r.createdAt, r.updatedAt, r.trace?.traceparent ?? null, r.trace?.tracestate ?? null, r.tenantId ?? null,
192
205
  ]);
193
206
  },
194
207
  async claim(now, limit, names) {
@@ -237,16 +250,21 @@ export function databaseJobStore(adapter, options = {}) {
237
250
  },
238
251
  };
239
252
  }
240
- /** Pick the job store for createApp({ jobQueue }). Raises IL6011 for an unknown store, IL6012 for "database" without Postgres. */
241
- export function jobStoreFor(config, adapter) {
253
+ /**
254
+ * Pick the job store for createApp({ jobQueue }). Raises IL6011 for an unknown store, IL6012 for "database" without
255
+ * Postgres. "redis" uses the redis option, a function that returns the Redis store (or throws IL6031 without a client).
256
+ */
257
+ export function jobStoreFor(config, adapter, redis) {
242
258
  const store = config?.store ?? "memory";
243
259
  if (store === "memory")
244
260
  return memoryJobStore();
245
261
  if (store === "database")
246
262
  return databaseJobStore(adapter);
247
- throw new InferloError("IL6011", `Invalid jobQueue store "${String(store)}".`, { fix: 'Use createApp({ jobQueue: { store: "memory" } }) (the default) or { store: "database" }.' });
263
+ if (store === "redis" && redis)
264
+ return redis();
265
+ throw new InferloError("IL6011", `Invalid jobQueue store "${String(store)}".`, { fix: 'Use createApp({ jobQueue: { store: "memory" } }) (the default), { store: "database" } or { store: "redis" } with createApp({ redis }).' });
248
266
  }
249
- export function createJobs(list, runtime, crons = []) {
267
+ export function createJobs(list, runtime, crons = [], subscriptions = []) {
250
268
  const byName = new Map(list.map((j) => [j.name, j]));
251
269
  const names = list.map((j) => j.name);
252
270
  const running = new Set();
@@ -293,9 +311,25 @@ export function createJobs(list, runtime, crons = []) {
293
311
  await runtime.store.add(record(c.job, {}, tick, await cronTickId(c, tick)));
294
312
  }
295
313
  };
314
+ const events = createEvents(subscriptions, {
315
+ async enqueue(def, input, id, from, tenantId) {
316
+ const queued = record(registered(def), input, undefined, id);
317
+ const trace = from ?? runtime.tracing?.capture();
318
+ if (runtime.tracing && trace?.traceparent)
319
+ queued.trace = trace;
320
+ if (tenantId)
321
+ queued.tenantId = tenantId;
322
+ await runtime.store.add(queued);
323
+ return id;
324
+ },
325
+ transport: runtime.eventTransport,
326
+ capture: runtime.tracing ? () => runtime.tracing.capture() : undefined,
327
+ logger: runtime.logger,
328
+ });
296
329
  const jobs = {
297
330
  list,
298
331
  crons,
332
+ events,
299
333
  queueCrons,
300
334
  queue: runtime.queue ?? "memory",
301
335
  async enqueue(j, input, options = {}) {
@@ -303,10 +337,13 @@ export function createJobs(list, runtime, crons = []) {
303
337
  if (options.runAt !== undefined && (!(options.runAt instanceof Date) || Number.isNaN(options.runAt.getTime()))) {
304
338
  throw new InferloError("IL6009", `runAt for job "${def.name}" must be a valid Date.`, { fix: "Pass runAt: new Date(Date.now() + 60_000) or leave it out to run now." });
305
339
  }
340
+ const tenantId = options.tenantId === undefined || options.tenantId === null ? undefined : checkTenantId(options.tenantId);
306
341
  const queued = record(def, input, options.runAt, crypto.randomUUID());
307
342
  const trace = runtime.tracing?.capture();
308
343
  if (trace?.traceparent)
309
344
  queued.trace = trace;
345
+ if (tenantId)
346
+ queued.tenantId = tenantId;
310
347
  await runtime.store.add(queued);
311
348
  return queued;
312
349
  },
@@ -336,6 +373,9 @@ export function createJobs(list, runtime, crons = []) {
336
373
  await queueCrons(cronFrom, now);
337
374
  cronFrom = now;
338
375
  }
376
+ // Events from other services (createApp({ events: { transport } })) queue their jobs first.
377
+ if (events.transport)
378
+ await events.receive().catch((error) => runtime.logger.error("event receive error", error));
339
379
  await jobs.runDue();
340
380
  }
341
381
  catch (error) {
@@ -377,7 +417,10 @@ export function createJobs(list, runtime, crons = []) {
377
417
  try {
378
418
  if (!def)
379
419
  throw new InferloError("IL6010", `"${record.name}" is not a registered job.`, { fix: "Add the job to createApp({ jobs: [...] }) in the process that runs jobs." });
380
- await def.handler({ input: parse(def, record.input), db: runtime.db, ai: runtime.ai, jobs, cache: runtime.cache, id: record.id, attempt: record.attempts, audit: runtime.audit({ name: record.name, id: record.id }) });
420
+ const tenantId = record.tenantId ?? null;
421
+ const scoped = tenantId ? withTenant({ jobs, events }, tenantId) : { jobs, events };
422
+ const db = tenantId ? runtime.db.$tenant(tenantId) : runtime.db;
423
+ await def.handler({ input: parse(def, record.input), db, ai: runtime.ai, jobs: scoped.jobs, events: scoped.events, cache: runtime.cache, id: record.id, attempt: record.attempts, tenantId, audit: runtime.audit({ name: record.name, id: record.id, tenantId }) });
381
424
  await runtime.store.update(record.id, { status: "done" });
382
425
  return "done";
383
426
  }
@@ -400,4 +443,14 @@ export function createJobs(list, runtime, crons = []) {
400
443
  }
401
444
  return jobs;
402
445
  }
446
+ /**
447
+ * ctx.jobs and ctx.events for one tenant: jobs and events queued through them carry the tenant unless the call
448
+ * names another (tenantId) or none (null). Internal: used for requests and jobs with a tenant.
449
+ */
450
+ export function withTenant(base, tenantId) {
451
+ return {
452
+ jobs: { enqueue: (job, input, options = {}) => base.jobs.enqueue(job, input, { ...options, tenantId: options.tenantId === undefined ? tenantId : options.tenantId }) },
453
+ events: { publish: (event, payload, options = {}) => base.events.publish(event, payload, { ...options, tenantId: options.tenantId === undefined ? tenantId : options.tenantId }) },
454
+ };
455
+ }
403
456
  //# sourceMappingURL=jobs.js.map
package/dist/jobs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * LangChain.js: Inferlo's AI aliases as a LangChain chat model, and Inferlo tools (function tools and routes)
3
+ * as LangChain tools.
4
+ *
5
+ * import { toLangChainModel, toLangChainTools } from "@browserlessapi/inferlo/langchain";
6
+ *
7
+ * const model = toLangChainModel(ctx.ai, { model: "fast", for: user.id });
8
+ * const agent = createAgent({ model, tools: toLangChainTools([getWeather, createTicket], { ai: ctx.ai }) });
9
+ *
10
+ * The model keeps Inferlo's aliases, fallback, budgets, usage tracking and tracing; LangChain runs the agent
11
+ * loop and the tools. Needs @langchain/core 0.3 or later (an optional peer dependency).
12
+ */
13
+ import { BaseChatModel, type BaseChatModelCallOptions, type BindToolsInput } from "@langchain/core/language_models/chat_models";
14
+ import { AIMessageChunk, type BaseMessage } from "@langchain/core/messages";
15
+ import { ChatGenerationChunk, type ChatResult } from "@langchain/core/outputs";
16
+ import { DynamicStructuredTool } from "@langchain/core/tools";
17
+ import { type AI } from "./ai/index.ts";
18
+ import { type ToolDef } from "./ai/tool.ts";
19
+ import type { RouteDef } from "./route.ts";
20
+ export interface LangChainModelOptions {
21
+ /** Alias ("fast") or "provider:model". Default: the AI's default model. */
22
+ model?: string;
23
+ /** Who the calls are for (user or tenant id), for usage tracking and budgets. */
24
+ for?: string;
25
+ temperature?: number;
26
+ maxTokens?: number;
27
+ }
28
+ /** Call options of the chat model: LangChain's, plus the tools bindTools() adds. */
29
+ export interface InferloChatModelCallOptions extends BaseChatModelCallOptions {
30
+ tools?: BindToolsInput[];
31
+ }
32
+ /** Inferlo's AI client as a LangChain chat model. Make one with toLangChainModel(ai, { model }). */
33
+ export declare class InferloChatModel extends BaseChatModel<InferloChatModelCallOptions, AIMessageChunk> {
34
+ readonly ai: AI;
35
+ readonly options: LangChainModelOptions;
36
+ constructor(ai: AI, options?: LangChainModelOptions);
37
+ static lc_name(): string;
38
+ _llmType(): string;
39
+ /** Offer tools to the model: LangChain tools, OpenAI-style tool definitions, or Inferlo function tools. */
40
+ bindTools(tools: (BindToolsInput | ToolDef)[], kwargs?: Partial<InferloChatModelCallOptions>): any;
41
+ _generate(messages: BaseMessage[], options: this["ParsedCallOptions"]): Promise<ChatResult>;
42
+ /** Streams text with ai.stream(). With tools bound, the answer (and its tool calls) comes as one chunk. */
43
+ _streamResponseChunks(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: {
44
+ handleLLMNewToken(token: string): Promise<unknown>;
45
+ }): AsyncGenerator<ChatGenerationChunk>;
46
+ }
47
+ /**
48
+ * A LangChain chat model that calls Inferlo's AI: toLangChainModel(ctx.ai, { model: "fast", for: user.id }).
49
+ * Use it anywhere LangChain takes a chat model (createAgent, chains, LangGraph).
50
+ */
51
+ export declare function toLangChainModel(ai: AI, options?: LangChainModelOptions): InferloChatModel;
52
+ /**
53
+ * Inferlo tools as LangChain tools. Function tools (tool(name, ...).handle(fn)) work anywhere; routes work with a
54
+ * request's AI client ({ ai: ctx.ai }) and run as the signed-in user, with the route's auth and validation.
55
+ */
56
+ export declare function toLangChainTools(tools: readonly (ToolDef | RouteDef)[], options?: {
57
+ ai?: AI;
58
+ }): DynamicStructuredTool[];