@rslsp1/fa-app-tools 2.0.87 → 4.0.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/{chunk-ZVHEHQ7A.mjs → chunk-566GHYAT.mjs} +4442 -1635
- package/dist/{chunk-43TWCAG5.mjs → chunk-C5CGSPP3.mjs} +42 -3
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4954 -2191
- package/dist/index.mjs +9 -5
- package/dist/{storeContract-B2BDgvhN.d.mts → storeContract-5vApx6VA.d.mts} +16 -0
- package/dist/{storeContract-D7vBM8nv.d.ts → storeContract-DNggXiZl.d.ts} +16 -0
- package/dist/szenen-contract.d.mts +1 -1
- package/dist/szenen-contract.d.ts +1 -1
- package/dist/szenen-contract.js +42 -3
- package/dist/szenen-contract.mjs +1 -1
- package/dist/szenen.d.mts +660 -79
- package/dist/szenen.d.ts +660 -79
- package/dist/szenen.js +4465 -1502
- package/dist/szenen.mjs +164 -35
- package/package.json +1 -1
package/dist/szenen.mjs
CHANGED
|
@@ -6,9 +6,10 @@ import {
|
|
|
6
6
|
CapabilityAnchorError,
|
|
7
7
|
DERIVABLE_TYPES,
|
|
8
8
|
ELEMENT_VERSION_SCHEMA_FILE,
|
|
9
|
-
|
|
9
|
+
FLOW_EXECUTION_PATH,
|
|
10
10
|
MAX_PROPOSAL_TITLE_LENGTH,
|
|
11
11
|
PROBE_VERSION_ID,
|
|
12
|
+
PROMPT_RULE_EFFECT,
|
|
12
13
|
REFERENCE_FIELD,
|
|
13
14
|
RULES_WITHOUT_CAPABILITY_EFFECT,
|
|
14
15
|
RULE_SCOPES,
|
|
@@ -32,9 +33,7 @@ import {
|
|
|
32
33
|
buildUserPrompt,
|
|
33
34
|
buildUserPrompt2,
|
|
34
35
|
callOptional,
|
|
35
|
-
callableImageModelFor,
|
|
36
36
|
capabilitiesOf,
|
|
37
|
-
capabilityForTargetModel,
|
|
38
37
|
capabilityGate,
|
|
39
38
|
capabilityReport,
|
|
40
39
|
catalogueFor,
|
|
@@ -43,6 +42,9 @@ import {
|
|
|
43
42
|
checkDerivationResponse,
|
|
44
43
|
checkDraftChainMeta,
|
|
45
44
|
checkElementType,
|
|
45
|
+
checkImageExecutionProfile,
|
|
46
|
+
checkImageExecutionProfiles,
|
|
47
|
+
checkImageModelParameters,
|
|
46
48
|
checkOptionalId,
|
|
47
49
|
checkParents,
|
|
48
50
|
checkPayloadPresent,
|
|
@@ -83,17 +85,22 @@ import {
|
|
|
83
85
|
derivationPoliciesOf,
|
|
84
86
|
deriveItemFromRun,
|
|
85
87
|
deriveLineage,
|
|
88
|
+
describableContent,
|
|
86
89
|
describeTargetModelFailure,
|
|
90
|
+
diagnosticOfFinding,
|
|
91
|
+
diagnosticOfSchemaError,
|
|
87
92
|
draftRevisionOf,
|
|
93
|
+
executableImageModels,
|
|
94
|
+
findExecutableImageModel,
|
|
88
95
|
findImageBatch,
|
|
89
96
|
findImageGenerationOrder,
|
|
90
97
|
findPromptRun,
|
|
91
98
|
findSceneDerivation,
|
|
92
99
|
findSceneDerivationRecovery,
|
|
93
100
|
firstError,
|
|
94
|
-
flowImageProviderHasAccess,
|
|
95
101
|
formatSchemaErrors,
|
|
96
102
|
freezeDraftChain,
|
|
103
|
+
freezeSceneWorkingState,
|
|
97
104
|
getSzenenSchemas,
|
|
98
105
|
hasPlacementCapability,
|
|
99
106
|
isKnownElementType,
|
|
@@ -109,20 +116,25 @@ import {
|
|
|
109
116
|
parseDerivationResponse,
|
|
110
117
|
parseRunResponse,
|
|
111
118
|
preferredHeadRevisionOf,
|
|
119
|
+
promptDiagnosticsOf,
|
|
112
120
|
publishedHeadsOf,
|
|
113
121
|
recoveriesForRun,
|
|
114
122
|
recoveryStatusOf,
|
|
115
123
|
reduceElementEvents,
|
|
116
124
|
resolveArea,
|
|
125
|
+
resolveScenePayload,
|
|
117
126
|
resolveShot,
|
|
118
127
|
resolveShotPayload,
|
|
119
128
|
resolveTargetModelOver,
|
|
120
129
|
resolverFromQueries,
|
|
121
130
|
roundOfRun,
|
|
131
|
+
rulesWithoutPromptEffect,
|
|
122
132
|
runPromptDerivation,
|
|
123
133
|
runPublishChecks,
|
|
124
134
|
runSceneDerivation,
|
|
135
|
+
sceneOnlyCapabilities,
|
|
125
136
|
scopeOfPath,
|
|
137
|
+
selectableTargetModels,
|
|
126
138
|
showChain,
|
|
127
139
|
simulatedAnswerFor,
|
|
128
140
|
typAusBytes,
|
|
@@ -133,14 +145,14 @@ import {
|
|
|
133
145
|
validateElementVersion,
|
|
134
146
|
validatePayload,
|
|
135
147
|
withReference
|
|
136
|
-
} from "./chunk-
|
|
148
|
+
} from "./chunk-566GHYAT.mjs";
|
|
137
149
|
import {
|
|
138
150
|
ContractViolation,
|
|
139
151
|
STYLE_PAYLOAD,
|
|
140
152
|
STYLE_PAYLOAD_V2,
|
|
141
153
|
elementStoreContractChecks,
|
|
142
154
|
runElementStoreContract
|
|
143
|
-
} from "./chunk-
|
|
155
|
+
} from "./chunk-C5CGSPP3.mjs";
|
|
144
156
|
import {
|
|
145
157
|
VersionDagError,
|
|
146
158
|
buildVersionDag,
|
|
@@ -388,6 +400,10 @@ async function runStoreDifferential(left, right) {
|
|
|
388
400
|
}
|
|
389
401
|
|
|
390
402
|
// src/lib/szenen/memoryViewPort.ts
|
|
403
|
+
var MEMORY_IMAGE_CAPABILITY = {
|
|
404
|
+
environment_id: "memory",
|
|
405
|
+
execution_paths: [{ execution_path: "memory", provider: "google" }]
|
|
406
|
+
};
|
|
391
407
|
function ok(value) {
|
|
392
408
|
return { kind: "ok", value };
|
|
393
409
|
}
|
|
@@ -513,6 +529,44 @@ function createMemoryViewPort(options = {}) {
|
|
|
513
529
|
return ok(laeufe.filter(
|
|
514
530
|
(r) => r.source?.kind === "draft_chain" && r.source.chain_id === chainId
|
|
515
531
|
));
|
|
532
|
+
},
|
|
533
|
+
// ── Der Lauf direkt aus einer Szene (D-135) ───────────────────────────
|
|
534
|
+
//
|
|
535
|
+
// Wie beim Kettenlauf bildet der Speicherport nur die **Form** ab: ein
|
|
536
|
+
// Lauf mit `source.kind === 'scene_direct'`, ohne Shot und ohne
|
|
537
|
+
// Versionskennungen. Ob ein Arbeitsstand einfrierbar ist, entscheidet
|
|
538
|
+
// `clientRunPort` gegen einen echten Speicher — hier waere es eine zweite
|
|
539
|
+
// Wahrheit.
|
|
540
|
+
async startRunFromScene(input) {
|
|
541
|
+
const runId = ids();
|
|
542
|
+
const basis = (options.deriveRun ?? simulierterLauf)(
|
|
543
|
+
{ shotVersionId: "", ...input.userInstruction ? { userInstruction: input.userInstruction } : {} },
|
|
544
|
+
runId
|
|
545
|
+
);
|
|
546
|
+
const lauf = {
|
|
547
|
+
...basis,
|
|
548
|
+
shot_version_id: "",
|
|
549
|
+
shot_element_id: "",
|
|
550
|
+
scene_setup_version_id: "",
|
|
551
|
+
camera_id: "",
|
|
552
|
+
target_model_version_id: "",
|
|
553
|
+
source: {
|
|
554
|
+
kind: "scene_direct",
|
|
555
|
+
scene: {
|
|
556
|
+
element_id: input.sceneElementId,
|
|
557
|
+
draft_id: `draft-${input.sceneElementId}`,
|
|
558
|
+
revision: 1,
|
|
559
|
+
version_id: null
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
};
|
|
563
|
+
laeufe.push(lauf);
|
|
564
|
+
return done(lauf);
|
|
565
|
+
},
|
|
566
|
+
async listRunsForScene(sceneElementId) {
|
|
567
|
+
return ok(laeufe.filter(
|
|
568
|
+
(r) => r.source?.kind === "scene_direct" && r.source.scene.element_id === sceneElementId
|
|
569
|
+
));
|
|
516
570
|
}
|
|
517
571
|
};
|
|
518
572
|
const itemPort = {
|
|
@@ -795,7 +849,7 @@ function createMemoryViewPort(options = {}) {
|
|
|
795
849
|
const bilder2 = Array.from({ length: input.imageCount }, (_, position) => ({
|
|
796
850
|
imageBase64: "AAAA",
|
|
797
851
|
seed: input.seeds?.[position],
|
|
798
|
-
model: `simulation:${input.
|
|
852
|
+
model: `simulation:${input.targetModelKey}`
|
|
799
853
|
}));
|
|
800
854
|
return { images: bilder2 };
|
|
801
855
|
}
|
|
@@ -845,7 +899,15 @@ function createMemoryViewPort(options = {}) {
|
|
|
845
899
|
events: { async appendEvent(type, payload) {
|
|
846
900
|
await imageGenerationEvents.appendEvent(type, payload);
|
|
847
901
|
} },
|
|
848
|
-
|
|
902
|
+
capability: options.imageCapability ?? MEMORY_IMAGE_CAPABILITY,
|
|
903
|
+
targetModels: {
|
|
904
|
+
async listExecutionTargetModels() {
|
|
905
|
+
if (options.imageTargetModels) return ok(options.imageTargetModels);
|
|
906
|
+
const wahl = await selectableTargetModels(elements, [null]);
|
|
907
|
+
if (wahl.kind !== "ok") return wahl;
|
|
908
|
+
return ok(wahl.value.selectable);
|
|
909
|
+
}
|
|
910
|
+
}
|
|
849
911
|
});
|
|
850
912
|
const port = {
|
|
851
913
|
elements,
|
|
@@ -982,41 +1044,83 @@ var FAILURE_CLASSES = [
|
|
|
982
1044
|
];
|
|
983
1045
|
var PFLICHTFELDER = [
|
|
984
1046
|
"run_id",
|
|
985
|
-
"shot_version_id",
|
|
986
|
-
"shot_element_id",
|
|
987
|
-
"scene_setup_version_id",
|
|
988
|
-
"camera_id",
|
|
989
|
-
"target_model_version_id",
|
|
990
1047
|
"provider",
|
|
991
1048
|
"model_id",
|
|
992
1049
|
"system_prompt",
|
|
993
1050
|
"created_at"
|
|
994
1051
|
];
|
|
1052
|
+
var TEXTFELDER = [
|
|
1053
|
+
"shot_version_id",
|
|
1054
|
+
"shot_element_id",
|
|
1055
|
+
"scene_setup_version_id",
|
|
1056
|
+
"camera_id",
|
|
1057
|
+
"target_model_version_id"
|
|
1058
|
+
];
|
|
1059
|
+
var PFLICHT_JE_HERKUNFT = {
|
|
1060
|
+
published: ["shot_version_id", "shot_element_id", "scene_setup_version_id"],
|
|
1061
|
+
draft_chain: ["shot_element_id"],
|
|
1062
|
+
scene_direct: []
|
|
1063
|
+
};
|
|
1064
|
+
var VERBOTEN_JE_HERKUNFT = {
|
|
1065
|
+
published: [],
|
|
1066
|
+
draft_chain: ["shot_version_id", "scene_setup_version_id"],
|
|
1067
|
+
scene_direct: ["shot_version_id", "shot_element_id", "scene_setup_version_id", "camera_id"]
|
|
1068
|
+
};
|
|
995
1069
|
function istText(wert) {
|
|
996
1070
|
return typeof wert === "string" && wert.trim().length > 0;
|
|
997
1071
|
}
|
|
998
1072
|
function isObject(wert) {
|
|
999
1073
|
return typeof wert === "object" && wert !== null && !Array.isArray(wert);
|
|
1000
1074
|
}
|
|
1001
|
-
var VERSIONSFELDER = ["shot_version_id", "scene_setup_version_id"];
|
|
1002
1075
|
var KETTEN_TYPEN = ["scene", "scene_setup", "shot"];
|
|
1076
|
+
var HERKUENFTE = ["published", "draft_chain", "scene_direct"];
|
|
1003
1077
|
function pruefeLaufherkunft(quelle) {
|
|
1004
1078
|
if (!isObject(quelle)) {
|
|
1005
1079
|
return { ok: false, message: '"source" muss ein Objekt sein.' };
|
|
1006
1080
|
}
|
|
1081
|
+
if (!HERKUENFTE.includes(quelle.kind)) {
|
|
1082
|
+
return {
|
|
1083
|
+
ok: false,
|
|
1084
|
+
message: `"source.kind" ist unbekannt: ${JSON.stringify(quelle.kind)}. Erlaubt: ${HERKUENFTE.join(", ")}.`
|
|
1085
|
+
};
|
|
1086
|
+
}
|
|
1007
1087
|
if (quelle.kind === "published") {
|
|
1008
|
-
for (const feld of
|
|
1088
|
+
for (const feld of ["shot_version_id", "scene_setup_version_id"]) {
|
|
1009
1089
|
if (!istText(quelle[feld])) {
|
|
1010
1090
|
return { ok: false, message: `"source.${feld}" fehlt oder ist leer.` };
|
|
1011
1091
|
}
|
|
1012
1092
|
}
|
|
1013
1093
|
return { ok: true };
|
|
1014
1094
|
}
|
|
1015
|
-
if (quelle.kind
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
message:
|
|
1019
|
-
}
|
|
1095
|
+
if (quelle.kind === "scene_direct") {
|
|
1096
|
+
const szene = quelle.scene;
|
|
1097
|
+
if (!isObject(szene)) {
|
|
1098
|
+
return { ok: false, message: '"source.scene" muss ein Objekt sein.' };
|
|
1099
|
+
}
|
|
1100
|
+
if (!istText(szene.element_id)) {
|
|
1101
|
+
return { ok: false, message: '"source.scene.element_id" fehlt oder ist leer.' };
|
|
1102
|
+
}
|
|
1103
|
+
const ausEntwurf = istText(szene.draft_id);
|
|
1104
|
+
const ausVersion = istText(szene.version_id);
|
|
1105
|
+
if (ausEntwurf === ausVersion) {
|
|
1106
|
+
return {
|
|
1107
|
+
ok: false,
|
|
1108
|
+
message: ausEntwurf ? '"source.scene" nennt draft_id und version_id zugleich. Eingefroren wurde genau ein Stand (D-135).' : '"source.scene" nennt weder draft_id noch version_id. Ohne den eingefrorenen Stand ist der Lauf nicht nachvollziehbar (D-97).'
|
|
1109
|
+
};
|
|
1110
|
+
}
|
|
1111
|
+
if (ausEntwurf && (typeof szene.revision !== "number" || !Number.isInteger(szene.revision))) {
|
|
1112
|
+
return {
|
|
1113
|
+
ok: false,
|
|
1114
|
+
message: '"source.scene.revision" muss eine ganze Zahl sein \u2014 ohne sie ist der eingefrorene Entwurfsstand nicht benennbar (D-97).'
|
|
1115
|
+
};
|
|
1116
|
+
}
|
|
1117
|
+
if (ausVersion && szene.revision !== null && szene.revision !== void 0) {
|
|
1118
|
+
return {
|
|
1119
|
+
ok: false,
|
|
1120
|
+
message: '"source.scene.revision" ist bei einer veroeffentlichten Version gesetzt. Eine Version ist unveraenderlich und hat keine Revision (D-02).'
|
|
1121
|
+
};
|
|
1122
|
+
}
|
|
1123
|
+
return { ok: true };
|
|
1020
1124
|
}
|
|
1021
1125
|
if (!istText(quelle.chain_id)) {
|
|
1022
1126
|
return { ok: false, message: '"source.chain_id" fehlt oder ist leer.' };
|
|
@@ -1067,25 +1171,38 @@ function checkPromptRunRecord(candidate) {
|
|
|
1067
1171
|
}
|
|
1068
1172
|
const record = candidate;
|
|
1069
1173
|
const quelle = record.source;
|
|
1070
|
-
const ausKette = isObject(quelle) && quelle.kind === "draft_chain";
|
|
1071
1174
|
if (quelle !== void 0) {
|
|
1072
1175
|
const urteil2 = pruefeLaufherkunft(quelle);
|
|
1073
1176
|
if (!urteil2.ok) return urteil2;
|
|
1074
1177
|
}
|
|
1075
|
-
const
|
|
1076
|
-
for (const feld of
|
|
1178
|
+
const herkunft = isObject(quelle) && typeof quelle.kind === "string" ? quelle.kind : "published";
|
|
1179
|
+
for (const feld of PFLICHTFELDER) {
|
|
1077
1180
|
if (!istText(record[feld])) {
|
|
1078
1181
|
return { ok: false, message: `"${feld}" fehlt oder ist leer.` };
|
|
1079
1182
|
}
|
|
1080
1183
|
}
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1184
|
+
for (const feld of TEXTFELDER) {
|
|
1185
|
+
if (typeof record[feld] !== "string") {
|
|
1186
|
+
return {
|
|
1187
|
+
ok: false,
|
|
1188
|
+
message: `"${feld}" fehlt. Wo es keinen Wert gibt, gehoert eine leere Zeichenkette hin \u2014 kein fehlendes Feld (D-135).`
|
|
1189
|
+
};
|
|
1190
|
+
}
|
|
1191
|
+
}
|
|
1192
|
+
for (const feld of PFLICHT_JE_HERKUNFT[herkunft] ?? []) {
|
|
1193
|
+
if (!istText(record[feld])) {
|
|
1194
|
+
return {
|
|
1195
|
+
ok: false,
|
|
1196
|
+
message: `"${feld}" fehlt oder ist leer, wird bei Herkunft "${herkunft}" aber gebraucht.`
|
|
1197
|
+
};
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
for (const feld of VERBOTEN_JE_HERKUNFT[herkunft] ?? []) {
|
|
1201
|
+
if (istText(record[feld])) {
|
|
1202
|
+
return {
|
|
1203
|
+
ok: false,
|
|
1204
|
+
message: `"${feld}" ist bei einem Lauf der Herkunft "${herkunft}" gesetzt. Dort gibt es diesen Wert nicht, und erfundene sind unzulaessig (D-98/D-135).`
|
|
1205
|
+
};
|
|
1089
1206
|
}
|
|
1090
1207
|
}
|
|
1091
1208
|
if (record.status !== "succeeded" && record.status !== "failed") {
|
|
@@ -1459,8 +1576,9 @@ export {
|
|
|
1459
1576
|
ContractViolation,
|
|
1460
1577
|
DERIVABLE_TYPES,
|
|
1461
1578
|
ELEMENT_VERSION_SCHEMA_FILE,
|
|
1462
|
-
|
|
1579
|
+
FLOW_EXECUTION_PATH,
|
|
1463
1580
|
PROBE_VERSION_ID,
|
|
1581
|
+
PROMPT_RULE_EFFECT,
|
|
1464
1582
|
REFERENCE_FIELD,
|
|
1465
1583
|
RULES_WITHOUT_CAPABILITY_EFFECT,
|
|
1466
1584
|
RULE_SCOPES,
|
|
@@ -1487,9 +1605,7 @@ export {
|
|
|
1487
1605
|
buildUserPrompt2 as buildUserPrompt,
|
|
1488
1606
|
buildVersionDag,
|
|
1489
1607
|
callOptional,
|
|
1490
|
-
callableImageModelFor,
|
|
1491
1608
|
capabilitiesOf,
|
|
1492
|
-
capabilityForTargetModel,
|
|
1493
1609
|
capabilityGate,
|
|
1494
1610
|
capabilityReport,
|
|
1495
1611
|
catalogueFor,
|
|
@@ -1498,6 +1614,9 @@ export {
|
|
|
1498
1614
|
checkDerivationResponse,
|
|
1499
1615
|
checkDraftChainMeta,
|
|
1500
1616
|
checkElementType,
|
|
1617
|
+
checkImageExecutionProfile,
|
|
1618
|
+
checkImageExecutionProfiles,
|
|
1619
|
+
checkImageModelParameters,
|
|
1501
1620
|
checkOptionalId,
|
|
1502
1621
|
checkParents,
|
|
1503
1622
|
checkPayloadPresent,
|
|
@@ -1545,10 +1664,15 @@ export {
|
|
|
1545
1664
|
derivationPoliciesOf,
|
|
1546
1665
|
deriveItemFromRun,
|
|
1547
1666
|
deriveLineage,
|
|
1667
|
+
describableContent,
|
|
1548
1668
|
describeTargetModelFailure,
|
|
1669
|
+
diagnosticOfFinding,
|
|
1670
|
+
diagnosticOfSchemaError,
|
|
1549
1671
|
differentialSteps,
|
|
1550
1672
|
draftRevisionOf,
|
|
1551
1673
|
elementStoreContractChecks,
|
|
1674
|
+
executableImageModels,
|
|
1675
|
+
findExecutableImageModel,
|
|
1552
1676
|
findImageBatch,
|
|
1553
1677
|
findImageGenerationOrder,
|
|
1554
1678
|
findPromptRun,
|
|
@@ -1556,9 +1680,9 @@ export {
|
|
|
1556
1680
|
findSceneDerivation,
|
|
1557
1681
|
findSceneDerivationRecovery,
|
|
1558
1682
|
firstError,
|
|
1559
|
-
flowImageProviderHasAccess,
|
|
1560
1683
|
formatSchemaErrors,
|
|
1561
1684
|
freezeDraftChain,
|
|
1685
|
+
freezeSceneWorkingState,
|
|
1562
1686
|
getSzenenSchemas,
|
|
1563
1687
|
hasPlacementCapability,
|
|
1564
1688
|
isKnownElementType,
|
|
@@ -1575,23 +1699,28 @@ export {
|
|
|
1575
1699
|
parseRunResponse,
|
|
1576
1700
|
preferredHeadRevisionOf,
|
|
1577
1701
|
preferredVersionId,
|
|
1702
|
+
promptDiagnosticsOf,
|
|
1578
1703
|
publishedHeadsOf,
|
|
1579
1704
|
recoveriesForRun,
|
|
1580
1705
|
recoveryStatusOf,
|
|
1581
1706
|
reduceElementEvents,
|
|
1582
1707
|
resolveArea,
|
|
1583
1708
|
resolvePreferredHead,
|
|
1709
|
+
resolveScenePayload,
|
|
1584
1710
|
resolveShot,
|
|
1585
1711
|
resolveShotPayload,
|
|
1586
1712
|
resolveTargetModelOver,
|
|
1587
1713
|
resolverFromQueries,
|
|
1588
1714
|
roundOfRun,
|
|
1715
|
+
rulesWithoutPromptEffect,
|
|
1589
1716
|
runElementStoreContract,
|
|
1590
1717
|
runPromptDerivation,
|
|
1591
1718
|
runPublishChecks,
|
|
1592
1719
|
runSceneDerivation,
|
|
1593
1720
|
runStoreDifferential,
|
|
1721
|
+
sceneOnlyCapabilities,
|
|
1594
1722
|
scopeOfPath,
|
|
1723
|
+
selectableTargetModels,
|
|
1595
1724
|
showChain,
|
|
1596
1725
|
simulatedAnswerFor,
|
|
1597
1726
|
totalModelCalls,
|