@xyo-network/diviner-forecasting 7.2.2 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/neutral/abstract/AbstractForecasting.d.ts +16 -0
- package/dist/neutral/abstract/AbstractForecasting.d.ts.map +1 -0
- package/dist/neutral/abstract/index.d.ts +2 -0
- package/dist/neutral/abstract/index.d.ts.map +1 -0
- package/dist/neutral/abstract.d.ts +2 -0
- package/dist/neutral/abstract.d.ts.map +1 -0
- package/dist/neutral/abstract.mjs +106 -0
- package/dist/neutral/abstract.mjs.map +7 -0
- package/dist/neutral/arima/arima/configurable/configurableArima.d.ts +10 -0
- package/dist/neutral/arima/arima/configurable/configurableArima.d.ts.map +1 -0
- package/dist/neutral/arima/arima/configurable/index.d.ts +2 -0
- package/dist/neutral/arima/arima/configurable/index.d.ts.map +1 -0
- package/dist/neutral/arima/arima/configured/arima.d.ts +6 -0
- package/dist/neutral/arima/arima/configured/arima.d.ts.map +1 -0
- package/dist/neutral/arima/arima/configured/index.d.ts +3 -0
- package/dist/neutral/arima/arima/configured/index.d.ts.map +1 -0
- package/dist/neutral/arima/arima/configured/seasonalArima.d.ts +6 -0
- package/dist/neutral/arima/arima/configured/seasonalArima.d.ts.map +1 -0
- package/dist/neutral/arima/arima/index.d.ts +3 -0
- package/dist/neutral/arima/arima/index.d.ts.map +1 -0
- package/dist/neutral/arima/index.d.ts +2 -0
- package/dist/neutral/arima/index.d.ts.map +1 -0
- package/dist/neutral/arima.d.ts +2 -0
- package/dist/neutral/arima.d.ts.map +1 -0
- package/dist/neutral/arima.mjs +48 -0
- package/dist/neutral/arima.mjs.map +7 -0
- package/dist/neutral/index.d.ts +3 -3
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +240 -4
- package/dist/neutral/index.mjs.map +4 -4
- package/dist/neutral/memory/MemoryForecastingDiviner.d.ts +22 -0
- package/dist/neutral/memory/MemoryForecastingDiviner.d.ts.map +1 -0
- package/dist/neutral/memory/index.d.ts +2 -0
- package/dist/neutral/memory/index.d.ts.map +1 -0
- package/dist/neutral/memory.d.ts +2 -0
- package/dist/neutral/memory.d.ts.map +1 -0
- package/dist/neutral/memory.mjs +224 -0
- package/dist/neutral/memory.mjs.map +7 -0
- package/dist/neutral/model/Config/Config.d.ts +33 -0
- package/dist/neutral/model/Config/Config.d.ts.map +1 -0
- package/dist/neutral/model/Config/ForecastingSettings.d.ts +12 -0
- package/dist/neutral/model/Config/ForecastingSettings.d.ts.map +1 -0
- package/dist/neutral/model/Config/TransformerSettings.d.ts +4 -0
- package/dist/neutral/model/Config/TransformerSettings.d.ts.map +1 -0
- package/dist/neutral/model/Config/index.d.ts +4 -0
- package/dist/neutral/model/Config/index.d.ts.map +1 -0
- package/dist/neutral/model/ForecastingMethod.d.ts +6 -0
- package/dist/neutral/model/ForecastingMethod.d.ts.map +1 -0
- package/dist/neutral/model/Payload/Forecast.d.ts +6 -0
- package/dist/neutral/model/Payload/Forecast.d.ts.map +1 -0
- package/dist/neutral/model/Payload/Payload.d.ts +17 -0
- package/dist/neutral/model/Payload/Payload.d.ts.map +1 -0
- package/dist/neutral/model/Payload/index.d.ts +3 -0
- package/dist/neutral/model/Payload/index.d.ts.map +1 -0
- package/dist/neutral/model/PayloadValueTransformer.d.ts +3 -0
- package/dist/neutral/model/PayloadValueTransformer.d.ts.map +1 -0
- package/dist/neutral/model/Query.d.ts +26 -0
- package/dist/neutral/model/Query.d.ts.map +1 -0
- package/dist/neutral/model/Schema.d.ts +5 -0
- package/dist/neutral/model/Schema.d.ts.map +1 -0
- package/dist/neutral/model/index.d.ts +7 -0
- package/dist/neutral/model/index.d.ts.map +1 -0
- package/dist/neutral/model.d.ts +2 -0
- package/dist/neutral/model.d.ts.map +1 -0
- package/dist/neutral/model.mjs +95 -0
- package/dist/neutral/model.mjs.map +7 -0
- package/package.json +33 -10
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Promisable } from '@ariestools/sdk';
|
|
2
|
+
import { AbstractDiviner } from '@xyo-network/sdk/diviner-abstract';
|
|
3
|
+
import type { DivinerInstance, DivinerModuleEventData, DivinerParams } from '@xyo-network/sdk/diviner-model';
|
|
4
|
+
import type { AnyConfigSchema } from '@xyo-network/sdk/module-model';
|
|
5
|
+
import type { Payload, Schema } from '@xyo-network/sdk-protocol';
|
|
6
|
+
import type { ForecastingDivinerConfig, ForecastingDivinerQueryPayload, ForecastingMethod, ForecastPayload, PayloadValueTransformer } from '../model/index.ts';
|
|
7
|
+
export type ForecastingDivinerParams = DivinerParams<AnyConfigSchema<ForecastingDivinerConfig>>;
|
|
8
|
+
export declare abstract class AbstractForecastingDiviner<TParams extends ForecastingDivinerParams = ForecastingDivinerParams, TIn extends ForecastingDivinerQueryPayload = ForecastingDivinerQueryPayload, TOut extends ForecastPayload = ForecastPayload, TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut>> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {
|
|
9
|
+
static readonly configSchemas: Schema[];
|
|
10
|
+
static readonly defaultConfigSchema: Schema;
|
|
11
|
+
protected abstract get forecastingMethod(): ForecastingMethod;
|
|
12
|
+
protected abstract get transformer(): PayloadValueTransformer;
|
|
13
|
+
protected divineHandler(payloads?: TIn[]): Promise<TOut[]>;
|
|
14
|
+
protected abstract getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promisable<Payload[]>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=AbstractForecasting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractForecasting.d.ts","sourceRoot":"","sources":["../../../src/abstract/AbstractForecasting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,EACV,eAAe,EAAE,sBAAsB,EAAE,aAAa,EACvD,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAGhE,OAAO,KAAK,EACV,wBAAwB,EACxB,8BAA8B,EAC9B,iBAAiB,EAEjB,eAAe,EACf,uBAAuB,EACxB,MAAM,mBAAmB,CAAA;AAO1B,MAAM,MAAM,wBAAwB,GAAG,aAAa,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC,CAAA;AAE/F,8BAAsB,0BAA0B,CAC9C,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,EACnE,GAAG,SAAS,8BAA8B,GAAG,8BAA8B,EAC3E,IAAI,SAAS,eAAe,GAAG,eAAe,EAC9C,UAAU,SAAS,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,sBAAsB,CAChH,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EACnC,GAAG,EACH,IAAI,CACL,CACD,SAAQ,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC;IACvD,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAA2D;IAC3G,gBAAyB,mBAAmB,EAAE,MAAM,CAAiC;IAErF,SAAS,CAAC,QAAQ,KAAK,iBAAiB,IAAI,iBAAiB,CAAA;IAC7D,SAAS,CAAC,QAAQ,KAAK,WAAW,IAAI,uBAAuB,CAAA;cAEpC,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAgBzE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;CAC7G"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/abstract/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract.d.ts","sourceRoot":"","sources":["../../src/abstract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// src/abstract/AbstractForecasting.ts
|
|
2
|
+
import { AbstractDiviner } from "@xyo-network/sdk/diviner-abstract";
|
|
3
|
+
import { PayloadBuilder } from "@xyo-network/sdk-protocol";
|
|
4
|
+
|
|
5
|
+
// src/model/Config/Config.ts
|
|
6
|
+
import {
|
|
7
|
+
zodAsFactory,
|
|
8
|
+
zodIsFactory,
|
|
9
|
+
zodToFactory
|
|
10
|
+
} from "@ariestools/sdk";
|
|
11
|
+
import { DivinerConfigZod } from "@xyo-network/sdk/diviner-model";
|
|
12
|
+
import { asSchema as asSchema2 } from "@xyo-network/sdk-protocol";
|
|
13
|
+
import * as z from "zod/mini";
|
|
14
|
+
|
|
15
|
+
// src/model/Schema.ts
|
|
16
|
+
import { asSchema } from "@xyo-network/sdk-protocol";
|
|
17
|
+
var ForecastingDivinerSchema = asSchema("network.xyo.diviner.forecasting", true);
|
|
18
|
+
|
|
19
|
+
// src/model/Config/Config.ts
|
|
20
|
+
var ForecastingDivinerConfigSchema = asSchema2(`${ForecastingDivinerSchema}.config`, true);
|
|
21
|
+
var ForecastingDivinerConfigZod = z.extend(DivinerConfigZod, {
|
|
22
|
+
batchLimit: z.optional(z.number()),
|
|
23
|
+
boundWitnessDiviner: z.optional(z.custom()),
|
|
24
|
+
forecastingMethod: z.optional(z.string()),
|
|
25
|
+
forecastingSteps: z.optional(z.number()),
|
|
26
|
+
jsonPathExpression: z.optional(z.string()),
|
|
27
|
+
maxTrainingLength: z.optional(z.number()),
|
|
28
|
+
schema: z.literal(ForecastingDivinerConfigSchema),
|
|
29
|
+
windowSize: z.optional(z.number()),
|
|
30
|
+
witnessAddresses: z.optional(z.array(z.custom())),
|
|
31
|
+
witnessSchema: z.optional(z.custom())
|
|
32
|
+
});
|
|
33
|
+
var isForecastingDivinerConfig = zodIsFactory(ForecastingDivinerConfigZod);
|
|
34
|
+
var asForecastingDivinerConfig = zodAsFactory(ForecastingDivinerConfigZod, "asForecastingDivinerConfig");
|
|
35
|
+
var toForecastingDivinerConfig = zodToFactory(ForecastingDivinerConfigZod, "toForecastingDivinerConfig");
|
|
36
|
+
|
|
37
|
+
// src/model/Payload/Payload.ts
|
|
38
|
+
import {
|
|
39
|
+
zodAsFactory as zodAsFactory2,
|
|
40
|
+
zodIsFactory as zodIsFactory2,
|
|
41
|
+
zodToFactory as zodToFactory2
|
|
42
|
+
} from "@ariestools/sdk";
|
|
43
|
+
import { asSchema as asSchema3, PayloadZodOfSchema } from "@xyo-network/sdk-protocol";
|
|
44
|
+
import * as z2 from "zod/mini";
|
|
45
|
+
var ForecastPayloadSchema = asSchema3(`${ForecastingDivinerSchema}.forecast`, true);
|
|
46
|
+
var ForecastPayloadZod = z2.extend(PayloadZodOfSchema(ForecastPayloadSchema), {
|
|
47
|
+
sources: z2.array(z2.string()),
|
|
48
|
+
values: z2.array(z2.custom())
|
|
49
|
+
});
|
|
50
|
+
var isForecastPayload = zodIsFactory2(ForecastPayloadZod);
|
|
51
|
+
var asForecastPayload = zodAsFactory2(ForecastPayloadZod, "asForecastPayload");
|
|
52
|
+
var toForecastPayload = zodToFactory2(ForecastPayloadZod, "toForecastPayload");
|
|
53
|
+
|
|
54
|
+
// src/model/Query.ts
|
|
55
|
+
import {
|
|
56
|
+
zodAsFactory as zodAsFactory3,
|
|
57
|
+
zodIsFactory as zodIsFactory3,
|
|
58
|
+
zodToFactory as zodToFactory3
|
|
59
|
+
} from "@ariestools/sdk";
|
|
60
|
+
import {
|
|
61
|
+
asSchema as asSchema4,
|
|
62
|
+
PayloadZodOfSchema as PayloadZodOfSchema2,
|
|
63
|
+
QueryFieldsZod
|
|
64
|
+
} from "@xyo-network/sdk-protocol";
|
|
65
|
+
import * as z3 from "zod/mini";
|
|
66
|
+
var ForecastingDivinerQuerySchema = asSchema4(`${ForecastingDivinerSchema}.query`, true);
|
|
67
|
+
var ForecastingDivinerQueryPayloadZod = z3.extend(PayloadZodOfSchema2(ForecastingDivinerQuerySchema), {
|
|
68
|
+
...QueryFieldsZod.shape,
|
|
69
|
+
batchLimit: z3.optional(z3.number()),
|
|
70
|
+
forecastingMethod: z3.optional(z3.string()),
|
|
71
|
+
forecastingSteps: z3.optional(z3.number()),
|
|
72
|
+
maxTrainingLength: z3.optional(z3.number()),
|
|
73
|
+
timestamp: z3.optional(z3.number()),
|
|
74
|
+
windowSize: z3.optional(z3.number()),
|
|
75
|
+
witnessAddresses: z3.optional(z3.array(z3.custom())),
|
|
76
|
+
witnessSchema: z3.optional(z3.custom())
|
|
77
|
+
});
|
|
78
|
+
var isForecastingDivinerQueryPayload = zodIsFactory3(ForecastingDivinerQueryPayloadZod);
|
|
79
|
+
var asForecastingDivinerQueryPayload = zodAsFactory3(ForecastingDivinerQueryPayloadZod, "asForecastingDivinerQueryPayload");
|
|
80
|
+
var toForecastingDivinerQueryPayload = zodToFactory3(ForecastingDivinerQueryPayloadZod, "toForecastingDivinerQueryPayload");
|
|
81
|
+
|
|
82
|
+
// src/abstract/AbstractForecasting.ts
|
|
83
|
+
var AbstractForecastingDiviner = class extends AbstractDiviner {
|
|
84
|
+
static configSchemas = [...super.configSchemas, ForecastingDivinerConfigSchema];
|
|
85
|
+
static defaultConfigSchema = ForecastingDivinerConfigSchema;
|
|
86
|
+
async divineHandler(payloads) {
|
|
87
|
+
const query = payloads?.find(isForecastingDivinerQueryPayload);
|
|
88
|
+
if (!query) return [];
|
|
89
|
+
const windowSettings = { ...this.config, ...this.query };
|
|
90
|
+
const stopTimestamp = query.timestamp ?? Date.now();
|
|
91
|
+
const startTimestamp = windowSettings.windowSize ? stopTimestamp - windowSettings.windowSize : 0;
|
|
92
|
+
const data = await this.getPayloadsInWindow(startTimestamp, stopTimestamp);
|
|
93
|
+
const sources = await PayloadBuilder.dataHashes(data);
|
|
94
|
+
const values = await this.forecastingMethod(data, this.transformer);
|
|
95
|
+
const response = {
|
|
96
|
+
schema: ForecastPayloadSchema,
|
|
97
|
+
sources,
|
|
98
|
+
values
|
|
99
|
+
};
|
|
100
|
+
return [response];
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
export {
|
|
104
|
+
AbstractForecastingDiviner
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=abstract.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/abstract/AbstractForecasting.ts", "../../src/model/Config/Config.ts", "../../src/model/Schema.ts", "../../src/model/Payload/Payload.ts", "../../src/model/Query.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Promisable } from '@ariestools/sdk'\nimport { AbstractDiviner } from '@xyo-network/sdk/diviner-abstract'\nimport type {\n DivinerInstance, DivinerModuleEventData, DivinerParams,\n} from '@xyo-network/sdk/diviner-model'\nimport type { AnyConfigSchema } from '@xyo-network/sdk/module-model'\nimport type { Payload, Schema } from '@xyo-network/sdk-protocol'\nimport { PayloadBuilder } from '@xyo-network/sdk-protocol'\n\nimport type {\n ForecastingDivinerConfig,\n ForecastingDivinerQueryPayload,\n ForecastingMethod,\n ForecastingSettings,\n ForecastPayload,\n PayloadValueTransformer,\n} from '../model/index.ts'\nimport {\n ForecastingDivinerConfigSchema,\n ForecastPayloadSchema,\n isForecastingDivinerQueryPayload,\n} from '../model/index.ts'\n\nexport type ForecastingDivinerParams = DivinerParams<AnyConfigSchema<ForecastingDivinerConfig>>\n\nexport abstract class AbstractForecastingDiviner<\n TParams extends ForecastingDivinerParams = ForecastingDivinerParams,\n TIn extends ForecastingDivinerQueryPayload = ForecastingDivinerQueryPayload,\n TOut extends ForecastPayload = ForecastPayload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ForecastingDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = ForecastingDivinerConfigSchema\n\n protected abstract get forecastingMethod(): ForecastingMethod\n protected abstract get transformer(): PayloadValueTransformer\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const query = payloads?.find(isForecastingDivinerQueryPayload)\n if (!query) return []\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const windowSettings: ForecastingSettings = { ...this.config, ...this.query }\n const stopTimestamp = query.timestamp ?? Date.now()\n const startTimestamp = windowSettings.windowSize ? stopTimestamp - windowSettings.windowSize : 0\n const data = await this.getPayloadsInWindow(startTimestamp, stopTimestamp)\n const sources = await PayloadBuilder.dataHashes(data)\n const values = await this.forecastingMethod(data, this.transformer)\n const response: ForecastPayload = {\n schema: ForecastPayloadSchema, sources, values,\n }\n return [response as TOut]\n }\n\n protected abstract getPayloadsInWindow(startTimestamp: number, stopTimestamp: number): Promisable<Payload[]>\n}\n", "import type { Address } from '@ariestools/sdk'\nimport {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport type { DivinerConfig } from '@xyo-network/sdk/diviner-model'\nimport { DivinerConfigZod } from '@xyo-network/sdk/diviner-model'\nimport type { ModuleIdentifier } from '@xyo-network/sdk/module-model'\nimport type { Schema } from '@xyo-network/sdk-protocol'\nimport { asSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport { ForecastingDivinerSchema } from '../Schema.ts'\nimport type { ForecastingSettings } from './ForecastingSettings.ts'\nimport type { TransformerSettings } from './TransformerSettings.ts'\n\nexport const ForecastingDivinerConfigSchema: string & {\n readonly __schema: true\n} = asSchema(`${ForecastingDivinerSchema}.config`, true)\nexport type ForecastingDivinerConfigSchema = typeof ForecastingDivinerConfigSchema\n\nexport const ForecastingDivinerConfigZod: z.ZodMiniObject<\n Omit<(typeof DivinerConfigZod)['shape'], 'schema'> & {\n batchLimit: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n boundWitnessDiviner: z.ZodMiniOptional<z.ZodMiniCustom<ModuleIdentifier, ModuleIdentifier>>\n forecastingMethod: z.ZodMiniOptional<z.ZodMiniString<string>>\n forecastingSteps: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n jsonPathExpression: z.ZodMiniOptional<z.ZodMiniString<string>>\n maxTrainingLength: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n schema: z.ZodMiniLiteral<ForecastingDivinerConfigSchema>\n windowSize: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n witnessAddresses: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniCustom<Address, Address>>>\n witnessSchema: z.ZodMiniOptional<z.ZodMiniCustom<Schema, Schema>>\n },\n z.core.$strip\n> = z.extend(DivinerConfigZod, {\n batchLimit: z.optional(z.number()),\n boundWitnessDiviner: z.optional(z.custom<ModuleIdentifier>()),\n forecastingMethod: z.optional(z.string()),\n forecastingSteps: z.optional(z.number()),\n jsonPathExpression: z.optional(z.string()),\n maxTrainingLength: z.optional(z.number()),\n schema: z.literal(ForecastingDivinerConfigSchema),\n windowSize: z.optional(z.number()),\n witnessAddresses: z.optional(z.array(z.custom<Address>())),\n witnessSchema: z.optional(z.custom<Schema>()),\n})\n\nexport type ForecastingDivinerConfig = DivinerConfig<\n {\n boundWitnessDiviner?: ModuleIdentifier\n schema: ForecastingDivinerConfigSchema\n } & ForecastingSettings\n & TransformerSettings\n>\n\nexport const isForecastingDivinerConfig: ReturnType<typeof zodIsFactory<ForecastingDivinerConfig>> = zodIsFactory(ForecastingDivinerConfigZod)\nexport const asForecastingDivinerConfig: ReturnType<typeof zodAsFactory<ForecastingDivinerConfig>> = zodAsFactory(ForecastingDivinerConfigZod, 'asForecastingDivinerConfig')\nexport const toForecastingDivinerConfig: ReturnType<typeof zodToFactory<ForecastingDivinerConfig>> = zodToFactory(ForecastingDivinerConfigZod, 'toForecastingDivinerConfig')\n", "import { asSchema } from '@xyo-network/sdk-protocol'\n\nexport const ForecastingDivinerSchema: 'network.xyo.diviner.forecasting' & {\n readonly __schema: true\n} = asSchema('network.xyo.diviner.forecasting', true)\nexport type ForecastingDivinerSchema = typeof ForecastingDivinerSchema\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport { asSchema, PayloadZodOfSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport { ForecastingDivinerSchema } from '../Schema.ts'\nimport type { Forecast } from './Forecast.ts'\n\nexport const ForecastPayloadSchema: string & {\n readonly __schema: true\n} = asSchema(`${ForecastingDivinerSchema}.forecast`, true)\nexport type ForecastPayloadSchema = typeof ForecastPayloadSchema\n\nexport const ForecastPayloadZod: z.ZodMiniObject<{\n schema: z.ZodMiniLiteral<ForecastPayloadSchema>\n sources: z.ZodMiniArray<z.ZodMiniString<string>>\n values: z.ZodMiniArray<z.ZodMiniCustom<Forecast, Forecast>>\n}, z.core.$strip> = z.extend(PayloadZodOfSchema(ForecastPayloadSchema), {\n sources: z.array(z.string()),\n values: z.array(z.custom<Forecast>()),\n})\n\nexport type ForecastPayload = z.infer<typeof ForecastPayloadZod>\n\nexport const isForecastPayload: ReturnType<typeof zodIsFactory<ForecastPayload>> = zodIsFactory(ForecastPayloadZod)\nexport const asForecastPayload: ReturnType<typeof zodAsFactory<ForecastPayload>> = zodAsFactory(ForecastPayloadZod, 'asForecastPayload')\nexport const toForecastPayload: ReturnType<typeof zodToFactory<ForecastPayload>> = zodToFactory(ForecastPayloadZod, 'toForecastPayload')\n", "import type { Address } from '@ariestools/sdk'\nimport {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport type { Schema } from '@xyo-network/sdk-protocol'\nimport {\n asSchema, PayloadZodOfSchema, QueryFieldsZod,\n} from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport { ForecastingDivinerSchema } from './Schema.ts'\n\nexport const ForecastingDivinerQuerySchema: string & {\n readonly __schema: true\n} = asSchema(`${ForecastingDivinerSchema}.query`, true)\nexport type ForecastingDivinerQuerySchema = typeof ForecastingDivinerQuerySchema\n\nexport const ForecastingDivinerQueryPayloadZod: z.ZodMiniObject<\n & { schema: z.ZodMiniLiteral<ForecastingDivinerQuerySchema> }\n & (typeof QueryFieldsZod)['shape']\n & {\n batchLimit: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n forecastingMethod: z.ZodMiniOptional<z.ZodMiniString<string>>\n forecastingSteps: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n maxTrainingLength: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n timestamp: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n windowSize: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n witnessAddresses: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniCustom<Address, Address>>>\n witnessSchema: z.ZodMiniOptional<z.ZodMiniCustom<Schema, Schema>>\n },\n z.core.$strip\n> = z.extend(PayloadZodOfSchema(ForecastingDivinerQuerySchema), {\n ...QueryFieldsZod.shape,\n batchLimit: z.optional(z.number()),\n forecastingMethod: z.optional(z.string()),\n forecastingSteps: z.optional(z.number()),\n maxTrainingLength: z.optional(z.number()),\n timestamp: z.optional(z.number()),\n windowSize: z.optional(z.number()),\n witnessAddresses: z.optional(z.array(z.custom<Address>())),\n witnessSchema: z.optional(z.custom<Schema>()),\n})\n\nexport type ForecastingDivinerQueryPayload = z.infer<typeof ForecastingDivinerQueryPayloadZod>\n\nexport const isForecastingDivinerQueryPayload: ReturnType<typeof zodIsFactory<ForecastingDivinerQueryPayload>> = zodIsFactory(ForecastingDivinerQueryPayloadZod)\nexport const asForecastingDivinerQueryPayload: ReturnType<typeof zodAsFactory<ForecastingDivinerQueryPayload>> = zodAsFactory(ForecastingDivinerQueryPayloadZod, 'asForecastingDivinerQueryPayload')\nexport const toForecastingDivinerQueryPayload: ReturnType<typeof zodToFactory<ForecastingDivinerQueryPayload>> = zodToFactory(ForecastingDivinerQueryPayloadZod, 'toForecastingDivinerQueryPayload')\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["asSchema", "asSchema", "zodAsFactory", "zodIsFactory", "zodToFactory", "asSchema", "z", "asSchema", "zodIsFactory", "zodAsFactory", "zodToFactory", "zodAsFactory", "zodIsFactory", "zodToFactory", "asSchema", "PayloadZodOfSchema", "z", "asSchema", "PayloadZodOfSchema", "zodIsFactory", "zodAsFactory", "zodToFactory"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Payload } from '@xyo-network/sdk-protocol';
|
|
2
|
+
import type { ARIMAOptions } from 'arima';
|
|
3
|
+
import type { ForecastingMethod } from '../../../model/index.ts';
|
|
4
|
+
export declare const commonOpts: ARIMAOptions;
|
|
5
|
+
export type PredictionPayload = Payload<{
|
|
6
|
+
error?: number;
|
|
7
|
+
value: number;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const configurableArima: (opts?: ARIMAOptions, predictionSteps?: number) => ForecastingMethod;
|
|
10
|
+
//# sourceMappingURL=configurableArima.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configurableArima.d.ts","sourceRoot":"","sources":["../../../../../src/arima/arima/configurable/configurableArima.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAGzC,OAAO,KAAK,EACA,iBAAiB,EAC5B,MAAM,yBAAyB,CAAA;AAEhC,eAAO,MAAM,UAAU,EAAE,YAAiC,CAAA;AAE1D,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE1E,eAAO,MAAM,iBAAiB,GAAI,OAAM,YAAyB,EAAE,wBAAoB,KAAG,iBAgBzF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/arima/arima/configurable/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ARIMAOptions } from 'arima';
|
|
2
|
+
import type { ForecastingMethod } from '../../../model/index.ts';
|
|
3
|
+
export declare const arimaOpts: ARIMAOptions;
|
|
4
|
+
export declare const arimaForecastingName = "arimaForecasting";
|
|
5
|
+
export declare const arimaForecastingMethod: ForecastingMethod;
|
|
6
|
+
//# sourceMappingURL=arima.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arima.d.ts","sourceRoot":"","sources":["../../../../../src/arima/arima/configured/arima.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAGhE,eAAO,MAAM,SAAS,EAAE,YAEvB,CAAA;AAED,eAAO,MAAM,oBAAoB,qBAAqB,CAAA;AAEtD,eAAO,MAAM,sBAAsB,EAAE,iBAAgD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/arima/arima/configured/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ARIMAOptions } from 'arima';
|
|
2
|
+
import type { ForecastingMethod } from '../../../model/index.ts';
|
|
3
|
+
export declare const seasonalArimaOpts: ARIMAOptions;
|
|
4
|
+
export declare const seasonalArimaForecastingName = "seasonalArimaForecasting";
|
|
5
|
+
export declare const seasonalArimaForecastingMethod: ForecastingMethod;
|
|
6
|
+
//# sourceMappingURL=seasonalArima.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seasonalArima.d.ts","sourceRoot":"","sources":["../../../../../src/arima/arima/configured/seasonalArima.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAGhE,eAAO,MAAM,iBAAiB,EAAE,YAE/B,CAAA;AAED,eAAO,MAAM,4BAA4B,6BAA6B,CAAA;AAEtE,eAAO,MAAM,8BAA8B,EAAE,iBAAwD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/arima/arima/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/arima/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arima.d.ts","sourceRoot":"","sources":["../../src/arima.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// src/arima/arima/configurable/configurableArima.ts
|
|
2
|
+
import ARIMA from "arima";
|
|
3
|
+
var commonOpts = { verbose: false };
|
|
4
|
+
var configurableArima = (opts = commonOpts, predictionSteps = 10) => {
|
|
5
|
+
return (payloads, transformer) => {
|
|
6
|
+
if (payloads.length === 0) return [];
|
|
7
|
+
const values = payloads.map(transformer);
|
|
8
|
+
const model = new ARIMA({ ...commonOpts, ...opts }).train(values);
|
|
9
|
+
const predictions = model.predict(predictionSteps);
|
|
10
|
+
return predictions[0].map((value, index) => {
|
|
11
|
+
const error = predictions[1][index];
|
|
12
|
+
return { error, value };
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// src/arima/arima/configured/arima.ts
|
|
18
|
+
var arimaOpts = {
|
|
19
|
+
d: 1,
|
|
20
|
+
p: 2,
|
|
21
|
+
q: 2
|
|
22
|
+
};
|
|
23
|
+
var arimaForecastingName = "arimaForecasting";
|
|
24
|
+
var arimaForecastingMethod = configurableArima(arimaOpts);
|
|
25
|
+
|
|
26
|
+
// src/arima/arima/configured/seasonalArima.ts
|
|
27
|
+
var seasonalArimaOpts = {
|
|
28
|
+
D: 0,
|
|
29
|
+
P: 1,
|
|
30
|
+
Q: 1,
|
|
31
|
+
d: 1,
|
|
32
|
+
p: 2,
|
|
33
|
+
q: 2,
|
|
34
|
+
s: 12
|
|
35
|
+
};
|
|
36
|
+
var seasonalArimaForecastingName = "seasonalArimaForecasting";
|
|
37
|
+
var seasonalArimaForecastingMethod = configurableArima(seasonalArimaOpts);
|
|
38
|
+
export {
|
|
39
|
+
arimaForecastingMethod,
|
|
40
|
+
arimaForecastingName,
|
|
41
|
+
arimaOpts,
|
|
42
|
+
commonOpts,
|
|
43
|
+
configurableArima,
|
|
44
|
+
seasonalArimaForecastingMethod,
|
|
45
|
+
seasonalArimaForecastingName,
|
|
46
|
+
seasonalArimaOpts
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=arima.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/arima/arima/configurable/configurableArima.ts", "../../src/arima/arima/configured/arima.ts", "../../src/arima/arima/configured/seasonalArima.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Payload } from '@xyo-network/sdk-protocol'\nimport type { ARIMAOptions } from 'arima'\nimport ARIMA from 'arima'\n\nimport type {\n Forecast, ForecastingMethod, PayloadValueTransformer,\n} from '../../../model/index.ts'\n\nexport const commonOpts: ARIMAOptions = { verbose: false }\n\nexport type PredictionPayload = Payload<{ error?: number; value: number }>\n\nexport const configurableArima = (opts: ARIMAOptions = commonOpts, predictionSteps = 10): ForecastingMethod => {\n return (payloads: Payload[], transformer: PayloadValueTransformer): Forecast[] => {\n // If there's no input, there's no prediction\n if (payloads.length === 0) return []\n // Transform all the values\n const values = payloads.map(transformer)\n // Train a model on the training set\n const model = new ARIMA({ ...commonOpts, ...opts }).train(values)\n // Use the trained model to predict the next N values\n const predictions = model.predict(predictionSteps)\n // Convert the predictions into payloads\n return predictions[0].map((value, index) => {\n const error = predictions[1][index]\n return { error, value }\n })\n }\n}\n", "import type { ARIMAOptions } from 'arima'\n\nimport type { ForecastingMethod } from '../../../model/index.ts'\nimport { configurableArima } from '../configurable/index.ts'\n\nexport const arimaOpts: ARIMAOptions = {\n d: 1, p: 2, q: 2,\n}\n\nexport const arimaForecastingName = 'arimaForecasting'\n\nexport const arimaForecastingMethod: ForecastingMethod = configurableArima(arimaOpts)\n", "import type { ARIMAOptions } from 'arima'\n\nimport type { ForecastingMethod } from '../../../model/index.ts'\nimport { configurableArima } from '../configurable/index.ts'\n\nexport const seasonalArimaOpts: ARIMAOptions = {\n D: 0, P: 1, Q: 1, d: 1, p: 2, q: 2, s: 12,\n}\n\nexport const seasonalArimaForecastingName = 'seasonalArimaForecasting'\n\nexport const seasonalArimaForecastingMethod: ForecastingMethod = configurableArima(seasonalArimaOpts)\n"],
|
|
5
|
+
"mappings": ";AAEA,OAAO,WAAW;AAMX,IAAM,aAA2B,EAAE,SAAS,MAAM;AAIlD,IAAM,oBAAoB,CAAC,OAAqB,YAAY,kBAAkB,OAA0B;AAC7G,SAAO,CAAC,UAAqB,gBAAqD;AAEhF,QAAI,SAAS,WAAW,EAAG,QAAO,CAAC;AAEnC,UAAM,SAAS,SAAS,IAAI,WAAW;AAEvC,UAAM,QAAQ,IAAI,MAAM,EAAE,GAAG,YAAY,GAAG,KAAK,CAAC,EAAE,MAAM,MAAM;AAEhE,UAAM,cAAc,MAAM,QAAQ,eAAe;AAEjD,WAAO,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,UAAU;AAC1C,YAAM,QAAQ,YAAY,CAAC,EAAE,KAAK;AAClC,aAAO,EAAE,OAAO,MAAM;AAAA,IACxB,CAAC;AAAA,EACH;AACF;;;ACvBO,IAAM,YAA0B;AAAA,EACrC,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AACjB;AAEO,IAAM,uBAAuB;AAE7B,IAAM,yBAA4C,kBAAkB,SAAS;;;ACN7E,IAAM,oBAAkC;AAAA,EAC7C,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AACzC;AAEO,IAAM,+BAA+B;AAErC,IAAM,iCAAoD,kBAAkB,iBAAiB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/neutral/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from '
|
|
2
|
-
export * from '
|
|
3
|
-
export * from '
|
|
1
|
+
export * from './abstract.ts';
|
|
2
|
+
export * from './memory.ts';
|
|
3
|
+
export * from './model.ts';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -1,5 +1,241 @@
|
|
|
1
|
-
// src/
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
// src/abstract/AbstractForecasting.ts
|
|
2
|
+
import { AbstractDiviner } from "@xyo-network/sdk/diviner-abstract";
|
|
3
|
+
import { PayloadBuilder } from "@xyo-network/sdk-protocol";
|
|
4
|
+
|
|
5
|
+
// src/model/Config/Config.ts
|
|
6
|
+
import {
|
|
7
|
+
zodAsFactory,
|
|
8
|
+
zodIsFactory,
|
|
9
|
+
zodToFactory
|
|
10
|
+
} from "@ariestools/sdk";
|
|
11
|
+
import { DivinerConfigZod } from "@xyo-network/sdk/diviner-model";
|
|
12
|
+
import { asSchema as asSchema2 } from "@xyo-network/sdk-protocol";
|
|
13
|
+
import * as z from "zod/mini";
|
|
14
|
+
|
|
15
|
+
// src/model/Schema.ts
|
|
16
|
+
import { asSchema } from "@xyo-network/sdk-protocol";
|
|
17
|
+
var ForecastingDivinerSchema = asSchema("network.xyo.diviner.forecasting", true);
|
|
18
|
+
|
|
19
|
+
// src/model/Config/Config.ts
|
|
20
|
+
var ForecastingDivinerConfigSchema = asSchema2(`${ForecastingDivinerSchema}.config`, true);
|
|
21
|
+
var ForecastingDivinerConfigZod = z.extend(DivinerConfigZod, {
|
|
22
|
+
batchLimit: z.optional(z.number()),
|
|
23
|
+
boundWitnessDiviner: z.optional(z.custom()),
|
|
24
|
+
forecastingMethod: z.optional(z.string()),
|
|
25
|
+
forecastingSteps: z.optional(z.number()),
|
|
26
|
+
jsonPathExpression: z.optional(z.string()),
|
|
27
|
+
maxTrainingLength: z.optional(z.number()),
|
|
28
|
+
schema: z.literal(ForecastingDivinerConfigSchema),
|
|
29
|
+
windowSize: z.optional(z.number()),
|
|
30
|
+
witnessAddresses: z.optional(z.array(z.custom())),
|
|
31
|
+
witnessSchema: z.optional(z.custom())
|
|
32
|
+
});
|
|
33
|
+
var isForecastingDivinerConfig = zodIsFactory(ForecastingDivinerConfigZod);
|
|
34
|
+
var asForecastingDivinerConfig = zodAsFactory(ForecastingDivinerConfigZod, "asForecastingDivinerConfig");
|
|
35
|
+
var toForecastingDivinerConfig = zodToFactory(ForecastingDivinerConfigZod, "toForecastingDivinerConfig");
|
|
36
|
+
|
|
37
|
+
// src/model/Payload/Payload.ts
|
|
38
|
+
import {
|
|
39
|
+
zodAsFactory as zodAsFactory2,
|
|
40
|
+
zodIsFactory as zodIsFactory2,
|
|
41
|
+
zodToFactory as zodToFactory2
|
|
42
|
+
} from "@ariestools/sdk";
|
|
43
|
+
import { asSchema as asSchema3, PayloadZodOfSchema } from "@xyo-network/sdk-protocol";
|
|
44
|
+
import * as z2 from "zod/mini";
|
|
45
|
+
var ForecastPayloadSchema = asSchema3(`${ForecastingDivinerSchema}.forecast`, true);
|
|
46
|
+
var ForecastPayloadZod = z2.extend(PayloadZodOfSchema(ForecastPayloadSchema), {
|
|
47
|
+
sources: z2.array(z2.string()),
|
|
48
|
+
values: z2.array(z2.custom())
|
|
49
|
+
});
|
|
50
|
+
var isForecastPayload = zodIsFactory2(ForecastPayloadZod);
|
|
51
|
+
var asForecastPayload = zodAsFactory2(ForecastPayloadZod, "asForecastPayload");
|
|
52
|
+
var toForecastPayload = zodToFactory2(ForecastPayloadZod, "toForecastPayload");
|
|
53
|
+
|
|
54
|
+
// src/model/Query.ts
|
|
55
|
+
import {
|
|
56
|
+
zodAsFactory as zodAsFactory3,
|
|
57
|
+
zodIsFactory as zodIsFactory3,
|
|
58
|
+
zodToFactory as zodToFactory3
|
|
59
|
+
} from "@ariestools/sdk";
|
|
60
|
+
import {
|
|
61
|
+
asSchema as asSchema4,
|
|
62
|
+
PayloadZodOfSchema as PayloadZodOfSchema2,
|
|
63
|
+
QueryFieldsZod
|
|
64
|
+
} from "@xyo-network/sdk-protocol";
|
|
65
|
+
import * as z3 from "zod/mini";
|
|
66
|
+
var ForecastingDivinerQuerySchema = asSchema4(`${ForecastingDivinerSchema}.query`, true);
|
|
67
|
+
var ForecastingDivinerQueryPayloadZod = z3.extend(PayloadZodOfSchema2(ForecastingDivinerQuerySchema), {
|
|
68
|
+
...QueryFieldsZod.shape,
|
|
69
|
+
batchLimit: z3.optional(z3.number()),
|
|
70
|
+
forecastingMethod: z3.optional(z3.string()),
|
|
71
|
+
forecastingSteps: z3.optional(z3.number()),
|
|
72
|
+
maxTrainingLength: z3.optional(z3.number()),
|
|
73
|
+
timestamp: z3.optional(z3.number()),
|
|
74
|
+
windowSize: z3.optional(z3.number()),
|
|
75
|
+
witnessAddresses: z3.optional(z3.array(z3.custom())),
|
|
76
|
+
witnessSchema: z3.optional(z3.custom())
|
|
77
|
+
});
|
|
78
|
+
var isForecastingDivinerQueryPayload = zodIsFactory3(ForecastingDivinerQueryPayloadZod);
|
|
79
|
+
var asForecastingDivinerQueryPayload = zodAsFactory3(ForecastingDivinerQueryPayloadZod, "asForecastingDivinerQueryPayload");
|
|
80
|
+
var toForecastingDivinerQueryPayload = zodToFactory3(ForecastingDivinerQueryPayloadZod, "toForecastingDivinerQueryPayload");
|
|
81
|
+
|
|
82
|
+
// src/abstract/AbstractForecasting.ts
|
|
83
|
+
var AbstractForecastingDiviner = class extends AbstractDiviner {
|
|
84
|
+
static configSchemas = [...super.configSchemas, ForecastingDivinerConfigSchema];
|
|
85
|
+
static defaultConfigSchema = ForecastingDivinerConfigSchema;
|
|
86
|
+
async divineHandler(payloads) {
|
|
87
|
+
const query = payloads?.find(isForecastingDivinerQueryPayload);
|
|
88
|
+
if (!query) return [];
|
|
89
|
+
const windowSettings = { ...this.config, ...this.query };
|
|
90
|
+
const stopTimestamp = query.timestamp ?? Date.now();
|
|
91
|
+
const startTimestamp = windowSettings.windowSize ? stopTimestamp - windowSettings.windowSize : 0;
|
|
92
|
+
const data = await this.getPayloadsInWindow(startTimestamp, stopTimestamp);
|
|
93
|
+
const sources = await PayloadBuilder.dataHashes(data);
|
|
94
|
+
const values = await this.forecastingMethod(data, this.transformer);
|
|
95
|
+
const response = {
|
|
96
|
+
schema: ForecastPayloadSchema,
|
|
97
|
+
sources,
|
|
98
|
+
values
|
|
99
|
+
};
|
|
100
|
+
return [response];
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
// src/memory/MemoryForecastingDiviner.ts
|
|
105
|
+
import { assertEx, exists } from "@ariestools/sdk";
|
|
106
|
+
import { asArchivistInstance } from "@xyo-network/sdk/archivist-model";
|
|
107
|
+
import { BoundWitnessDivinerQuerySchema } from "@xyo-network/sdk/diviner-boundwitness/model";
|
|
108
|
+
import { asDivinerInstance } from "@xyo-network/sdk/diviner-model";
|
|
109
|
+
import { JSONPath } from "jsonpath-plus";
|
|
110
|
+
|
|
111
|
+
// src/arima/arima/configurable/configurableArima.ts
|
|
112
|
+
import ARIMA from "arima";
|
|
113
|
+
var commonOpts = { verbose: false };
|
|
114
|
+
var configurableArima = (opts = commonOpts, predictionSteps = 10) => {
|
|
115
|
+
return (payloads, transformer) => {
|
|
116
|
+
if (payloads.length === 0) return [];
|
|
117
|
+
const values = payloads.map(transformer);
|
|
118
|
+
const model = new ARIMA({ ...commonOpts, ...opts }).train(values);
|
|
119
|
+
const predictions = model.predict(predictionSteps);
|
|
120
|
+
return predictions[0].map((value, index) => {
|
|
121
|
+
const error = predictions[1][index];
|
|
122
|
+
return { error, value };
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
// src/arima/arima/configured/arima.ts
|
|
128
|
+
var arimaOpts = {
|
|
129
|
+
d: 1,
|
|
130
|
+
p: 2,
|
|
131
|
+
q: 2
|
|
132
|
+
};
|
|
133
|
+
var arimaForecastingMethod = configurableArima(arimaOpts);
|
|
134
|
+
|
|
135
|
+
// src/arima/arima/configured/seasonalArima.ts
|
|
136
|
+
var seasonalArimaOpts = {
|
|
137
|
+
D: 0,
|
|
138
|
+
P: 1,
|
|
139
|
+
Q: 1,
|
|
140
|
+
d: 1,
|
|
141
|
+
p: 2,
|
|
142
|
+
q: 2,
|
|
143
|
+
s: 12
|
|
144
|
+
};
|
|
145
|
+
var seasonalArimaForecastingMethod = configurableArima(seasonalArimaOpts);
|
|
146
|
+
|
|
147
|
+
// src/memory/MemoryForecastingDiviner.ts
|
|
148
|
+
var getJsonPathTransformer = (pathExpression) => {
|
|
149
|
+
return (x) => {
|
|
150
|
+
const ret = JSONPath({ path: pathExpression, json: x })[0];
|
|
151
|
+
if (typeof ret === "number") return ret;
|
|
152
|
+
throw new Error("Parsed invalid payload value");
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
var defaultBatchLimit = 1e3;
|
|
156
|
+
var defaultMaxTrainingLength = 1e4;
|
|
157
|
+
var MemoryForecastingDiviner = class _MemoryForecastingDiviner extends AbstractForecastingDiviner {
|
|
158
|
+
static configSchemas = [...super.configSchemas, ForecastingDivinerConfigSchema];
|
|
159
|
+
static defaultConfigSchema = ForecastingDivinerConfigSchema;
|
|
160
|
+
static forecastingMethodDict = {
|
|
161
|
+
arimaForecasting: arimaForecastingMethod,
|
|
162
|
+
seasonalArimaForecasting: seasonalArimaForecastingMethod
|
|
163
|
+
};
|
|
164
|
+
get boundWitnessDiviner() {
|
|
165
|
+
return assertEx(this.config.boundWitnessDiviner, () => "No boundWitnessDiviner configured");
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* The max number of records to search during the batch query
|
|
169
|
+
*/
|
|
170
|
+
get batchLimit() {
|
|
171
|
+
return this.config.batchLimit ?? defaultBatchLimit;
|
|
172
|
+
}
|
|
173
|
+
get forecastingMethod() {
|
|
174
|
+
const forecastingMethodName = assertEx(this.config.forecastingMethod, () => "Missing forecastingMethod in config");
|
|
175
|
+
const forecastingMethod = _MemoryForecastingDiviner.forecastingMethodDict[forecastingMethodName];
|
|
176
|
+
if (forecastingMethod) return forecastingMethod;
|
|
177
|
+
throw new Error(`Unsupported forecasting method: ${forecastingMethodName}`);
|
|
178
|
+
}
|
|
179
|
+
get maxTrainingLength() {
|
|
180
|
+
return this.config.maxTrainingLength ?? defaultMaxTrainingLength;
|
|
181
|
+
}
|
|
182
|
+
get transformer() {
|
|
183
|
+
const pathExpression = assertEx(this.config.jsonPathExpression, () => "Missing jsonPathExpression in config");
|
|
184
|
+
return getJsonPathTransformer(pathExpression);
|
|
185
|
+
}
|
|
186
|
+
async getPayloadsInWindow(_startTimestamp, _stopTimestamp) {
|
|
187
|
+
const addresses = this.config.witnessAddresses;
|
|
188
|
+
const payload_schemas = [assertEx(this.config.witnessSchema, () => "Missing witnessSchema in config")];
|
|
189
|
+
const payloads = [];
|
|
190
|
+
const archivist = asArchivistInstance(await this.archivistInstance(), () => "Unable to resolve archivist", { required: true });
|
|
191
|
+
const bwDiviner = asDivinerInstance(
|
|
192
|
+
await this.resolve(this.boundWitnessDiviner),
|
|
193
|
+
"Unable to resolve boundWitnessDiviner"
|
|
194
|
+
);
|
|
195
|
+
const limit = this.batchLimit;
|
|
196
|
+
const witnessSchema = assertEx(this.config.witnessSchema, () => "Missing witnessSchema in config");
|
|
197
|
+
let more = true;
|
|
198
|
+
while (more || payloads.length < this.maxTrainingLength) {
|
|
199
|
+
const query = {
|
|
200
|
+
addresses,
|
|
201
|
+
limit,
|
|
202
|
+
payload_schemas,
|
|
203
|
+
schema: BoundWitnessDivinerQuerySchema
|
|
204
|
+
};
|
|
205
|
+
const boundWitnesses = (await bwDiviner.divine([query])).filter(
|
|
206
|
+
// TODO; Replace with sequence
|
|
207
|
+
// bw => bw.$timestamp && bw.$timestamp >= startTimestamp && bw.$timestamp <= stopTimestamp,
|
|
208
|
+
(_) => true
|
|
209
|
+
);
|
|
210
|
+
if (boundWitnesses.length === 0) break;
|
|
211
|
+
more = boundWitnesses.length === limit;
|
|
212
|
+
const hashes = boundWitnesses.map((bw) => bw.payload_hashes[bw.payload_schemas.indexOf(witnessSchema)]).filter(exists);
|
|
213
|
+
if (hashes.length > 0) {
|
|
214
|
+
const batchPayloads = (await archivist.get(hashes)).filter(exists);
|
|
215
|
+
payloads.push(...batchPayloads);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return payloads;
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
export {
|
|
222
|
+
AbstractForecastingDiviner,
|
|
223
|
+
ForecastPayloadSchema,
|
|
224
|
+
ForecastPayloadZod,
|
|
225
|
+
ForecastingDivinerConfigSchema,
|
|
226
|
+
ForecastingDivinerConfigZod,
|
|
227
|
+
ForecastingDivinerQueryPayloadZod,
|
|
228
|
+
ForecastingDivinerQuerySchema,
|
|
229
|
+
ForecastingDivinerSchema,
|
|
230
|
+
MemoryForecastingDiviner,
|
|
231
|
+
asForecastPayload,
|
|
232
|
+
asForecastingDivinerConfig,
|
|
233
|
+
asForecastingDivinerQueryPayload,
|
|
234
|
+
isForecastPayload,
|
|
235
|
+
isForecastingDivinerConfig,
|
|
236
|
+
isForecastingDivinerQueryPayload,
|
|
237
|
+
toForecastPayload,
|
|
238
|
+
toForecastingDivinerConfig,
|
|
239
|
+
toForecastingDivinerQueryPayload
|
|
240
|
+
};
|
|
5
241
|
//# sourceMappingURL=index.mjs.map
|