@absolutejs/voice 0.0.22-beta.315 → 0.0.22-beta.317
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/index.js
CHANGED
|
@@ -11914,6 +11914,9 @@ var buildVoiceMediaPipelineReport = (options = {}) => {
|
|
|
11914
11914
|
processorGraph: options.processorGraph,
|
|
11915
11915
|
quality,
|
|
11916
11916
|
resampling,
|
|
11917
|
+
sessionIds: [
|
|
11918
|
+
...new Set(frames.map((frame) => frame.sessionId).filter((sessionId) => typeof sessionId === "string"))
|
|
11919
|
+
].sort(),
|
|
11917
11920
|
status,
|
|
11918
11921
|
surface: options.surface ?? "voice-media-pipeline",
|
|
11919
11922
|
transport: options.transport,
|
|
@@ -12045,7 +12048,7 @@ var renderVoiceMediaPipelineHTML = (report, title = "Voice Media Pipeline Proof"
|
|
|
12045
12048
|
...report.quality.issues
|
|
12046
12049
|
].map((issue) => `<li class="${escapeHtml15(issue.severity)}"><strong>${escapeHtml15(issue.code)}</strong>: ${escapeHtml15(issue.message)}</li>`).join("");
|
|
12047
12050
|
const segments = report.vad.segments.map((segment) => `<tr><td>${escapeHtml15(segment.segmentId)}</td><td>${escapeHtml15(segment.frameCount)}</td><td>${escapeHtml15(segment.durationMs ?? "n/a")}</td><td>${escapeHtml15(segment.turnId ?? "n/a")}</td></tr>`).join("");
|
|
12048
|
-
return `<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" /><title>${escapeHtml15(title)}</title><style>body{background:#101418;color:#f7f3e8;font-family:ui-sans-serif,system-ui,sans-serif;margin:0}main{margin:auto;max-width:1100px;padding:32px}.hero,.card{background:#17201d;border:1px solid #2e3d36;border-radius:24px;margin-bottom:16px;padding:22px}.hero{background:linear-gradient(135deg,rgba(20,184,166,.18),rgba(245,158,11,.12))}.eyebrow{color:#5eead4;font-weight:900;letter-spacing:.1em;text-transform:uppercase}h1{font-size:clamp(2.3rem,6vw,4.8rem);letter-spacing:-.06em;line-height:.9;margin:.2rem 0 1rem}.summary{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.metric{background:#101814;border:1px solid #2e3d36;border-radius:18px;padding:14px}.metric span{color:#a8b5ad;display:block;font-size:.78rem;text-transform:uppercase}.metric strong{display:block;font-size:1.65rem;margin-top:5px}.status{border:1px solid #64748b;border-radius:999px;display:inline-flex;font-weight:900;padding:7px 11px}.pass{color:#86efac}.warn,.warning{color:#fde68a}.fail,.error{color:#fecaca}table{border-collapse:collapse;width:100%}td,th{border-bottom:1px solid #2e3d36;padding:10px;text-align:left}</style></head><body><main><section class="hero"><p class="eyebrow">Native media pipeline</p><h1>${escapeHtml15(title)}</h1><p class="status ${escapeHtml15(report.status)}">${escapeHtml15(report.status)}</p><p>${escapeHtml15(report.surface)}</p><section class="summary"><div class="metric"><span>Frames</span><strong>${String(report.frames)}</strong></div><div class="metric"><span>Input audio</span><strong>${String(report.calibration.inputAudioFrames)}</strong></div><div class="metric"><span>Assistant audio</span><strong>${String(report.calibration.assistantAudioFrames)}</strong></div><div class="metric"><span>Trace linked</span><strong>${String(report.calibration.traceLinkedFrames)}</strong></div><div class="metric"><span>First audio</span><strong>${escapeHtml15(report.calibration.firstAudioLatencyMs ?? "n/a")}ms</strong></div><div class="metric"><span>VAD segments</span><strong>${String(report.vad.segments.length)}</strong></div><div class="metric"><span>Interruptions</span><strong>${String(report.interruption.interruptionFrames)}</strong></div><div class="metric"><span>Processor graph</span><strong>${String(report.processorGraph?.nodes.length ?? 0)} nodes</strong></div><div class="metric"><span>Graph out/drop</span><strong>${String(report.processorGraph?.emittedFrames ?? 0)}/${String(report.processorGraph?.droppedFrames ?? 0)}</strong></div><div class="metric"><span>Resampling</span><strong>${report.calibration.resamplingRequired ? "required" : "not required"}</strong></div><div class="metric"><span>Transport</span><strong>${escapeHtml15(report.transport?.state ?? "n/a")}</strong></div><div class="metric"><span>Transport in/out</span><strong>${String(report.transport?.inputFrames ?? 0)}/${String(report.transport?.outputFrames ?? 0)}</strong></div><div class="metric"><span>Backpressure</span><strong>${String(report.transport?.backpressureEvents ?? 0)}</strong></div></section></section><section class="card"><h2>Issues</h2><ul>${issues || '<li class="pass">No media pipeline issues.</li>'}</ul></section><section class="card"><h2>VAD Segments</h2><table><thead><tr><th>Segment</th><th>Frames</th><th>Duration ms</th><th>Turn</th></tr></thead><tbody>${segments || '<tr><td colspan="4">No VAD segments.</td></tr>'}</tbody></table></section></main></body></html>`;
|
|
12051
|
+
return `<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" /><title>${escapeHtml15(title)}</title><style>body{background:#101418;color:#f7f3e8;font-family:ui-sans-serif,system-ui,sans-serif;margin:0}main{margin:auto;max-width:1100px;padding:32px}.hero,.card{background:#17201d;border:1px solid #2e3d36;border-radius:24px;margin-bottom:16px;padding:22px}.hero{background:linear-gradient(135deg,rgba(20,184,166,.18),rgba(245,158,11,.12))}.eyebrow{color:#5eead4;font-weight:900;letter-spacing:.1em;text-transform:uppercase}h1{font-size:clamp(2.3rem,6vw,4.8rem);letter-spacing:-.06em;line-height:.9;margin:.2rem 0 1rem}.summary{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.metric{background:#101814;border:1px solid #2e3d36;border-radius:18px;padding:14px}.metric span{color:#a8b5ad;display:block;font-size:.78rem;text-transform:uppercase}.metric strong{display:block;font-size:1.65rem;margin-top:5px}.status{border:1px solid #64748b;border-radius:999px;display:inline-flex;font-weight:900;padding:7px 11px}.pass{color:#86efac}.warn,.warning{color:#fde68a}.fail,.error{color:#fecaca}table{border-collapse:collapse;width:100%}td,th{border-bottom:1px solid #2e3d36;padding:10px;text-align:left}</style></head><body><main><section class="hero"><p class="eyebrow">Native media pipeline</p><h1>${escapeHtml15(title)}</h1><p class="status ${escapeHtml15(report.status)}">${escapeHtml15(report.status)}</p><p>${escapeHtml15(report.surface)}</p><section class="summary"><div class="metric"><span>Frames</span><strong>${String(report.frames)}</strong></div><div class="metric"><span>Input audio</span><strong>${String(report.calibration.inputAudioFrames)}</strong></div><div class="metric"><span>Assistant audio</span><strong>${String(report.calibration.assistantAudioFrames)}</strong></div><div class="metric"><span>Trace linked</span><strong>${String(report.calibration.traceLinkedFrames)}</strong></div><div class="metric"><span>First audio</span><strong>${escapeHtml15(report.calibration.firstAudioLatencyMs ?? "n/a")}ms</strong></div><div class="metric"><span>VAD segments</span><strong>${String(report.vad.segments.length)}</strong></div><div class="metric"><span>Media quality</span><strong>${escapeHtml15(report.quality.status)}</strong></div><div class="metric"><span>Media gaps</span><strong>${String(report.quality.gapCount)}</strong></div><div class="metric"><span>Media jitter</span><strong>${escapeHtml15(report.quality.jitterMs ?? "n/a")}ms</strong></div><div class="metric"><span>Speech ratio</span><strong>${String(report.quality.speechRatio)}</strong></div><div class="metric"><span>Timestamp drift</span><strong>${escapeHtml15(report.quality.timestampDriftMs ?? "n/a")}ms</strong></div><div class="metric"><span>Interruptions</span><strong>${String(report.interruption.interruptionFrames)}</strong></div><div class="metric"><span>Processor graph</span><strong>${String(report.processorGraph?.nodes.length ?? 0)} nodes</strong></div><div class="metric"><span>Graph out/drop</span><strong>${String(report.processorGraph?.emittedFrames ?? 0)}/${String(report.processorGraph?.droppedFrames ?? 0)}</strong></div><div class="metric"><span>Resampling</span><strong>${report.calibration.resamplingRequired ? "required" : "not required"}</strong></div><div class="metric"><span>Transport</span><strong>${escapeHtml15(report.transport?.state ?? "n/a")}</strong></div><div class="metric"><span>Transport in/out</span><strong>${String(report.transport?.inputFrames ?? 0)}/${String(report.transport?.outputFrames ?? 0)}</strong></div><div class="metric"><span>Backpressure</span><strong>${String(report.transport?.backpressureEvents ?? 0)}</strong></div></section></section><section class="card"><h2>Issues</h2><ul>${issues || '<li class="pass">No media pipeline issues.</li>'}</ul></section><section class="card"><h2>VAD Segments</h2><table><thead><tr><th>Segment</th><th>Frames</th><th>Duration ms</th><th>Turn</th></tr></thead><tbody>${segments || '<tr><td colspan="4">No VAD segments.</td></tr>'}</tbody></table></section></main></body></html>`;
|
|
12049
12052
|
};
|
|
12050
12053
|
var createVoiceMediaPipelineRoutes = (options = {}) => {
|
|
12051
12054
|
const path = options.path ?? "/api/voice/media-pipeline";
|
|
@@ -29038,6 +29041,7 @@ var readinessGateCodes = {
|
|
|
29038
29041
|
"Delivery runtime": "voice.readiness.delivery_runtime",
|
|
29039
29042
|
"Handoff delivery": "voice.readiness.handoff_delivery",
|
|
29040
29043
|
"Live latency proof": "voice.readiness.live_latency",
|
|
29044
|
+
"Media pipeline quality": "voice.readiness.media_pipeline_quality",
|
|
29041
29045
|
"Operations records": "voice.readiness.operations_records",
|
|
29042
29046
|
"Operator action history": "voice.readiness.operator_action_history",
|
|
29043
29047
|
"Ops recovery": "voice.readiness.ops_recovery",
|
|
@@ -29211,6 +29215,12 @@ var resolveMonitoringNotifierDelivery = async (options, input) => {
|
|
|
29211
29215
|
}
|
|
29212
29216
|
return typeof options.monitoringNotifierDelivery === "function" ? await options.monitoringNotifierDelivery(input) : options.monitoringNotifierDelivery;
|
|
29213
29217
|
};
|
|
29218
|
+
var resolveMediaPipeline = async (options, input) => {
|
|
29219
|
+
if (options.mediaPipeline === false || options.mediaPipeline === undefined) {
|
|
29220
|
+
return;
|
|
29221
|
+
}
|
|
29222
|
+
return typeof options.mediaPipeline === "function" ? await options.mediaPipeline(input) : options.mediaPipeline;
|
|
29223
|
+
};
|
|
29214
29224
|
var isVoiceTelephonyWebhookSecurityReport = (value) => typeof value.generatedAt === "number" && Array.isArray(value.providers) && typeof value.status === "string";
|
|
29215
29225
|
var resolveTelephonyWebhookSecurity = async (options, input) => {
|
|
29216
29226
|
if (options.telephonyWebhookSecurity === false || options.telephonyWebhookSecurity === undefined) {
|
|
@@ -29546,6 +29556,13 @@ var buildOperationsRecordLinks = (input) => {
|
|
|
29546
29556
|
sessionId: event.sessionId,
|
|
29547
29557
|
status: latencyMs > input.liveLatencyFailAfterMs ? "fail" : "warn"
|
|
29548
29558
|
}));
|
|
29559
|
+
const mediaQuality = input.mediaPipeline && input.mediaPipeline.status !== "pass" ? input.mediaPipeline.sessionIds.map((sessionId) => ({
|
|
29560
|
+
detail: `${input.mediaPipeline?.quality.issues.length ?? 0} media quality issue(s)`,
|
|
29561
|
+
href: voiceOperationsRecordHref(input.base, sessionId),
|
|
29562
|
+
label: "Open media quality operations record",
|
|
29563
|
+
sessionId,
|
|
29564
|
+
status: "fail"
|
|
29565
|
+
})) : [];
|
|
29549
29566
|
return {
|
|
29550
29567
|
failedSessions: input.failedSessionIds.map((sessionId) => ({
|
|
29551
29568
|
href: voiceOperationsRecordHref(input.base, sessionId),
|
|
@@ -29554,6 +29571,7 @@ var buildOperationsRecordLinks = (input) => {
|
|
|
29554
29571
|
status: failedSessionSet.has(sessionId) ? "fail" : "warn"
|
|
29555
29572
|
})),
|
|
29556
29573
|
failingLatency,
|
|
29574
|
+
mediaQuality,
|
|
29557
29575
|
providerErrors
|
|
29558
29576
|
};
|
|
29559
29577
|
};
|
|
@@ -29586,6 +29604,7 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
|
|
|
29586
29604
|
phoneAgentSmokes,
|
|
29587
29605
|
monitoring,
|
|
29588
29606
|
monitoringNotifierDelivery,
|
|
29607
|
+
mediaPipeline,
|
|
29589
29608
|
telephonyWebhookSecurity,
|
|
29590
29609
|
reconnectContracts,
|
|
29591
29610
|
bargeInReports,
|
|
@@ -29628,6 +29647,7 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
|
|
|
29628
29647
|
resolvePhoneAgentSmokes(options, { query, request }),
|
|
29629
29648
|
resolveMonitoring(options, { query, request }),
|
|
29630
29649
|
resolveMonitoringNotifierDelivery(options, { query, request }),
|
|
29650
|
+
resolveMediaPipeline(options, { query, request }),
|
|
29631
29651
|
resolveTelephonyWebhookSecurity(options, { query, request }),
|
|
29632
29652
|
resolveReconnectContracts(options, { query, request }),
|
|
29633
29653
|
resolveBargeInReports(options, { query, request }),
|
|
@@ -29648,7 +29668,8 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
|
|
|
29648
29668
|
failedSessionIds: failedSessionItems.map((session) => session.sessionId),
|
|
29649
29669
|
liveLatencyFailAfterMs: options.liveLatencyFailAfterMs ?? 3200,
|
|
29650
29670
|
liveLatencyMaxAgeMs: options.liveLatencyMaxAgeMs,
|
|
29651
|
-
liveLatencyWarnAfterMs: options.liveLatencyWarnAfterMs ?? 1800
|
|
29671
|
+
liveLatencyWarnAfterMs: options.liveLatencyWarnAfterMs ?? 1800,
|
|
29672
|
+
mediaPipeline
|
|
29652
29673
|
});
|
|
29653
29674
|
const checks = [
|
|
29654
29675
|
{
|
|
@@ -29803,6 +29824,17 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
|
|
|
29803
29824
|
const metrics = providerSlo?.kinds[issue.kind]?.metrics;
|
|
29804
29825
|
return Object.values(metrics ?? {}).find((metric) => metric.label === issue.label || issue.code.endsWith(metric.label.toLowerCase().replace(/[^a-z0-9]+/g, "_")));
|
|
29805
29826
|
};
|
|
29827
|
+
const mediaPipelineSummary = mediaPipeline ? {
|
|
29828
|
+
assistantAudioFrames: mediaPipeline.quality.assistantAudioFrames,
|
|
29829
|
+
backpressureEvents: mediaPipeline.quality.backpressureEvents,
|
|
29830
|
+
gapCount: mediaPipeline.quality.gapCount,
|
|
29831
|
+
inputAudioFrames: mediaPipeline.quality.inputAudioFrames,
|
|
29832
|
+
issues: mediaPipeline.calibration.issues.length + mediaPipeline.interruption.issues.length + mediaPipeline.quality.issues.length,
|
|
29833
|
+
jitterMs: mediaPipeline.quality.jitterMs,
|
|
29834
|
+
speechRatio: mediaPipeline.quality.speechRatio,
|
|
29835
|
+
status: mediaPipeline.status === "pass" ? "pass" : "fail",
|
|
29836
|
+
timestampDriftMs: mediaPipeline.quality.timestampDriftMs
|
|
29837
|
+
} : undefined;
|
|
29806
29838
|
checks.push({
|
|
29807
29839
|
detail: liveLatency.total === 0 ? "No browser live-latency measurements are recorded yet." : liveLatency.status === "pass" ? `Live browser turn latency averages ${liveLatency.averageLatencyMs}ms.` : `${liveLatency.failed} failed and ${liveLatency.warnings} warned live-latency measurement(s).`,
|
|
29808
29840
|
href: firstOperationsRecordHref(operationsRecords.failingLatency) ?? options.links?.liveLatency ?? "/traces",
|
|
@@ -29834,6 +29866,42 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
|
|
|
29834
29866
|
...calibratedThresholdActions()
|
|
29835
29867
|
]
|
|
29836
29868
|
});
|
|
29869
|
+
if (mediaPipeline && mediaPipelineSummary) {
|
|
29870
|
+
const firstIssue = [
|
|
29871
|
+
...mediaPipeline.quality.issues,
|
|
29872
|
+
...mediaPipeline.calibration.issues,
|
|
29873
|
+
...mediaPipeline.interruption.issues
|
|
29874
|
+
][0];
|
|
29875
|
+
checks.push({
|
|
29876
|
+
detail: mediaPipelineSummary.status === "pass" ? `Media pipeline quality is passing with ${mediaPipelineSummary.inputAudioFrames} input frame(s), ${mediaPipelineSummary.assistantAudioFrames} assistant frame(s), ${mediaPipelineSummary.gapCount} gap(s), ${String(mediaPipelineSummary.jitterMs ?? "n/a")}ms jitter, and ${mediaPipelineSummary.speechRatio} speech ratio.` : firstIssue?.message ?? `${mediaPipelineSummary.issues} media pipeline issue(s) need review.`,
|
|
29877
|
+
href: firstOperationsRecordHref(operationsRecords.mediaQuality) ?? options.links?.mediaPipeline ?? "/voice/media-pipeline",
|
|
29878
|
+
label: "Media pipeline quality",
|
|
29879
|
+
proofSource: proofSource("mediaPipeline", "mediaQuality"),
|
|
29880
|
+
gateExplanation: mediaPipelineSummary.status === "pass" ? undefined : {
|
|
29881
|
+
evidenceHref: firstOperationsRecordHref(operationsRecords.mediaQuality) ?? options.links?.mediaPipeline ?? "/voice/media-pipeline",
|
|
29882
|
+
observed: firstIssue?.code ?? `${mediaPipelineSummary.issues} issue(s)`,
|
|
29883
|
+
remediation: "Inspect media pipeline quality, fix excessive gaps, jitter, drift, speech-ratio, or backpressure issues, then rerun readiness proof.",
|
|
29884
|
+
thresholdLabel: "Media quality report status",
|
|
29885
|
+
unit: "status"
|
|
29886
|
+
},
|
|
29887
|
+
status: mediaPipelineSummary.status,
|
|
29888
|
+
value: mediaPipelineSummary.status === "pass" ? `${mediaPipelineSummary.gapCount} gaps` : `${mediaPipelineSummary.issues} issue(s)`,
|
|
29889
|
+
actions: mediaPipelineSummary.status === "pass" ? [] : [
|
|
29890
|
+
...firstOperationsRecordHref(operationsRecords.mediaQuality) ? [
|
|
29891
|
+
{
|
|
29892
|
+
description: "Open the exact call/session operations record for the first media quality issue.",
|
|
29893
|
+
href: firstOperationsRecordHref(operationsRecords.mediaQuality),
|
|
29894
|
+
label: "Open media operations record"
|
|
29895
|
+
}
|
|
29896
|
+
] : [],
|
|
29897
|
+
{
|
|
29898
|
+
description: "Open media pipeline proof and inspect quality, calibration, VAD, interruption, transport, and processor-graph evidence.",
|
|
29899
|
+
href: options.links?.mediaPipeline ?? "/voice/media-pipeline",
|
|
29900
|
+
label: "Open media pipeline proof"
|
|
29901
|
+
}
|
|
29902
|
+
]
|
|
29903
|
+
});
|
|
29904
|
+
}
|
|
29837
29905
|
const carrierSummary = carriers ? {
|
|
29838
29906
|
failing: carriers.summary.failing,
|
|
29839
29907
|
providers: carriers.summary.providers,
|
|
@@ -30405,6 +30473,7 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
|
|
|
30405
30473
|
observabilityExportDeliveries: "/api/voice/observability-export/deliveries",
|
|
30406
30474
|
monitoring: "/voice/monitors",
|
|
30407
30475
|
monitoringNotifierDelivery: "/api/voice/monitor-issues/notifications",
|
|
30476
|
+
mediaPipeline: "/voice/media-pipeline",
|
|
30408
30477
|
opsActions: "/voice/ops-actions",
|
|
30409
30478
|
opsRecovery: "/ops-recovery",
|
|
30410
30479
|
phoneAgentSmoke: "/sessions",
|
|
@@ -30438,6 +30507,7 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
|
|
|
30438
30507
|
total: handoffs.total
|
|
30439
30508
|
},
|
|
30440
30509
|
liveLatency,
|
|
30510
|
+
mediaPipeline: mediaPipelineSummary,
|
|
30441
30511
|
monitoring: monitoringSummary,
|
|
30442
30512
|
monitoringNotifierDelivery: monitoringNotifierDeliverySummary,
|
|
30443
30513
|
opsActionHistory,
|
|
@@ -24,6 +24,7 @@ export type VoiceMediaPipelineReport = {
|
|
|
24
24
|
quality: MediaQualityReport;
|
|
25
25
|
resampling?: MediaResamplingPlan;
|
|
26
26
|
processorGraph?: MediaProcessorGraphReport;
|
|
27
|
+
sessionIds: string[];
|
|
27
28
|
status: MediaPipelineStatus;
|
|
28
29
|
surface: string;
|
|
29
30
|
transport?: MediaTransportReport;
|
|
@@ -19,6 +19,7 @@ import type { VoiceProviderOrchestrationReport } from './providerOrchestration';
|
|
|
19
19
|
import type { VoiceCampaignReadinessProofReport } from './campaign';
|
|
20
20
|
import { type VoiceOpsRecoveryReport } from './opsRecovery';
|
|
21
21
|
import { type VoiceObservabilityExportDeliveryHistory, type VoiceObservabilityExportDeliveryReceiptStore, type VoiceObservabilityExportReplayReport, type VoiceObservabilityExportReplaySource, type VoiceObservabilityExportReport } from './observabilityExport';
|
|
22
|
+
import type { VoiceMediaPipelineReport } from './mediaPipelineRoutes';
|
|
22
23
|
export type VoiceProductionReadinessObservabilityExportDeliveryHistoryOptions = {
|
|
23
24
|
failOnMissing?: boolean;
|
|
24
25
|
failOnStale?: boolean;
|
|
@@ -132,6 +133,7 @@ export type VoiceProductionReadinessReport = {
|
|
|
132
133
|
observabilityExportDeliveries?: string;
|
|
133
134
|
monitoring?: string;
|
|
134
135
|
monitoringNotifierDelivery?: string;
|
|
136
|
+
mediaPipeline?: string;
|
|
135
137
|
opsActions?: string;
|
|
136
138
|
opsRecovery?: string;
|
|
137
139
|
phoneAgentSmoke?: string;
|
|
@@ -207,6 +209,17 @@ export type VoiceProductionReadinessReport = {
|
|
|
207
209
|
status: VoiceProductionReadinessStatus;
|
|
208
210
|
total: number;
|
|
209
211
|
};
|
|
212
|
+
mediaPipeline?: {
|
|
213
|
+
assistantAudioFrames: number;
|
|
214
|
+
backpressureEvents: number;
|
|
215
|
+
gapCount: number;
|
|
216
|
+
inputAudioFrames: number;
|
|
217
|
+
issues: number;
|
|
218
|
+
jitterMs?: number;
|
|
219
|
+
speechRatio: number;
|
|
220
|
+
status: VoiceProductionReadinessStatus;
|
|
221
|
+
timestampDriftMs?: number;
|
|
222
|
+
};
|
|
210
223
|
opsActionHistory?: VoiceProductionReadinessOpsActionHistorySummary;
|
|
211
224
|
opsRecovery?: {
|
|
212
225
|
issues: number;
|
|
@@ -311,6 +324,7 @@ export type VoiceProductionReadinessOperationsRecordLink = {
|
|
|
311
324
|
export type VoiceProductionReadinessOperationsRecordLinks = {
|
|
312
325
|
failedSessions: VoiceProductionReadinessOperationsRecordLink[];
|
|
313
326
|
failingLatency: VoiceProductionReadinessOperationsRecordLink[];
|
|
327
|
+
mediaQuality: VoiceProductionReadinessOperationsRecordLink[];
|
|
314
328
|
providerErrors: VoiceProductionReadinessOperationsRecordLink[];
|
|
315
329
|
};
|
|
316
330
|
export type VoiceProductionReadinessAuditRequirement = {
|
|
@@ -446,6 +460,10 @@ export type VoiceProductionReadinessRoutesOptions = {
|
|
|
446
460
|
query: Record<string, unknown>;
|
|
447
461
|
request: Request;
|
|
448
462
|
}) => Promise<VoiceMonitorNotifierDeliveryReport> | VoiceMonitorNotifierDeliveryReport);
|
|
463
|
+
mediaPipeline?: false | VoiceMediaPipelineReport | ((input: {
|
|
464
|
+
query: Record<string, unknown>;
|
|
465
|
+
request: Request;
|
|
466
|
+
}) => Promise<VoiceMediaPipelineReport> | VoiceMediaPipelineReport);
|
|
449
467
|
opsActionHistory?: false | VoiceProductionReadinessOpsActionHistoryOptions;
|
|
450
468
|
opsRecovery?: false | VoiceOpsRecoveryReport | ((input: {
|
|
451
469
|
query: Record<string, unknown>;
|
|
@@ -51,6 +51,7 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
|
|
|
51
51
|
readonly observabilityExportDeliveries?: string | undefined;
|
|
52
52
|
readonly monitoring?: string | undefined;
|
|
53
53
|
readonly monitoringNotifierDelivery?: string | undefined;
|
|
54
|
+
readonly mediaPipeline?: string | undefined;
|
|
54
55
|
readonly opsActions?: string | undefined;
|
|
55
56
|
readonly opsRecovery?: string | undefined;
|
|
56
57
|
readonly phoneAgentSmoke?: string | undefined;
|
|
@@ -101,6 +102,13 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
|
|
|
101
102
|
readonly sessionId: string;
|
|
102
103
|
readonly status: import("..").VoiceProductionReadinessStatus;
|
|
103
104
|
}[];
|
|
105
|
+
readonly mediaQuality: readonly {
|
|
106
|
+
readonly detail?: string | undefined;
|
|
107
|
+
readonly href: string;
|
|
108
|
+
readonly label: string;
|
|
109
|
+
readonly sessionId: string;
|
|
110
|
+
readonly status: import("..").VoiceProductionReadinessStatus;
|
|
111
|
+
}[];
|
|
104
112
|
readonly providerErrors: readonly {
|
|
105
113
|
readonly detail?: string | undefined;
|
|
106
114
|
readonly href: string;
|
|
@@ -230,6 +238,17 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
|
|
|
230
238
|
readonly status: import("..").VoiceProductionReadinessStatus;
|
|
231
239
|
readonly total: number;
|
|
232
240
|
} | undefined;
|
|
241
|
+
readonly mediaPipeline?: {
|
|
242
|
+
readonly assistantAudioFrames: number;
|
|
243
|
+
readonly backpressureEvents: number;
|
|
244
|
+
readonly gapCount: number;
|
|
245
|
+
readonly inputAudioFrames: number;
|
|
246
|
+
readonly issues: number;
|
|
247
|
+
readonly jitterMs?: number | undefined;
|
|
248
|
+
readonly speechRatio: number;
|
|
249
|
+
readonly status: import("..").VoiceProductionReadinessStatus;
|
|
250
|
+
readonly timestampDriftMs?: number | undefined;
|
|
251
|
+
} | undefined;
|
|
233
252
|
readonly opsActionHistory?: {
|
|
234
253
|
readonly failed: number;
|
|
235
254
|
readonly passed: number;
|
|
@@ -434,6 +453,7 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
|
|
|
434
453
|
readonly observabilityExportDeliveries?: string | undefined;
|
|
435
454
|
readonly monitoring?: string | undefined;
|
|
436
455
|
readonly monitoringNotifierDelivery?: string | undefined;
|
|
456
|
+
readonly mediaPipeline?: string | undefined;
|
|
437
457
|
readonly opsActions?: string | undefined;
|
|
438
458
|
readonly opsRecovery?: string | undefined;
|
|
439
459
|
readonly phoneAgentSmoke?: string | undefined;
|
|
@@ -484,6 +504,13 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
|
|
|
484
504
|
readonly sessionId: string;
|
|
485
505
|
readonly status: import("..").VoiceProductionReadinessStatus;
|
|
486
506
|
}[];
|
|
507
|
+
readonly mediaQuality: readonly {
|
|
508
|
+
readonly detail?: string | undefined;
|
|
509
|
+
readonly href: string;
|
|
510
|
+
readonly label: string;
|
|
511
|
+
readonly sessionId: string;
|
|
512
|
+
readonly status: import("..").VoiceProductionReadinessStatus;
|
|
513
|
+
}[];
|
|
487
514
|
readonly providerErrors: readonly {
|
|
488
515
|
readonly detail?: string | undefined;
|
|
489
516
|
readonly href: string;
|
|
@@ -613,6 +640,17 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
|
|
|
613
640
|
readonly status: import("..").VoiceProductionReadinessStatus;
|
|
614
641
|
readonly total: number;
|
|
615
642
|
} | undefined;
|
|
643
|
+
readonly mediaPipeline?: {
|
|
644
|
+
readonly assistantAudioFrames: number;
|
|
645
|
+
readonly backpressureEvents: number;
|
|
646
|
+
readonly gapCount: number;
|
|
647
|
+
readonly inputAudioFrames: number;
|
|
648
|
+
readonly issues: number;
|
|
649
|
+
readonly jitterMs?: number | undefined;
|
|
650
|
+
readonly speechRatio: number;
|
|
651
|
+
readonly status: import("..").VoiceProductionReadinessStatus;
|
|
652
|
+
readonly timestampDriftMs?: number | undefined;
|
|
653
|
+
} | undefined;
|
|
616
654
|
readonly opsActionHistory?: {
|
|
617
655
|
readonly failed: number;
|
|
618
656
|
readonly passed: number;
|