@smythos/sre 1.5.8 → 1.5.9

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.
@@ -159,7 +159,7 @@ export * from './subsystems/LLMManager/LLM.service/connectors/Groq.class';
159
159
  export * from './subsystems/LLMManager/LLM.service/connectors/OpenAI.class';
160
160
  export * from './subsystems/LLMManager/LLM.service/connectors/Perplexity.class';
161
161
  export * from './subsystems/LLMManager/LLM.service/connectors/VertexAI.class';
162
- export * from './subsystems/LLMManager/ModelsProvider.service/connectors/SmythModelsProvider.class';
162
+ export * from './subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class';
163
163
  export * from './subsystems/MemoryManager/Cache.service/connectors/LocalStorageCache.class';
164
164
  export * from './subsystems/MemoryManager/Cache.service/connectors/RAMCache.class';
165
165
  export * from './subsystems/MemoryManager/Cache.service/connectors/RedisCache.class';
@@ -0,0 +1,39 @@
1
+ import { AccessRequest } from '@sre/Security/AccessControl/AccessRequest.class';
2
+ import { ModelsProviderConnector } from '../ModelsProviderConnector';
3
+ import { IAccessCandidate } from '@sre/types/ACL.types';
4
+ import { ACL } from '@sre/Security/AccessControl/ACL.class';
5
+ import { TLLMModelsList } from '@sre/types/LLM.types';
6
+ type SmythModelsProviderConfig = {
7
+ /**
8
+ * The models to be used.
9
+ *
10
+ * If a string is provided, it will be used as the directory name to load the models from.
11
+ * If a TLLMModelsList is provided, it will be used as the models to be used.
12
+ *
13
+ */
14
+ models?: string | TLLMModelsList;
15
+ /**
16
+ * The mode to be used.
17
+ *
18
+ * If 'append' is used, the models will be appended to the existing models.
19
+ * If 'replace' is used, the existing models will be replaced with the new models.
20
+ */
21
+ mode?: 'merge' | 'replace';
22
+ };
23
+ export declare class JSONModelsProvider extends ModelsProviderConnector {
24
+ protected _settings?: SmythModelsProviderConfig;
25
+ name: string;
26
+ private models;
27
+ constructor(_settings?: SmythModelsProviderConfig);
28
+ start(): Promise<void>;
29
+ addModels(acRequest: AccessRequest, models: TLLMModelsList): Promise<void>;
30
+ getModels(acRequest: AccessRequest): Promise<any>;
31
+ getResourceACL(resourceId: string, candidate: IAccessCandidate): Promise<ACL>;
32
+ private reindexModels;
33
+ private scanDirectoryForModels;
34
+ private getValidModels;
35
+ private isValidSingleModel;
36
+ private isValidModel;
37
+ private initDirWatcher;
38
+ }
39
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smythos/sre",
3
- "version": "1.5.8",
3
+ "version": "1.5.9",
4
4
  "description": "Smyth Runtime Environment",
5
5
  "author": "Alaa-eddine KADDOURI",
6
6
  "license": "MIT",
@@ -42,7 +42,7 @@ export class SmythRuntime {
42
42
  Connector: 'RAMVec',
43
43
  },
44
44
  ModelsProvider: {
45
- Connector: 'SmythModelsProvider',
45
+ Connector: 'JSONModelsProvider',
46
46
  },
47
47
  AgentData: {
48
48
  Connector: 'NullAgentData',
package/src/index.ts CHANGED
@@ -165,7 +165,7 @@ export * from './subsystems/LLMManager/LLM.service/connectors/Groq.class';
165
165
  export * from './subsystems/LLMManager/LLM.service/connectors/OpenAI.class';
166
166
  export * from './subsystems/LLMManager/LLM.service/connectors/Perplexity.class';
167
167
  export * from './subsystems/LLMManager/LLM.service/connectors/VertexAI.class';
168
- export * from './subsystems/LLMManager/ModelsProvider.service/connectors/SmythModelsProvider.class';
168
+ export * from './subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class';
169
169
  export * from './subsystems/MemoryManager/Cache.service/connectors/LocalStorageCache.class';
170
170
  export * from './subsystems/MemoryManager/Cache.service/connectors/RAMCache.class';
171
171
  export * from './subsystems/MemoryManager/Cache.service/connectors/RedisCache.class';
package/src/index.ts.bak CHANGED
@@ -165,7 +165,7 @@ export * from './subsystems/LLMManager/LLM.service/connectors/Groq.class';
165
165
  export * from './subsystems/LLMManager/LLM.service/connectors/OpenAI.class';
166
166
  export * from './subsystems/LLMManager/LLM.service/connectors/Perplexity.class';
167
167
  export * from './subsystems/LLMManager/LLM.service/connectors/VertexAI.class';
168
- export * from './subsystems/LLMManager/ModelsProvider.service/connectors/SmythModelsProvider.class';
168
+ export * from './subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class';
169
169
  export * from './subsystems/MemoryManager/Cache.service/connectors/LocalStorageCache.class';
170
170
  export * from './subsystems/MemoryManager/Cache.service/connectors/RAMCache.class';
171
171
  export * from './subsystems/MemoryManager/Cache.service/connectors/RedisCache.class';
@@ -12,6 +12,7 @@ import { Logger } from '@sre/helpers/Log.helper';
12
12
  import { debounce } from '@sre/utils/general.utils';
13
13
  import chokidar from 'chokidar';
14
14
  import fs from 'fs/promises';
15
+ import fsSync from 'fs';
15
16
  import path from 'path';
16
17
 
17
18
  const console = Logger('SmythModelsProvider');
@@ -35,8 +36,8 @@ type SmythModelsProviderConfig = {
35
36
  mode?: 'merge' | 'replace';
36
37
  };
37
38
 
38
- export class SmythModelsProvider extends ModelsProviderConnector {
39
- public name = 'SmythModelsProvider';
39
+ export class JSONModelsProvider extends ModelsProviderConnector {
40
+ public name = 'JSONModelsProvider';
40
41
 
41
42
  private models: TLLMModelsList;
42
43
 
@@ -99,7 +100,7 @@ export class SmythModelsProvider extends ModelsProviderConnector {
99
100
  this.models = scannedModels;
100
101
  }
101
102
 
102
- SmythModelsProvider.localCache.clear();
103
+ JSONModelsProvider.localCache.clear();
103
104
 
104
105
  console.debug(`Successfully reindexed models. Total models: ${Object.keys(this.models).length}`);
105
106
  } catch (error) {
@@ -185,9 +186,30 @@ export class SmythModelsProvider extends ModelsProviderConnector {
185
186
  return this.isValidSingleModel(data);
186
187
  }
187
188
 
188
- private async initDirWatcher(dir) {
189
- if (!(await fs.stat(dir)).isDirectory()) {
190
- console.warn(`Directory "${dir}" does not exist`);
189
+ private initDirWatcher(dir) {
190
+ // Synchronous file system operations for initial setup
191
+ try {
192
+ const stats = fsSync.statSync(dir);
193
+
194
+ if (!stats.isDirectory()) {
195
+ //is it a file?
196
+ if (stats.isFile()) {
197
+ //load the file
198
+ const fileContent = fsSync.readFileSync(dir, 'utf-8');
199
+ const modelData = JSON.parse(fileContent);
200
+
201
+ if (this._settings?.mode === 'merge') this.models = { ...this.models, ...modelData };
202
+ else this.models = modelData;
203
+
204
+ this.started = true;
205
+ return;
206
+ }
207
+
208
+ console.warn(`Path "${dir}" is neither a file nor a directory`);
209
+ return;
210
+ }
211
+ } catch (error) {
212
+ console.warn(`Path "${dir}" does not exist or cannot be accessed:`, error.message);
191
213
  return;
192
214
  }
193
215
 
@@ -220,10 +242,11 @@ export class SmythModelsProvider extends ModelsProviderConnector {
220
242
  console.debug(`File ${path} has been removed`);
221
243
  debouncedReindex();
222
244
  })
223
- .on('ready', () => {
245
+ .on('ready', async () => {
224
246
  console.debug(`Watcher ready. Performing initial scan of ${dir}`);
225
247
  // Do initial scan once when watcher is ready
226
- this.reindexModels(dir);
248
+ await this.reindexModels(dir);
249
+ this.started = true;
227
250
  });
228
251
  }
229
252
  }
@@ -2,10 +2,10 @@
2
2
 
3
3
  import { ConnectorService, ConnectorServiceProvider } from '@sre/Core/ConnectorsService';
4
4
  import { TConnectorService } from '@sre/types/SRE.types';
5
- import { SmythModelsProvider } from './connectors/SmythModelsProvider.class';
5
+ import { JSONModelsProvider } from './connectors/JSONModelsProvider.class';
6
6
 
7
7
  export class ModelsProviderService extends ConnectorServiceProvider {
8
8
  public register() {
9
- ConnectorService.register(TConnectorService.ModelsProvider, 'SmythModelsProvider', SmythModelsProvider);
9
+ ConnectorService.register(TConnectorService.ModelsProvider, 'JSONModelsProvider', JSONModelsProvider);
10
10
  }
11
11
  }