@dxo/inspect 0.0.0 → 0.0.10

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/README.md CHANGED
@@ -1,3 +1,8 @@
1
- # @dxo/inspect
1
+ # 🔍 @dxo/inspect
2
2
 
3
- Placeholder package (0.0.0). Reserved for the DXO project.
3
+ **Placeholder developer preview, API unstable.**
4
+
5
+ Run / metric / artifact / profile **protocol types** for Studio and Trainer adapters. Does not depend on VMZ.
6
+ Append-only run store and live transport arrive in later U1 slices.
7
+
8
+ See workspace Living design for contracts (`inspect` / Studio product line).
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @dxo/inspect — Run / metric / artifact / profile protocols (v0).
3
+ */
4
+ export { type ArtifactKindV0, type ArtifactV0, type ConfusionMatrixArtifactV0, type ImageSamplesArtifactV0, type ImageSampleV0, INSPECT_PROTOCOL, INSPECT_PROTOCOL_VERSION, type InspectEventV0, inspectVersion, type MetricV0, type ProfileSpan, type ProfileTraceV0, profileTraceUnavailable, type RunMetaV0, type RunStatus, } from './schemas.js';
5
+ export type { RunRecorderOptions, RunSummary } from './store.js';
6
+ export { defaultRunsRoot, listRuns, RunRecorder, readEvents, readRunMeta } from './store.js';
7
+ export type { RecordTrainIterOptions, TrainEventLike } from './train-adapter.js';
8
+ export { recordTrainIter, trainEventToInspectEvents } from './train-adapter.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,KAAK,cAAc,EACnB,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,uBAAuB,EACvB,KAAK,SAAS,EACd,KAAK,SAAS,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7F,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @dxo/inspect — Run / metric / artifact / profile protocols (v0).
3
+ */
4
+ export { INSPECT_PROTOCOL, INSPECT_PROTOCOL_VERSION, inspectVersion, profileTraceUnavailable, } from './schemas.js';
5
+ export { defaultRunsRoot, listRuns, RunRecorder, readEvents, readRunMeta } from './store.js';
6
+ export { recordTrainIter, trainEventToInspectEvents } from './train-adapter.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAMH,gBAAgB,EAChB,wBAAwB,EAExB,cAAc,EAId,uBAAuB,GAG1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7F,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,106 @@
1
+ export declare const INSPECT_PROTOCOL: "dxo-inspect";
2
+ export declare const INSPECT_PROTOCOL_VERSION: 0;
3
+ export type RunStatus = 'running' | 'ok' | 'cancelled' | 'error';
4
+ export type RunMetaV0 = {
5
+ format: typeof INSPECT_PROTOCOL;
6
+ version: typeof INSPECT_PROTOCOL_VERSION;
7
+ runId: string;
8
+ startedAtMs: number;
9
+ endedAtMs?: number;
10
+ label?: string;
11
+ status: RunStatus;
12
+ hyperparams?: Record<string, unknown>;
13
+ };
14
+ export type MetricV0 = {
15
+ name: string;
16
+ value: number;
17
+ step: number;
18
+ wallTimeMs: number;
19
+ };
20
+ export type ArtifactKindV0 = 'checkpoint' | 'state' | 'image-samples' | 'confusion-matrix' | 'other';
21
+ export type ImageSampleV0 = {
22
+ uri: string;
23
+ label?: number | string;
24
+ pred?: number | string;
25
+ };
26
+ export type ImageSamplesArtifactV0 = {
27
+ samples: ImageSampleV0[];
28
+ };
29
+ export type ConfusionMatrixArtifactV0 = {
30
+ labels: string[];
31
+ matrix: number[][];
32
+ };
33
+ export type ArtifactV0 = {
34
+ name: string;
35
+ kind: ArtifactKindV0;
36
+ uri: string;
37
+ digest?: string;
38
+ wallTimeMs: number;
39
+ };
40
+ export type InspectEventV0 = {
41
+ type: 'run/start';
42
+ runId: string;
43
+ wallTimeMs: number;
44
+ meta?: Record<string, unknown>;
45
+ } | {
46
+ type: 'run/end';
47
+ runId: string;
48
+ wallTimeMs: number;
49
+ status: Exclude<RunStatus, 'running'>;
50
+ error?: string;
51
+ } | {
52
+ type: 'train/epoch_start';
53
+ runId: string;
54
+ wallTimeMs: number;
55
+ epoch: number;
56
+ epochs: number;
57
+ } | {
58
+ type: 'train/batch';
59
+ runId: string;
60
+ wallTimeMs: number;
61
+ epoch: number;
62
+ step: number;
63
+ loss: number;
64
+ } | {
65
+ type: 'train/epoch_end';
66
+ runId: string;
67
+ wallTimeMs: number;
68
+ epoch: number;
69
+ meanLoss: number;
70
+ steps: number;
71
+ } | {
72
+ type: 'metric/scalar';
73
+ runId: string;
74
+ wallTimeMs: number;
75
+ metric: MetricV0;
76
+ } | {
77
+ type: 'artifact/ref';
78
+ runId: string;
79
+ wallTimeMs: number;
80
+ artifact: ArtifactV0;
81
+ } | {
82
+ type: 'log';
83
+ runId: string;
84
+ wallTimeMs: number;
85
+ level: 'info' | 'warn' | 'error';
86
+ message: string;
87
+ };
88
+ export type ProfileSpan = {
89
+ name: string;
90
+ category: 'op' | 'kernel' | 'transfer' | 'readback' | 'other';
91
+ startMs: number;
92
+ endMs: number;
93
+ meta?: Record<string, unknown>;
94
+ };
95
+ export type ProfileTraceV0 = {
96
+ format: 'dxo-profile';
97
+ version: 0;
98
+ /** When the runtime emits no spans, set unavailable — never invent start/end times. */
99
+ availability?: 'ready' | 'unavailable';
100
+ unavailableReason?: string;
101
+ spans: ProfileSpan[];
102
+ };
103
+ /** Helper: structured unavailable profile (empty spans). */
104
+ export declare function profileTraceUnavailable(reason: string): ProfileTraceV0;
105
+ export declare function inspectVersion(): string;
106
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,EAAG,aAAsB,CAAC;AACvD,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAC;AAEnD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,OAAO,CAAC;AAEjE,MAAM,MAAM,SAAS,GAAG;IACpB,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAChC,OAAO,EAAE,OAAO,wBAAwB,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,eAAe,GAAG,kBAAkB,GAAG,OAAO,CAAC;AAErG,MAAM,MAAM,aAAa,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,OAAO,EAAE,aAAa,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACpC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GACpB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACxF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7G;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/F;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrG;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9G;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAA;CAAE,GACjF;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5G,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,IAAI,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,CAAC,CAAC;IACX,uFAAuF;IACvF,YAAY,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC;AAEF,4DAA4D;AAC5D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAQtE;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
@@ -0,0 +1,16 @@
1
+ export const INSPECT_PROTOCOL = 'dxo-inspect';
2
+ export const INSPECT_PROTOCOL_VERSION = 0;
3
+ /** Helper: structured unavailable profile (empty spans). */
4
+ export function profileTraceUnavailable(reason) {
5
+ return {
6
+ format: 'dxo-profile',
7
+ version: 0,
8
+ availability: 'unavailable',
9
+ unavailableReason: reason,
10
+ spans: [],
11
+ };
12
+ }
13
+ export function inspectVersion() {
14
+ return `${INSPECT_PROTOCOL}@${INSPECT_PROTOCOL_VERSION}`;
15
+ }
16
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAsB,CAAC;AACvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAU,CAAC;AA0EnD,4DAA4D;AAC5D,MAAM,UAAU,uBAAuB,CAAC,MAAc;IAClD,OAAO;QACH,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,aAAa;QAC3B,iBAAiB,EAAE,MAAM;QACzB,KAAK,EAAE,EAAE;KACZ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,cAAc;IAC1B,OAAO,GAAG,gBAAgB,IAAI,wBAAwB,EAAE,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { type ArtifactKindV0, type ConfusionMatrixArtifactV0, type ImageSamplesArtifactV0, type InspectEventV0, type ProfileTraceV0, type RunMetaV0, type RunStatus } from './schemas.js';
2
+ export type RunRecorderOptions = {
3
+ /** Root directory; default `{cwd}/.dxo/runs` or `DXO_RUNS_DIR`. */
4
+ root?: string;
5
+ runId?: string;
6
+ label?: string;
7
+ hyperparams?: Record<string, unknown>;
8
+ };
9
+ export type RunSummary = {
10
+ runId: string;
11
+ meta: RunMetaV0;
12
+ };
13
+ export declare function defaultRunsRoot(): string;
14
+ export declare class RunRecorder {
15
+ #private;
16
+ readonly runId: string;
17
+ readonly root: string;
18
+ readonly runPath: string;
19
+ private constructor();
20
+ static open(options?: RunRecorderOptions): Promise<RunRecorder>;
21
+ append(event: InspectEventV0): Promise<void>;
22
+ /** Write artifact bytes and emit artifact/ref. Returns relative URI under run dir. */
23
+ writeArtifact(name: string, kind: ArtifactKindV0, body: string): Promise<string>;
24
+ writeArtifactBytes(name: string, kind: ArtifactKindV0, body: Buffer): Promise<string>;
25
+ writeConfusionMatrix(data: ConfusionMatrixArtifactV0): Promise<string>;
26
+ writeImageSamples(data: ImageSamplesArtifactV0): Promise<string>;
27
+ writeProfileTrace(data: ProfileTraceV0): Promise<string>;
28
+ writeModelGraph(data: unknown): Promise<string>;
29
+ close(status: Exclude<RunStatus, 'running'>, error?: string): Promise<void>;
30
+ }
31
+ export declare function listRuns(root?: string): Promise<RunSummary[]>;
32
+ export declare function readRunMeta(root: string, runId: string): Promise<RunMetaV0 | null>;
33
+ export declare function readEvents(root: string, runId: string): Promise<InspectEventV0[]>;
34
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAG3B,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;AAMtB,MAAM,MAAM,kBAAkB,GAAG;IAC7B,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;CACnB,CAAC;AAMF,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAMD,qBAAa,WAAW;;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAIzB,OAAO;WAOM,IAAI,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BnE,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,sFAAsF;IAChF,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhF,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBrF,oBAAoB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAItE,iBAAiB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxD,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAcpF;AAED,wBAAsB,QAAQ,CAAC,IAAI,GAAE,MAA0B,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CActF;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAOxF;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAUvF"}
package/dist/store.js ADDED
@@ -0,0 +1,153 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { appendFile, mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { INSPECT_PROTOCOL, INSPECT_PROTOCOL_VERSION, } from './schemas.js';
5
+ const EVENTS_FILE = 'events.jsonl';
6
+ const META_FILE = 'meta.json';
7
+ const ARTIFACTS_DIR = 'artifacts';
8
+ function nowMs() {
9
+ return Date.now();
10
+ }
11
+ export function defaultRunsRoot() {
12
+ const fromEnv = process.env.DXO_RUNS_DIR?.trim();
13
+ if (fromEnv)
14
+ return path.resolve(fromEnv);
15
+ return path.resolve(process.cwd(), '.dxo', 'runs');
16
+ }
17
+ function runDir(root, runId) {
18
+ return path.join(root, runId);
19
+ }
20
+ export class RunRecorder {
21
+ runId;
22
+ root;
23
+ runPath;
24
+ #closed = false;
25
+ #meta;
26
+ constructor(root, runId, meta) {
27
+ this.root = root;
28
+ this.runId = runId;
29
+ this.runPath = runDir(root, runId);
30
+ this.#meta = meta;
31
+ }
32
+ static async open(options = {}) {
33
+ const root = options.root ?? defaultRunsRoot();
34
+ const runId = options.runId ?? randomUUID();
35
+ const startedAtMs = nowMs();
36
+ const meta = {
37
+ format: INSPECT_PROTOCOL,
38
+ version: INSPECT_PROTOCOL_VERSION,
39
+ runId,
40
+ startedAtMs,
41
+ label: options.label,
42
+ status: 'running',
43
+ hyperparams: options.hyperparams,
44
+ };
45
+ const dir = runDir(root, runId);
46
+ await mkdir(path.join(dir, ARTIFACTS_DIR), { recursive: true });
47
+ await writeFile(path.join(dir, META_FILE), `${JSON.stringify(meta, null, 2)}\n`, 'utf8');
48
+ const recorder = new RunRecorder(root, runId, meta);
49
+ await recorder.append({
50
+ type: 'run/start',
51
+ runId,
52
+ wallTimeMs: startedAtMs,
53
+ meta: options.hyperparams,
54
+ });
55
+ return recorder;
56
+ }
57
+ async append(event) {
58
+ if (this.#closed)
59
+ throw new Error(`run ${this.runId} is closed`);
60
+ const line = `${JSON.stringify(event)}\n`;
61
+ await appendFile(path.join(this.runPath, EVENTS_FILE), line, 'utf8');
62
+ }
63
+ /** Write artifact bytes and emit artifact/ref. Returns relative URI under run dir. */
64
+ async writeArtifact(name, kind, body) {
65
+ return this.writeArtifactBytes(name, kind, Buffer.from(body, 'utf8'));
66
+ }
67
+ async writeArtifactBytes(name, kind, body) {
68
+ const rel = path.join(ARTIFACTS_DIR, name);
69
+ const abs = path.join(this.runPath, rel);
70
+ await mkdir(path.dirname(abs), { recursive: true });
71
+ await writeFile(abs, body);
72
+ const digest = createHash('sha256').update(body).digest('hex');
73
+ await this.append({
74
+ type: 'artifact/ref',
75
+ runId: this.runId,
76
+ wallTimeMs: nowMs(),
77
+ artifact: {
78
+ name,
79
+ kind,
80
+ uri: rel.replace(/\\/g, '/'),
81
+ digest,
82
+ wallTimeMs: nowMs(),
83
+ },
84
+ });
85
+ return rel;
86
+ }
87
+ async writeConfusionMatrix(data) {
88
+ return this.writeArtifact('confusion-matrix.json', 'confusion-matrix', JSON.stringify(data, null, 2));
89
+ }
90
+ async writeImageSamples(data) {
91
+ return this.writeArtifact('image-samples.json', 'image-samples', JSON.stringify(data, null, 2));
92
+ }
93
+ async writeProfileTrace(data) {
94
+ return this.writeArtifact('profile-trace.json', 'other', JSON.stringify(data, null, 2));
95
+ }
96
+ async writeModelGraph(data) {
97
+ return this.writeArtifact('model-graph.json', 'other', JSON.stringify(data, null, 2));
98
+ }
99
+ async close(status, error) {
100
+ if (this.#closed)
101
+ return;
102
+ const endedAtMs = nowMs();
103
+ this.#meta = { ...this.#meta, status, endedAtMs };
104
+ await writeFile(path.join(this.runPath, META_FILE), `${JSON.stringify(this.#meta, null, 2)}\n`, 'utf8');
105
+ await this.append({
106
+ type: 'run/end',
107
+ runId: this.runId,
108
+ wallTimeMs: endedAtMs,
109
+ status,
110
+ error,
111
+ });
112
+ this.#closed = true;
113
+ }
114
+ }
115
+ export async function listRuns(root = defaultRunsRoot()) {
116
+ let entries;
117
+ try {
118
+ entries = await readdir(root);
119
+ }
120
+ catch {
121
+ return [];
122
+ }
123
+ const out = [];
124
+ for (const runId of entries) {
125
+ const meta = await readRunMeta(root, runId);
126
+ if (meta)
127
+ out.push({ runId, meta });
128
+ }
129
+ out.sort((a, b) => b.meta.startedAtMs - a.meta.startedAtMs);
130
+ return out;
131
+ }
132
+ export async function readRunMeta(root, runId) {
133
+ try {
134
+ const text = await readFile(path.join(runDir(root, runId), META_FILE), 'utf8');
135
+ return JSON.parse(text);
136
+ }
137
+ catch {
138
+ return null;
139
+ }
140
+ }
141
+ export async function readEvents(root, runId) {
142
+ try {
143
+ const text = await readFile(path.join(runDir(root, runId), EVENTS_FILE), 'utf8');
144
+ return text
145
+ .split('\n')
146
+ .filter((line) => line.trim().length > 0)
147
+ .map((line) => JSON.parse(line));
148
+ }
149
+ catch {
150
+ return [];
151
+ }
152
+ }
153
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { InspectEventV0 } from './schemas.js';
2
+ import { RunRecorder, type RunRecorderOptions } from './store.js';
3
+ /** Minimal TrainEvent shape (matches @dxo/train without a hard dependency). */
4
+ export type TrainEventLike = {
5
+ type: 'epoch_start';
6
+ epoch: number;
7
+ epochs: number;
8
+ } | {
9
+ type: 'batch';
10
+ epoch: number;
11
+ step: number;
12
+ loss: number;
13
+ } | {
14
+ type: 'epoch_end';
15
+ epoch: number;
16
+ meanLoss: number;
17
+ steps: number;
18
+ } | {
19
+ type: 'checkpoint';
20
+ epoch: number;
21
+ document: unknown;
22
+ state: unknown;
23
+ } | {
24
+ type: 'aborted';
25
+ reason: 'signal';
26
+ epoch: number;
27
+ step: number;
28
+ } | {
29
+ type: 'done';
30
+ epochs: number;
31
+ steps: number;
32
+ finalMeanLoss?: number;
33
+ };
34
+ export declare function trainEventToInspectEvents(runId: string, event: TrainEventLike): InspectEventV0[];
35
+ export type RecordTrainIterOptions = RunRecorderOptions & {
36
+ checkpointEncoder?: (document: unknown) => string;
37
+ };
38
+ /**
39
+ * Consume a Trainer fitIter stream and append inspect events to the local run store.
40
+ */
41
+ export declare function recordTrainIter(events: AsyncIterable<TrainEventLike>, options?: RecordTrainIterOptions): Promise<{
42
+ runId: string;
43
+ recorder: RunRecorder;
44
+ status: 'ok' | 'cancelled';
45
+ }>;
46
+ //# sourceMappingURL=train-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"train-adapter.d.ts","sourceRoot":"","sources":["../src/train-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAElE,+EAA+E;AAC/E,MAAM,MAAM,cAAc,GACpB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrE;IACI,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAClB,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAM9E,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,cAAc,EAAE,CA8DhG;AAED,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,GAAG;IACtD,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;CACrD,CAAC;AAEF;;GAEG;AACH,wBAAsB,eAAe,CACjC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,EACrC,OAAO,GAAE,sBAA2B,GACrC,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,IAAI,GAAG,WAAW,CAAA;CAAE,CAAC,CA0B/E"}
@@ -0,0 +1,97 @@
1
+ import { RunRecorder } from './store.js';
2
+ function wallTimeMs() {
3
+ return Date.now();
4
+ }
5
+ export function trainEventToInspectEvents(runId, event) {
6
+ const t = wallTimeMs();
7
+ switch (event.type) {
8
+ case 'epoch_start':
9
+ return [{ type: 'train/epoch_start', runId, wallTimeMs: t, epoch: event.epoch, epochs: event.epochs }];
10
+ case 'batch':
11
+ return [
12
+ { type: 'train/batch', runId, wallTimeMs: t, epoch: event.epoch, step: event.step, loss: event.loss },
13
+ {
14
+ type: 'metric/scalar',
15
+ runId,
16
+ wallTimeMs: t,
17
+ metric: { name: 'loss', value: event.loss, step: event.step, wallTimeMs: t },
18
+ },
19
+ ];
20
+ case 'epoch_end':
21
+ return [
22
+ {
23
+ type: 'train/epoch_end',
24
+ runId,
25
+ wallTimeMs: t,
26
+ epoch: event.epoch,
27
+ meanLoss: event.meanLoss,
28
+ steps: event.steps,
29
+ },
30
+ {
31
+ type: 'metric/scalar',
32
+ runId,
33
+ wallTimeMs: t,
34
+ metric: {
35
+ name: 'mean_loss',
36
+ value: event.meanLoss,
37
+ step: event.epoch,
38
+ wallTimeMs: t,
39
+ },
40
+ },
41
+ ];
42
+ case 'aborted':
43
+ return [
44
+ {
45
+ type: 'log',
46
+ runId,
47
+ wallTimeMs: t,
48
+ level: 'warn',
49
+ message: `training aborted at epoch ${event.epoch} step ${event.step}`,
50
+ },
51
+ ];
52
+ case 'done':
53
+ return [
54
+ {
55
+ type: 'log',
56
+ runId,
57
+ wallTimeMs: t,
58
+ level: 'info',
59
+ message: `training done: epochs=${event.epochs} steps=${event.steps}`,
60
+ },
61
+ ];
62
+ case 'checkpoint':
63
+ return [];
64
+ default:
65
+ return [];
66
+ }
67
+ }
68
+ /**
69
+ * Consume a Trainer fitIter stream and append inspect events to the local run store.
70
+ */
71
+ export async function recordTrainIter(events, options = {}) {
72
+ const recorder = await RunRecorder.open(options);
73
+ const encoder = options.checkpointEncoder ?? ((doc) => JSON.stringify(doc));
74
+ let status = 'ok';
75
+ try {
76
+ for await (const event of events) {
77
+ if (event.type === 'checkpoint') {
78
+ const name = `checkpoint-epoch-${event.epoch}.json`;
79
+ await recorder.writeArtifact(name, 'checkpoint', encoder(event.document));
80
+ }
81
+ if (event.type === 'aborted') {
82
+ status = 'cancelled';
83
+ }
84
+ for (const inspectEvent of trainEventToInspectEvents(recorder.runId, event)) {
85
+ await recorder.append(inspectEvent);
86
+ }
87
+ }
88
+ await recorder.close(status);
89
+ }
90
+ catch (err) {
91
+ const message = err instanceof Error ? err.message : String(err);
92
+ await recorder.close('error', message);
93
+ throw err;
94
+ }
95
+ return { runId: recorder.runId, recorder, status };
96
+ }
97
+ //# sourceMappingURL=train-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"train-adapter.js","sourceRoot":"","sources":["../src/train-adapter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,42 @@
1
1
  {
2
- "name": "@dxo/inspect",
3
- "version": "0.0.0",
4
- "description": "DXO placeholder — not for production use.",
5
- "license": "MIT",
6
- "private": false,
7
- "files": [
8
- "README.md"
9
- ]
2
+ "name": "@dxo/inspect",
3
+ "version": "0.0.10",
4
+ "type": "module",
5
+ "description": "DXO run / metric / artifact / profile event protocols (placeholder, API unstable)",
6
+ "license": "Apache-2.0",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc -p tsconfig.json"
21
+ },
22
+ "keywords": [
23
+ "dxo",
24
+ "inspect",
25
+ "metrics",
26
+ "profiler",
27
+ "typescript",
28
+ "deep-learning"
29
+ ],
30
+ "homepage": "https://github.com/ai4waifu/dxo-framework#readme",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/ai4waifu/dxo-framework.git",
34
+ "directory": "projects/runtimes/dxo-inspect"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/ai4waifu/dxo-framework/issues"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public"
41
+ }
10
42
  }