@xyo-network/diviner-forecasting-memory 2.92.7 → 2.92.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.
@@ -11,6 +11,39 @@ export declare class MemoryForecastingDiviner<TParams extends ForecastingDiviner
11
11
  */
12
12
  protected readonly batchLimit = 1000;
13
13
  protected readonly maxTrainingLength = 10000;
14
+ get boundWitnessDiviner(): import("@xyo-network/module-model").ObjectFilterOptions<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
15
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
16
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
17
+ schema: "network.xyo.module.config";
18
+ }, "schema"> & {
19
+ schema: string;
20
+ };
21
+ ephemeralQueryAccountEnabled?: boolean | undefined;
22
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").AddressObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
23
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
24
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
25
+ schema: "network.xyo.module.config";
26
+ }, "schema"> & {
27
+ schema: string;
28
+ };
29
+ ephemeralQueryAccountEnabled?: boolean | undefined;
30
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").NameObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
31
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
32
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
33
+ schema: "network.xyo.module.config";
34
+ }, "schema"> & {
35
+ schema: string;
36
+ };
37
+ ephemeralQueryAccountEnabled?: boolean | undefined;
38
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").QueryObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
39
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
40
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
41
+ schema: "network.xyo.module.config";
42
+ }, "schema"> & {
43
+ schema: string;
44
+ };
45
+ ephemeralQueryAccountEnabled?: boolean | undefined;
46
+ }, import("@xyo-network/module-model").ModuleEventData<object>>>;
14
47
  protected get forecastingMethod(): ForecastingMethod;
15
48
  protected get transformer(): PayloadValueTransformer;
16
49
  protected getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
1
+ {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,IAAI,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEAEtB;IAED,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
@@ -11,6 +11,39 @@ export declare class MemoryForecastingDiviner<TParams extends ForecastingDiviner
11
11
  */
12
12
  protected readonly batchLimit = 1000;
13
13
  protected readonly maxTrainingLength = 10000;
14
+ get boundWitnessDiviner(): import("@xyo-network/module-model").ObjectFilterOptions<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
15
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
16
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
17
+ schema: "network.xyo.module.config";
18
+ }, "schema"> & {
19
+ schema: string;
20
+ };
21
+ ephemeralQueryAccountEnabled?: boolean | undefined;
22
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").AddressObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
23
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
24
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
25
+ schema: "network.xyo.module.config";
26
+ }, "schema"> & {
27
+ schema: string;
28
+ };
29
+ ephemeralQueryAccountEnabled?: boolean | undefined;
30
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").NameObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
31
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
32
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
33
+ schema: "network.xyo.module.config";
34
+ }, "schema"> & {
35
+ schema: string;
36
+ };
37
+ ephemeralQueryAccountEnabled?: boolean | undefined;
38
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").QueryObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
39
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
40
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
41
+ schema: "network.xyo.module.config";
42
+ }, "schema"> & {
43
+ schema: string;
44
+ };
45
+ ephemeralQueryAccountEnabled?: boolean | undefined;
46
+ }, import("@xyo-network/module-model").ModuleEventData<object>>>;
14
47
  protected get forecastingMethod(): ForecastingMethod;
15
48
  protected get transformer(): PayloadValueTransformer;
16
49
  protected getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
1
+ {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,IAAI,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEAEtB;IAED,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
@@ -11,6 +11,39 @@ export declare class MemoryForecastingDiviner<TParams extends ForecastingDiviner
11
11
  */
12
12
  protected readonly batchLimit = 1000;
13
13
  protected readonly maxTrainingLength = 10000;
14
+ get boundWitnessDiviner(): import("@xyo-network/module-model").ObjectFilterOptions<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
15
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
16
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
17
+ schema: "network.xyo.module.config";
18
+ }, "schema"> & {
19
+ schema: string;
20
+ };
21
+ ephemeralQueryAccountEnabled?: boolean | undefined;
22
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").AddressObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
23
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
24
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
25
+ schema: "network.xyo.module.config";
26
+ }, "schema"> & {
27
+ schema: string;
28
+ };
29
+ ephemeralQueryAccountEnabled?: boolean | undefined;
30
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").NameObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
31
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
32
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
33
+ schema: "network.xyo.module.config";
34
+ }, "schema"> & {
35
+ schema: string;
36
+ };
37
+ ephemeralQueryAccountEnabled?: boolean | undefined;
38
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").QueryObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
39
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
40
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
41
+ schema: "network.xyo.module.config";
42
+ }, "schema"> & {
43
+ schema: string;
44
+ };
45
+ ephemeralQueryAccountEnabled?: boolean | undefined;
46
+ }, import("@xyo-network/module-model").ModuleEventData<object>>>;
14
47
  protected get forecastingMethod(): ForecastingMethod;
15
48
  protected get transformer(): PayloadValueTransformer;
16
49
  protected getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
1
+ {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,IAAI,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEAEtB;IAED,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
@@ -71,27 +71,30 @@ var MemoryForecastingDiviner = class _MemoryForecastingDiviner extends import_di
71
71
  batchLimit = 1e3;
72
72
  // TODO: Inject via config
73
73
  maxTrainingLength = 1e4;
74
+ get boundWitnessDiviner() {
75
+ return (0, import_assert.assertEx)(this.config.boundWitnessDiviner, () => "No boundWitnessDiviner configured");
76
+ }
74
77
  get forecastingMethod() {
75
- const forecastingMethodName = (0, import_assert.assertEx)(this.config.forecastingMethod, "Missing forecastingMethod in config");
78
+ const forecastingMethodName = (0, import_assert.assertEx)(this.config.forecastingMethod, () => "Missing forecastingMethod in config");
76
79
  const forecastingMethod = _MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName];
77
80
  if (forecastingMethod)
78
81
  return forecastingMethod;
79
82
  throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`);
80
83
  }
81
84
  get transformer() {
82
- const pathExpression = (0, import_assert.assertEx)(this.config.jsonPathExpression, "Missing jsonPathExpression in config");
85
+ const pathExpression = (0, import_assert.assertEx)(this.config.jsonPathExpression, () => "Missing jsonPathExpression in config");
83
86
  return getJsonPathTransformer(pathExpression);
84
87
  }
85
88
  async getPayloadsInWindow(startTimestamp, stopTimestamp) {
86
89
  const addresses = this.config.witnessAddresses;
87
90
  const payload_schemas = [
88
- (0, import_assert.assertEx)(this.config.witnessSchema, "Missing witnessSchema in config")
91
+ (0, import_assert.assertEx)(this.config.witnessSchema, () => "Missing witnessSchema in config")
89
92
  ];
90
93
  const payloads = [];
91
- const archivist = (0, import_archivist_model.asArchivistInstance)(await this.getArchivist(), "Unable to resolve archivist");
92
- const bwDiviner = (0, import_diviner_model.asDivinerInstance)((await this.resolve(this.config.boundWitnessDiviner)).pop(), "Unable to resolve boundWitnessDiviner");
94
+ const archivist = (0, import_archivist_model.asArchivistInstance)(await this.getArchivist(), () => "Unable to resolve archivist");
95
+ const bwDiviner = (0, import_diviner_model.asDivinerInstance)((await this.resolve(this.boundWitnessDiviner)).pop(), "Unable to resolve boundWitnessDiviner");
93
96
  const limit = this.batchLimit;
94
- const witnessSchema = (0, import_assert.assertEx)(this.config.witnessSchema, "Missing witnessSchema in config");
97
+ const witnessSchema = (0, import_assert.assertEx)(this.config.witnessSchema, () => "Missing witnessSchema in config");
95
98
  let timestamp = stopTimestamp;
96
99
  let more = true;
97
100
  while (more || payloads.length < this.maxTrainingLength) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/MemoryForecastingDiviner.ts"],"sourcesContent":["export * from './MemoryForecastingDiviner'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { AbstractForecastingDiviner, ForecastingDivinerParams } from '@xyo-network/diviner-forecasting-abstract'\nimport {\n arimaForecastingMethod,\n arimaForecastingName,\n seasonalArimaForecastingMethod,\n seasonalArimaForecastingName,\n} from '@xyo-network/diviner-forecasting-method-arima'\nimport { ForecastingDivinerConfigSchema, ForecastingMethod, PayloadValueTransformer } from '@xyo-network/diviner-forecasting-model'\nimport { asDivinerInstance, DivinerInstance } from '@xyo-network/diviner-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport jsonpath from 'jsonpath'\n\nexport type SupportedForecastingType = typeof arimaForecastingName | typeof seasonalArimaForecastingName\n\nconst getJsonPathTransformer = (pathExpression: string): PayloadValueTransformer => {\n const transformer = (x: Payload): number => {\n // eslint-disable-next-line import/no-named-as-default-member\n const ret = jsonpath.value(x, pathExpression)\n if (typeof ret === 'number') return ret\n throw new Error('Parsed invalid payload value')\n }\n return transformer\n}\n\nexport class MemoryForecastingDiviner<\n TParams extends ForecastingDivinerParams = ForecastingDivinerParams,\n> extends AbstractForecastingDiviner<TParams> {\n static override configSchemas = [ForecastingDivinerConfigSchema]\n\n protected static readonly forecastingMethodDict: Record<SupportedForecastingType, ForecastingMethod> = {\n arimaForecasting: arimaForecastingMethod,\n seasonalArimaForecasting: seasonalArimaForecastingMethod,\n }\n\n /**\n * The max number of records to search during the batch query\n */\n protected readonly batchLimit = 1000\n\n // TODO: Inject via config\n protected readonly maxTrainingLength = 10_000\n\n protected override get forecastingMethod(): ForecastingMethod {\n const forecastingMethodName = assertEx(this.config.forecastingMethod, 'Missing forecastingMethod in config') as SupportedForecastingType\n const forecastingMethod = MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName]\n if (forecastingMethod) return forecastingMethod\n throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`)\n }\n\n protected override get transformer(): PayloadValueTransformer {\n const pathExpression = assertEx(this.config.jsonPathExpression, 'Missing jsonPathExpression in config')\n return getJsonPathTransformer(pathExpression)\n }\n\n protected override async getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]> {\n const addresses = this.config.witnessAddresses\n const payload_schemas = [assertEx(this.config.witnessSchema, 'Missing witnessSchema in config')]\n const payloads: Payload[] = []\n const archivist = asArchivistInstance(await this.getArchivist(), 'Unable to resolve archivist')\n const bwDiviner = asDivinerInstance(\n (await this.resolve(this.config.boundWitnessDiviner)).pop(),\n 'Unable to resolve boundWitnessDiviner',\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n const limit = this.batchLimit\n const witnessSchema = assertEx(this.config.witnessSchema, 'Missing witnessSchema in config')\n let timestamp = stopTimestamp\n let more = true\n\n // TODO: Window size vs sample size\n // Loop until there are no more BWs to process or we've got enough payloads to satisfy the training window\n while (more || payloads.length < this.maxTrainingLength) {\n const query: BoundWitnessDivinerQueryPayload = { addresses, limit, payload_schemas, schema: BoundWitnessDivinerQuerySchema, timestamp }\n const boundWitnesses = (await bwDiviner.divine([query])).filter(\n (bw) => bw.timestamp && bw.timestamp >= startTimestamp && bw.timestamp <= stopTimestamp,\n )\n if (boundWitnesses.length === 0) break\n\n // Update the timestamp value for the next batch\n timestamp = boundWitnesses\n .map((bw) => bw.timestamp)\n .filter(exists)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce((a, b) => Math.min(a, b), Number.MAX_SAFE_INTEGER)\n if (timestamp === Number.MAX_SAFE_INTEGER) break\n\n // Set the more flag to false if there are fewer documents returned than the batch size\n more = boundWitnesses.length === limit\n\n // Get the corresponding payload hashes from the BWs\n const hashes = boundWitnesses.map((bw) => bw.payload_hashes[bw.payload_schemas.indexOf(witnessSchema)]).filter(exists)\n\n // Get the payloads corresponding to the BW hashes from the archivist\n if (hashes.length > 0) {\n const batchPayloads = (await archivist.get(hashes)).filter(exists)\n payloads.push(...batchPayloads)\n }\n }\n return payloads\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACAA,oBAAyB;AACzB,oBAAuB;AACvB,6BAAoC;AAEpC,wCAA2G;AAC3G,0CAAqE;AACrE,8CAKO;AACP,uCAA2F;AAC3F,2BAAmD;AAEnD,sBAAqB;AAIrB,IAAMA,yBAAyB,wBAACC,mBAAAA;AAC9B,QAAMC,cAAc,wBAACC,MAAAA;AAEnB,UAAMC,MAAMC,gBAAAA,QAASC,MAAMH,GAAGF,cAAAA;AAC9B,QAAI,OAAOG,QAAQ;AAAU,aAAOA;AACpC,UAAM,IAAIG,MAAM,8BAAA;EAClB,GALoB;AAMpB,SAAOL;AACT,GAR+B;AAUxB,IAAMM,2BAAN,MAAMA,kCAEHC,+DAAAA;EA/BV,OA+BUA;;;EACR,OAAgBC,gBAAgB;IAACC;;EAEjC,OAA0BC,wBAA6E;IACrGC,kBAAkBC;IAClBC,0BAA0BC;EAC5B;;;;EAKmBC,aAAa;;EAGbC,oBAAoB;EAEvC,IAAuBC,oBAAuC;AAC5D,UAAMC,4BAAwBC,wBAAS,KAAKC,OAAOH,mBAAmB,qCAAA;AACtE,UAAMA,oBAAoBX,0BAAyBI,sBAAsBQ,qBAAAA;AACzE,QAAID;AAAmB,aAAOA;AAC9B,UAAM,IAAIZ,MAAM,mCAAmCa,qBAAAA,EAAuB;EAC5E;EAEA,IAAuBlB,cAAuC;AAC5D,UAAMD,qBAAiBoB,wBAAS,KAAKC,OAAOC,oBAAoB,sCAAA;AAChE,WAAOvB,uBAAuBC,cAAAA;EAChC;EAEA,MAAyBuB,oBAAoBC,gBAAwBC,eAA2C;AAC9G,UAAMC,YAAY,KAAKL,OAAOM;AAC9B,UAAMC,kBAAkB;UAACR,wBAAS,KAAKC,OAAOQ,eAAe,iCAAA;;AAC7D,UAAMC,WAAsB,CAAA;AAC5B,UAAMC,gBAAYC,4CAAoB,MAAM,KAAKC,aAAY,GAAI,6BAAA;AACjE,UAAMC,gBAAYC,yCACf,MAAM,KAAKC,QAAQ,KAAKf,OAAOgB,mBAAmB,GAAGC,IAAG,GACzD,uCAAA;AAEF,UAAMC,QAAQ,KAAKvB;AACnB,UAAMa,oBAAgBT,wBAAS,KAAKC,OAAOQ,eAAe,iCAAA;AAC1D,QAAIW,YAAYf;AAChB,QAAIgB,OAAO;AAIX,WAAOA,QAAQX,SAASY,SAAS,KAAKzB,mBAAmB;AACvD,YAAM0B,QAAyC;QAAEjB;QAAWa;QAAOX;QAAiBgB,QAAQC;QAAgCL;MAAU;AACtI,YAAMM,kBAAkB,MAAMZ,UAAUa,OAAO;QAACJ;OAAM,GAAGK,OACvD,CAACC,OAAOA,GAAGT,aAAaS,GAAGT,aAAahB,kBAAkByB,GAAGT,aAAaf,aAAAA;AAE5E,UAAIqB,eAAeJ,WAAW;AAAG;AAGjCF,kBAAYM,eACTI,IAAI,CAACD,OAAOA,GAAGT,SAAS,EACxBQ,OAAOG,oBAAAA,EAEPC,OAAO,CAACC,GAAGC,MAAMC,KAAKC,IAAIH,GAAGC,CAAAA,GAAIG,OAAOC,gBAAgB;AAC3D,UAAIlB,cAAciB,OAAOC;AAAkB;AAG3CjB,aAAOK,eAAeJ,WAAWH;AAGjC,YAAMoB,SAASb,eAAeI,IAAI,CAACD,OAAOA,GAAGW,eAAeX,GAAGrB,gBAAgBiC,QAAQhC,aAAAA,CAAAA,CAAe,EAAEmB,OAAOG,oBAAAA;AAG/G,UAAIQ,OAAOjB,SAAS,GAAG;AACrB,cAAMoB,iBAAiB,MAAM/B,UAAUgC,IAAIJ,MAAAA,GAASX,OAAOG,oBAAAA;AAC3DrB,iBAASkC,KAAI,GAAIF,aAAAA;MACnB;IACF;AACA,WAAOhC;EACT;AACF;","names":["getJsonPathTransformer","pathExpression","transformer","x","ret","jsonpath","value","Error","MemoryForecastingDiviner","AbstractForecastingDiviner","configSchemas","ForecastingDivinerConfigSchema","forecastingMethodDict","arimaForecasting","arimaForecastingMethod","seasonalArimaForecasting","seasonalArimaForecastingMethod","batchLimit","maxTrainingLength","forecastingMethod","forecastingMethodName","assertEx","config","jsonPathExpression","getPayloadsInWindow","startTimestamp","stopTimestamp","addresses","witnessAddresses","payload_schemas","witnessSchema","payloads","archivist","asArchivistInstance","getArchivist","bwDiviner","asDivinerInstance","resolve","boundWitnessDiviner","pop","limit","timestamp","more","length","query","schema","BoundWitnessDivinerQuerySchema","boundWitnesses","divine","filter","bw","map","exists","reduce","a","b","Math","min","Number","MAX_SAFE_INTEGER","hashes","payload_hashes","indexOf","batchPayloads","get","push"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/MemoryForecastingDiviner.ts"],"sourcesContent":["export * from './MemoryForecastingDiviner'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { AbstractForecastingDiviner, ForecastingDivinerParams } from '@xyo-network/diviner-forecasting-abstract'\nimport {\n arimaForecastingMethod,\n arimaForecastingName,\n seasonalArimaForecastingMethod,\n seasonalArimaForecastingName,\n} from '@xyo-network/diviner-forecasting-method-arima'\nimport { ForecastingDivinerConfigSchema, ForecastingMethod, PayloadValueTransformer } from '@xyo-network/diviner-forecasting-model'\nimport { asDivinerInstance, DivinerInstance } from '@xyo-network/diviner-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport jsonpath from 'jsonpath'\n\nexport type SupportedForecastingType = typeof arimaForecastingName | typeof seasonalArimaForecastingName\n\nconst getJsonPathTransformer = (pathExpression: string): PayloadValueTransformer => {\n const transformer = (x: Payload): number => {\n // eslint-disable-next-line import/no-named-as-default-member\n const ret = jsonpath.value(x, pathExpression)\n if (typeof ret === 'number') return ret\n throw new Error('Parsed invalid payload value')\n }\n return transformer\n}\n\nexport class MemoryForecastingDiviner<\n TParams extends ForecastingDivinerParams = ForecastingDivinerParams,\n> extends AbstractForecastingDiviner<TParams> {\n static override configSchemas = [ForecastingDivinerConfigSchema]\n\n protected static readonly forecastingMethodDict: Record<SupportedForecastingType, ForecastingMethod> = {\n arimaForecasting: arimaForecastingMethod,\n seasonalArimaForecasting: seasonalArimaForecastingMethod,\n }\n\n /**\n * The max number of records to search during the batch query\n */\n protected readonly batchLimit = 1000\n\n // TODO: Inject via config\n protected readonly maxTrainingLength = 10_000\n\n get boundWitnessDiviner() {\n return assertEx(this.config.boundWitnessDiviner, () => 'No boundWitnessDiviner configured')\n }\n\n protected override get forecastingMethod(): ForecastingMethod {\n const forecastingMethodName = assertEx(this.config.forecastingMethod, () => 'Missing forecastingMethod in config') as SupportedForecastingType\n const forecastingMethod = MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName]\n if (forecastingMethod) return forecastingMethod\n throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`)\n }\n\n protected override get transformer(): PayloadValueTransformer {\n const pathExpression = assertEx(this.config.jsonPathExpression, () => 'Missing jsonPathExpression in config')\n return getJsonPathTransformer(pathExpression)\n }\n\n protected override async getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]> {\n const addresses = this.config.witnessAddresses\n const payload_schemas = [assertEx(this.config.witnessSchema, () => 'Missing witnessSchema in config')]\n const payloads: Payload[] = []\n const archivist = asArchivistInstance(await this.getArchivist(), () => 'Unable to resolve archivist')\n const bwDiviner = asDivinerInstance(\n (await this.resolve(this.boundWitnessDiviner)).pop(),\n 'Unable to resolve boundWitnessDiviner',\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n const limit = this.batchLimit\n const witnessSchema = assertEx(this.config.witnessSchema, () => 'Missing witnessSchema in config')\n let timestamp = stopTimestamp\n let more = true\n\n // TODO: Window size vs sample size\n // Loop until there are no more BWs to process or we've got enough payloads to satisfy the training window\n while (more || payloads.length < this.maxTrainingLength) {\n const query: BoundWitnessDivinerQueryPayload = { addresses, limit, payload_schemas, schema: BoundWitnessDivinerQuerySchema, timestamp }\n const boundWitnesses = (await bwDiviner.divine([query])).filter(\n (bw) => bw.timestamp && bw.timestamp >= startTimestamp && bw.timestamp <= stopTimestamp,\n )\n if (boundWitnesses.length === 0) break\n\n // Update the timestamp value for the next batch\n timestamp = boundWitnesses\n .map((bw) => bw.timestamp)\n .filter(exists)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce((a, b) => Math.min(a, b), Number.MAX_SAFE_INTEGER)\n if (timestamp === Number.MAX_SAFE_INTEGER) break\n\n // Set the more flag to false if there are fewer documents returned than the batch size\n more = boundWitnesses.length === limit\n\n // Get the corresponding payload hashes from the BWs\n const hashes = boundWitnesses.map((bw) => bw.payload_hashes[bw.payload_schemas.indexOf(witnessSchema)]).filter(exists)\n\n // Get the payloads corresponding to the BW hashes from the archivist\n if (hashes.length > 0) {\n const batchPayloads = (await archivist.get(hashes)).filter(exists)\n payloads.push(...batchPayloads)\n }\n }\n return payloads\n }\n}\n"],"mappings":"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","names":["getJsonPathTransformer","pathExpression","transformer","x","ret","jsonpath","value","Error","MemoryForecastingDiviner","AbstractForecastingDiviner","configSchemas","ForecastingDivinerConfigSchema","forecastingMethodDict","arimaForecasting","arimaForecastingMethod","seasonalArimaForecasting","seasonalArimaForecastingMethod","batchLimit","maxTrainingLength","boundWitnessDiviner","assertEx","config","forecastingMethod","forecastingMethodName","jsonPathExpression","getPayloadsInWindow","startTimestamp","stopTimestamp","addresses","witnessAddresses","payload_schemas","witnessSchema","payloads","archivist","asArchivistInstance","getArchivist","bwDiviner","asDivinerInstance","resolve","pop","limit","timestamp","more","length","query","schema","BoundWitnessDivinerQuerySchema","boundWitnesses","divine","filter","bw","map","exists","reduce","a","b","Math","min","Number","MAX_SAFE_INTEGER","hashes","payload_hashes","indexOf","batchPayloads","get","push"]}
@@ -37,27 +37,30 @@ var MemoryForecastingDiviner = class _MemoryForecastingDiviner extends AbstractF
37
37
  batchLimit = 1e3;
38
38
  // TODO: Inject via config
39
39
  maxTrainingLength = 1e4;
40
+ get boundWitnessDiviner() {
41
+ return assertEx(this.config.boundWitnessDiviner, () => "No boundWitnessDiviner configured");
42
+ }
40
43
  get forecastingMethod() {
41
- const forecastingMethodName = assertEx(this.config.forecastingMethod, "Missing forecastingMethod in config");
44
+ const forecastingMethodName = assertEx(this.config.forecastingMethod, () => "Missing forecastingMethod in config");
42
45
  const forecastingMethod = _MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName];
43
46
  if (forecastingMethod)
44
47
  return forecastingMethod;
45
48
  throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`);
46
49
  }
47
50
  get transformer() {
48
- const pathExpression = assertEx(this.config.jsonPathExpression, "Missing jsonPathExpression in config");
51
+ const pathExpression = assertEx(this.config.jsonPathExpression, () => "Missing jsonPathExpression in config");
49
52
  return getJsonPathTransformer(pathExpression);
50
53
  }
51
54
  async getPayloadsInWindow(startTimestamp, stopTimestamp) {
52
55
  const addresses = this.config.witnessAddresses;
53
56
  const payload_schemas = [
54
- assertEx(this.config.witnessSchema, "Missing witnessSchema in config")
57
+ assertEx(this.config.witnessSchema, () => "Missing witnessSchema in config")
55
58
  ];
56
59
  const payloads = [];
57
- const archivist = asArchivistInstance(await this.getArchivist(), "Unable to resolve archivist");
58
- const bwDiviner = asDivinerInstance((await this.resolve(this.config.boundWitnessDiviner)).pop(), "Unable to resolve boundWitnessDiviner");
60
+ const archivist = asArchivistInstance(await this.getArchivist(), () => "Unable to resolve archivist");
61
+ const bwDiviner = asDivinerInstance((await this.resolve(this.boundWitnessDiviner)).pop(), "Unable to resolve boundWitnessDiviner");
59
62
  const limit = this.batchLimit;
60
- const witnessSchema = assertEx(this.config.witnessSchema, "Missing witnessSchema in config");
63
+ const witnessSchema = assertEx(this.config.witnessSchema, () => "Missing witnessSchema in config");
61
64
  let timestamp = stopTimestamp;
62
65
  let more = true;
63
66
  while (more || payloads.length < this.maxTrainingLength) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MemoryForecastingDiviner.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { AbstractForecastingDiviner, ForecastingDivinerParams } from '@xyo-network/diviner-forecasting-abstract'\nimport {\n arimaForecastingMethod,\n arimaForecastingName,\n seasonalArimaForecastingMethod,\n seasonalArimaForecastingName,\n} from '@xyo-network/diviner-forecasting-method-arima'\nimport { ForecastingDivinerConfigSchema, ForecastingMethod, PayloadValueTransformer } from '@xyo-network/diviner-forecasting-model'\nimport { asDivinerInstance, DivinerInstance } from '@xyo-network/diviner-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport jsonpath from 'jsonpath'\n\nexport type SupportedForecastingType = typeof arimaForecastingName | typeof seasonalArimaForecastingName\n\nconst getJsonPathTransformer = (pathExpression: string): PayloadValueTransformer => {\n const transformer = (x: Payload): number => {\n // eslint-disable-next-line import/no-named-as-default-member\n const ret = jsonpath.value(x, pathExpression)\n if (typeof ret === 'number') return ret\n throw new Error('Parsed invalid payload value')\n }\n return transformer\n}\n\nexport class MemoryForecastingDiviner<\n TParams extends ForecastingDivinerParams = ForecastingDivinerParams,\n> extends AbstractForecastingDiviner<TParams> {\n static override configSchemas = [ForecastingDivinerConfigSchema]\n\n protected static readonly forecastingMethodDict: Record<SupportedForecastingType, ForecastingMethod> = {\n arimaForecasting: arimaForecastingMethod,\n seasonalArimaForecasting: seasonalArimaForecastingMethod,\n }\n\n /**\n * The max number of records to search during the batch query\n */\n protected readonly batchLimit = 1000\n\n // TODO: Inject via config\n protected readonly maxTrainingLength = 10_000\n\n protected override get forecastingMethod(): ForecastingMethod {\n const forecastingMethodName = assertEx(this.config.forecastingMethod, 'Missing forecastingMethod in config') as SupportedForecastingType\n const forecastingMethod = MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName]\n if (forecastingMethod) return forecastingMethod\n throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`)\n }\n\n protected override get transformer(): PayloadValueTransformer {\n const pathExpression = assertEx(this.config.jsonPathExpression, 'Missing jsonPathExpression in config')\n return getJsonPathTransformer(pathExpression)\n }\n\n protected override async getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]> {\n const addresses = this.config.witnessAddresses\n const payload_schemas = [assertEx(this.config.witnessSchema, 'Missing witnessSchema in config')]\n const payloads: Payload[] = []\n const archivist = asArchivistInstance(await this.getArchivist(), 'Unable to resolve archivist')\n const bwDiviner = asDivinerInstance(\n (await this.resolve(this.config.boundWitnessDiviner)).pop(),\n 'Unable to resolve boundWitnessDiviner',\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n const limit = this.batchLimit\n const witnessSchema = assertEx(this.config.witnessSchema, 'Missing witnessSchema in config')\n let timestamp = stopTimestamp\n let more = true\n\n // TODO: Window size vs sample size\n // Loop until there are no more BWs to process or we've got enough payloads to satisfy the training window\n while (more || payloads.length < this.maxTrainingLength) {\n const query: BoundWitnessDivinerQueryPayload = { addresses, limit, payload_schemas, schema: BoundWitnessDivinerQuerySchema, timestamp }\n const boundWitnesses = (await bwDiviner.divine([query])).filter(\n (bw) => bw.timestamp && bw.timestamp >= startTimestamp && bw.timestamp <= stopTimestamp,\n )\n if (boundWitnesses.length === 0) break\n\n // Update the timestamp value for the next batch\n timestamp = boundWitnesses\n .map((bw) => bw.timestamp)\n .filter(exists)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce((a, b) => Math.min(a, b), Number.MAX_SAFE_INTEGER)\n if (timestamp === Number.MAX_SAFE_INTEGER) break\n\n // Set the more flag to false if there are fewer documents returned than the batch size\n more = boundWitnesses.length === limit\n\n // Get the corresponding payload hashes from the BWs\n const hashes = boundWitnesses.map((bw) => bw.payload_hashes[bw.payload_schemas.indexOf(witnessSchema)]).filter(exists)\n\n // Get the payloads corresponding to the BW hashes from the archivist\n if (hashes.length > 0) {\n const batchPayloads = (await archivist.get(hashes)).filter(exists)\n payloads.push(...batchPayloads)\n }\n }\n return payloads\n }\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAASC,cAAc;AACvB,SAASC,2BAA2B;AAEpC,SAAqEC,sCAAsC;AAC3G,SAASC,kCAA4D;AACrE,SACEC,wBAEAC,sCAEK;AACP,SAASC,sCAAkF;AAC3F,SAASC,yBAA0C;AAEnD,OAAOC,cAAc;AAIrB,IAAMC,yBAAyB,wBAACC,mBAAAA;AAC9B,QAAMC,cAAc,wBAACC,MAAAA;AAEnB,UAAMC,MAAMC,SAASC,MAAMH,GAAGF,cAAAA;AAC9B,QAAI,OAAOG,QAAQ;AAAU,aAAOA;AACpC,UAAM,IAAIG,MAAM,8BAAA;EAClB,GALoB;AAMpB,SAAOL;AACT,GAR+B;AAUxB,IAAMM,2BAAN,MAAMA,kCAEHC,2BAAAA;EA/BV,OA+BUA;;;EACR,OAAgBC,gBAAgB;IAACC;;EAEjC,OAA0BC,wBAA6E;IACrGC,kBAAkBC;IAClBC,0BAA0BC;EAC5B;;;;EAKmBC,aAAa;;EAGbC,oBAAoB;EAEvC,IAAuBC,oBAAuC;AAC5D,UAAMC,wBAAwBC,SAAS,KAAKC,OAAOH,mBAAmB,qCAAA;AACtE,UAAMA,oBAAoBX,0BAAyBI,sBAAsBQ,qBAAAA;AACzE,QAAID;AAAmB,aAAOA;AAC9B,UAAM,IAAIZ,MAAM,mCAAmCa,qBAAAA,EAAuB;EAC5E;EAEA,IAAuBlB,cAAuC;AAC5D,UAAMD,iBAAiBoB,SAAS,KAAKC,OAAOC,oBAAoB,sCAAA;AAChE,WAAOvB,uBAAuBC,cAAAA;EAChC;EAEA,MAAyBuB,oBAAoBC,gBAAwBC,eAA2C;AAC9G,UAAMC,YAAY,KAAKL,OAAOM;AAC9B,UAAMC,kBAAkB;MAACR,SAAS,KAAKC,OAAOQ,eAAe,iCAAA;;AAC7D,UAAMC,WAAsB,CAAA;AAC5B,UAAMC,YAAYC,oBAAoB,MAAM,KAAKC,aAAY,GAAI,6BAAA;AACjE,UAAMC,YAAYC,mBACf,MAAM,KAAKC,QAAQ,KAAKf,OAAOgB,mBAAmB,GAAGC,IAAG,GACzD,uCAAA;AAEF,UAAMC,QAAQ,KAAKvB;AACnB,UAAMa,gBAAgBT,SAAS,KAAKC,OAAOQ,eAAe,iCAAA;AAC1D,QAAIW,YAAYf;AAChB,QAAIgB,OAAO;AAIX,WAAOA,QAAQX,SAASY,SAAS,KAAKzB,mBAAmB;AACvD,YAAM0B,QAAyC;QAAEjB;QAAWa;QAAOX;QAAiBgB,QAAQC;QAAgCL;MAAU;AACtI,YAAMM,kBAAkB,MAAMZ,UAAUa,OAAO;QAACJ;OAAM,GAAGK,OACvD,CAACC,OAAOA,GAAGT,aAAaS,GAAGT,aAAahB,kBAAkByB,GAAGT,aAAaf,aAAAA;AAE5E,UAAIqB,eAAeJ,WAAW;AAAG;AAGjCF,kBAAYM,eACTI,IAAI,CAACD,OAAOA,GAAGT,SAAS,EACxBQ,OAAOG,MAAAA,EAEPC,OAAO,CAACC,GAAGC,MAAMC,KAAKC,IAAIH,GAAGC,CAAAA,GAAIG,OAAOC,gBAAgB;AAC3D,UAAIlB,cAAciB,OAAOC;AAAkB;AAG3CjB,aAAOK,eAAeJ,WAAWH;AAGjC,YAAMoB,SAASb,eAAeI,IAAI,CAACD,OAAOA,GAAGW,eAAeX,GAAGrB,gBAAgBiC,QAAQhC,aAAAA,CAAAA,CAAe,EAAEmB,OAAOG,MAAAA;AAG/G,UAAIQ,OAAOjB,SAAS,GAAG;AACrB,cAAMoB,iBAAiB,MAAM/B,UAAUgC,IAAIJ,MAAAA,GAASX,OAAOG,MAAAA;AAC3DrB,iBAASkC,KAAI,GAAIF,aAAAA;MACnB;IACF;AACA,WAAOhC;EACT;AACF;","names":["assertEx","exists","asArchivistInstance","BoundWitnessDivinerQuerySchema","AbstractForecastingDiviner","arimaForecastingMethod","seasonalArimaForecastingMethod","ForecastingDivinerConfigSchema","asDivinerInstance","jsonpath","getJsonPathTransformer","pathExpression","transformer","x","ret","jsonpath","value","Error","MemoryForecastingDiviner","AbstractForecastingDiviner","configSchemas","ForecastingDivinerConfigSchema","forecastingMethodDict","arimaForecasting","arimaForecastingMethod","seasonalArimaForecasting","seasonalArimaForecastingMethod","batchLimit","maxTrainingLength","forecastingMethod","forecastingMethodName","assertEx","config","jsonPathExpression","getPayloadsInWindow","startTimestamp","stopTimestamp","addresses","witnessAddresses","payload_schemas","witnessSchema","payloads","archivist","asArchivistInstance","getArchivist","bwDiviner","asDivinerInstance","resolve","boundWitnessDiviner","pop","limit","timestamp","more","length","query","schema","BoundWitnessDivinerQuerySchema","boundWitnesses","divine","filter","bw","map","exists","reduce","a","b","Math","min","Number","MAX_SAFE_INTEGER","hashes","payload_hashes","indexOf","batchPayloads","get","push"]}
1
+ {"version":3,"sources":["../../src/MemoryForecastingDiviner.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { AbstractForecastingDiviner, ForecastingDivinerParams } from '@xyo-network/diviner-forecasting-abstract'\nimport {\n arimaForecastingMethod,\n arimaForecastingName,\n seasonalArimaForecastingMethod,\n seasonalArimaForecastingName,\n} from '@xyo-network/diviner-forecasting-method-arima'\nimport { ForecastingDivinerConfigSchema, ForecastingMethod, PayloadValueTransformer } from '@xyo-network/diviner-forecasting-model'\nimport { asDivinerInstance, DivinerInstance } from '@xyo-network/diviner-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport jsonpath from 'jsonpath'\n\nexport type SupportedForecastingType = typeof arimaForecastingName | typeof seasonalArimaForecastingName\n\nconst getJsonPathTransformer = (pathExpression: string): PayloadValueTransformer => {\n const transformer = (x: Payload): number => {\n // eslint-disable-next-line import/no-named-as-default-member\n const ret = jsonpath.value(x, pathExpression)\n if (typeof ret === 'number') return ret\n throw new Error('Parsed invalid payload value')\n }\n return transformer\n}\n\nexport class MemoryForecastingDiviner<\n TParams extends ForecastingDivinerParams = ForecastingDivinerParams,\n> extends AbstractForecastingDiviner<TParams> {\n static override configSchemas = [ForecastingDivinerConfigSchema]\n\n protected static readonly forecastingMethodDict: Record<SupportedForecastingType, ForecastingMethod> = {\n arimaForecasting: arimaForecastingMethod,\n seasonalArimaForecasting: seasonalArimaForecastingMethod,\n }\n\n /**\n * The max number of records to search during the batch query\n */\n protected readonly batchLimit = 1000\n\n // TODO: Inject via config\n protected readonly maxTrainingLength = 10_000\n\n get boundWitnessDiviner() {\n return assertEx(this.config.boundWitnessDiviner, () => 'No boundWitnessDiviner configured')\n }\n\n protected override get forecastingMethod(): ForecastingMethod {\n const forecastingMethodName = assertEx(this.config.forecastingMethod, () => 'Missing forecastingMethod in config') as SupportedForecastingType\n const forecastingMethod = MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName]\n if (forecastingMethod) return forecastingMethod\n throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`)\n }\n\n protected override get transformer(): PayloadValueTransformer {\n const pathExpression = assertEx(this.config.jsonPathExpression, () => 'Missing jsonPathExpression in config')\n return getJsonPathTransformer(pathExpression)\n }\n\n protected override async getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]> {\n const addresses = this.config.witnessAddresses\n const payload_schemas = [assertEx(this.config.witnessSchema, () => 'Missing witnessSchema in config')]\n const payloads: Payload[] = []\n const archivist = asArchivistInstance(await this.getArchivist(), () => 'Unable to resolve archivist')\n const bwDiviner = asDivinerInstance(\n (await this.resolve(this.boundWitnessDiviner)).pop(),\n 'Unable to resolve boundWitnessDiviner',\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n const limit = this.batchLimit\n const witnessSchema = assertEx(this.config.witnessSchema, () => 'Missing witnessSchema in config')\n let timestamp = stopTimestamp\n let more = true\n\n // TODO: Window size vs sample size\n // Loop until there are no more BWs to process or we've got enough payloads to satisfy the training window\n while (more || payloads.length < this.maxTrainingLength) {\n const query: BoundWitnessDivinerQueryPayload = { addresses, limit, payload_schemas, schema: BoundWitnessDivinerQuerySchema, timestamp }\n const boundWitnesses = (await bwDiviner.divine([query])).filter(\n (bw) => bw.timestamp && bw.timestamp >= startTimestamp && bw.timestamp <= stopTimestamp,\n )\n if (boundWitnesses.length === 0) break\n\n // Update the timestamp value for the next batch\n timestamp = boundWitnesses\n .map((bw) => bw.timestamp)\n .filter(exists)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce((a, b) => Math.min(a, b), Number.MAX_SAFE_INTEGER)\n if (timestamp === Number.MAX_SAFE_INTEGER) break\n\n // Set the more flag to false if there are fewer documents returned than the batch size\n more = boundWitnesses.length === limit\n\n // Get the corresponding payload hashes from the BWs\n const hashes = boundWitnesses.map((bw) => bw.payload_hashes[bw.payload_schemas.indexOf(witnessSchema)]).filter(exists)\n\n // Get the payloads corresponding to the BW hashes from the archivist\n if (hashes.length > 0) {\n const batchPayloads = (await archivist.get(hashes)).filter(exists)\n payloads.push(...batchPayloads)\n }\n }\n return payloads\n }\n}\n"],"mappings":"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","names":["assertEx","exists","asArchivistInstance","BoundWitnessDivinerQuerySchema","AbstractForecastingDiviner","arimaForecastingMethod","seasonalArimaForecastingMethod","ForecastingDivinerConfigSchema","asDivinerInstance","jsonpath","getJsonPathTransformer","pathExpression","transformer","x","ret","jsonpath","value","Error","MemoryForecastingDiviner","AbstractForecastingDiviner","configSchemas","ForecastingDivinerConfigSchema","forecastingMethodDict","arimaForecasting","arimaForecastingMethod","seasonalArimaForecasting","seasonalArimaForecastingMethod","batchLimit","maxTrainingLength","boundWitnessDiviner","assertEx","config","forecastingMethod","forecastingMethodName","jsonPathExpression","getPayloadsInWindow","startTimestamp","stopTimestamp","addresses","witnessAddresses","payload_schemas","witnessSchema","payloads","archivist","asArchivistInstance","getArchivist","bwDiviner","asDivinerInstance","resolve","pop","limit","timestamp","more","length","query","schema","BoundWitnessDivinerQuerySchema","boundWitnesses","divine","filter","bw","map","exists","reduce","a","b","Math","min","Number","MAX_SAFE_INTEGER","hashes","payload_hashes","indexOf","batchPayloads","get","push"]}
@@ -11,6 +11,39 @@ export declare class MemoryForecastingDiviner<TParams extends ForecastingDiviner
11
11
  */
12
12
  protected readonly batchLimit = 1000;
13
13
  protected readonly maxTrainingLength = 10000;
14
+ get boundWitnessDiviner(): import("@xyo-network/module-model").ObjectFilterOptions<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
15
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
16
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
17
+ schema: "network.xyo.module.config";
18
+ }, "schema"> & {
19
+ schema: string;
20
+ };
21
+ ephemeralQueryAccountEnabled?: boolean | undefined;
22
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").AddressObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
23
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
24
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
25
+ schema: "network.xyo.module.config";
26
+ }, "schema"> & {
27
+ schema: string;
28
+ };
29
+ ephemeralQueryAccountEnabled?: boolean | undefined;
30
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").NameObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
31
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
32
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
33
+ schema: "network.xyo.module.config";
34
+ }, "schema"> & {
35
+ schema: string;
36
+ };
37
+ ephemeralQueryAccountEnabled?: boolean | undefined;
38
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").QueryObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
39
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
40
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
41
+ schema: "network.xyo.module.config";
42
+ }, "schema"> & {
43
+ schema: string;
44
+ };
45
+ ephemeralQueryAccountEnabled?: boolean | undefined;
46
+ }, import("@xyo-network/module-model").ModuleEventData<object>>>;
14
47
  protected get forecastingMethod(): ForecastingMethod;
15
48
  protected get transformer(): PayloadValueTransformer;
16
49
  protected getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
1
+ {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,IAAI,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEAEtB;IAED,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
@@ -11,6 +11,39 @@ export declare class MemoryForecastingDiviner<TParams extends ForecastingDiviner
11
11
  */
12
12
  protected readonly batchLimit = 1000;
13
13
  protected readonly maxTrainingLength = 10000;
14
+ get boundWitnessDiviner(): import("@xyo-network/module-model").ObjectFilterOptions<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
15
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
16
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
17
+ schema: "network.xyo.module.config";
18
+ }, "schema"> & {
19
+ schema: string;
20
+ };
21
+ ephemeralQueryAccountEnabled?: boolean | undefined;
22
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").AddressObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
23
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
24
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
25
+ schema: "network.xyo.module.config";
26
+ }, "schema"> & {
27
+ schema: string;
28
+ };
29
+ ephemeralQueryAccountEnabled?: boolean | undefined;
30
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").NameObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
31
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
32
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
33
+ schema: "network.xyo.module.config";
34
+ }, "schema"> & {
35
+ schema: string;
36
+ };
37
+ ephemeralQueryAccountEnabled?: boolean | undefined;
38
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").QueryObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
39
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
40
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
41
+ schema: "network.xyo.module.config";
42
+ }, "schema"> & {
43
+ schema: string;
44
+ };
45
+ ephemeralQueryAccountEnabled?: boolean | undefined;
46
+ }, import("@xyo-network/module-model").ModuleEventData<object>>>;
14
47
  protected get forecastingMethod(): ForecastingMethod;
15
48
  protected get transformer(): PayloadValueTransformer;
16
49
  protected getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
1
+ {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,IAAI,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEAEtB;IAED,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
@@ -11,6 +11,39 @@ export declare class MemoryForecastingDiviner<TParams extends ForecastingDiviner
11
11
  */
12
12
  protected readonly batchLimit = 1000;
13
13
  protected readonly maxTrainingLength = 10000;
14
+ get boundWitnessDiviner(): import("@xyo-network/module-model").ObjectFilterOptions<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
15
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
16
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
17
+ schema: "network.xyo.module.config";
18
+ }, "schema"> & {
19
+ schema: string;
20
+ };
21
+ ephemeralQueryAccountEnabled?: boolean | undefined;
22
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").AddressObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
23
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
24
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
25
+ schema: "network.xyo.module.config";
26
+ }, "schema"> & {
27
+ schema: string;
28
+ };
29
+ ephemeralQueryAccountEnabled?: boolean | undefined;
30
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").NameObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
31
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
32
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
33
+ schema: "network.xyo.module.config";
34
+ }, "schema"> & {
35
+ schema: string;
36
+ };
37
+ ephemeralQueryAccountEnabled?: boolean | undefined;
38
+ }, import("@xyo-network/module-model").ModuleEventData<object>>> | import("@xyo-network/module-model").QueryObjectFilter<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
39
+ account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
40
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
41
+ schema: "network.xyo.module.config";
42
+ }, "schema"> & {
43
+ schema: string;
44
+ };
45
+ ephemeralQueryAccountEnabled?: boolean | undefined;
46
+ }, import("@xyo-network/module-model").ModuleEventData<object>>>;
14
47
  protected get forecastingMethod(): ForecastingMethod;
15
48
  protected get transformer(): PayloadValueTransformer;
16
49
  protected getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
1
+ {"version":3,"file":"MemoryForecastingDiviner.d.ts","sourceRoot":"","sources":["../../src/MemoryForecastingDiviner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAChH,OAAO,EAEL,oBAAoB,EAEpB,4BAA4B,EAC7B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAkC,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAEnI,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGpD,MAAM,MAAM,wBAAwB,GAAG,OAAO,oBAAoB,GAAG,OAAO,4BAA4B,CAAA;AAYxG,qBAAa,wBAAwB,CACnC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CACnE,SAAQ,0BAA0B,CAAC,OAAO,CAAC;IAC3C,OAAgB,aAAa,6CAAmC;IAEhE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAGnG;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAO;IAGpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,SAAS;IAE7C,IAAI,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEAEtB;IAED,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,cAAuB,WAAW,IAAI,uBAAuB,CAG5D;cAEwB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA6ChH"}
@@ -66,27 +66,30 @@ var _MemoryForecastingDiviner = class _MemoryForecastingDiviner extends import_d
66
66
  batchLimit = 1e3;
67
67
  // TODO: Inject via config
68
68
  maxTrainingLength = 1e4;
69
+ get boundWitnessDiviner() {
70
+ return (0, import_assert.assertEx)(this.config.boundWitnessDiviner, () => "No boundWitnessDiviner configured");
71
+ }
69
72
  get forecastingMethod() {
70
- const forecastingMethodName = (0, import_assert.assertEx)(this.config.forecastingMethod, "Missing forecastingMethod in config");
73
+ const forecastingMethodName = (0, import_assert.assertEx)(this.config.forecastingMethod, () => "Missing forecastingMethod in config");
71
74
  const forecastingMethod = _MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName];
72
75
  if (forecastingMethod)
73
76
  return forecastingMethod;
74
77
  throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`);
75
78
  }
76
79
  get transformer() {
77
- const pathExpression = (0, import_assert.assertEx)(this.config.jsonPathExpression, "Missing jsonPathExpression in config");
80
+ const pathExpression = (0, import_assert.assertEx)(this.config.jsonPathExpression, () => "Missing jsonPathExpression in config");
78
81
  return getJsonPathTransformer(pathExpression);
79
82
  }
80
83
  async getPayloadsInWindow(startTimestamp, stopTimestamp) {
81
84
  const addresses = this.config.witnessAddresses;
82
85
  const payload_schemas = [
83
- (0, import_assert.assertEx)(this.config.witnessSchema, "Missing witnessSchema in config")
86
+ (0, import_assert.assertEx)(this.config.witnessSchema, () => "Missing witnessSchema in config")
84
87
  ];
85
88
  const payloads = [];
86
- const archivist = (0, import_archivist_model.asArchivistInstance)(await this.getArchivist(), "Unable to resolve archivist");
87
- const bwDiviner = (0, import_diviner_model.asDivinerInstance)((await this.resolve(this.config.boundWitnessDiviner)).pop(), "Unable to resolve boundWitnessDiviner");
89
+ const archivist = (0, import_archivist_model.asArchivistInstance)(await this.getArchivist(), () => "Unable to resolve archivist");
90
+ const bwDiviner = (0, import_diviner_model.asDivinerInstance)((await this.resolve(this.boundWitnessDiviner)).pop(), "Unable to resolve boundWitnessDiviner");
88
91
  const limit = this.batchLimit;
89
- const witnessSchema = (0, import_assert.assertEx)(this.config.witnessSchema, "Missing witnessSchema in config");
92
+ const witnessSchema = (0, import_assert.assertEx)(this.config.witnessSchema, () => "Missing witnessSchema in config");
90
93
  let timestamp = stopTimestamp;
91
94
  let more = true;
92
95
  while (more || payloads.length < this.maxTrainingLength) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/MemoryForecastingDiviner.ts"],"sourcesContent":["export * from './MemoryForecastingDiviner'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { AbstractForecastingDiviner, ForecastingDivinerParams } from '@xyo-network/diviner-forecasting-abstract'\nimport {\n arimaForecastingMethod,\n arimaForecastingName,\n seasonalArimaForecastingMethod,\n seasonalArimaForecastingName,\n} from '@xyo-network/diviner-forecasting-method-arima'\nimport { ForecastingDivinerConfigSchema, ForecastingMethod, PayloadValueTransformer } from '@xyo-network/diviner-forecasting-model'\nimport { asDivinerInstance, DivinerInstance } from '@xyo-network/diviner-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport jsonpath from 'jsonpath'\n\nexport type SupportedForecastingType = typeof arimaForecastingName | typeof seasonalArimaForecastingName\n\nconst getJsonPathTransformer = (pathExpression: string): PayloadValueTransformer => {\n const transformer = (x: Payload): number => {\n // eslint-disable-next-line import/no-named-as-default-member\n const ret = jsonpath.value(x, pathExpression)\n if (typeof ret === 'number') return ret\n throw new Error('Parsed invalid payload value')\n }\n return transformer\n}\n\nexport class MemoryForecastingDiviner<\n TParams extends ForecastingDivinerParams = ForecastingDivinerParams,\n> extends AbstractForecastingDiviner<TParams> {\n static override configSchemas = [ForecastingDivinerConfigSchema]\n\n protected static readonly forecastingMethodDict: Record<SupportedForecastingType, ForecastingMethod> = {\n arimaForecasting: arimaForecastingMethod,\n seasonalArimaForecasting: seasonalArimaForecastingMethod,\n }\n\n /**\n * The max number of records to search during the batch query\n */\n protected readonly batchLimit = 1000\n\n // TODO: Inject via config\n protected readonly maxTrainingLength = 10_000\n\n protected override get forecastingMethod(): ForecastingMethod {\n const forecastingMethodName = assertEx(this.config.forecastingMethod, 'Missing forecastingMethod in config') as SupportedForecastingType\n const forecastingMethod = MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName]\n if (forecastingMethod) return forecastingMethod\n throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`)\n }\n\n protected override get transformer(): PayloadValueTransformer {\n const pathExpression = assertEx(this.config.jsonPathExpression, 'Missing jsonPathExpression in config')\n return getJsonPathTransformer(pathExpression)\n }\n\n protected override async getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]> {\n const addresses = this.config.witnessAddresses\n const payload_schemas = [assertEx(this.config.witnessSchema, 'Missing witnessSchema in config')]\n const payloads: Payload[] = []\n const archivist = asArchivistInstance(await this.getArchivist(), 'Unable to resolve archivist')\n const bwDiviner = asDivinerInstance(\n (await this.resolve(this.config.boundWitnessDiviner)).pop(),\n 'Unable to resolve boundWitnessDiviner',\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n const limit = this.batchLimit\n const witnessSchema = assertEx(this.config.witnessSchema, 'Missing witnessSchema in config')\n let timestamp = stopTimestamp\n let more = true\n\n // TODO: Window size vs sample size\n // Loop until there are no more BWs to process or we've got enough payloads to satisfy the training window\n while (more || payloads.length < this.maxTrainingLength) {\n const query: BoundWitnessDivinerQueryPayload = { addresses, limit, payload_schemas, schema: BoundWitnessDivinerQuerySchema, timestamp }\n const boundWitnesses = (await bwDiviner.divine([query])).filter(\n (bw) => bw.timestamp && bw.timestamp >= startTimestamp && bw.timestamp <= stopTimestamp,\n )\n if (boundWitnesses.length === 0) break\n\n // Update the timestamp value for the next batch\n timestamp = boundWitnesses\n .map((bw) => bw.timestamp)\n .filter(exists)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce((a, b) => Math.min(a, b), Number.MAX_SAFE_INTEGER)\n if (timestamp === Number.MAX_SAFE_INTEGER) break\n\n // Set the more flag to false if there are fewer documents returned than the batch size\n more = boundWitnesses.length === limit\n\n // Get the corresponding payload hashes from the BWs\n const hashes = boundWitnesses.map((bw) => bw.payload_hashes[bw.payload_schemas.indexOf(witnessSchema)]).filter(exists)\n\n // Get the payloads corresponding to the BW hashes from the archivist\n if (hashes.length > 0) {\n const batchPayloads = (await archivist.get(hashes)).filter(exists)\n payloads.push(...batchPayloads)\n }\n }\n return payloads\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACAA,oBAAyB;AACzB,oBAAuB;AACvB,6BAAoC;AAEpC,wCAA2G;AAC3G,0CAAqE;AACrE,8CAKO;AACP,uCAA2F;AAC3F,2BAAmD;AAEnD,sBAAqB;AAIrB,IAAMA,yBAAyB,wBAACC,mBAAAA;AAC9B,QAAMC,cAAc,wBAACC,MAAAA;AAEnB,UAAMC,MAAMC,gBAAAA,QAASC,MAAMH,GAAGF,cAAAA;AAC9B,QAAI,OAAOG,QAAQ;AAAU,aAAOA;AACpC,UAAM,IAAIG,MAAM,8BAAA;EAClB,GALoB;AAMpB,SAAOL;AACT,GAR+B;AAUxB,IAAMM,4BAAN,MAAMA,kCAEHC,+DAAAA;;;;EAWWC,aAAa;;EAGbC,oBAAoB;EAEvC,IAAuBC,oBAAuC;AAC5D,UAAMC,4BAAwBC,wBAAS,KAAKC,OAAOH,mBAAmB,qCAAA;AACtE,UAAMA,oBAAoBJ,0BAAyBQ,sBAAsBH,qBAAAA;AACzE,QAAID;AAAmB,aAAOA;AAC9B,UAAM,IAAIL,MAAM,mCAAmCM,qBAAAA,EAAuB;EAC5E;EAEA,IAAuBX,cAAuC;AAC5D,UAAMD,qBAAiBa,wBAAS,KAAKC,OAAOE,oBAAoB,sCAAA;AAChE,WAAOjB,uBAAuBC,cAAAA;EAChC;EAEA,MAAyBiB,oBAAoBC,gBAAwBC,eAA2C;AAC9G,UAAMC,YAAY,KAAKN,OAAOO;AAC9B,UAAMC,kBAAkB;UAACT,wBAAS,KAAKC,OAAOS,eAAe,iCAAA;;AAC7D,UAAMC,WAAsB,CAAA;AAC5B,UAAMC,gBAAYC,4CAAoB,MAAM,KAAKC,aAAY,GAAI,6BAAA;AACjE,UAAMC,gBAAYC,yCACf,MAAM,KAAKC,QAAQ,KAAKhB,OAAOiB,mBAAmB,GAAGC,IAAG,GACzD,uCAAA;AAEF,UAAMC,QAAQ,KAAKxB;AACnB,UAAMc,oBAAgBV,wBAAS,KAAKC,OAAOS,eAAe,iCAAA;AAC1D,QAAIW,YAAYf;AAChB,QAAIgB,OAAO;AAIX,WAAOA,QAAQX,SAASY,SAAS,KAAK1B,mBAAmB;AACvD,YAAM2B,QAAyC;QAAEjB;QAAWa;QAAOX;QAAiBgB,QAAQC;QAAgCL;MAAU;AACtI,YAAMM,kBAAkB,MAAMZ,UAAUa,OAAO;QAACJ;OAAM,GAAGK,OACvD,CAACC,OAAOA,GAAGT,aAAaS,GAAGT,aAAahB,kBAAkByB,GAAGT,aAAaf,aAAAA;AAE5E,UAAIqB,eAAeJ,WAAW;AAAG;AAGjCF,kBAAYM,eACTI,IAAI,CAACD,OAAOA,GAAGT,SAAS,EACxBQ,OAAOG,oBAAAA,EAEPC,OAAO,CAACC,GAAGC,MAAMC,KAAKC,IAAIH,GAAGC,CAAAA,GAAIG,OAAOC,gBAAgB;AAC3D,UAAIlB,cAAciB,OAAOC;AAAkB;AAG3CjB,aAAOK,eAAeJ,WAAWH;AAGjC,YAAMoB,SAASb,eAAeI,IAAI,CAACD,OAAOA,GAAGW,eAAeX,GAAGrB,gBAAgBiC,QAAQhC,aAAAA,CAAAA,CAAe,EAAEmB,OAAOG,oBAAAA;AAG/G,UAAIQ,OAAOjB,SAAS,GAAG;AACrB,cAAMoB,iBAAiB,MAAM/B,UAAUgC,IAAIJ,MAAAA,GAASX,OAAOG,oBAAAA;AAC3DrB,iBAASkC,KAAI,GAAIF,aAAAA;MACnB;IACF;AACA,WAAOhC;EACT;AACF;AAzEUhB;AACR,cAHWD,2BAGKoD,iBAAgB;EAACC;;AAEjC,cALWrD,2BAKeQ,yBAA6E;EACrG8C,kBAAkBC;EAClBC,0BAA0BC;AAC5B;AARK,IAAMzD,2BAAN;","names":["getJsonPathTransformer","pathExpression","transformer","x","ret","jsonpath","value","Error","MemoryForecastingDiviner","AbstractForecastingDiviner","batchLimit","maxTrainingLength","forecastingMethod","forecastingMethodName","assertEx","config","forecastingMethodDict","jsonPathExpression","getPayloadsInWindow","startTimestamp","stopTimestamp","addresses","witnessAddresses","payload_schemas","witnessSchema","payloads","archivist","asArchivistInstance","getArchivist","bwDiviner","asDivinerInstance","resolve","boundWitnessDiviner","pop","limit","timestamp","more","length","query","schema","BoundWitnessDivinerQuerySchema","boundWitnesses","divine","filter","bw","map","exists","reduce","a","b","Math","min","Number","MAX_SAFE_INTEGER","hashes","payload_hashes","indexOf","batchPayloads","get","push","configSchemas","ForecastingDivinerConfigSchema","arimaForecasting","arimaForecastingMethod","seasonalArimaForecasting","seasonalArimaForecastingMethod"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/MemoryForecastingDiviner.ts"],"sourcesContent":["export * from './MemoryForecastingDiviner'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { AbstractForecastingDiviner, ForecastingDivinerParams } from '@xyo-network/diviner-forecasting-abstract'\nimport {\n arimaForecastingMethod,\n arimaForecastingName,\n seasonalArimaForecastingMethod,\n seasonalArimaForecastingName,\n} from '@xyo-network/diviner-forecasting-method-arima'\nimport { ForecastingDivinerConfigSchema, ForecastingMethod, PayloadValueTransformer } from '@xyo-network/diviner-forecasting-model'\nimport { asDivinerInstance, DivinerInstance } from '@xyo-network/diviner-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport jsonpath from 'jsonpath'\n\nexport type SupportedForecastingType = typeof arimaForecastingName | typeof seasonalArimaForecastingName\n\nconst getJsonPathTransformer = (pathExpression: string): PayloadValueTransformer => {\n const transformer = (x: Payload): number => {\n // eslint-disable-next-line import/no-named-as-default-member\n const ret = jsonpath.value(x, pathExpression)\n if (typeof ret === 'number') return ret\n throw new Error('Parsed invalid payload value')\n }\n return transformer\n}\n\nexport class MemoryForecastingDiviner<\n TParams extends ForecastingDivinerParams = ForecastingDivinerParams,\n> extends AbstractForecastingDiviner<TParams> {\n static override configSchemas = [ForecastingDivinerConfigSchema]\n\n protected static readonly forecastingMethodDict: Record<SupportedForecastingType, ForecastingMethod> = {\n arimaForecasting: arimaForecastingMethod,\n seasonalArimaForecasting: seasonalArimaForecastingMethod,\n }\n\n /**\n * The max number of records to search during the batch query\n */\n protected readonly batchLimit = 1000\n\n // TODO: Inject via config\n protected readonly maxTrainingLength = 10_000\n\n get boundWitnessDiviner() {\n return assertEx(this.config.boundWitnessDiviner, () => 'No boundWitnessDiviner configured')\n }\n\n protected override get forecastingMethod(): ForecastingMethod {\n const forecastingMethodName = assertEx(this.config.forecastingMethod, () => 'Missing forecastingMethod in config') as SupportedForecastingType\n const forecastingMethod = MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName]\n if (forecastingMethod) return forecastingMethod\n throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`)\n }\n\n protected override get transformer(): PayloadValueTransformer {\n const pathExpression = assertEx(this.config.jsonPathExpression, () => 'Missing jsonPathExpression in config')\n return getJsonPathTransformer(pathExpression)\n }\n\n protected override async getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]> {\n const addresses = this.config.witnessAddresses\n const payload_schemas = [assertEx(this.config.witnessSchema, () => 'Missing witnessSchema in config')]\n const payloads: Payload[] = []\n const archivist = asArchivistInstance(await this.getArchivist(), () => 'Unable to resolve archivist')\n const bwDiviner = asDivinerInstance(\n (await this.resolve(this.boundWitnessDiviner)).pop(),\n 'Unable to resolve boundWitnessDiviner',\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n const limit = this.batchLimit\n const witnessSchema = assertEx(this.config.witnessSchema, () => 'Missing witnessSchema in config')\n let timestamp = stopTimestamp\n let more = true\n\n // TODO: Window size vs sample size\n // Loop until there are no more BWs to process or we've got enough payloads to satisfy the training window\n while (more || payloads.length < this.maxTrainingLength) {\n const query: BoundWitnessDivinerQueryPayload = { addresses, limit, payload_schemas, schema: BoundWitnessDivinerQuerySchema, timestamp }\n const boundWitnesses = (await bwDiviner.divine([query])).filter(\n (bw) => bw.timestamp && bw.timestamp >= startTimestamp && bw.timestamp <= stopTimestamp,\n )\n if (boundWitnesses.length === 0) break\n\n // Update the timestamp value for the next batch\n timestamp = boundWitnesses\n .map((bw) => bw.timestamp)\n .filter(exists)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce((a, b) => Math.min(a, b), Number.MAX_SAFE_INTEGER)\n if (timestamp === Number.MAX_SAFE_INTEGER) break\n\n // Set the more flag to false if there are fewer documents returned than the batch size\n more = boundWitnesses.length === limit\n\n // Get the corresponding payload hashes from the BWs\n const hashes = boundWitnesses.map((bw) => bw.payload_hashes[bw.payload_schemas.indexOf(witnessSchema)]).filter(exists)\n\n // Get the payloads corresponding to the BW hashes from the archivist\n if (hashes.length > 0) {\n const batchPayloads = (await archivist.get(hashes)).filter(exists)\n payloads.push(...batchPayloads)\n }\n }\n return payloads\n }\n}\n"],"mappings":"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","names":["getJsonPathTransformer","pathExpression","transformer","x","ret","jsonpath","value","Error","MemoryForecastingDiviner","AbstractForecastingDiviner","batchLimit","maxTrainingLength","boundWitnessDiviner","assertEx","config","forecastingMethod","forecastingMethodName","forecastingMethodDict","jsonPathExpression","getPayloadsInWindow","startTimestamp","stopTimestamp","addresses","witnessAddresses","payload_schemas","witnessSchema","payloads","archivist","asArchivistInstance","getArchivist","bwDiviner","asDivinerInstance","resolve","pop","limit","timestamp","more","length","query","schema","BoundWitnessDivinerQuerySchema","boundWitnesses","divine","filter","bw","map","exists","reduce","a","b","Math","min","Number","MAX_SAFE_INTEGER","hashes","payload_hashes","indexOf","batchPayloads","get","push","configSchemas","ForecastingDivinerConfigSchema","arimaForecasting","arimaForecastingMethod","seasonalArimaForecasting","seasonalArimaForecastingMethod"]}
@@ -32,27 +32,30 @@ var _MemoryForecastingDiviner = class _MemoryForecastingDiviner extends Abstract
32
32
  batchLimit = 1e3;
33
33
  // TODO: Inject via config
34
34
  maxTrainingLength = 1e4;
35
+ get boundWitnessDiviner() {
36
+ return assertEx(this.config.boundWitnessDiviner, () => "No boundWitnessDiviner configured");
37
+ }
35
38
  get forecastingMethod() {
36
- const forecastingMethodName = assertEx(this.config.forecastingMethod, "Missing forecastingMethod in config");
39
+ const forecastingMethodName = assertEx(this.config.forecastingMethod, () => "Missing forecastingMethod in config");
37
40
  const forecastingMethod = _MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName];
38
41
  if (forecastingMethod)
39
42
  return forecastingMethod;
40
43
  throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`);
41
44
  }
42
45
  get transformer() {
43
- const pathExpression = assertEx(this.config.jsonPathExpression, "Missing jsonPathExpression in config");
46
+ const pathExpression = assertEx(this.config.jsonPathExpression, () => "Missing jsonPathExpression in config");
44
47
  return getJsonPathTransformer(pathExpression);
45
48
  }
46
49
  async getPayloadsInWindow(startTimestamp, stopTimestamp) {
47
50
  const addresses = this.config.witnessAddresses;
48
51
  const payload_schemas = [
49
- assertEx(this.config.witnessSchema, "Missing witnessSchema in config")
52
+ assertEx(this.config.witnessSchema, () => "Missing witnessSchema in config")
50
53
  ];
51
54
  const payloads = [];
52
- const archivist = asArchivistInstance(await this.getArchivist(), "Unable to resolve archivist");
53
- const bwDiviner = asDivinerInstance((await this.resolve(this.config.boundWitnessDiviner)).pop(), "Unable to resolve boundWitnessDiviner");
55
+ const archivist = asArchivistInstance(await this.getArchivist(), () => "Unable to resolve archivist");
56
+ const bwDiviner = asDivinerInstance((await this.resolve(this.boundWitnessDiviner)).pop(), "Unable to resolve boundWitnessDiviner");
54
57
  const limit = this.batchLimit;
55
- const witnessSchema = assertEx(this.config.witnessSchema, "Missing witnessSchema in config");
58
+ const witnessSchema = assertEx(this.config.witnessSchema, () => "Missing witnessSchema in config");
56
59
  let timestamp = stopTimestamp;
57
60
  let more = true;
58
61
  while (more || payloads.length < this.maxTrainingLength) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MemoryForecastingDiviner.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { AbstractForecastingDiviner, ForecastingDivinerParams } from '@xyo-network/diviner-forecasting-abstract'\nimport {\n arimaForecastingMethod,\n arimaForecastingName,\n seasonalArimaForecastingMethod,\n seasonalArimaForecastingName,\n} from '@xyo-network/diviner-forecasting-method-arima'\nimport { ForecastingDivinerConfigSchema, ForecastingMethod, PayloadValueTransformer } from '@xyo-network/diviner-forecasting-model'\nimport { asDivinerInstance, DivinerInstance } from '@xyo-network/diviner-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport jsonpath from 'jsonpath'\n\nexport type SupportedForecastingType = typeof arimaForecastingName | typeof seasonalArimaForecastingName\n\nconst getJsonPathTransformer = (pathExpression: string): PayloadValueTransformer => {\n const transformer = (x: Payload): number => {\n // eslint-disable-next-line import/no-named-as-default-member\n const ret = jsonpath.value(x, pathExpression)\n if (typeof ret === 'number') return ret\n throw new Error('Parsed invalid payload value')\n }\n return transformer\n}\n\nexport class MemoryForecastingDiviner<\n TParams extends ForecastingDivinerParams = ForecastingDivinerParams,\n> extends AbstractForecastingDiviner<TParams> {\n static override configSchemas = [ForecastingDivinerConfigSchema]\n\n protected static readonly forecastingMethodDict: Record<SupportedForecastingType, ForecastingMethod> = {\n arimaForecasting: arimaForecastingMethod,\n seasonalArimaForecasting: seasonalArimaForecastingMethod,\n }\n\n /**\n * The max number of records to search during the batch query\n */\n protected readonly batchLimit = 1000\n\n // TODO: Inject via config\n protected readonly maxTrainingLength = 10_000\n\n protected override get forecastingMethod(): ForecastingMethod {\n const forecastingMethodName = assertEx(this.config.forecastingMethod, 'Missing forecastingMethod in config') as SupportedForecastingType\n const forecastingMethod = MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName]\n if (forecastingMethod) return forecastingMethod\n throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`)\n }\n\n protected override get transformer(): PayloadValueTransformer {\n const pathExpression = assertEx(this.config.jsonPathExpression, 'Missing jsonPathExpression in config')\n return getJsonPathTransformer(pathExpression)\n }\n\n protected override async getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]> {\n const addresses = this.config.witnessAddresses\n const payload_schemas = [assertEx(this.config.witnessSchema, 'Missing witnessSchema in config')]\n const payloads: Payload[] = []\n const archivist = asArchivistInstance(await this.getArchivist(), 'Unable to resolve archivist')\n const bwDiviner = asDivinerInstance(\n (await this.resolve(this.config.boundWitnessDiviner)).pop(),\n 'Unable to resolve boundWitnessDiviner',\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n const limit = this.batchLimit\n const witnessSchema = assertEx(this.config.witnessSchema, 'Missing witnessSchema in config')\n let timestamp = stopTimestamp\n let more = true\n\n // TODO: Window size vs sample size\n // Loop until there are no more BWs to process or we've got enough payloads to satisfy the training window\n while (more || payloads.length < this.maxTrainingLength) {\n const query: BoundWitnessDivinerQueryPayload = { addresses, limit, payload_schemas, schema: BoundWitnessDivinerQuerySchema, timestamp }\n const boundWitnesses = (await bwDiviner.divine([query])).filter(\n (bw) => bw.timestamp && bw.timestamp >= startTimestamp && bw.timestamp <= stopTimestamp,\n )\n if (boundWitnesses.length === 0) break\n\n // Update the timestamp value for the next batch\n timestamp = boundWitnesses\n .map((bw) => bw.timestamp)\n .filter(exists)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce((a, b) => Math.min(a, b), Number.MAX_SAFE_INTEGER)\n if (timestamp === Number.MAX_SAFE_INTEGER) break\n\n // Set the more flag to false if there are fewer documents returned than the batch size\n more = boundWitnesses.length === limit\n\n // Get the corresponding payload hashes from the BWs\n const hashes = boundWitnesses.map((bw) => bw.payload_hashes[bw.payload_schemas.indexOf(witnessSchema)]).filter(exists)\n\n // Get the payloads corresponding to the BW hashes from the archivist\n if (hashes.length > 0) {\n const batchPayloads = (await archivist.get(hashes)).filter(exists)\n payloads.push(...batchPayloads)\n }\n }\n return payloads\n }\n}\n"],"mappings":";;;;;;;;;AAAA,SAASA,gBAAgB;AACzB,SAASC,cAAc;AACvB,SAASC,2BAA2B;AAEpC,SAAqEC,sCAAsC;AAC3G,SAASC,kCAA4D;AACrE,SACEC,wBAEAC,sCAEK;AACP,SAASC,sCAAkF;AAC3F,SAASC,yBAA0C;AAEnD,OAAOC,cAAc;AAIrB,IAAMC,yBAAyB,wBAACC,mBAAAA;AAC9B,QAAMC,cAAc,wBAACC,MAAAA;AAEnB,UAAMC,MAAMC,SAASC,MAAMH,GAAGF,cAAAA;AAC9B,QAAI,OAAOG,QAAQ;AAAU,aAAOA;AACpC,UAAM,IAAIG,MAAM,8BAAA;EAClB,GALoB;AAMpB,SAAOL;AACT,GAR+B;AAUxB,IAAMM,4BAAN,MAAMA,kCAEHC,2BAAAA;;;;EAWWC,aAAa;;EAGbC,oBAAoB;EAEvC,IAAuBC,oBAAuC;AAC5D,UAAMC,wBAAwBC,SAAS,KAAKC,OAAOH,mBAAmB,qCAAA;AACtE,UAAMA,oBAAoBJ,0BAAyBQ,sBAAsBH,qBAAAA;AACzE,QAAID;AAAmB,aAAOA;AAC9B,UAAM,IAAIL,MAAM,mCAAmCM,qBAAAA,EAAuB;EAC5E;EAEA,IAAuBX,cAAuC;AAC5D,UAAMD,iBAAiBa,SAAS,KAAKC,OAAOE,oBAAoB,sCAAA;AAChE,WAAOjB,uBAAuBC,cAAAA;EAChC;EAEA,MAAyBiB,oBAAoBC,gBAAwBC,eAA2C;AAC9G,UAAMC,YAAY,KAAKN,OAAOO;AAC9B,UAAMC,kBAAkB;MAACT,SAAS,KAAKC,OAAOS,eAAe,iCAAA;;AAC7D,UAAMC,WAAsB,CAAA;AAC5B,UAAMC,YAAYC,oBAAoB,MAAM,KAAKC,aAAY,GAAI,6BAAA;AACjE,UAAMC,YAAYC,mBACf,MAAM,KAAKC,QAAQ,KAAKhB,OAAOiB,mBAAmB,GAAGC,IAAG,GACzD,uCAAA;AAEF,UAAMC,QAAQ,KAAKxB;AACnB,UAAMc,gBAAgBV,SAAS,KAAKC,OAAOS,eAAe,iCAAA;AAC1D,QAAIW,YAAYf;AAChB,QAAIgB,OAAO;AAIX,WAAOA,QAAQX,SAASY,SAAS,KAAK1B,mBAAmB;AACvD,YAAM2B,QAAyC;QAAEjB;QAAWa;QAAOX;QAAiBgB,QAAQC;QAAgCL;MAAU;AACtI,YAAMM,kBAAkB,MAAMZ,UAAUa,OAAO;QAACJ;OAAM,GAAGK,OACvD,CAACC,OAAOA,GAAGT,aAAaS,GAAGT,aAAahB,kBAAkByB,GAAGT,aAAaf,aAAAA;AAE5E,UAAIqB,eAAeJ,WAAW;AAAG;AAGjCF,kBAAYM,eACTI,IAAI,CAACD,OAAOA,GAAGT,SAAS,EACxBQ,OAAOG,MAAAA,EAEPC,OAAO,CAACC,GAAGC,MAAMC,KAAKC,IAAIH,GAAGC,CAAAA,GAAIG,OAAOC,gBAAgB;AAC3D,UAAIlB,cAAciB,OAAOC;AAAkB;AAG3CjB,aAAOK,eAAeJ,WAAWH;AAGjC,YAAMoB,SAASb,eAAeI,IAAI,CAACD,OAAOA,GAAGW,eAAeX,GAAGrB,gBAAgBiC,QAAQhC,aAAAA,CAAAA,CAAe,EAAEmB,OAAOG,MAAAA;AAG/G,UAAIQ,OAAOjB,SAAS,GAAG;AACrB,cAAMoB,iBAAiB,MAAM/B,UAAUgC,IAAIJ,MAAAA,GAASX,OAAOG,MAAAA;AAC3DrB,iBAASkC,KAAI,GAAIF,aAAAA;MACnB;IACF;AACA,WAAOhC;EACT;AACF;AAzEUhB;AACR,cAHWD,2BAGKoD,iBAAgB;EAACC;;AAEjC,cALWrD,2BAKeQ,yBAA6E;EACrG8C,kBAAkBC;EAClBC,0BAA0BC;AAC5B;AARK,IAAMzD,2BAAN;","names":["assertEx","exists","asArchivistInstance","BoundWitnessDivinerQuerySchema","AbstractForecastingDiviner","arimaForecastingMethod","seasonalArimaForecastingMethod","ForecastingDivinerConfigSchema","asDivinerInstance","jsonpath","getJsonPathTransformer","pathExpression","transformer","x","ret","jsonpath","value","Error","MemoryForecastingDiviner","AbstractForecastingDiviner","batchLimit","maxTrainingLength","forecastingMethod","forecastingMethodName","assertEx","config","forecastingMethodDict","jsonPathExpression","getPayloadsInWindow","startTimestamp","stopTimestamp","addresses","witnessAddresses","payload_schemas","witnessSchema","payloads","archivist","asArchivistInstance","getArchivist","bwDiviner","asDivinerInstance","resolve","boundWitnessDiviner","pop","limit","timestamp","more","length","query","schema","BoundWitnessDivinerQuerySchema","boundWitnesses","divine","filter","bw","map","exists","reduce","a","b","Math","min","Number","MAX_SAFE_INTEGER","hashes","payload_hashes","indexOf","batchPayloads","get","push","configSchemas","ForecastingDivinerConfigSchema","arimaForecasting","arimaForecastingMethod","seasonalArimaForecasting","seasonalArimaForecastingMethod"]}
1
+ {"version":3,"sources":["../../src/MemoryForecastingDiviner.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { AbstractForecastingDiviner, ForecastingDivinerParams } from '@xyo-network/diviner-forecasting-abstract'\nimport {\n arimaForecastingMethod,\n arimaForecastingName,\n seasonalArimaForecastingMethod,\n seasonalArimaForecastingName,\n} from '@xyo-network/diviner-forecasting-method-arima'\nimport { ForecastingDivinerConfigSchema, ForecastingMethod, PayloadValueTransformer } from '@xyo-network/diviner-forecasting-model'\nimport { asDivinerInstance, DivinerInstance } from '@xyo-network/diviner-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport jsonpath from 'jsonpath'\n\nexport type SupportedForecastingType = typeof arimaForecastingName | typeof seasonalArimaForecastingName\n\nconst getJsonPathTransformer = (pathExpression: string): PayloadValueTransformer => {\n const transformer = (x: Payload): number => {\n // eslint-disable-next-line import/no-named-as-default-member\n const ret = jsonpath.value(x, pathExpression)\n if (typeof ret === 'number') return ret\n throw new Error('Parsed invalid payload value')\n }\n return transformer\n}\n\nexport class MemoryForecastingDiviner<\n TParams extends ForecastingDivinerParams = ForecastingDivinerParams,\n> extends AbstractForecastingDiviner<TParams> {\n static override configSchemas = [ForecastingDivinerConfigSchema]\n\n protected static readonly forecastingMethodDict: Record<SupportedForecastingType, ForecastingMethod> = {\n arimaForecasting: arimaForecastingMethod,\n seasonalArimaForecasting: seasonalArimaForecastingMethod,\n }\n\n /**\n * The max number of records to search during the batch query\n */\n protected readonly batchLimit = 1000\n\n // TODO: Inject via config\n protected readonly maxTrainingLength = 10_000\n\n get boundWitnessDiviner() {\n return assertEx(this.config.boundWitnessDiviner, () => 'No boundWitnessDiviner configured')\n }\n\n protected override get forecastingMethod(): ForecastingMethod {\n const forecastingMethodName = assertEx(this.config.forecastingMethod, () => 'Missing forecastingMethod in config') as SupportedForecastingType\n const forecastingMethod = MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName]\n if (forecastingMethod) return forecastingMethod\n throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`)\n }\n\n protected override get transformer(): PayloadValueTransformer {\n const pathExpression = assertEx(this.config.jsonPathExpression, () => 'Missing jsonPathExpression in config')\n return getJsonPathTransformer(pathExpression)\n }\n\n protected override async getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]> {\n const addresses = this.config.witnessAddresses\n const payload_schemas = [assertEx(this.config.witnessSchema, () => 'Missing witnessSchema in config')]\n const payloads: Payload[] = []\n const archivist = asArchivistInstance(await this.getArchivist(), () => 'Unable to resolve archivist')\n const bwDiviner = asDivinerInstance(\n (await this.resolve(this.boundWitnessDiviner)).pop(),\n 'Unable to resolve boundWitnessDiviner',\n ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>\n const limit = this.batchLimit\n const witnessSchema = assertEx(this.config.witnessSchema, () => 'Missing witnessSchema in config')\n let timestamp = stopTimestamp\n let more = true\n\n // TODO: Window size vs sample size\n // Loop until there are no more BWs to process or we've got enough payloads to satisfy the training window\n while (more || payloads.length < this.maxTrainingLength) {\n const query: BoundWitnessDivinerQueryPayload = { addresses, limit, payload_schemas, schema: BoundWitnessDivinerQuerySchema, timestamp }\n const boundWitnesses = (await bwDiviner.divine([query])).filter(\n (bw) => bw.timestamp && bw.timestamp >= startTimestamp && bw.timestamp <= stopTimestamp,\n )\n if (boundWitnesses.length === 0) break\n\n // Update the timestamp value for the next batch\n timestamp = boundWitnesses\n .map((bw) => bw.timestamp)\n .filter(exists)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce((a, b) => Math.min(a, b), Number.MAX_SAFE_INTEGER)\n if (timestamp === Number.MAX_SAFE_INTEGER) break\n\n // Set the more flag to false if there are fewer documents returned than the batch size\n more = boundWitnesses.length === limit\n\n // Get the corresponding payload hashes from the BWs\n const hashes = boundWitnesses.map((bw) => bw.payload_hashes[bw.payload_schemas.indexOf(witnessSchema)]).filter(exists)\n\n // Get the payloads corresponding to the BW hashes from the archivist\n if (hashes.length > 0) {\n const batchPayloads = (await archivist.get(hashes)).filter(exists)\n payloads.push(...batchPayloads)\n }\n }\n return payloads\n }\n}\n"],"mappings":"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","names":["assertEx","exists","asArchivistInstance","BoundWitnessDivinerQuerySchema","AbstractForecastingDiviner","arimaForecastingMethod","seasonalArimaForecastingMethod","ForecastingDivinerConfigSchema","asDivinerInstance","jsonpath","getJsonPathTransformer","pathExpression","transformer","x","ret","jsonpath","value","Error","MemoryForecastingDiviner","AbstractForecastingDiviner","batchLimit","maxTrainingLength","boundWitnessDiviner","assertEx","config","forecastingMethod","forecastingMethodName","forecastingMethodDict","jsonPathExpression","getPayloadsInWindow","startTimestamp","stopTimestamp","addresses","witnessAddresses","payload_schemas","witnessSchema","payloads","archivist","asArchivistInstance","getArchivist","bwDiviner","asDivinerInstance","resolve","pop","limit","timestamp","more","length","query","schema","BoundWitnessDivinerQuerySchema","boundWitnesses","divine","filter","bw","map","exists","reduce","a","b","Math","min","Number","MAX_SAFE_INTEGER","hashes","payload_hashes","indexOf","batchPayloads","get","push","configSchemas","ForecastingDivinerConfigSchema","arimaForecasting","arimaForecastingMethod","seasonalArimaForecasting","seasonalArimaForecastingMethod"]}
package/package.json CHANGED
@@ -10,16 +10,16 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^3.0.13",
14
- "@xylabs/exists": "^3.0.13",
15
- "@xyo-network/archivist-model": "~2.92.7",
16
- "@xyo-network/boundwitness-model": "~2.92.7",
17
- "@xyo-network/diviner-boundwitness-model": "~2.92.7",
18
- "@xyo-network/diviner-forecasting-abstract": "~2.92.7",
19
- "@xyo-network/diviner-forecasting-method-arima": "~2.92.7",
20
- "@xyo-network/diviner-forecasting-model": "~2.92.7",
21
- "@xyo-network/diviner-model": "~2.92.7",
22
- "@xyo-network/payload-model": "~2.92.7",
13
+ "@xylabs/assert": "^3.0.15",
14
+ "@xylabs/exists": "^3.0.15",
15
+ "@xyo-network/archivist-model": "~2.92.9",
16
+ "@xyo-network/boundwitness-model": "~2.92.9",
17
+ "@xyo-network/diviner-boundwitness-model": "~2.92.9",
18
+ "@xyo-network/diviner-forecasting-abstract": "~2.92.9",
19
+ "@xyo-network/diviner-forecasting-method-arima": "~2.92.9",
20
+ "@xyo-network/diviner-forecasting-model": "~2.92.9",
21
+ "@xyo-network/diviner-model": "~2.92.9",
22
+ "@xyo-network/payload-model": "~2.92.9",
23
23
  "jsonpath": "^1.1.1"
24
24
  },
25
25
  "devDependencies": {
@@ -67,6 +67,6 @@
67
67
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
68
68
  },
69
69
  "sideEffects": false,
70
- "version": "2.92.7",
70
+ "version": "2.92.9",
71
71
  "type": "module"
72
72
  }
@@ -45,29 +45,33 @@ export class MemoryForecastingDiviner<
45
45
  // TODO: Inject via config
46
46
  protected readonly maxTrainingLength = 10_000
47
47
 
48
+ get boundWitnessDiviner() {
49
+ return assertEx(this.config.boundWitnessDiviner, () => 'No boundWitnessDiviner configured')
50
+ }
51
+
48
52
  protected override get forecastingMethod(): ForecastingMethod {
49
- const forecastingMethodName = assertEx(this.config.forecastingMethod, 'Missing forecastingMethod in config') as SupportedForecastingType
53
+ const forecastingMethodName = assertEx(this.config.forecastingMethod, () => 'Missing forecastingMethod in config') as SupportedForecastingType
50
54
  const forecastingMethod = MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName]
51
55
  if (forecastingMethod) return forecastingMethod
52
56
  throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`)
53
57
  }
54
58
 
55
59
  protected override get transformer(): PayloadValueTransformer {
56
- const pathExpression = assertEx(this.config.jsonPathExpression, 'Missing jsonPathExpression in config')
60
+ const pathExpression = assertEx(this.config.jsonPathExpression, () => 'Missing jsonPathExpression in config')
57
61
  return getJsonPathTransformer(pathExpression)
58
62
  }
59
63
 
60
64
  protected override async getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promise<Payload[]> {
61
65
  const addresses = this.config.witnessAddresses
62
- const payload_schemas = [assertEx(this.config.witnessSchema, 'Missing witnessSchema in config')]
66
+ const payload_schemas = [assertEx(this.config.witnessSchema, () => 'Missing witnessSchema in config')]
63
67
  const payloads: Payload[] = []
64
- const archivist = asArchivistInstance(await this.getArchivist(), 'Unable to resolve archivist')
68
+ const archivist = asArchivistInstance(await this.getArchivist(), () => 'Unable to resolve archivist')
65
69
  const bwDiviner = asDivinerInstance(
66
- (await this.resolve(this.config.boundWitnessDiviner)).pop(),
70
+ (await this.resolve(this.boundWitnessDiviner)).pop(),
67
71
  'Unable to resolve boundWitnessDiviner',
68
72
  ) as DivinerInstance<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>
69
73
  const limit = this.batchLimit
70
- const witnessSchema = assertEx(this.config.witnessSchema, 'Missing witnessSchema in config')
74
+ const witnessSchema = assertEx(this.config.witnessSchema, () => 'Missing witnessSchema in config')
71
75
  let timestamp = stopTimestamp
72
76
  let more = true
73
77