@workglow/ai 0.0.58 → 0.0.60

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 (49) hide show
  1. package/dist/browser.js +72 -97
  2. package/dist/browser.js.map +12 -12
  3. package/dist/bun.js +72 -123
  4. package/dist/bun.js.map +12 -14
  5. package/dist/common.d.ts +2 -1
  6. package/dist/common.d.ts.map +1 -1
  7. package/dist/model/InMemoryModelRepository.d.ts +14 -0
  8. package/dist/model/InMemoryModelRepository.d.ts.map +1 -0
  9. package/dist/model/ModelRegistry.d.ts +12 -0
  10. package/dist/model/ModelRegistry.d.ts.map +1 -1
  11. package/dist/model/ModelRepository.d.ts +63 -65
  12. package/dist/model/ModelRepository.d.ts.map +1 -1
  13. package/dist/model/ModelSchema.d.ts +42 -0
  14. package/dist/model/ModelSchema.d.ts.map +1 -0
  15. package/dist/node.js +72 -123
  16. package/dist/node.js.map +12 -14
  17. package/dist/provider/AiProviderRegistry.d.ts +15 -3
  18. package/dist/provider/AiProviderRegistry.d.ts.map +1 -1
  19. package/dist/task/DownloadModelTask.d.ts +179 -19
  20. package/dist/task/DownloadModelTask.d.ts.map +1 -1
  21. package/dist/task/TextEmbeddingTask.d.ts +77 -9
  22. package/dist/task/TextEmbeddingTask.d.ts.map +1 -1
  23. package/dist/task/TextGenerationTask.d.ts +77 -9
  24. package/dist/task/TextGenerationTask.d.ts.map +1 -1
  25. package/dist/task/TextQuestionAnswerTask.d.ts +77 -9
  26. package/dist/task/TextQuestionAnswerTask.d.ts.map +1 -1
  27. package/dist/task/TextRewriterTask.d.ts +77 -9
  28. package/dist/task/TextRewriterTask.d.ts.map +1 -1
  29. package/dist/task/TextSummaryTask.d.ts +77 -9
  30. package/dist/task/TextSummaryTask.d.ts.map +1 -1
  31. package/dist/task/TextTranslationTask.d.ts +77 -9
  32. package/dist/task/TextTranslationTask.d.ts.map +1 -1
  33. package/dist/task/base/AiTask.d.ts +3 -3
  34. package/dist/task/base/AiTask.d.ts.map +1 -1
  35. package/dist/task/base/AiTaskSchemas.d.ts +43 -2
  36. package/dist/task/base/AiTaskSchemas.d.ts.map +1 -1
  37. package/dist/types.d.ts +0 -4
  38. package/dist/types.d.ts.map +1 -1
  39. package/package.json +9 -12
  40. package/dist/model/Model.d.ts +0 -26
  41. package/dist/model/Model.d.ts.map +0 -1
  42. package/dist/model/storage/InMemoryModelRepository.d.ts +0 -18
  43. package/dist/model/storage/InMemoryModelRepository.d.ts.map +0 -1
  44. package/dist/model/storage/IndexedDbModelRepository.d.ts +0 -18
  45. package/dist/model/storage/IndexedDbModelRepository.d.ts.map +0 -1
  46. package/dist/model/storage/PostgresModelRepository.d.ts +0 -19
  47. package/dist/model/storage/PostgresModelRepository.d.ts.map +0 -1
  48. package/dist/model/storage/SqliteModelRepository.d.ts +0 -18
  49. package/dist/model/storage/SqliteModelRepository.d.ts.map +0 -1
package/dist/browser.js CHANGED
@@ -6,34 +6,20 @@ import {
6
6
  PermanentJobError
7
7
  } from "@workglow/job-queue";
8
8
 
9
- // src/model/storage/InMemoryModelRepository.ts
9
+ // src/model/ModelRegistry.ts
10
+ import { createServiceToken, globalServiceRegistry } from "@workglow/util";
11
+
12
+ // src/model/InMemoryModelRepository.ts
10
13
  import { InMemoryTabularRepository } from "@workglow/storage";
11
14
 
12
15
  // src/model/ModelRepository.ts
13
16
  import { EventEmitter } from "@workglow/util";
14
- var ModelSchema = {
15
- type: "object",
16
- properties: {
17
- name: { type: "string" },
18
- details: { type: "string" }
19
- },
20
- required: ["name", "details"],
21
- additionalProperties: false
22
- };
23
- var ModelPrimaryKeyNames = ["name"];
24
- var Task2ModelSchema = {
25
- type: "object",
26
- properties: {
27
- task: { type: "string" },
28
- model: { type: "string" }
29
- },
30
- required: ["task", "model"],
31
- additionalProperties: false
32
- };
33
- var Task2ModelPrimaryKeyNames = ["task", "model"];
34
17
 
35
18
  class ModelRepository {
36
- type = "ModelRepository";
19
+ modelTabularRepository;
20
+ constructor(modelTabularRepository) {
21
+ this.modelTabularRepository = modelTabularRepository;
22
+ }
37
23
  events = new EventEmitter;
38
24
  on(name, fn) {
39
25
  this.events.on(name, fn);
@@ -48,101 +34,98 @@ class ModelRepository {
48
34
  return this.events.waitOn(name);
49
35
  }
50
36
  async addModel(model) {
51
- await this.modelTabularRepository.put({ name: model.name, details: JSON.stringify(model) });
52
- this.models.set(model.name, model);
37
+ await this.modelTabularRepository.put(model);
53
38
  this.events.emit("model_added", model);
54
39
  return model;
55
40
  }
56
41
  async findModelsByTask(task) {
57
42
  if (typeof task != "string")
58
43
  return;
59
- const junctions = await this.task2ModelTabularRepository.search({ task });
60
- if (!junctions || junctions.length === 0)
44
+ const allModels = await this.modelTabularRepository.getAll();
45
+ if (!allModels || allModels.length === 0)
46
+ return;
47
+ const models = allModels.filter((model) => model.tasks?.includes(task));
48
+ if (models.length === 0)
61
49
  return;
62
- const models = [];
63
- for (const junction of junctions) {
64
- const model = await this.modelTabularRepository.get({ name: junction.model });
65
- if (model)
66
- models.push(JSON.parse(model.details));
67
- }
68
- models.forEach((m) => this.models.set(m.name, m));
69
- this.taskModels.set(task, models);
70
50
  return models;
71
51
  }
72
- models = new Map;
73
- taskModels = new Map;
74
- async findTasksByModel(model) {
75
- if (typeof model != "string")
52
+ async findTasksByModel(model_id) {
53
+ if (typeof model_id != "string")
76
54
  return;
77
- const junctions = await this.task2ModelTabularRepository.search({ model });
78
- if (!junctions || junctions.length === 0)
55
+ const modelRecord = await this.modelTabularRepository.get({ model_id });
56
+ if (!modelRecord)
79
57
  return;
80
- return junctions.map((junction) => junction.task);
58
+ return modelRecord.tasks && modelRecord.tasks.length > 0 ? modelRecord.tasks : undefined;
81
59
  }
82
60
  async enumerateAllTasks() {
83
- const junctions = await this.task2ModelTabularRepository.getAll();
84
- if (!junctions || junctions.length === 0)
61
+ const allModels = await this.modelTabularRepository.getAll();
62
+ if (!allModels || allModels.length === 0)
85
63
  return;
86
- const uniqueTasks = [...new Set(junctions.map((junction) => junction.task))];
87
- return uniqueTasks;
64
+ const uniqueTasks = new Set;
65
+ for (const model of allModels) {
66
+ if (model.tasks) {
67
+ for (const task of model.tasks) {
68
+ uniqueTasks.add(task);
69
+ }
70
+ }
71
+ }
72
+ return uniqueTasks.size > 0 ? Array.from(uniqueTasks) : undefined;
88
73
  }
89
74
  async enumerateAllModels() {
90
75
  const models = await this.modelTabularRepository.getAll();
91
76
  if (!models || models.length === 0)
92
77
  return;
93
- const parsedModels = models.map((model) => JSON.parse(model.details));
94
- parsedModels.forEach((m) => this.models.set(m.name, m));
95
- return parsedModels;
96
- }
97
- async connectTaskToModel(task, model) {
98
- await this.task2ModelTabularRepository.put({ task, model });
99
- this.events.emit("task_model_connected", task, model);
78
+ return models;
100
79
  }
101
- async findByName(name) {
102
- if (typeof name != "string")
103
- return;
104
- const modelstr = await this.modelTabularRepository.get({ name });
105
- if (!modelstr)
80
+ async findByName(model_id) {
81
+ if (typeof model_id != "string")
106
82
  return;
107
- const model = JSON.parse(modelstr.details);
108
- this.models.set(model.name, model);
109
- return model;
83
+ const model = await this.modelTabularRepository.get({ model_id });
84
+ return model ?? undefined;
110
85
  }
111
86
  async size() {
112
87
  return await this.modelTabularRepository.size();
113
88
  }
114
- async clear() {
115
- await this.modelTabularRepository.deleteAll();
116
- }
117
89
  }
118
90
 
119
- // src/model/storage/InMemoryModelRepository.ts
91
+ // src/model/ModelSchema.ts
92
+ var ModelSchema = {
93
+ type: "object",
94
+ properties: {
95
+ model_id: { type: "string" },
96
+ tasks: { type: "array", items: { type: "string" } },
97
+ title: { type: "string" },
98
+ description: { type: "string" },
99
+ provider: { type: "string" },
100
+ providerConfig: { type: "object", default: {} },
101
+ metadata: { type: "object", default: {} }
102
+ },
103
+ required: ["model_id", "tasks", "provider", "title", "description", "providerConfig", "metadata"],
104
+ additionalProperties: false
105
+ };
106
+ var ModelPrimaryKeyNames = ["model_id"];
107
+
108
+ // src/model/InMemoryModelRepository.ts
120
109
  class InMemoryModelRepository extends ModelRepository {
121
- modelTabularRepository;
122
- task2ModelTabularRepository;
123
- type = "InMemoryModelRepository";
124
110
  constructor() {
125
- super();
126
- this.modelTabularRepository = new InMemoryTabularRepository(ModelSchema, ModelPrimaryKeyNames);
127
- this.task2ModelTabularRepository = new InMemoryTabularRepository(Task2ModelSchema, Task2ModelPrimaryKeyNames, ["model"]);
111
+ super(new InMemoryTabularRepository(ModelSchema, ModelPrimaryKeyNames));
128
112
  }
129
113
  }
130
114
 
131
115
  // src/model/ModelRegistry.ts
132
- class FallbackModelRegistry extends InMemoryModelRepository {
116
+ var MODEL_REPOSITORY = createServiceToken("model.repository");
117
+ if (!globalServiceRegistry.has(MODEL_REPOSITORY)) {
118
+ globalServiceRegistry.register(MODEL_REPOSITORY, () => new InMemoryModelRepository, true);
133
119
  }
134
- var modelRegistry;
135
120
  function getGlobalModelRepository() {
136
- if (!modelRegistry)
137
- modelRegistry = new FallbackModelRegistry;
138
- return modelRegistry;
121
+ return globalServiceRegistry.get(MODEL_REPOSITORY);
139
122
  }
140
123
  function setGlobalModelRepository(pr) {
141
- modelRegistry = pr;
124
+ globalServiceRegistry.registerInstance(MODEL_REPOSITORY, pr);
142
125
  }
143
126
 
144
127
  // src/provider/AiProviderRegistry.ts
145
- import { globalServiceRegistry, WORKER_MANAGER } from "@workglow/util";
128
+ import { globalServiceRegistry as globalServiceRegistry2, WORKER_MANAGER } from "@workglow/util";
146
129
 
147
130
  class AiProviderRegistry {
148
131
  runFnRegistry = new Map;
@@ -154,7 +137,7 @@ class AiProviderRegistry {
154
137
  }
155
138
  registerAsWorkerRunFn(modelProvider, taskType) {
156
139
  const workerFn = async (input, model, update_progress, signal) => {
157
- const workerManager = globalServiceRegistry.get(WORKER_MANAGER);
140
+ const workerManager = globalServiceRegistry2.get(WORKER_MANAGER);
158
141
  const result = await workerManager.callWorkerFunction(modelProvider, taskType, [input, model], {
159
142
  signal,
160
143
  onProgress: update_progress
@@ -536,7 +519,7 @@ class AiTask extends JobQueueTask {
536
519
  for (const [key, propSchema] of modelTaskProperties) {
537
520
  let requestedModels = Array.isArray(input[key]) ? input[key] : [input[key]];
538
521
  for (const model of requestedModels) {
539
- const foundModel = taskModels?.find((m) => m.name === model);
522
+ const foundModel = taskModels?.find((m) => m.model_id === model);
540
523
  if (!foundModel) {
541
524
  throw new TaskConfigurationError(`AiTask: Missing model for '${key}' named '${model}' for task '${this.type}'`);
542
525
  }
@@ -570,7 +553,7 @@ class AiTask extends JobQueueTask {
570
553
  const taskModels = await getGlobalModelRepository().findModelsByTask(this.type);
571
554
  for (const [key, propSchema] of modelTaskProperties) {
572
555
  let requestedModels = Array.isArray(input[key]) ? input[key] : [input[key]];
573
- let usingModels = requestedModels.filter((model) => taskModels?.find((m) => m.name === model));
556
+ let usingModels = requestedModels.filter((model) => taskModels?.find((m) => m.model_id === model));
574
557
  usingModels = usingModels.length > 1 ? usingModels : usingModels[0];
575
558
  input[key] = usingModels;
576
559
  }
@@ -667,7 +650,7 @@ var TypeLanguage = (annotations = {}) => ({
667
650
  minLength: 2,
668
651
  ...annotations
669
652
  });
670
- function TypeModel(semantic = "model", options = {}) {
653
+ function TypeModelAsString(semantic = "model", options = {}) {
671
654
  if (semantic !== "model" && !semantic.startsWith("model:")) {
672
655
  throw new Error("Invalid semantic value");
673
656
  }
@@ -680,6 +663,11 @@ function TypeModel(semantic = "model", options = {}) {
680
663
  type: "string"
681
664
  };
682
665
  }
666
+ function TypeModel(semantic = "model", options = {}) {
667
+ return {
668
+ oneOf: [TypeModelAsString(semantic, options), ModelSchema]
669
+ };
670
+ }
683
671
  var TypeReplicateArray = (type, annotations = {}) => ({
684
672
  oneOf: [type, { type: "array", items: type }],
685
673
  title: type.title,
@@ -1303,18 +1291,6 @@ function normalize(vector) {
1303
1291
  }
1304
1292
  return new Float32Array(normalized);
1305
1293
  }
1306
- // src/model/storage/IndexedDbModelRepository.ts
1307
- import { IndexedDbTabularRepository } from "@workglow/storage";
1308
- class IndexedDbModelRepository extends ModelRepository {
1309
- modelTabularRepository;
1310
- task2ModelTabularRepository;
1311
- type = "IndexedDbModelRepository";
1312
- constructor(tableModels = "models", tableTask2Models = "task2models") {
1313
- super();
1314
- this.modelTabularRepository = new IndexedDbTabularRepository(tableModels, ModelSchema, ModelPrimaryKeyNames);
1315
- this.task2ModelTabularRepository = new IndexedDbTabularRepository(tableTask2Models, Task2ModelSchema, Task2ModelPrimaryKeyNames, ["model"]);
1316
- }
1317
- }
1318
1294
  export {
1319
1295
  setGlobalModelRepository,
1320
1296
  setAiProviderRegistry,
@@ -1326,6 +1302,7 @@ export {
1326
1302
  VectorSimilarityTask,
1327
1303
  TypedArraySchema,
1328
1304
  TypeReplicateArray,
1305
+ TypeModelAsString,
1329
1306
  TypeModel,
1330
1307
  TypeLanguage,
1331
1308
  TextTranslationTask,
@@ -1353,15 +1330,13 @@ export {
1353
1330
  TextEmbeddingOutputSchema,
1354
1331
  TextEmbeddingInputSchema,
1355
1332
  TextEmbedding,
1356
- Task2ModelSchema,
1357
- Task2ModelPrimaryKeyNames,
1358
1333
  TableFragment,
1359
1334
  SimilarityFn,
1360
1335
  Similarity,
1361
1336
  ModelSchema,
1362
1337
  ModelRepository,
1363
1338
  ModelPrimaryKeyNames,
1364
- IndexedDbModelRepository,
1339
+ MODEL_REPOSITORY,
1365
1340
  InMemoryModelRepository,
1366
1341
  ImageFragment,
1367
1342
  DownloadModelTask,
@@ -1378,4 +1353,4 @@ export {
1378
1353
  AiJob
1379
1354
  };
1380
1355
 
1381
- //# debugId=CC4CA70F5A3D687D64756E2164756E21
1356
+ //# debugId=A0109DCCDDC6649464756E2164756E21