vidspotai-shared 1.0.62 → 1.0.63
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/lib/models/analytics.model.d.ts +7 -0
- package/lib/models/analytics.model.d.ts.map +1 -1
- package/lib/models/video.model.d.ts +15 -0
- package/lib/models/video.model.d.ts.map +1 -1
- package/lib/services/analytics.service.d.ts.map +1 -1
- package/lib/services/analytics.service.js +28 -0
- package/package.json +1 -1
|
@@ -20,6 +20,13 @@ export interface IAnalyticsDailyModel {
|
|
|
20
20
|
/** Try-example / sample short-circuit count. Tracked separately so the
|
|
21
21
|
* jobs* fields stay real-generation-only. May be absent on historical docs. */
|
|
22
22
|
samplesCompleted?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Map of `errorCode` → occurrence count for failed/timed-out scenes finalized
|
|
25
|
+
* this day. Keys are sanitized (dots/slashes/brackets replaced with `_`).
|
|
26
|
+
* Missing-or-unclassifiable failures roll up under the `unknown` key. May be
|
|
27
|
+
* absent on docs written before this field was introduced.
|
|
28
|
+
*/
|
|
29
|
+
failuresByCode?: Record<string, number>;
|
|
23
30
|
updatedAt: FieldValue;
|
|
24
31
|
}
|
|
25
32
|
/** Cross-model daily rollup for summary cards. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.model.d.ts","sourceRoot":"","sources":["../../src/models/analytics.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B;mFAC+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,kDAAkD;AAClD,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,UAAU,CAAC;CACvB"}
|
|
1
|
+
{"version":3,"file":"analytics.model.d.ts","sourceRoot":"","sources":["../../src/models/analytics.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B;mFAC+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,kDAAkD;AAClD,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,UAAU,CAAC;CACvB"}
|
|
@@ -14,6 +14,15 @@ export interface IVideoScene {
|
|
|
14
14
|
status: EVideoSceneStatus;
|
|
15
15
|
creditsUsed?: number;
|
|
16
16
|
errorMessage?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Short, stable failure code parsed from the raw provider error before
|
|
19
|
+
* stripping (e.g. `InputImageSensitiveContentDetected`, `moderation_blocked`,
|
|
20
|
+
* `user_input_error`, `InvalidParameter:content.text`, `poll_timeout`,
|
|
21
|
+
* `status_check_failed`). Used by analytics rollups (`failuresByCode`) and
|
|
22
|
+
* the admin failure-breakdown view. Undefined when the failure could not be
|
|
23
|
+
* classified (treated as `unknown` in aggregates).
|
|
24
|
+
*/
|
|
25
|
+
errorCode?: string;
|
|
17
26
|
retryCount?: number;
|
|
18
27
|
startedAt?: number;
|
|
19
28
|
}
|
|
@@ -30,6 +39,12 @@ export interface IVideoJobModel {
|
|
|
30
39
|
visualBible?: VisualBible;
|
|
31
40
|
finalVideoUrl?: string;
|
|
32
41
|
errorMessage?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Job-level mirror of the first failed scene's `errorCode` (or `stitching_failed`
|
|
44
|
+
* when post-generation assembly fails). Drives the frontend's failure-reason
|
|
45
|
+
* copy + fallback-model suggestion without re-parsing `errorMessage`.
|
|
46
|
+
*/
|
|
47
|
+
errorCode?: string;
|
|
33
48
|
totalCreditsUsed?: number;
|
|
34
49
|
estimatedCredits?: number;
|
|
35
50
|
durationType?: EVideoDurationType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.model.d.ts","sourceRoot":"","sources":["../../src/models/video.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CAOpB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,UAAU,CAAC;KACxB,CAAA;IAGD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,WAAW,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;8CAE0C;IAC1C,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAI9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;IACtB,aAAa,CAAC,EAAE,UAAU,CAAC;CAC5B"}
|
|
1
|
+
{"version":3,"file":"video.model.d.ts","sourceRoot":"","sources":["../../src/models/video.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.service.d.ts","sourceRoot":"","sources":["../../src/services/analytics.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAqB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUpD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,eAAe,CAAC;IAC7B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,gBAAgB;WACd,gBAAgB,CAAC,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"analytics.service.d.ts","sourceRoot":"","sources":["../../src/services/analytics.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAqB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUpD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,eAAe,CAAC;IAC7B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,gBAAgB;WACd,gBAAgB,CAAC,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuEvE;;;;;OAKG;WACU,mBAAmB,CAAC,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAqB7F"}
|
|
@@ -31,6 +31,20 @@ class AnalyticsService {
|
|
|
31
31
|
const jobsPartial = p.finalStatus === types_1.EVideoJobStatus.PARTIALLY_COMPLETED ? 1 : 0;
|
|
32
32
|
const inc = firestore_1.FieldValue.increment;
|
|
33
33
|
const latencyMs = p.jobLatencyMs ?? 0;
|
|
34
|
+
// Bucket failed/timed-out scenes by their stable errorCode (set by
|
|
35
|
+
// sceneMonitor at failure time). Undefined codes fall into "unknown" so
|
|
36
|
+
// the dashboard can still surface them. Drives the failure-breakdown view.
|
|
37
|
+
const codeCounts = {};
|
|
38
|
+
for (const s of p.scenes) {
|
|
39
|
+
if (s.status !== types_1.EVideoSceneStatus.FAILED && s.status !== types_1.EVideoSceneStatus.TIMED_OUT)
|
|
40
|
+
continue;
|
|
41
|
+
const code = sanitizeCodeKey(s.errorCode);
|
|
42
|
+
codeCounts[code] = (codeCounts[code] ?? 0) + 1;
|
|
43
|
+
}
|
|
44
|
+
const failuresByCodeIncrements = {};
|
|
45
|
+
for (const [k, v] of Object.entries(codeCounts)) {
|
|
46
|
+
failuresByCodeIncrements[k] = inc(v);
|
|
47
|
+
}
|
|
34
48
|
const perModelRef = firebase_1.firestore.collection(DAILY_COL).doc(`${date}_${p.modelKey}`);
|
|
35
49
|
const globalRef = firebase_1.firestore.collection(DAILY_GLOBAL_COL).doc(date);
|
|
36
50
|
const perModelPayload = {
|
|
@@ -48,6 +62,9 @@ class AnalyticsService {
|
|
|
48
62
|
jobLatencyMsCount: inc(latencyMs > 0 ? 1 : 0),
|
|
49
63
|
updatedAt: firestore_1.FieldValue.serverTimestamp(),
|
|
50
64
|
};
|
|
65
|
+
if (Object.keys(failuresByCodeIncrements).length > 0) {
|
|
66
|
+
perModelPayload.failuresByCode = failuresByCodeIncrements;
|
|
67
|
+
}
|
|
51
68
|
const globalPayload = {
|
|
52
69
|
date,
|
|
53
70
|
jobsCompleted: inc(jobsCompleted),
|
|
@@ -94,3 +111,14 @@ class AnalyticsService {
|
|
|
94
111
|
}
|
|
95
112
|
}
|
|
96
113
|
exports.AnalyticsService = AnalyticsService;
|
|
114
|
+
/**
|
|
115
|
+
* Firestore field paths can't contain `.`, `/`, `~`, `*`, `[`, `]`. The
|
|
116
|
+
* provider error codes we want to bucket by (e.g. `InvalidParameter:content.text`)
|
|
117
|
+
* may contain `.` — replace illegal chars with `_` so the value survives as a
|
|
118
|
+
* map key under `failuresByCode`. Empty/undefined collapses to `unknown`.
|
|
119
|
+
*/
|
|
120
|
+
function sanitizeCodeKey(code) {
|
|
121
|
+
if (!code)
|
|
122
|
+
return "unknown";
|
|
123
|
+
return code.replace(/[.\/~*[\]]/g, "_");
|
|
124
|
+
}
|