@absolutejs/voice 0.0.22-beta.350 → 0.0.22-beta.352
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/client/index.js +51 -1
- package/dist/client/routingStatusWidget.d.ts +4 -0
- package/dist/react/index.js +51 -1
- package/dist/resilienceRoutes.d.ts +3 -0
- package/dist/svelte/index.js +51 -1
- package/dist/vue/index.js +51 -1
- package/package.json +1 -1
package/dist/client/index.js
CHANGED
|
@@ -6667,8 +6667,44 @@ var DEFAULT_TITLE7 = "Voice Routing";
|
|
|
6667
6667
|
var DEFAULT_DESCRIPTION7 = "Latest provider routing decision from the self-hosted trace store.";
|
|
6668
6668
|
var escapeHtml11 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
6669
6669
|
var formatValue = (value, fallback = "None") => typeof value === "string" && value.trim() ? value : typeof value === "number" && Number.isFinite(value) ? String(value) : fallback;
|
|
6670
|
+
var formatProviderRoutes = (routes) => routes && typeof routes === "object" ? Object.entries(routes).map(([role, provider]) => `${role}: ${formatValue(provider)}`).join(", ") || "None" : "None";
|
|
6671
|
+
var getProviderRoute = (routes, role) => routes && typeof routes === "object" ? formatValue(routes[role], "Not configured") : "Not configured";
|
|
6672
|
+
var formatFallbackPath = (decision) => {
|
|
6673
|
+
const provider = formatValue(decision.provider, "Unknown");
|
|
6674
|
+
const selectedProvider = formatValue(decision.selectedProvider, provider);
|
|
6675
|
+
const fallbackProvider = formatValue(decision.fallbackProvider, "");
|
|
6676
|
+
if (fallbackProvider !== "None" && fallbackProvider.trim()) {
|
|
6677
|
+
return `${provider} -> ${fallbackProvider}`;
|
|
6678
|
+
}
|
|
6679
|
+
if (selectedProvider !== provider) {
|
|
6680
|
+
return `${provider} -> ${selectedProvider}`;
|
|
6681
|
+
}
|
|
6682
|
+
return `${provider} primary`;
|
|
6683
|
+
};
|
|
6670
6684
|
var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
6671
6685
|
const decision = snapshot.decision;
|
|
6686
|
+
const activeStack = decision ? [
|
|
6687
|
+
{
|
|
6688
|
+
label: "Profile",
|
|
6689
|
+
value: formatValue(decision.profileLabel ?? decision.profileId)
|
|
6690
|
+
},
|
|
6691
|
+
{
|
|
6692
|
+
label: "LLM",
|
|
6693
|
+
value: getProviderRoute(decision.providerRoutes, "llm")
|
|
6694
|
+
},
|
|
6695
|
+
{
|
|
6696
|
+
label: "STT",
|
|
6697
|
+
value: getProviderRoute(decision.providerRoutes, "stt")
|
|
6698
|
+
},
|
|
6699
|
+
{
|
|
6700
|
+
label: "TTS",
|
|
6701
|
+
value: getProviderRoute(decision.providerRoutes, "tts")
|
|
6702
|
+
},
|
|
6703
|
+
{
|
|
6704
|
+
label: "Fallback path",
|
|
6705
|
+
value: formatFallbackPath(decision)
|
|
6706
|
+
}
|
|
6707
|
+
] : [];
|
|
6672
6708
|
const rows = decision ? [
|
|
6673
6709
|
{ label: "Kind", value: decision.kind.toUpperCase() },
|
|
6674
6710
|
{ label: "Policy", value: formatValue(decision.routing, "Unknown") },
|
|
@@ -6682,12 +6718,21 @@ var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
|
6682
6718
|
value: formatValue(decision.fallbackProvider)
|
|
6683
6719
|
},
|
|
6684
6720
|
{ label: "Status", value: formatValue(decision.status, "unknown") },
|
|
6721
|
+
{
|
|
6722
|
+
label: "Voice profile",
|
|
6723
|
+
value: formatValue(decision.profileLabel ?? decision.profileId)
|
|
6724
|
+
},
|
|
6725
|
+
{
|
|
6726
|
+
label: "Default routes",
|
|
6727
|
+
value: formatProviderRoutes(decision.providerRoutes)
|
|
6728
|
+
},
|
|
6685
6729
|
{
|
|
6686
6730
|
label: "Latency budget",
|
|
6687
6731
|
value: typeof decision.latencyBudgetMs === "number" ? `${decision.latencyBudgetMs}ms` : "None"
|
|
6688
6732
|
}
|
|
6689
6733
|
] : [];
|
|
6690
6734
|
return {
|
|
6735
|
+
activeStack,
|
|
6691
6736
|
decision,
|
|
6692
6737
|
description: options.description ?? DEFAULT_DESCRIPTION7,
|
|
6693
6738
|
error: snapshot.error,
|
|
@@ -6701,6 +6746,10 @@ var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
|
6701
6746
|
};
|
|
6702
6747
|
var renderVoiceRoutingStatusHTML = (snapshot, options = {}) => {
|
|
6703
6748
|
const model = createVoiceRoutingStatusViewModel(snapshot, options);
|
|
6749
|
+
const activeStack = model.activeStack.length ? `<div class="absolute-voice-routing-status__stack" aria-label="Active voice stack">${model.activeStack.map((item) => `<div>
|
|
6750
|
+
<span>${escapeHtml11(item.label)}</span>
|
|
6751
|
+
<strong>${escapeHtml11(item.value)}</strong>
|
|
6752
|
+
</div>`).join("")}</div>` : "";
|
|
6704
6753
|
const rows = model.rows.length ? `<div class="absolute-voice-routing-status__grid">${model.rows.map((row) => `<div>
|
|
6705
6754
|
<span>${escapeHtml11(row.label)}</span>
|
|
6706
6755
|
<strong>${escapeHtml11(row.value)}</strong>
|
|
@@ -6711,11 +6760,12 @@ var renderVoiceRoutingStatusHTML = (snapshot, options = {}) => {
|
|
|
6711
6760
|
<strong class="absolute-voice-routing-status__label">${escapeHtml11(model.label)}</strong>
|
|
6712
6761
|
</header>
|
|
6713
6762
|
<p class="absolute-voice-routing-status__description">${escapeHtml11(model.description)}</p>
|
|
6763
|
+
${activeStack}
|
|
6714
6764
|
${rows}
|
|
6715
6765
|
${model.error ? `<p class="absolute-voice-routing-status__error">${escapeHtml11(model.error)}</p>` : ""}
|
|
6716
6766
|
</section>`;
|
|
6717
6767
|
};
|
|
6718
|
-
var getVoiceRoutingStatusCSS = () => `.absolute-voice-routing-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-routing-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-routing-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-routing-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-routing-status__label{font-size:24px;line-height:1}.absolute-voice-routing-status__description{color:#514733;margin:12px 0 0}.absolute-voice-routing-status__grid{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:14px}.absolute-voice-routing-status__grid div{background:#fff;border:1px solid #eee4d2;border-radius:14px;padding:10px 12px}.absolute-voice-routing-status__grid span{color:#655944;display:block;font-size:12px;margin-bottom:4px}.absolute-voice-routing-status__grid strong{overflow-wrap:anywhere}.absolute-voice-routing-status__empty{color:#655944;margin:14px 0 0}.absolute-voice-routing-status__error{color:#9f1239;font-weight:700}`;
|
|
6768
|
+
var getVoiceRoutingStatusCSS = () => `.absolute-voice-routing-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-routing-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-routing-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-routing-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-routing-status__label{font-size:24px;line-height:1}.absolute-voice-routing-status__description{color:#514733;margin:12px 0 0}.absolute-voice-routing-status__stack{background:linear-gradient(135deg,#16130d,#49391f);border-radius:18px;color:#fff;display:grid;gap:8px;grid-template-columns:repeat(5,minmax(0,1fr));margin-top:14px;padding:12px}.absolute-voice-routing-status__stack div{border-left:1px solid rgba(255,255,255,.18);padding-left:10px}.absolute-voice-routing-status__stack div:first-child{border-left:0;padding-left:0}.absolute-voice-routing-status__stack span{color:#e9d9b8;display:block;font-size:11px;font-weight:800;letter-spacing:.08em;margin-bottom:5px;text-transform:uppercase}.absolute-voice-routing-status__stack strong{display:block;font-size:13px;line-height:1.25;overflow-wrap:anywhere}.absolute-voice-routing-status__grid{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:14px}.absolute-voice-routing-status__grid div{background:#fff;border:1px solid #eee4d2;border-radius:14px;padding:10px 12px}.absolute-voice-routing-status__grid span{color:#655944;display:block;font-size:12px;margin-bottom:4px}.absolute-voice-routing-status__grid strong{overflow-wrap:anywhere}.absolute-voice-routing-status__empty{color:#655944;margin:14px 0 0}.absolute-voice-routing-status__error{color:#9f1239;font-weight:700}@media (max-width:760px){.absolute-voice-routing-status__stack{grid-template-columns:repeat(2,minmax(0,1fr))}.absolute-voice-routing-status__stack div{border-left:0;border-top:1px solid rgba(255,255,255,.18);padding-left:0;padding-top:8px}.absolute-voice-routing-status__stack div:first-child{border-top:0;padding-top:0}}`;
|
|
6719
6769
|
var mountVoiceRoutingStatus = (element, path = "/api/routing/latest", options = {}) => {
|
|
6720
6770
|
const store = createVoiceRoutingStatusStore(path, options);
|
|
6721
6771
|
const render = () => {
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { VoiceRoutingDecisionSummary } from '../resilienceRoutes';
|
|
2
2
|
import { type VoiceRoutingStatusClientOptions, type VoiceRoutingStatusSnapshot } from './routingStatus';
|
|
3
3
|
export type VoiceRoutingStatusViewModel = {
|
|
4
|
+
activeStack: Array<{
|
|
5
|
+
label: string;
|
|
6
|
+
value: string;
|
|
7
|
+
}>;
|
|
4
8
|
decision: VoiceRoutingDecisionSummary | null;
|
|
5
9
|
description: string;
|
|
6
10
|
error: string | null;
|
package/dist/react/index.js
CHANGED
|
@@ -4264,8 +4264,44 @@ var DEFAULT_TITLE10 = "Voice Routing";
|
|
|
4264
4264
|
var DEFAULT_DESCRIPTION10 = "Latest provider routing decision from the self-hosted trace store.";
|
|
4265
4265
|
var escapeHtml12 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
4266
4266
|
var formatValue = (value, fallback = "None") => typeof value === "string" && value.trim() ? value : typeof value === "number" && Number.isFinite(value) ? String(value) : fallback;
|
|
4267
|
+
var formatProviderRoutes = (routes) => routes && typeof routes === "object" ? Object.entries(routes).map(([role, provider]) => `${role}: ${formatValue(provider)}`).join(", ") || "None" : "None";
|
|
4268
|
+
var getProviderRoute = (routes, role) => routes && typeof routes === "object" ? formatValue(routes[role], "Not configured") : "Not configured";
|
|
4269
|
+
var formatFallbackPath = (decision) => {
|
|
4270
|
+
const provider = formatValue(decision.provider, "Unknown");
|
|
4271
|
+
const selectedProvider = formatValue(decision.selectedProvider, provider);
|
|
4272
|
+
const fallbackProvider = formatValue(decision.fallbackProvider, "");
|
|
4273
|
+
if (fallbackProvider !== "None" && fallbackProvider.trim()) {
|
|
4274
|
+
return `${provider} -> ${fallbackProvider}`;
|
|
4275
|
+
}
|
|
4276
|
+
if (selectedProvider !== provider) {
|
|
4277
|
+
return `${provider} -> ${selectedProvider}`;
|
|
4278
|
+
}
|
|
4279
|
+
return `${provider} primary`;
|
|
4280
|
+
};
|
|
4267
4281
|
var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
4268
4282
|
const decision = snapshot.decision;
|
|
4283
|
+
const activeStack = decision ? [
|
|
4284
|
+
{
|
|
4285
|
+
label: "Profile",
|
|
4286
|
+
value: formatValue(decision.profileLabel ?? decision.profileId)
|
|
4287
|
+
},
|
|
4288
|
+
{
|
|
4289
|
+
label: "LLM",
|
|
4290
|
+
value: getProviderRoute(decision.providerRoutes, "llm")
|
|
4291
|
+
},
|
|
4292
|
+
{
|
|
4293
|
+
label: "STT",
|
|
4294
|
+
value: getProviderRoute(decision.providerRoutes, "stt")
|
|
4295
|
+
},
|
|
4296
|
+
{
|
|
4297
|
+
label: "TTS",
|
|
4298
|
+
value: getProviderRoute(decision.providerRoutes, "tts")
|
|
4299
|
+
},
|
|
4300
|
+
{
|
|
4301
|
+
label: "Fallback path",
|
|
4302
|
+
value: formatFallbackPath(decision)
|
|
4303
|
+
}
|
|
4304
|
+
] : [];
|
|
4269
4305
|
const rows = decision ? [
|
|
4270
4306
|
{ label: "Kind", value: decision.kind.toUpperCase() },
|
|
4271
4307
|
{ label: "Policy", value: formatValue(decision.routing, "Unknown") },
|
|
@@ -4279,12 +4315,21 @@ var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
|
4279
4315
|
value: formatValue(decision.fallbackProvider)
|
|
4280
4316
|
},
|
|
4281
4317
|
{ label: "Status", value: formatValue(decision.status, "unknown") },
|
|
4318
|
+
{
|
|
4319
|
+
label: "Voice profile",
|
|
4320
|
+
value: formatValue(decision.profileLabel ?? decision.profileId)
|
|
4321
|
+
},
|
|
4322
|
+
{
|
|
4323
|
+
label: "Default routes",
|
|
4324
|
+
value: formatProviderRoutes(decision.providerRoutes)
|
|
4325
|
+
},
|
|
4282
4326
|
{
|
|
4283
4327
|
label: "Latency budget",
|
|
4284
4328
|
value: typeof decision.latencyBudgetMs === "number" ? `${decision.latencyBudgetMs}ms` : "None"
|
|
4285
4329
|
}
|
|
4286
4330
|
] : [];
|
|
4287
4331
|
return {
|
|
4332
|
+
activeStack,
|
|
4288
4333
|
decision,
|
|
4289
4334
|
description: options.description ?? DEFAULT_DESCRIPTION10,
|
|
4290
4335
|
error: snapshot.error,
|
|
@@ -4298,6 +4343,10 @@ var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
|
4298
4343
|
};
|
|
4299
4344
|
var renderVoiceRoutingStatusHTML = (snapshot, options = {}) => {
|
|
4300
4345
|
const model = createVoiceRoutingStatusViewModel(snapshot, options);
|
|
4346
|
+
const activeStack = model.activeStack.length ? `<div class="absolute-voice-routing-status__stack" aria-label="Active voice stack">${model.activeStack.map((item) => `<div>
|
|
4347
|
+
<span>${escapeHtml12(item.label)}</span>
|
|
4348
|
+
<strong>${escapeHtml12(item.value)}</strong>
|
|
4349
|
+
</div>`).join("")}</div>` : "";
|
|
4301
4350
|
const rows = model.rows.length ? `<div class="absolute-voice-routing-status__grid">${model.rows.map((row) => `<div>
|
|
4302
4351
|
<span>${escapeHtml12(row.label)}</span>
|
|
4303
4352
|
<strong>${escapeHtml12(row.value)}</strong>
|
|
@@ -4308,11 +4357,12 @@ var renderVoiceRoutingStatusHTML = (snapshot, options = {}) => {
|
|
|
4308
4357
|
<strong class="absolute-voice-routing-status__label">${escapeHtml12(model.label)}</strong>
|
|
4309
4358
|
</header>
|
|
4310
4359
|
<p class="absolute-voice-routing-status__description">${escapeHtml12(model.description)}</p>
|
|
4360
|
+
${activeStack}
|
|
4311
4361
|
${rows}
|
|
4312
4362
|
${model.error ? `<p class="absolute-voice-routing-status__error">${escapeHtml12(model.error)}</p>` : ""}
|
|
4313
4363
|
</section>`;
|
|
4314
4364
|
};
|
|
4315
|
-
var getVoiceRoutingStatusCSS = () => `.absolute-voice-routing-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-routing-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-routing-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-routing-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-routing-status__label{font-size:24px;line-height:1}.absolute-voice-routing-status__description{color:#514733;margin:12px 0 0}.absolute-voice-routing-status__grid{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:14px}.absolute-voice-routing-status__grid div{background:#fff;border:1px solid #eee4d2;border-radius:14px;padding:10px 12px}.absolute-voice-routing-status__grid span{color:#655944;display:block;font-size:12px;margin-bottom:4px}.absolute-voice-routing-status__grid strong{overflow-wrap:anywhere}.absolute-voice-routing-status__empty{color:#655944;margin:14px 0 0}.absolute-voice-routing-status__error{color:#9f1239;font-weight:700}`;
|
|
4365
|
+
var getVoiceRoutingStatusCSS = () => `.absolute-voice-routing-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-routing-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-routing-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-routing-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-routing-status__label{font-size:24px;line-height:1}.absolute-voice-routing-status__description{color:#514733;margin:12px 0 0}.absolute-voice-routing-status__stack{background:linear-gradient(135deg,#16130d,#49391f);border-radius:18px;color:#fff;display:grid;gap:8px;grid-template-columns:repeat(5,minmax(0,1fr));margin-top:14px;padding:12px}.absolute-voice-routing-status__stack div{border-left:1px solid rgba(255,255,255,.18);padding-left:10px}.absolute-voice-routing-status__stack div:first-child{border-left:0;padding-left:0}.absolute-voice-routing-status__stack span{color:#e9d9b8;display:block;font-size:11px;font-weight:800;letter-spacing:.08em;margin-bottom:5px;text-transform:uppercase}.absolute-voice-routing-status__stack strong{display:block;font-size:13px;line-height:1.25;overflow-wrap:anywhere}.absolute-voice-routing-status__grid{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:14px}.absolute-voice-routing-status__grid div{background:#fff;border:1px solid #eee4d2;border-radius:14px;padding:10px 12px}.absolute-voice-routing-status__grid span{color:#655944;display:block;font-size:12px;margin-bottom:4px}.absolute-voice-routing-status__grid strong{overflow-wrap:anywhere}.absolute-voice-routing-status__empty{color:#655944;margin:14px 0 0}.absolute-voice-routing-status__error{color:#9f1239;font-weight:700}@media (max-width:760px){.absolute-voice-routing-status__stack{grid-template-columns:repeat(2,minmax(0,1fr))}.absolute-voice-routing-status__stack div{border-left:0;border-top:1px solid rgba(255,255,255,.18);padding-left:0;padding-top:8px}.absolute-voice-routing-status__stack div:first-child{border-top:0;padding-top:0}}`;
|
|
4316
4366
|
var mountVoiceRoutingStatus = (element, path = "/api/routing/latest", options = {}) => {
|
|
4317
4367
|
const store = createVoiceRoutingStatusStore(path, options);
|
|
4318
4368
|
const render = () => {
|
|
@@ -12,7 +12,10 @@ export type VoiceRoutingEvent = {
|
|
|
12
12
|
kind: VoiceRoutingEventKind;
|
|
13
13
|
latencyBudgetMs?: number;
|
|
14
14
|
operation?: string;
|
|
15
|
+
profileId?: string;
|
|
16
|
+
profileLabel?: string;
|
|
15
17
|
provider?: string;
|
|
18
|
+
providerRoutes?: Record<string, string>;
|
|
16
19
|
routing?: string;
|
|
17
20
|
scenarioId?: string;
|
|
18
21
|
selectedProvider?: string;
|
package/dist/svelte/index.js
CHANGED
|
@@ -4931,8 +4931,44 @@ var DEFAULT_TITLE7 = "Voice Routing";
|
|
|
4931
4931
|
var DEFAULT_DESCRIPTION7 = "Latest provider routing decision from the self-hosted trace store.";
|
|
4932
4932
|
var escapeHtml10 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
4933
4933
|
var formatValue = (value, fallback = "None") => typeof value === "string" && value.trim() ? value : typeof value === "number" && Number.isFinite(value) ? String(value) : fallback;
|
|
4934
|
+
var formatProviderRoutes = (routes) => routes && typeof routes === "object" ? Object.entries(routes).map(([role, provider]) => `${role}: ${formatValue(provider)}`).join(", ") || "None" : "None";
|
|
4935
|
+
var getProviderRoute = (routes, role) => routes && typeof routes === "object" ? formatValue(routes[role], "Not configured") : "Not configured";
|
|
4936
|
+
var formatFallbackPath = (decision) => {
|
|
4937
|
+
const provider = formatValue(decision.provider, "Unknown");
|
|
4938
|
+
const selectedProvider = formatValue(decision.selectedProvider, provider);
|
|
4939
|
+
const fallbackProvider = formatValue(decision.fallbackProvider, "");
|
|
4940
|
+
if (fallbackProvider !== "None" && fallbackProvider.trim()) {
|
|
4941
|
+
return `${provider} -> ${fallbackProvider}`;
|
|
4942
|
+
}
|
|
4943
|
+
if (selectedProvider !== provider) {
|
|
4944
|
+
return `${provider} -> ${selectedProvider}`;
|
|
4945
|
+
}
|
|
4946
|
+
return `${provider} primary`;
|
|
4947
|
+
};
|
|
4934
4948
|
var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
4935
4949
|
const decision = snapshot.decision;
|
|
4950
|
+
const activeStack = decision ? [
|
|
4951
|
+
{
|
|
4952
|
+
label: "Profile",
|
|
4953
|
+
value: formatValue(decision.profileLabel ?? decision.profileId)
|
|
4954
|
+
},
|
|
4955
|
+
{
|
|
4956
|
+
label: "LLM",
|
|
4957
|
+
value: getProviderRoute(decision.providerRoutes, "llm")
|
|
4958
|
+
},
|
|
4959
|
+
{
|
|
4960
|
+
label: "STT",
|
|
4961
|
+
value: getProviderRoute(decision.providerRoutes, "stt")
|
|
4962
|
+
},
|
|
4963
|
+
{
|
|
4964
|
+
label: "TTS",
|
|
4965
|
+
value: getProviderRoute(decision.providerRoutes, "tts")
|
|
4966
|
+
},
|
|
4967
|
+
{
|
|
4968
|
+
label: "Fallback path",
|
|
4969
|
+
value: formatFallbackPath(decision)
|
|
4970
|
+
}
|
|
4971
|
+
] : [];
|
|
4936
4972
|
const rows = decision ? [
|
|
4937
4973
|
{ label: "Kind", value: decision.kind.toUpperCase() },
|
|
4938
4974
|
{ label: "Policy", value: formatValue(decision.routing, "Unknown") },
|
|
@@ -4946,12 +4982,21 @@ var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
|
4946
4982
|
value: formatValue(decision.fallbackProvider)
|
|
4947
4983
|
},
|
|
4948
4984
|
{ label: "Status", value: formatValue(decision.status, "unknown") },
|
|
4985
|
+
{
|
|
4986
|
+
label: "Voice profile",
|
|
4987
|
+
value: formatValue(decision.profileLabel ?? decision.profileId)
|
|
4988
|
+
},
|
|
4989
|
+
{
|
|
4990
|
+
label: "Default routes",
|
|
4991
|
+
value: formatProviderRoutes(decision.providerRoutes)
|
|
4992
|
+
},
|
|
4949
4993
|
{
|
|
4950
4994
|
label: "Latency budget",
|
|
4951
4995
|
value: typeof decision.latencyBudgetMs === "number" ? `${decision.latencyBudgetMs}ms` : "None"
|
|
4952
4996
|
}
|
|
4953
4997
|
] : [];
|
|
4954
4998
|
return {
|
|
4999
|
+
activeStack,
|
|
4955
5000
|
decision,
|
|
4956
5001
|
description: options.description ?? DEFAULT_DESCRIPTION7,
|
|
4957
5002
|
error: snapshot.error,
|
|
@@ -4965,6 +5010,10 @@ var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
|
4965
5010
|
};
|
|
4966
5011
|
var renderVoiceRoutingStatusHTML = (snapshot, options = {}) => {
|
|
4967
5012
|
const model = createVoiceRoutingStatusViewModel(snapshot, options);
|
|
5013
|
+
const activeStack = model.activeStack.length ? `<div class="absolute-voice-routing-status__stack" aria-label="Active voice stack">${model.activeStack.map((item) => `<div>
|
|
5014
|
+
<span>${escapeHtml10(item.label)}</span>
|
|
5015
|
+
<strong>${escapeHtml10(item.value)}</strong>
|
|
5016
|
+
</div>`).join("")}</div>` : "";
|
|
4968
5017
|
const rows = model.rows.length ? `<div class="absolute-voice-routing-status__grid">${model.rows.map((row) => `<div>
|
|
4969
5018
|
<span>${escapeHtml10(row.label)}</span>
|
|
4970
5019
|
<strong>${escapeHtml10(row.value)}</strong>
|
|
@@ -4975,11 +5024,12 @@ var renderVoiceRoutingStatusHTML = (snapshot, options = {}) => {
|
|
|
4975
5024
|
<strong class="absolute-voice-routing-status__label">${escapeHtml10(model.label)}</strong>
|
|
4976
5025
|
</header>
|
|
4977
5026
|
<p class="absolute-voice-routing-status__description">${escapeHtml10(model.description)}</p>
|
|
5027
|
+
${activeStack}
|
|
4978
5028
|
${rows}
|
|
4979
5029
|
${model.error ? `<p class="absolute-voice-routing-status__error">${escapeHtml10(model.error)}</p>` : ""}
|
|
4980
5030
|
</section>`;
|
|
4981
5031
|
};
|
|
4982
|
-
var getVoiceRoutingStatusCSS = () => `.absolute-voice-routing-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-routing-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-routing-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-routing-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-routing-status__label{font-size:24px;line-height:1}.absolute-voice-routing-status__description{color:#514733;margin:12px 0 0}.absolute-voice-routing-status__grid{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:14px}.absolute-voice-routing-status__grid div{background:#fff;border:1px solid #eee4d2;border-radius:14px;padding:10px 12px}.absolute-voice-routing-status__grid span{color:#655944;display:block;font-size:12px;margin-bottom:4px}.absolute-voice-routing-status__grid strong{overflow-wrap:anywhere}.absolute-voice-routing-status__empty{color:#655944;margin:14px 0 0}.absolute-voice-routing-status__error{color:#9f1239;font-weight:700}`;
|
|
5032
|
+
var getVoiceRoutingStatusCSS = () => `.absolute-voice-routing-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-routing-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-routing-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-routing-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-routing-status__label{font-size:24px;line-height:1}.absolute-voice-routing-status__description{color:#514733;margin:12px 0 0}.absolute-voice-routing-status__stack{background:linear-gradient(135deg,#16130d,#49391f);border-radius:18px;color:#fff;display:grid;gap:8px;grid-template-columns:repeat(5,minmax(0,1fr));margin-top:14px;padding:12px}.absolute-voice-routing-status__stack div{border-left:1px solid rgba(255,255,255,.18);padding-left:10px}.absolute-voice-routing-status__stack div:first-child{border-left:0;padding-left:0}.absolute-voice-routing-status__stack span{color:#e9d9b8;display:block;font-size:11px;font-weight:800;letter-spacing:.08em;margin-bottom:5px;text-transform:uppercase}.absolute-voice-routing-status__stack strong{display:block;font-size:13px;line-height:1.25;overflow-wrap:anywhere}.absolute-voice-routing-status__grid{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:14px}.absolute-voice-routing-status__grid div{background:#fff;border:1px solid #eee4d2;border-radius:14px;padding:10px 12px}.absolute-voice-routing-status__grid span{color:#655944;display:block;font-size:12px;margin-bottom:4px}.absolute-voice-routing-status__grid strong{overflow-wrap:anywhere}.absolute-voice-routing-status__empty{color:#655944;margin:14px 0 0}.absolute-voice-routing-status__error{color:#9f1239;font-weight:700}@media (max-width:760px){.absolute-voice-routing-status__stack{grid-template-columns:repeat(2,minmax(0,1fr))}.absolute-voice-routing-status__stack div{border-left:0;border-top:1px solid rgba(255,255,255,.18);padding-left:0;padding-top:8px}.absolute-voice-routing-status__stack div:first-child{border-top:0;padding-top:0}}`;
|
|
4983
5033
|
var mountVoiceRoutingStatus = (element, path = "/api/routing/latest", options = {}) => {
|
|
4984
5034
|
const store = createVoiceRoutingStatusStore(path, options);
|
|
4985
5035
|
const render = () => {
|
package/dist/vue/index.js
CHANGED
|
@@ -4279,8 +4279,44 @@ var DEFAULT_TITLE10 = "Voice Routing";
|
|
|
4279
4279
|
var DEFAULT_DESCRIPTION10 = "Latest provider routing decision from the self-hosted trace store.";
|
|
4280
4280
|
var escapeHtml12 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
4281
4281
|
var formatValue = (value, fallback = "None") => typeof value === "string" && value.trim() ? value : typeof value === "number" && Number.isFinite(value) ? String(value) : fallback;
|
|
4282
|
+
var formatProviderRoutes = (routes) => routes && typeof routes === "object" ? Object.entries(routes).map(([role, provider]) => `${role}: ${formatValue(provider)}`).join(", ") || "None" : "None";
|
|
4283
|
+
var getProviderRoute = (routes, role) => routes && typeof routes === "object" ? formatValue(routes[role], "Not configured") : "Not configured";
|
|
4284
|
+
var formatFallbackPath = (decision) => {
|
|
4285
|
+
const provider = formatValue(decision.provider, "Unknown");
|
|
4286
|
+
const selectedProvider = formatValue(decision.selectedProvider, provider);
|
|
4287
|
+
const fallbackProvider = formatValue(decision.fallbackProvider, "");
|
|
4288
|
+
if (fallbackProvider !== "None" && fallbackProvider.trim()) {
|
|
4289
|
+
return `${provider} -> ${fallbackProvider}`;
|
|
4290
|
+
}
|
|
4291
|
+
if (selectedProvider !== provider) {
|
|
4292
|
+
return `${provider} -> ${selectedProvider}`;
|
|
4293
|
+
}
|
|
4294
|
+
return `${provider} primary`;
|
|
4295
|
+
};
|
|
4282
4296
|
var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
4283
4297
|
const decision = snapshot.decision;
|
|
4298
|
+
const activeStack = decision ? [
|
|
4299
|
+
{
|
|
4300
|
+
label: "Profile",
|
|
4301
|
+
value: formatValue(decision.profileLabel ?? decision.profileId)
|
|
4302
|
+
},
|
|
4303
|
+
{
|
|
4304
|
+
label: "LLM",
|
|
4305
|
+
value: getProviderRoute(decision.providerRoutes, "llm")
|
|
4306
|
+
},
|
|
4307
|
+
{
|
|
4308
|
+
label: "STT",
|
|
4309
|
+
value: getProviderRoute(decision.providerRoutes, "stt")
|
|
4310
|
+
},
|
|
4311
|
+
{
|
|
4312
|
+
label: "TTS",
|
|
4313
|
+
value: getProviderRoute(decision.providerRoutes, "tts")
|
|
4314
|
+
},
|
|
4315
|
+
{
|
|
4316
|
+
label: "Fallback path",
|
|
4317
|
+
value: formatFallbackPath(decision)
|
|
4318
|
+
}
|
|
4319
|
+
] : [];
|
|
4284
4320
|
const rows = decision ? [
|
|
4285
4321
|
{ label: "Kind", value: decision.kind.toUpperCase() },
|
|
4286
4322
|
{ label: "Policy", value: formatValue(decision.routing, "Unknown") },
|
|
@@ -4294,12 +4330,21 @@ var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
|
4294
4330
|
value: formatValue(decision.fallbackProvider)
|
|
4295
4331
|
},
|
|
4296
4332
|
{ label: "Status", value: formatValue(decision.status, "unknown") },
|
|
4333
|
+
{
|
|
4334
|
+
label: "Voice profile",
|
|
4335
|
+
value: formatValue(decision.profileLabel ?? decision.profileId)
|
|
4336
|
+
},
|
|
4337
|
+
{
|
|
4338
|
+
label: "Default routes",
|
|
4339
|
+
value: formatProviderRoutes(decision.providerRoutes)
|
|
4340
|
+
},
|
|
4297
4341
|
{
|
|
4298
4342
|
label: "Latency budget",
|
|
4299
4343
|
value: typeof decision.latencyBudgetMs === "number" ? `${decision.latencyBudgetMs}ms` : "None"
|
|
4300
4344
|
}
|
|
4301
4345
|
] : [];
|
|
4302
4346
|
return {
|
|
4347
|
+
activeStack,
|
|
4303
4348
|
decision,
|
|
4304
4349
|
description: options.description ?? DEFAULT_DESCRIPTION10,
|
|
4305
4350
|
error: snapshot.error,
|
|
@@ -4313,6 +4358,10 @@ var createVoiceRoutingStatusViewModel = (snapshot, options = {}) => {
|
|
|
4313
4358
|
};
|
|
4314
4359
|
var renderVoiceRoutingStatusHTML = (snapshot, options = {}) => {
|
|
4315
4360
|
const model = createVoiceRoutingStatusViewModel(snapshot, options);
|
|
4361
|
+
const activeStack = model.activeStack.length ? `<div class="absolute-voice-routing-status__stack" aria-label="Active voice stack">${model.activeStack.map((item) => `<div>
|
|
4362
|
+
<span>${escapeHtml12(item.label)}</span>
|
|
4363
|
+
<strong>${escapeHtml12(item.value)}</strong>
|
|
4364
|
+
</div>`).join("")}</div>` : "";
|
|
4316
4365
|
const rows = model.rows.length ? `<div class="absolute-voice-routing-status__grid">${model.rows.map((row) => `<div>
|
|
4317
4366
|
<span>${escapeHtml12(row.label)}</span>
|
|
4318
4367
|
<strong>${escapeHtml12(row.value)}</strong>
|
|
@@ -4323,11 +4372,12 @@ var renderVoiceRoutingStatusHTML = (snapshot, options = {}) => {
|
|
|
4323
4372
|
<strong class="absolute-voice-routing-status__label">${escapeHtml12(model.label)}</strong>
|
|
4324
4373
|
</header>
|
|
4325
4374
|
<p class="absolute-voice-routing-status__description">${escapeHtml12(model.description)}</p>
|
|
4375
|
+
${activeStack}
|
|
4326
4376
|
${rows}
|
|
4327
4377
|
${model.error ? `<p class="absolute-voice-routing-status__error">${escapeHtml12(model.error)}</p>` : ""}
|
|
4328
4378
|
</section>`;
|
|
4329
4379
|
};
|
|
4330
|
-
var getVoiceRoutingStatusCSS = () => `.absolute-voice-routing-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-routing-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-routing-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-routing-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-routing-status__label{font-size:24px;line-height:1}.absolute-voice-routing-status__description{color:#514733;margin:12px 0 0}.absolute-voice-routing-status__grid{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:14px}.absolute-voice-routing-status__grid div{background:#fff;border:1px solid #eee4d2;border-radius:14px;padding:10px 12px}.absolute-voice-routing-status__grid span{color:#655944;display:block;font-size:12px;margin-bottom:4px}.absolute-voice-routing-status__grid strong{overflow-wrap:anywhere}.absolute-voice-routing-status__empty{color:#655944;margin:14px 0 0}.absolute-voice-routing-status__error{color:#9f1239;font-weight:700}`;
|
|
4380
|
+
var getVoiceRoutingStatusCSS = () => `.absolute-voice-routing-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-routing-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-routing-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-routing-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-routing-status__label{font-size:24px;line-height:1}.absolute-voice-routing-status__description{color:#514733;margin:12px 0 0}.absolute-voice-routing-status__stack{background:linear-gradient(135deg,#16130d,#49391f);border-radius:18px;color:#fff;display:grid;gap:8px;grid-template-columns:repeat(5,minmax(0,1fr));margin-top:14px;padding:12px}.absolute-voice-routing-status__stack div{border-left:1px solid rgba(255,255,255,.18);padding-left:10px}.absolute-voice-routing-status__stack div:first-child{border-left:0;padding-left:0}.absolute-voice-routing-status__stack span{color:#e9d9b8;display:block;font-size:11px;font-weight:800;letter-spacing:.08em;margin-bottom:5px;text-transform:uppercase}.absolute-voice-routing-status__stack strong{display:block;font-size:13px;line-height:1.25;overflow-wrap:anywhere}.absolute-voice-routing-status__grid{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:14px}.absolute-voice-routing-status__grid div{background:#fff;border:1px solid #eee4d2;border-radius:14px;padding:10px 12px}.absolute-voice-routing-status__grid span{color:#655944;display:block;font-size:12px;margin-bottom:4px}.absolute-voice-routing-status__grid strong{overflow-wrap:anywhere}.absolute-voice-routing-status__empty{color:#655944;margin:14px 0 0}.absolute-voice-routing-status__error{color:#9f1239;font-weight:700}@media (max-width:760px){.absolute-voice-routing-status__stack{grid-template-columns:repeat(2,minmax(0,1fr))}.absolute-voice-routing-status__stack div{border-left:0;border-top:1px solid rgba(255,255,255,.18);padding-left:0;padding-top:8px}.absolute-voice-routing-status__stack div:first-child{border-top:0;padding-top:0}}`;
|
|
4331
4381
|
var mountVoiceRoutingStatus = (element, path = "/api/routing/latest", options = {}) => {
|
|
4332
4382
|
const store = createVoiceRoutingStatusStore(path, options);
|
|
4333
4383
|
const render = () => {
|