@workglow/ai 0.0.58 → 0.0.59

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 (48) hide show
  1. package/dist/browser.js +67 -92
  2. package/dist/browser.js.map +12 -12
  3. package/dist/bun.js +67 -118
  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/{storage/InMemoryModelRepository.d.ts → InMemoryModelRepository.d.ts} +2 -2
  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 +59 -60
  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 +67 -118
  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.map +0 -1
  43. package/dist/model/storage/IndexedDbModelRepository.d.ts +0 -18
  44. package/dist/model/storage/IndexedDbModelRepository.d.ts.map +0 -1
  45. package/dist/model/storage/PostgresModelRepository.d.ts +0 -19
  46. package/dist/model/storage/PostgresModelRepository.d.ts.map +0 -1
  47. package/dist/model/storage/SqliteModelRepository.d.ts +0 -18
  48. package/dist/model/storage/SqliteModelRepository.d.ts.map +0 -1
@@ -5,51 +5,18 @@
5
5
  */
6
6
  import { type TabularRepository } from "@workglow/storage";
7
7
  import { EventEmitter, EventParameters } from "@workglow/util";
8
- import { Model } from "./Model";
8
+ import { ModelPrimaryKeyNames, ModelRecord, ModelSchema } from "./ModelSchema";
9
9
  /**
10
10
  * Events that can be emitted by the ModelRepository
11
11
  */
12
12
  export type ModelEventListeners = {
13
- model_added: (model: Model) => void;
14
- model_removed: (model: Model) => void;
15
- task_model_connected: (task: string, model: string) => void;
16
- task_model_disconnected: (task: string, model: string) => void;
17
- model_updated: (model: Model) => void;
13
+ model_added: (model: ModelRecord) => void;
14
+ model_removed: (model: ModelRecord) => void;
15
+ model_updated: (model: ModelRecord) => void;
18
16
  };
19
17
  export type ModelEvents = keyof ModelEventListeners;
20
18
  export type ModelEventListener<Event extends ModelEvents> = ModelEventListeners[Event];
21
19
  export type ModelEventParameters<Event extends ModelEvents> = EventParameters<ModelEventListeners, Event>;
22
- export declare const ModelSchema: {
23
- readonly type: "object";
24
- readonly properties: {
25
- readonly name: {
26
- readonly type: "string";
27
- };
28
- readonly details: {
29
- readonly type: "string";
30
- };
31
- };
32
- readonly required: readonly ["name", "details"];
33
- readonly additionalProperties: false;
34
- };
35
- export declare const ModelPrimaryKeyNames: readonly ["name"];
36
- /**
37
- * Represents the structure for mapping tasks to models
38
- */
39
- export declare const Task2ModelSchema: {
40
- readonly type: "object";
41
- readonly properties: {
42
- readonly task: {
43
- readonly type: "string";
44
- };
45
- readonly model: {
46
- readonly type: "string";
47
- };
48
- };
49
- readonly required: readonly ["task", "model"];
50
- readonly additionalProperties: false;
51
- };
52
- export declare const Task2ModelPrimaryKeyNames: readonly ["task", "model"];
53
20
  /**
54
21
  * Abstract base class for managing AI models and their relationships with tasks.
55
22
  * Provides functionality for storing, retrieving, and managing the lifecycle of models
@@ -62,10 +29,6 @@ export declare abstract class ModelRepository {
62
29
  * Repository for storing and managing Model instances
63
30
  */
64
31
  abstract modelTabularRepository: TabularRepository<typeof ModelSchema, typeof ModelPrimaryKeyNames>;
65
- /**
66
- * Repository for managing relationships between tasks and models
67
- */
68
- abstract task2ModelTabularRepository: TabularRepository<typeof Task2ModelSchema, typeof Task2ModelPrimaryKeyNames>;
69
32
  /** Event emitter for repository events */
70
33
  protected events: EventEmitter<ModelEventListeners>;
71
34
  /**
@@ -96,21 +59,43 @@ export declare abstract class ModelRepository {
96
59
  * Adds a new model to the repository
97
60
  * @param model - The model instance to add
98
61
  */
99
- addModel(model: Model): Promise<Model>;
62
+ addModel(model: ModelRecord): Promise<{
63
+ title: string;
64
+ description: string;
65
+ model_id: string;
66
+ tasks: string[];
67
+ provider: string;
68
+ providerConfig: {
69
+ [x: string]: unknown;
70
+ };
71
+ metadata: {
72
+ [x: string]: unknown;
73
+ };
74
+ }>;
100
75
  /**
101
76
  * Finds all models associated with a specific task
102
77
  * @param task - The task identifier to search for
103
78
  * @returns Promise resolving to an array of associated models, or undefined if none found
104
79
  */
105
- findModelsByTask(task: string): Promise<any[] | undefined>;
106
- models: Map<string, Model>;
107
- taskModels: Map<string, Model[]>;
80
+ findModelsByTask(task: string): Promise<{
81
+ title: string;
82
+ description: string;
83
+ model_id: string;
84
+ tasks: string[];
85
+ provider: string;
86
+ providerConfig: {
87
+ [x: string]: unknown;
88
+ };
89
+ metadata: {
90
+ [x: string]: unknown;
91
+ };
92
+ }[] | undefined>;
108
93
  /**
109
94
  * Finds all tasks associated with a specific model
110
95
  * @param model - The model identifier to search for
111
96
  * @returns Promise resolving to an array of associated tasks, or undefined if none found
112
97
  */
113
- findTasksByModel(model: string): Promise<string[] | undefined>;
98
+ findTasksByModel(model_id: string): Promise<string[] | undefined>;
114
99
  /**
115
100
  * Enumerates all tasks in the repository
116
101
  * @returns Promise resolving to an array of task identifiers
@@ -120,27 +105,41 @@ export declare abstract class ModelRepository {
120
105
  * Enumerates all models in the repository
121
106
  * @returns Promise resolving to an array of model instances
122
107
  */
123
- enumerateAllModels(): Promise<any[] | undefined>;
124
- /**
125
- * Creates an association between a task and a model
126
- * @param task - The task identifier
127
- * @param model - The model to associate with the task
128
- */
129
- connectTaskToModel(task: string, model: string): Promise<void>;
108
+ enumerateAllModels(): Promise<{
109
+ title: string;
110
+ description: string;
111
+ model_id: string;
112
+ tasks: string[];
113
+ provider: string;
114
+ providerConfig: {
115
+ [x: string]: unknown;
116
+ };
117
+ metadata: {
118
+ [x: string]: unknown;
119
+ };
120
+ }[] | undefined>;
130
121
  /**
131
- * Retrieves a model by its name
132
- * @param name - The name of the model to find
122
+ * Retrieves a model by its identifier
123
+ * @param modelId - The model_id of the model to find
133
124
  * @returns Promise resolving to the found model or undefined if not found
134
125
  */
135
- findByName(name: string): Promise<any>;
126
+ findByName(model_id: string): Promise<{
127
+ title: string;
128
+ description: string;
129
+ model_id: string;
130
+ tasks: string[];
131
+ provider: string;
132
+ providerConfig: {
133
+ [x: string]: unknown;
134
+ };
135
+ metadata: {
136
+ [x: string]: unknown;
137
+ };
138
+ } | undefined>;
136
139
  /**
137
140
  * Gets the total number of models in the repository
138
141
  * @returns Promise resolving to the number of stored models
139
142
  */
140
143
  size(): Promise<number>;
141
- /**
142
- * Clears all models from the repository
143
- */
144
- clear(): Promise<void>;
145
144
  }
146
145
  //# sourceMappingURL=ModelRepository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelRepository.d.ts","sourceRoot":"","sources":["../../src/model/ModelRepository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAwB,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;GAEG;AAEH,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACpC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACtC,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,uBAAuB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC;AAEpD,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,WAAW,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAEvF,MAAM,MAAM,oBAAoB,CAAC,KAAK,SAAS,WAAW,IAAI,eAAe,CAC3E,mBAAmB,EACnB,KAAK,CACN,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;CAQiB,CAAC;AAC1C,eAAO,MAAM,oBAAoB,mBAAoB,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;CAQY,CAAC;AAC1C,eAAO,MAAM,yBAAyB,4BAA6B,CAAC;AAEpE;;;;GAIG;AACH,8BAAsB,eAAe;IACnC,iCAAiC;IAC1B,IAAI,SAAqB;IAEhC;;OAEG;IACH,QAAQ,CAAC,sBAAsB,EAAE,iBAAiB,CAChD,OAAO,WAAW,EAClB,OAAO,oBAAoB,CAC5B,CAAC;IAEF;;OAEG;IACH,QAAQ,CAAC,2BAA2B,EAAE,iBAAiB,CACrD,OAAO,gBAAgB,EACvB,OAAO,yBAAyB,CACjC,CAAC;IAEF,0CAA0C;IAC1C,SAAS,CAAC,MAAM,oCAA2C;IAE3D;;;;OAIG;IACH,EAAE,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,kBAAkB,CAAC,KAAK,CAAC;IAIxE;;;;OAIG;IACH,GAAG,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,kBAAkB,CAAC,KAAK,CAAC;IAIzE;;;;OAIG;IACH,IAAI,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,kBAAkB,CAAC,KAAK,CAAC;IAI1E;;;;OAIG;IACH,MAAM,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK;IAI7C;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,KAAK;IAO3B;;;;OAIG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM;IAcnC,MAAM,qBAA4B;IAClC,UAAU,uBAA8B;IAExC;;;;OAIG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAOpC;;;OAGG;IACG,iBAAiB;IAOvB;;;OAGG;IACG,kBAAkB;IAQxB;;;;OAIG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKpD;;;;OAIG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM;IAS7B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7B;;OAEG;IACG,KAAK;CAGZ"}
1
+ {"version":3,"file":"ModelRepository.d.ts","sourceRoot":"","sources":["../../src/model/ModelRepository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE/E;;GAEG;AAEH,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1C,aAAa,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC;AAEpD,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,WAAW,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAEvF,MAAM,MAAM,oBAAoB,CAAC,KAAK,SAAS,WAAW,IAAI,eAAe,CAC3E,mBAAmB,EACnB,KAAK,CACN,CAAC;AAEF;;;;GAIG;AACH,8BAAsB,eAAe;IACnC,iCAAiC;IAC1B,IAAI,SAAqB;IAEhC;;OAEG;IACH,QAAQ,CAAC,sBAAsB,EAAE,iBAAiB,CAChD,OAAO,WAAW,EAClB,OAAO,oBAAoB,CAC5B,CAAC;IAEF,0CAA0C;IAC1C,SAAS,CAAC,MAAM,oCAA2C;IAE3D;;;;OAIG;IACH,EAAE,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,kBAAkB,CAAC,KAAK,CAAC;IAIxE;;;;OAIG;IACH,GAAG,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,kBAAkB,CAAC,KAAK,CAAC;IAIzE;;;;OAIG;IACH,IAAI,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,kBAAkB,CAAC,KAAK,CAAC;IAI1E;;;;OAIG;IACH,MAAM,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK;IAI7C;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,WAAW;;;;;;;;;;;;;IAMjC;;;;OAIG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM;;;;;;;;;;;;;IASnC;;;;OAIG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAOvC;;;OAGG;IACG,iBAAiB;IAcvB;;;OAGG;IACG,kBAAkB;;;;;;;;;;;;;IAMxB;;;;OAIG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;IAMjC;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CAG9B"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { FromSchema } from "@workglow/util";
7
+ export declare const ModelSchema: {
8
+ readonly type: "object";
9
+ readonly properties: {
10
+ readonly model_id: {
11
+ readonly type: "string";
12
+ };
13
+ readonly tasks: {
14
+ readonly type: "array";
15
+ readonly items: {
16
+ readonly type: "string";
17
+ };
18
+ };
19
+ readonly title: {
20
+ readonly type: "string";
21
+ };
22
+ readonly description: {
23
+ readonly type: "string";
24
+ };
25
+ readonly provider: {
26
+ readonly type: "string";
27
+ };
28
+ readonly providerConfig: {
29
+ readonly type: "object";
30
+ readonly default: {};
31
+ };
32
+ readonly metadata: {
33
+ readonly type: "object";
34
+ readonly default: {};
35
+ };
36
+ };
37
+ readonly required: readonly ["model_id", "tasks", "provider", "title", "description", "providerConfig", "metadata"];
38
+ readonly additionalProperties: false;
39
+ };
40
+ export type ModelRecord = FromSchema<typeof ModelSchema>;
41
+ export declare const ModelPrimaryKeyNames: readonly ["model_id"];
42
+ //# sourceMappingURL=ModelSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelSchema.d.ts","sourceRoot":"","sources":["../../src/model/ModelSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAwB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAElE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAaiB,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AACzD,eAAO,MAAM,oBAAoB,uBAAwB,CAAC"}
package/dist/node.js CHANGED
@@ -6,31 +6,14 @@ 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
19
  type = "ModelRepository";
@@ -48,101 +31,101 @@ class ModelRepository {
48
31
  return this.events.waitOn(name);
49
32
  }
50
33
  async addModel(model) {
51
- await this.modelTabularRepository.put({ name: model.name, details: JSON.stringify(model) });
52
- this.models.set(model.name, model);
34
+ await this.modelTabularRepository.put(model);
53
35
  this.events.emit("model_added", model);
54
36
  return model;
55
37
  }
56
38
  async findModelsByTask(task) {
57
39
  if (typeof task != "string")
58
40
  return;
59
- const junctions = await this.task2ModelTabularRepository.search({ task });
60
- if (!junctions || junctions.length === 0)
41
+ const allModels = await this.modelTabularRepository.getAll();
42
+ if (!allModels || allModels.length === 0)
43
+ return;
44
+ const models = allModels.filter((model) => model.tasks?.includes(task));
45
+ if (models.length === 0)
61
46
  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
47
  return models;
71
48
  }
72
- models = new Map;
73
- taskModels = new Map;
74
- async findTasksByModel(model) {
75
- if (typeof model != "string")
49
+ async findTasksByModel(model_id) {
50
+ if (typeof model_id != "string")
76
51
  return;
77
- const junctions = await this.task2ModelTabularRepository.search({ model });
78
- if (!junctions || junctions.length === 0)
52
+ const modelRecord = await this.modelTabularRepository.get({ model_id });
53
+ if (!modelRecord)
79
54
  return;
80
- return junctions.map((junction) => junction.task);
55
+ return modelRecord.tasks && modelRecord.tasks.length > 0 ? modelRecord.tasks : undefined;
81
56
  }
82
57
  async enumerateAllTasks() {
83
- const junctions = await this.task2ModelTabularRepository.getAll();
84
- if (!junctions || junctions.length === 0)
58
+ const allModels = await this.modelTabularRepository.getAll();
59
+ if (!allModels || allModels.length === 0)
85
60
  return;
86
- const uniqueTasks = [...new Set(junctions.map((junction) => junction.task))];
87
- return uniqueTasks;
61
+ const uniqueTasks = new Set;
62
+ for (const model of allModels) {
63
+ if (model.tasks) {
64
+ for (const task of model.tasks) {
65
+ uniqueTasks.add(task);
66
+ }
67
+ }
68
+ }
69
+ return uniqueTasks.size > 0 ? Array.from(uniqueTasks) : undefined;
88
70
  }
89
71
  async enumerateAllModels() {
90
72
  const models = await this.modelTabularRepository.getAll();
91
73
  if (!models || models.length === 0)
92
74
  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);
75
+ return models;
100
76
  }
101
- async findByName(name) {
102
- if (typeof name != "string")
103
- return;
104
- const modelstr = await this.modelTabularRepository.get({ name });
105
- if (!modelstr)
77
+ async findByName(model_id) {
78
+ if (typeof model_id != "string")
106
79
  return;
107
- const model = JSON.parse(modelstr.details);
108
- this.models.set(model.name, model);
109
- return model;
80
+ const model = await this.modelTabularRepository.get({ model_id });
81
+ return model ?? undefined;
110
82
  }
111
83
  async size() {
112
84
  return await this.modelTabularRepository.size();
113
85
  }
114
- async clear() {
115
- await this.modelTabularRepository.deleteAll();
116
- }
117
86
  }
118
87
 
119
- // src/model/storage/InMemoryModelRepository.ts
88
+ // src/model/ModelSchema.ts
89
+ var ModelSchema = {
90
+ type: "object",
91
+ properties: {
92
+ model_id: { type: "string" },
93
+ tasks: { type: "array", items: { type: "string" } },
94
+ title: { type: "string" },
95
+ description: { type: "string" },
96
+ provider: { type: "string" },
97
+ providerConfig: { type: "object", default: {} },
98
+ metadata: { type: "object", default: {} }
99
+ },
100
+ required: ["model_id", "tasks", "provider", "title", "description", "providerConfig", "metadata"],
101
+ additionalProperties: false
102
+ };
103
+ var ModelPrimaryKeyNames = ["model_id"];
104
+
105
+ // src/model/InMemoryModelRepository.ts
120
106
  class InMemoryModelRepository extends ModelRepository {
121
107
  modelTabularRepository;
122
- task2ModelTabularRepository;
123
108
  type = "InMemoryModelRepository";
124
109
  constructor() {
125
110
  super();
126
111
  this.modelTabularRepository = new InMemoryTabularRepository(ModelSchema, ModelPrimaryKeyNames);
127
- this.task2ModelTabularRepository = new InMemoryTabularRepository(Task2ModelSchema, Task2ModelPrimaryKeyNames, ["model"]);
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,42 +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
- // src/model/storage/PostgresModelRepository.ts
1319
- import { PostgresTabularRepository } from "@workglow/storage";
1320
- class PostgresModelRepository extends ModelRepository {
1321
- type = "PostgresModelRepository";
1322
- modelTabularRepository;
1323
- task2ModelTabularRepository;
1324
- constructor(db, tableModels = "aimodel", tableTask2Models = "aitask2aimodel") {
1325
- super();
1326
- this.modelTabularRepository = new PostgresTabularRepository(db, tableModels, ModelSchema, ModelPrimaryKeyNames);
1327
- this.task2ModelTabularRepository = new PostgresTabularRepository(db, tableTask2Models, Task2ModelSchema, Task2ModelPrimaryKeyNames, ["model"]);
1328
- }
1329
- }
1330
- // src/model/storage/SqliteModelRepository.ts
1331
- import { SqliteTabularRepository } from "@workglow/storage";
1332
- class SqliteModelRepository extends ModelRepository {
1333
- type = "SqliteModelRepository";
1334
- modelTabularRepository;
1335
- task2ModelTabularRepository;
1336
- constructor(dbOrPath, tableModels = "aimodel", tableTask2Models = "aitask2aimodel") {
1337
- super();
1338
- this.modelTabularRepository = new SqliteTabularRepository(dbOrPath, tableModels, ModelSchema, ModelPrimaryKeyNames);
1339
- this.task2ModelTabularRepository = new SqliteTabularRepository(dbOrPath, tableTask2Models, Task2ModelSchema, Task2ModelPrimaryKeyNames, ["model"]);
1340
- }
1341
- }
1342
1294
  export {
1343
1295
  setGlobalModelRepository,
1344
1296
  setAiProviderRegistry,
@@ -1350,6 +1302,7 @@ export {
1350
1302
  VectorSimilarityTask,
1351
1303
  TypedArraySchema,
1352
1304
  TypeReplicateArray,
1305
+ TypeModelAsString,
1353
1306
  TypeModel,
1354
1307
  TypeLanguage,
1355
1308
  TextTranslationTask,
@@ -1377,17 +1330,13 @@ export {
1377
1330
  TextEmbeddingOutputSchema,
1378
1331
  TextEmbeddingInputSchema,
1379
1332
  TextEmbedding,
1380
- Task2ModelSchema,
1381
- Task2ModelPrimaryKeyNames,
1382
1333
  TableFragment,
1383
- SqliteModelRepository,
1384
1334
  SimilarityFn,
1385
1335
  Similarity,
1386
- PostgresModelRepository,
1387
1336
  ModelSchema,
1388
1337
  ModelRepository,
1389
1338
  ModelPrimaryKeyNames,
1390
- IndexedDbModelRepository,
1339
+ MODEL_REPOSITORY,
1391
1340
  InMemoryModelRepository,
1392
1341
  ImageFragment,
1393
1342
  DownloadModelTask,
@@ -1404,4 +1353,4 @@ export {
1404
1353
  AiJob
1405
1354
  };
1406
1355
 
1407
- //# debugId=5FEFE6A998AB63D364756E2164756E21
1356
+ //# debugId=1604FA9BA2C9A8BB64756E2164756E21