@ghchinoy/litflow 0.2.8 → 0.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/CHANGELOG.md +5 -0
- package/dist/breadboard/data/common.d.ts +35 -0
- package/dist/breadboard/engine/loader/capability.d.ts +21 -0
- package/dist/breadboard/engine/loader/loader.d.ts +29 -0
- package/dist/breadboard/engine/loader/resolve-graph-urls.d.ts +16 -0
- package/dist/breadboard/engine/runtime/bubble.d.ts +23 -0
- package/dist/breadboard/engine/runtime/graph-based-node-handler.d.ts +16 -0
- package/dist/breadboard/engine/runtime/handler.d.ts +27 -0
- package/dist/breadboard/engine/runtime/harness/events.d.ts +145 -0
- package/dist/breadboard/engine/runtime/harness/local.d.ts +10 -0
- package/dist/breadboard/engine/runtime/harness/plan-runner.d.ts +25 -0
- package/dist/breadboard/engine/runtime/run/invoke-graph.d.ts +12 -0
- package/dist/breadboard/engine/runtime/run/node-invoker.d.ts +12 -0
- package/dist/breadboard/engine/runtime/run/run-graph.d.ts +12 -0
- package/dist/breadboard/engine/runtime/run.d.ts +29 -0
- package/dist/breadboard/engine/runtime/sandbox/capabilities-manager.d.ts +15 -0
- package/dist/breadboard/engine/runtime/sandbox/file-system-handler-factory.d.ts +15 -0
- package/dist/breadboard/engine/runtime/sandbox/invoke-describer.d.ts +10 -0
- package/dist/breadboard/engine/runtime/static/create-plan.d.ts +14 -0
- package/dist/breadboard/engine/runtime/static/orchestrator.d.ts +72 -0
- package/dist/breadboard/engine/runtime/traversal/index.d.ts +20 -0
- package/dist/breadboard/engine/runtime/traversal/iterator.d.ts +12 -0
- package/dist/breadboard/engine/runtime/traversal/machine.d.ts +14 -0
- package/dist/breadboard/engine/runtime/traversal/representation.d.ts +27 -0
- package/dist/breadboard/engine/runtime/traversal/result.d.ts +24 -0
- package/dist/breadboard/engine/runtime/traversal/state.d.ts +34 -0
- package/dist/breadboard/lit-flow-runner.d.ts +13 -0
- package/dist/breadboard/lit-flow-runner.test.d.ts +1 -0
- package/dist/breadboard/runner.d.ts +13 -0
- package/dist/index.d.ts +2 -0
- package/dist/lit-chiclet.d.ts +9 -0
- package/dist/lit-schema-node.d.ts +13 -0
- package/dist/lit-schema-node.test.d.ts +1 -0
- package/dist/litflow.js +708 -442
- package/dist/litflow.js.map +1 -1
- package/package.json +15 -3
- package/src/breadboard/data/common.ts +450 -0
- package/src/breadboard/data/file-system.ts +54 -0
- package/src/breadboard/data/inline-all-content.ts +126 -0
- package/src/breadboard/data/recent-boards.ts +118 -0
- package/src/breadboard/data/save-outputs-as-file.ts +104 -0
- package/src/breadboard/engine/add-run-module.ts +168 -0
- package/src/breadboard/engine/editor/blank.ts +65 -0
- package/src/breadboard/engine/editor/edge.ts +27 -0
- package/src/breadboard/engine/editor/events.ts +64 -0
- package/src/breadboard/engine/editor/graph.ts +383 -0
- package/src/breadboard/engine/editor/history.ts +98 -0
- package/src/breadboard/engine/editor/index.ts +8 -0
- package/src/breadboard/engine/editor/operations/add-asset.ts +45 -0
- package/src/breadboard/engine/editor/operations/add-edge.ts +142 -0
- package/src/breadboard/engine/editor/operations/add-graph.ts +47 -0
- package/src/breadboard/engine/editor/operations/add-module.ts +64 -0
- package/src/breadboard/engine/editor/operations/add-node.ts +86 -0
- package/src/breadboard/engine/editor/operations/change-asset-metadata.ts +70 -0
- package/src/breadboard/engine/editor/operations/change-configuration.ts +82 -0
- package/src/breadboard/engine/editor/operations/change-edge-metadata.ts +58 -0
- package/src/breadboard/engine/editor/operations/change-edge.ts +111 -0
- package/src/breadboard/engine/editor/operations/change-graph-metadata.ts +52 -0
- package/src/breadboard/engine/editor/operations/change-metadata.ts +92 -0
- package/src/breadboard/engine/editor/operations/change-module.ts +64 -0
- package/src/breadboard/engine/editor/operations/error.ts +21 -0
- package/src/breadboard/engine/editor/operations/remove-asset.ts +48 -0
- package/src/breadboard/engine/editor/operations/remove-edge.ts +89 -0
- package/src/breadboard/engine/editor/operations/remove-graph.ts +49 -0
- package/src/breadboard/engine/editor/operations/remove-integration.ts +54 -0
- package/src/breadboard/engine/editor/operations/remove-module.ts +69 -0
- package/src/breadboard/engine/editor/operations/remove-node.ts +86 -0
- package/src/breadboard/engine/editor/operations/replace-graph.ts +52 -0
- package/src/breadboard/engine/editor/operations/toggle-export.ts +72 -0
- package/src/breadboard/engine/editor/operations/upsert-integration.ts +43 -0
- package/src/breadboard/engine/editor/selection.ts +58 -0
- package/src/breadboard/engine/editor/transforms/configure-sidewire.ts +73 -0
- package/src/breadboard/engine/editor/transforms/isolate-selection.ts +54 -0
- package/src/breadboard/engine/editor/transforms/merge-graph.ts +58 -0
- package/src/breadboard/engine/editor/transforms/move-to-graph.ts +102 -0
- package/src/breadboard/engine/editor/transforms/move-to-new-graph.ts +72 -0
- package/src/breadboard/engine/editor/transforms/sidewire-to-new-graph.ts +82 -0
- package/src/breadboard/engine/file-system/blob-transform.ts +44 -0
- package/src/breadboard/engine/file-system/composed-peristent-backend.ts +140 -0
- package/src/breadboard/engine/file-system/ephemeral-blob-store.ts +46 -0
- package/src/breadboard/engine/file-system/in-memory-blob-store.ts +87 -0
- package/src/breadboard/engine/file-system/index.ts +723 -0
- package/src/breadboard/engine/file-system/partial-persistent-backend.ts +109 -0
- package/src/breadboard/engine/file-system/path.ts +125 -0
- package/src/breadboard/engine/file-system/persistent-file.ts +66 -0
- package/src/breadboard/engine/file-system/readable-stream-file.ts +61 -0
- package/src/breadboard/engine/file-system/stub-file-system.ts +47 -0
- package/src/breadboard/engine/file-system/utils.ts +40 -0
- package/src/breadboard/engine/inspector/graph/bubbled-node.ts +162 -0
- package/src/breadboard/engine/inspector/graph/describe-cache.ts +78 -0
- package/src/breadboard/engine/inspector/graph/describe-type-cache.ts +48 -0
- package/src/breadboard/engine/inspector/graph/edge-cache.ts +118 -0
- package/src/breadboard/engine/inspector/graph/edge.ts +133 -0
- package/src/breadboard/engine/inspector/graph/event.ts +35 -0
- package/src/breadboard/engine/inspector/graph/exports-describer.ts +45 -0
- package/src/breadboard/engine/inspector/graph/graph-cache.ts +54 -0
- package/src/breadboard/engine/inspector/graph/graph-describer-manager.ts +338 -0
- package/src/breadboard/engine/inspector/graph/graph-descriptor-handle.ts +73 -0
- package/src/breadboard/engine/inspector/graph/graph-node-type.ts +111 -0
- package/src/breadboard/engine/inspector/graph/graph-queries.ts +256 -0
- package/src/breadboard/engine/inspector/graph/graph.ts +163 -0
- package/src/breadboard/engine/inspector/graph/inspectable-asset.ts +36 -0
- package/src/breadboard/engine/inspector/graph/kits.ts +208 -0
- package/src/breadboard/engine/inspector/graph/module.ts +69 -0
- package/src/breadboard/engine/inspector/graph/mutable-graph.ts +150 -0
- package/src/breadboard/engine/inspector/graph/node-cache.ts +123 -0
- package/src/breadboard/engine/inspector/graph/node-describer-manager.ts +279 -0
- package/src/breadboard/engine/inspector/graph/node-type-describer-manager.ts +122 -0
- package/src/breadboard/engine/inspector/graph/node.ts +149 -0
- package/src/breadboard/engine/inspector/graph/port-cache.ts +80 -0
- package/src/breadboard/engine/inspector/graph/ports.ts +292 -0
- package/src/breadboard/engine/inspector/graph/schemas.ts +131 -0
- package/src/breadboard/engine/inspector/graph/virtual-node.ts +184 -0
- package/src/breadboard/engine/inspector/graph-store.ts +629 -0
- package/src/breadboard/engine/inspector/index.ts +13 -0
- package/src/breadboard/engine/inspector/utils.ts +20 -0
- package/src/breadboard/engine/loader/capability.ts +184 -0
- package/src/breadboard/engine/loader/index.ts +14 -0
- package/src/breadboard/engine/loader/loader.ts +244 -0
- package/src/breadboard/engine/loader/resolve-graph-urls.ts +111 -0
- package/src/breadboard/engine/runtime/bubble.ts +269 -0
- package/src/breadboard/engine/runtime/graph-based-node-handler.ts +174 -0
- package/src/breadboard/engine/runtime/handler.ts +166 -0
- package/src/breadboard/engine/runtime/harness/diagnostics.ts +22 -0
- package/src/breadboard/engine/runtime/harness/events.ts +217 -0
- package/src/breadboard/engine/runtime/harness/index.ts +14 -0
- package/src/breadboard/engine/runtime/harness/local.ts +48 -0
- package/src/breadboard/engine/runtime/harness/plan-runner.ts +759 -0
- package/src/breadboard/engine/runtime/index.ts +8 -0
- package/src/breadboard/engine/runtime/legacy.ts +28 -0
- package/src/breadboard/engine/runtime/run/invoke-graph.ts +79 -0
- package/src/breadboard/engine/runtime/run/node-invoker.ts +137 -0
- package/src/breadboard/engine/runtime/run/run-graph.ts +186 -0
- package/src/breadboard/engine/runtime/run.ts +111 -0
- package/src/breadboard/engine/runtime/sandbox/capabilities-manager.ts +253 -0
- package/src/breadboard/engine/runtime/sandbox/file-system-handler-factory.ts +53 -0
- package/src/breadboard/engine/runtime/sandbox/invoke-describer.ts +125 -0
- package/src/breadboard/engine/runtime/static/condense.ts +155 -0
- package/src/breadboard/engine/runtime/static/create-plan.ts +134 -0
- package/src/breadboard/engine/runtime/static/nodes-to-subgraph.ts +168 -0
- package/src/breadboard/engine/runtime/static/orchestrator.ts +664 -0
- package/src/breadboard/engine/runtime/static/types.ts +77 -0
- package/src/breadboard/engine/runtime/traversal/index.ts +58 -0
- package/src/breadboard/engine/runtime/traversal/iterator.ts +124 -0
- package/src/breadboard/engine/runtime/traversal/machine.ts +58 -0
- package/src/breadboard/engine/runtime/traversal/representation.ts +115 -0
- package/src/breadboard/engine/runtime/traversal/result.ts +72 -0
- package/src/breadboard/engine/runtime/traversal/state.ts +115 -0
- package/src/breadboard/engine/telemetry.ts +121 -0
- package/src/breadboard/engine/types.ts +32 -0
- package/src/breadboard/lit-flow-runner.test.ts +44 -0
- package/src/breadboard/lit-flow-runner.ts +98 -0
- package/src/breadboard/runner.ts +80 -0
- package/src/index.ts +2 -0
- package/src/lit-chiclet.ts +69 -0
- package/src/lit-flow.ts +17 -7
- package/src/lit-schema-node.test.ts +65 -0
- package/src/lit-schema-node.ts +194 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2024 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
DescribeResultTypeCacheArgs,
|
|
10
|
+
InspectableDescriberResultCacheEntry,
|
|
11
|
+
InspectableDescriberResultTypeCache,
|
|
12
|
+
NodeDescriberResult,
|
|
13
|
+
NodeTypeIdentifier,
|
|
14
|
+
} from "@breadboard-ai/types";
|
|
15
|
+
import { SnapshotUpdater } from "@breadboard-ai/utils";
|
|
16
|
+
|
|
17
|
+
export { DescribeResultTypeCache };
|
|
18
|
+
|
|
19
|
+
type MapItem = SnapshotUpdater<NodeDescriberResult>;
|
|
20
|
+
|
|
21
|
+
class DescribeResultTypeCache implements InspectableDescriberResultTypeCache {
|
|
22
|
+
#map = new Map<NodeTypeIdentifier, MapItem>();
|
|
23
|
+
|
|
24
|
+
constructor(public readonly args: DescribeResultTypeCacheArgs) {}
|
|
25
|
+
|
|
26
|
+
get(type: NodeTypeIdentifier): InspectableDescriberResultCacheEntry {
|
|
27
|
+
let result = this.#map.get(type);
|
|
28
|
+
if (result) {
|
|
29
|
+
return result.snapshot();
|
|
30
|
+
}
|
|
31
|
+
result = new SnapshotUpdater({
|
|
32
|
+
initial: () => this.args.initial(),
|
|
33
|
+
latest: () => this.args.latest(type),
|
|
34
|
+
updated: () => this.args.updated(type),
|
|
35
|
+
});
|
|
36
|
+
this.#map.set(type, result);
|
|
37
|
+
return result.snapshot();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
update(affectedTypes: NodeTypeIdentifier[]): void {
|
|
41
|
+
for (const type of affectedTypes) {
|
|
42
|
+
this.#map.delete(type);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
clear(): void {
|
|
46
|
+
this.#map.clear();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2024 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
Edge as EdgeDescriptor,
|
|
10
|
+
GraphDescriptor,
|
|
11
|
+
GraphIdentifier,
|
|
12
|
+
InspectableEdge,
|
|
13
|
+
InspectableEdgeCache,
|
|
14
|
+
} from "@breadboard-ai/types";
|
|
15
|
+
import { Edge, unfixUpStarEdge } from "./edge.js";
|
|
16
|
+
|
|
17
|
+
type EdgeFactory = (
|
|
18
|
+
edge: EdgeDescriptor,
|
|
19
|
+
graphId: GraphIdentifier
|
|
20
|
+
) => InspectableEdge;
|
|
21
|
+
|
|
22
|
+
export class EdgeCache implements InspectableEdgeCache {
|
|
23
|
+
#factory: EdgeFactory;
|
|
24
|
+
#map: Map<GraphIdentifier, Map<EdgeDescriptor, InspectableEdge>> = new Map();
|
|
25
|
+
|
|
26
|
+
constructor(factory: EdgeFactory) {
|
|
27
|
+
this.#factory = factory;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
rebuild(graph: GraphDescriptor) {
|
|
31
|
+
// Initialize the edge map from the graph. This is only done once, and all
|
|
32
|
+
// following updates are performed incrementally.
|
|
33
|
+
const mainGraphEdges = new Map(
|
|
34
|
+
graph.edges.map((edge) => [edge, this.#factory(edge, "")])
|
|
35
|
+
);
|
|
36
|
+
this.#map.set("", mainGraphEdges);
|
|
37
|
+
Object.entries(graph.graphs || {}).forEach(([graphId, graph]) => {
|
|
38
|
+
const subGraphEdges = new Map(
|
|
39
|
+
graph.edges.map((edge) => [edge, this.#factory(edge, graphId)])
|
|
40
|
+
);
|
|
41
|
+
this.#map.set(graphId, subGraphEdges);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
get(
|
|
46
|
+
edge: EdgeDescriptor,
|
|
47
|
+
graphId: GraphIdentifier
|
|
48
|
+
): InspectableEdge | undefined {
|
|
49
|
+
return this.#map.get(graphId)?.get(edge);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
getOrCreate(edge: EdgeDescriptor, graphId: GraphIdentifier): InspectableEdge {
|
|
53
|
+
let result = this.get(edge, graphId);
|
|
54
|
+
if (result) {
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
result = this.#factory(edge, graphId);
|
|
58
|
+
this.add(edge, graphId);
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
add(edge: EdgeDescriptor, graphId: GraphIdentifier) {
|
|
63
|
+
console.assert(
|
|
64
|
+
!this.#map.get(graphId)?.has(edge),
|
|
65
|
+
"Edge already exists when adding."
|
|
66
|
+
);
|
|
67
|
+
let graphEdges = this.#map.get(graphId);
|
|
68
|
+
if (!graphEdges) {
|
|
69
|
+
graphEdges = new Map();
|
|
70
|
+
this.#map.set(graphId, graphEdges);
|
|
71
|
+
}
|
|
72
|
+
graphEdges.set(edge, this.#factory(edge, graphId));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
remove(edge: EdgeDescriptor, graphId: GraphIdentifier) {
|
|
76
|
+
console.assert(
|
|
77
|
+
this.#map.get(graphId)?.has(edge),
|
|
78
|
+
"Edge not found when removing."
|
|
79
|
+
);
|
|
80
|
+
const inspectableEdge = this.#map.get(graphId)?.get(edge);
|
|
81
|
+
this.#map.get(graphId)?.delete(edge);
|
|
82
|
+
(inspectableEdge as Edge)?.setDeleted();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
has(edge: EdgeDescriptor, graphId: GraphIdentifier): boolean {
|
|
86
|
+
return !!this.#map.get(graphId)?.has(edge);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
hasByValue(edge: EdgeDescriptor, graphId: GraphIdentifier): boolean {
|
|
90
|
+
edge = unfixUpStarEdge(edge);
|
|
91
|
+
const edges = this.edges(graphId);
|
|
92
|
+
return !!edges.find((e) => {
|
|
93
|
+
return (
|
|
94
|
+
e.from.descriptor.id === edge.from &&
|
|
95
|
+
e.to.descriptor.id === edge.to &&
|
|
96
|
+
e.out === edge.out &&
|
|
97
|
+
e.in === edge.in
|
|
98
|
+
);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
edges(graphId: GraphIdentifier): InspectableEdge[] {
|
|
103
|
+
return Array.from(this.#map.get(graphId)?.values() || []);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
addSubgraphEdges(subgraph: GraphDescriptor, graphId: GraphIdentifier): void {
|
|
107
|
+
subgraph.edges.map((edge) => {
|
|
108
|
+
this.add(edge, graphId);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
removeSubgraphEdges(graphId: GraphIdentifier): void {
|
|
113
|
+
this.#map.get(graphId)?.forEach((inspectableEdge) => {
|
|
114
|
+
(inspectableEdge as Edge).setDeleted();
|
|
115
|
+
});
|
|
116
|
+
this.#map.delete(graphId);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2024 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type {
|
|
9
|
+
Edge as EdgeDescriptor,
|
|
10
|
+
EdgeMetadata,
|
|
11
|
+
GraphIdentifier,
|
|
12
|
+
InspectableEdge,
|
|
13
|
+
InspectablePort,
|
|
14
|
+
MutableGraph,
|
|
15
|
+
} from "@breadboard-ai/types";
|
|
16
|
+
import { InspectableEdgeType } from "@breadboard-ai/types";
|
|
17
|
+
export { Edge };
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* This helper is necessary because both "*" and "" are valid representations
|
|
21
|
+
* of a wildcard edge tail. This function ensures that the edge is always
|
|
22
|
+
* consistent.
|
|
23
|
+
* @param edge -- the edge to fix up
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
26
|
+
export const fixUpStarEdge = (edge: EdgeDescriptor): EdgeDescriptor => {
|
|
27
|
+
if (edge.out === "*") {
|
|
28
|
+
return { ...edge, in: "" };
|
|
29
|
+
}
|
|
30
|
+
return edge;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* This is inverse of the helper above, necessary when working with
|
|
35
|
+
* instances of `InspectableEdge` directly, since they will show "*" on both
|
|
36
|
+
* sides of the edge.
|
|
37
|
+
* @param edge -- the edge to un-fix up
|
|
38
|
+
* @returns
|
|
39
|
+
*/
|
|
40
|
+
export const unfixUpStarEdge = (edge: EdgeDescriptor): EdgeDescriptor => {
|
|
41
|
+
if (edge.out === "*") {
|
|
42
|
+
return { ...edge, in: "*" };
|
|
43
|
+
}
|
|
44
|
+
return edge;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const fixupConstantEdge = (edge: EdgeDescriptor): EdgeDescriptor => {
|
|
48
|
+
const { constant, ...rest } = edge;
|
|
49
|
+
if (constant === false) {
|
|
50
|
+
return rest;
|
|
51
|
+
}
|
|
52
|
+
return edge;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
class Edge implements InspectableEdge {
|
|
56
|
+
#mutable: MutableGraph | null;
|
|
57
|
+
#edge: EdgeDescriptor;
|
|
58
|
+
#graphId: GraphIdentifier;
|
|
59
|
+
|
|
60
|
+
constructor(
|
|
61
|
+
mutable: MutableGraph,
|
|
62
|
+
edge: EdgeDescriptor,
|
|
63
|
+
graphId: GraphIdentifier
|
|
64
|
+
) {
|
|
65
|
+
this.#mutable = mutable;
|
|
66
|
+
this.#edge = edge;
|
|
67
|
+
this.#graphId = graphId;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
raw(): EdgeDescriptor {
|
|
71
|
+
return this.#edge;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
get from() {
|
|
75
|
+
if (!this.#mutable) {
|
|
76
|
+
throw new Error(
|
|
77
|
+
`Unable to access "from": this edge was deleted and is no longer part of the graph`
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
const from = this.#mutable.nodes.get(this.#edge.from, this.#graphId);
|
|
81
|
+
console.assert(from, "From node not found when getting from.");
|
|
82
|
+
return from!;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
get out() {
|
|
86
|
+
return this.#edge.out as string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
get to() {
|
|
90
|
+
if (!this.#mutable) {
|
|
91
|
+
throw new Error(
|
|
92
|
+
`Unable to access "to": this edge was deleted and is no longer part of the graph`
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
const to = this.#mutable.nodes.get(this.#edge.to, this.#graphId);
|
|
96
|
+
console.assert(to, "To node not found when getting to.");
|
|
97
|
+
return to!;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
get in() {
|
|
101
|
+
const edgein = this.#edge.out === "*" ? "*" : this.#edge.in;
|
|
102
|
+
return edgein as string;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
get type() {
|
|
106
|
+
if (this.#edge.out === "*") return InspectableEdgeType.Star;
|
|
107
|
+
if (this.#edge.out === "") return InspectableEdgeType.Control;
|
|
108
|
+
if (this.#edge.constant) return InspectableEdgeType.Constant;
|
|
109
|
+
return InspectableEdgeType.Ordinary;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
metadata(): EdgeMetadata | undefined {
|
|
113
|
+
return this.#edge.metadata;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async outPort(): Promise<InspectablePort> {
|
|
117
|
+
const ports = await this.from.ports();
|
|
118
|
+
return ports.outputs.ports.find((port) => port.name === this.out)!;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
async inPort(): Promise<InspectablePort> {
|
|
122
|
+
const ports = await this.to.ports();
|
|
123
|
+
return ports.inputs.ports.find((port) => port.name === this.in)!;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
setDeleted() {
|
|
127
|
+
this.#mutable = null;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
deleted(): boolean {
|
|
131
|
+
return !this.#mutable;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2024 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
GraphIdentifier,
|
|
10
|
+
GraphStoreUpdateEvent,
|
|
11
|
+
MainGraphIdentifier,
|
|
12
|
+
NodeIdentifier,
|
|
13
|
+
} from "@breadboard-ai/types";
|
|
14
|
+
|
|
15
|
+
export { UpdateEvent };
|
|
16
|
+
|
|
17
|
+
const eventInit = {
|
|
18
|
+
bubbles: true,
|
|
19
|
+
cancelable: true,
|
|
20
|
+
composed: true,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
class UpdateEvent extends Event implements GraphStoreUpdateEvent {
|
|
24
|
+
static eventName = "update";
|
|
25
|
+
|
|
26
|
+
constructor(
|
|
27
|
+
public readonly mainGraphId: MainGraphIdentifier,
|
|
28
|
+
public readonly graphId: GraphIdentifier,
|
|
29
|
+
public readonly nodeId: NodeIdentifier,
|
|
30
|
+
public readonly affectedGraphs: MainGraphIdentifier[],
|
|
31
|
+
public readonly topologyChange: boolean
|
|
32
|
+
) {
|
|
33
|
+
super(UpdateEvent.eventName, { ...eventInit });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2025 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
GraphDescriberFactory,
|
|
10
|
+
MutableGraph,
|
|
11
|
+
NodeDescriberExport,
|
|
12
|
+
NodeDescriberResult,
|
|
13
|
+
} from "@breadboard-ai/types";
|
|
14
|
+
import { ok } from "@breadboard-ai/utils";
|
|
15
|
+
|
|
16
|
+
export { ExportsDescriber };
|
|
17
|
+
|
|
18
|
+
class ExportsDescriber {
|
|
19
|
+
constructor(
|
|
20
|
+
private readonly mutable: MutableGraph,
|
|
21
|
+
private readonly describerFactory: GraphDescriberFactory
|
|
22
|
+
) {}
|
|
23
|
+
|
|
24
|
+
async transform(result: NodeDescriberResult): Promise<NodeDescriberResult> {
|
|
25
|
+
const { exports } = this.mutable.graph;
|
|
26
|
+
if (!exports) return result;
|
|
27
|
+
|
|
28
|
+
const entries = Object.fromEntries(
|
|
29
|
+
(
|
|
30
|
+
await Promise.all(
|
|
31
|
+
exports.map(async (id) => {
|
|
32
|
+
const describer = this.describerFactory(id, this.mutable);
|
|
33
|
+
if (!ok(describer)) return null;
|
|
34
|
+
|
|
35
|
+
const result = await describer.describe();
|
|
36
|
+
const url = `${this.mutable.graph.url}${id}`;
|
|
37
|
+
return [url, result];
|
|
38
|
+
})
|
|
39
|
+
)
|
|
40
|
+
).filter((item) => item !== null) as [string, NodeDescriberExport][]
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
return { ...result, exports: entries };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2024 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
GraphDescriptor,
|
|
10
|
+
GraphIdentifier,
|
|
11
|
+
InspectableGraph,
|
|
12
|
+
InspectableGraphCache,
|
|
13
|
+
InspectableSubgraphs,
|
|
14
|
+
} from "@breadboard-ai/types";
|
|
15
|
+
|
|
16
|
+
export { GraphCache };
|
|
17
|
+
|
|
18
|
+
type GraphFactory = (graphId: GraphIdentifier) => InspectableGraph;
|
|
19
|
+
|
|
20
|
+
class GraphCache implements InspectableGraphCache {
|
|
21
|
+
#factory: GraphFactory;
|
|
22
|
+
#graphs: Map<GraphIdentifier, InspectableGraph> = new Map();
|
|
23
|
+
|
|
24
|
+
constructor(factory: GraphFactory) {
|
|
25
|
+
this.#factory = factory;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
rebuild(graph: GraphDescriptor) {
|
|
29
|
+
this.#graphs = new Map(
|
|
30
|
+
Object.keys(graph.graphs || []).map((id) => [id, this.#factory(id)])
|
|
31
|
+
);
|
|
32
|
+
this.#graphs.set("", this.#factory(""));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
get(id: GraphIdentifier): InspectableGraph | undefined {
|
|
36
|
+
return this.#graphs.get(id);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
add(id: GraphIdentifier): void {
|
|
40
|
+
this.#graphs.set(id, this.#factory(id));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
graphs(): InspectableSubgraphs {
|
|
44
|
+
return Object.fromEntries([...this.#graphs.entries()].filter(([id]) => id));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
remove(id: GraphIdentifier): void {
|
|
48
|
+
this.#graphs.delete(id);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
clear(): void {
|
|
52
|
+
this.#graphs.clear();
|
|
53
|
+
}
|
|
54
|
+
}
|