@absolutejs/voice 0.0.22-beta.291 → 0.0.22-beta.293
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/README.md +102 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +489 -166
- package/dist/modelAdapters.d.ts +37 -0
- package/dist/productionReadiness.d.ts +15 -0
- package/dist/providerOrchestration.d.ts +109 -0
- package/dist/testing/index.js +87 -12
- package/dist/vue/useVoiceReadinessFailures.d.ts +20 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3888,6 +3888,108 @@ Built-in policy presets:
|
|
|
3888
3888
|
- `cost-cap`: rank by cost and reject providers above `maxCost`.
|
|
3889
3889
|
- `balanced`: weighted score using cost, latency, quality, and priority.
|
|
3890
3890
|
|
|
3891
|
+
Use `createVoiceProviderOrchestrationProfile(...)` when one app has multiple provider surfaces with different tradeoffs. This is the Vapi-style "choose providers without glue" layer, but still code-owned: a live call can prefer low latency with a circuit breaker, while a background summary can prefer lower cost and stricter budget caps.
|
|
3892
|
+
|
|
3893
|
+
```ts
|
|
3894
|
+
import {
|
|
3895
|
+
createVoiceProviderOrchestrationProfile,
|
|
3896
|
+
createVoiceProviderRouter
|
|
3897
|
+
} from '@absolutejs/voice';
|
|
3898
|
+
|
|
3899
|
+
const providerProfile = createVoiceProviderOrchestrationProfile({
|
|
3900
|
+
id: 'support-agent-providers',
|
|
3901
|
+
defaultSurface: 'live-call',
|
|
3902
|
+
surfaces: {
|
|
3903
|
+
'live-call': {
|
|
3904
|
+
policy: 'latency-first',
|
|
3905
|
+
fallback: ['openai', 'anthropic', 'gemini'],
|
|
3906
|
+
maxLatencyMs: 900,
|
|
3907
|
+
providerHealth: {
|
|
3908
|
+
failureThreshold: 1,
|
|
3909
|
+
cooldownMs: 30_000,
|
|
3910
|
+
rateLimitCooldownMs: 120_000
|
|
3911
|
+
},
|
|
3912
|
+
providerProfiles: {
|
|
3913
|
+
openai: { cost: 6, latencyMs: 650, quality: 0.92, timeoutMs: 3500 },
|
|
3914
|
+
anthropic: { cost: 7, latencyMs: 850, quality: 0.95, timeoutMs: 4500 },
|
|
3915
|
+
gemini: { cost: 2, latencyMs: 700, quality: 0.86, timeoutMs: 3500 }
|
|
3916
|
+
}
|
|
3917
|
+
},
|
|
3918
|
+
'background-summary': {
|
|
3919
|
+
policy: 'cost-cap',
|
|
3920
|
+
fallback: ['gemini', 'openai'],
|
|
3921
|
+
maxCost: 3,
|
|
3922
|
+
minQuality: 0.82,
|
|
3923
|
+
providerProfiles: {
|
|
3924
|
+
openai: { cost: 6, latencyMs: 650, quality: 0.92 },
|
|
3925
|
+
gemini: { cost: 2, latencyMs: 700, quality: 0.86 }
|
|
3926
|
+
}
|
|
3927
|
+
}
|
|
3928
|
+
}
|
|
3929
|
+
});
|
|
3930
|
+
|
|
3931
|
+
const liveModel = createVoiceProviderRouter({
|
|
3932
|
+
providers,
|
|
3933
|
+
orchestrationProfile: providerProfile,
|
|
3934
|
+
orchestrationSurface: 'live-call'
|
|
3935
|
+
});
|
|
3936
|
+
|
|
3937
|
+
const summaryModel = createVoiceProviderRouter({
|
|
3938
|
+
providers,
|
|
3939
|
+
orchestrationProfile: providerProfile,
|
|
3940
|
+
orchestrationSurface: 'background-summary'
|
|
3941
|
+
});
|
|
3942
|
+
```
|
|
3943
|
+
|
|
3944
|
+
Mount `createVoiceProviderOrchestrationRoutes(...)` and pass the report into production readiness when provider policy should be deploy-gated. This proves that required surfaces have enough providers, explicit fallback order, circuit-breaker settings, timeout budgets, and cost/latency/quality bounds.
|
|
3945
|
+
|
|
3946
|
+
```ts
|
|
3947
|
+
import {
|
|
3948
|
+
buildVoiceProviderOrchestrationReport,
|
|
3949
|
+
createVoiceProviderOrchestrationRoutes,
|
|
3950
|
+
createVoiceProductionReadinessRoutes
|
|
3951
|
+
} from '@absolutejs/voice';
|
|
3952
|
+
|
|
3953
|
+
const providerOrchestration = () =>
|
|
3954
|
+
buildVoiceProviderOrchestrationReport({
|
|
3955
|
+
profile: providerProfile,
|
|
3956
|
+
requirements: {
|
|
3957
|
+
'live-call': {
|
|
3958
|
+
minProviders: 2,
|
|
3959
|
+
requireBudgetPolicy: true,
|
|
3960
|
+
requireCircuitBreaker: true,
|
|
3961
|
+
requireFallback: true,
|
|
3962
|
+
requireTimeoutBudget: true
|
|
3963
|
+
}
|
|
3964
|
+
}
|
|
3965
|
+
});
|
|
3966
|
+
|
|
3967
|
+
app
|
|
3968
|
+
.use(
|
|
3969
|
+
createVoiceProviderOrchestrationRoutes({
|
|
3970
|
+
profile: providerProfile,
|
|
3971
|
+
requirements: {
|
|
3972
|
+
'live-call': {
|
|
3973
|
+
minProviders: 2,
|
|
3974
|
+
requireBudgetPolicy: true,
|
|
3975
|
+
requireCircuitBreaker: true,
|
|
3976
|
+
requireFallback: true,
|
|
3977
|
+
requireTimeoutBudget: true
|
|
3978
|
+
}
|
|
3979
|
+
}
|
|
3980
|
+
})
|
|
3981
|
+
)
|
|
3982
|
+
.use(
|
|
3983
|
+
createVoiceProductionReadinessRoutes({
|
|
3984
|
+
store: runtime.traces,
|
|
3985
|
+
providerOrchestration,
|
|
3986
|
+
links: {
|
|
3987
|
+
providerOrchestration: '/voice/provider-orchestration'
|
|
3988
|
+
}
|
|
3989
|
+
})
|
|
3990
|
+
);
|
|
3991
|
+
```
|
|
3992
|
+
|
|
3891
3993
|
Budget filters are strict. If you pass `maxCost`, `maxLatencyMs`, or `minQuality`, providers outside those limits are removed before ranking, even if they were selected by the request.
|
|
3892
3994
|
|
|
3893
3995
|
```ts
|
package/dist/index.d.ts
CHANGED
|
@@ -46,11 +46,12 @@ export { applyVoiceTelephonyOutcome, assertVoiceTelephonyWebhookNormalizationEvi
|
|
|
46
46
|
export { assertVoicePhoneCallControlEvidence, assertVoicePhoneAssistantEvidence, createVoicePhoneAgent, evaluateVoicePhoneCallControlEvidence, evaluateVoicePhoneAssistantEvidence } from './phoneAgent';
|
|
47
47
|
export { createStoredVoiceCallReviewArtifact, createStoredVoiceExternalObjectMap, createStoredVoiceIntegrationEvent, createStoredVoiceOpsTask, createVoiceFileIncidentBundleStore, createVoiceFileExternalObjectMapStore, createVoiceFileAssistantMemoryStore, createVoiceFileAuditEventStore, createVoiceFileAuditSinkDeliveryStore, createVoiceFileCampaignStore, createVoiceFileIntegrationEventStore, createVoiceFileReviewStore, createVoiceFileRuntimeStorage, createVoiceFileSessionStore, createVoiceFileTaskStore, createVoiceFileTraceSinkDeliveryStore, createVoiceFileTraceEventStore } from './fileStore';
|
|
48
48
|
export { createVoiceAssistantMemoryHandle, createVoiceAssistantMemoryRecord, createVoiceMemoryAssistantMemoryStore, resolveVoiceAssistantMemoryNamespace } from './assistantMemory';
|
|
49
|
-
export { createAnthropicVoiceAssistantModel, createGeminiVoiceAssistantModel, createJSONVoiceAssistantModel, createOpenAIVoiceAssistantModel, resolveVoiceProviderRoutingPolicyPreset, createVoiceProviderRouter } from './modelAdapters';
|
|
49
|
+
export { createAnthropicVoiceAssistantModel, createGeminiVoiceAssistantModel, createJSONVoiceAssistantModel, createOpenAIVoiceAssistantModel, createVoiceProviderOrchestrationProfile, resolveVoiceProviderRoutingPolicyPreset, createVoiceProviderRouter } from './modelAdapters';
|
|
50
50
|
export { createOpenAIRealtimeAdapter } from './openaiRealtime';
|
|
51
51
|
export { createOpenAIVoiceTTS } from './openaiTTS';
|
|
52
52
|
export { createVoiceProviderHealthHTMLHandler, createVoiceProviderHealthJSONHandler, createVoiceProviderHealthRoutes, renderVoiceProviderHealthHTML, summarizeVoiceProviderHealth } from './providerHealth';
|
|
53
53
|
export { createVoiceProviderCapabilityHTMLHandler, createVoiceProviderCapabilityJSONHandler, createVoiceProviderCapabilityRoutes, renderVoiceProviderCapabilityHTML, summarizeVoiceProviderCapabilities } from './providerCapabilities';
|
|
54
|
+
export { buildVoiceProviderOrchestrationReport, createVoiceProviderOrchestrationRoutes, renderVoiceProviderOrchestrationHTML, renderVoiceProviderOrchestrationMarkdown } from './providerOrchestration';
|
|
54
55
|
export { assertVoiceProviderRoutingContractEvidence, assertVoiceProviderRoutingContract, evaluateVoiceProviderRoutingContractEvidence, runVoiceProviderRoutingContract } from './providerRoutingContract';
|
|
55
56
|
export { assertVoiceProviderSloEvidence, buildVoiceProviderSloReport, createVoiceProviderSloRoutes, evaluateVoiceProviderSloEvidence, renderVoiceProviderSloHTML, renderVoiceProviderSloMarkdown } from './providerSlo';
|
|
56
57
|
export { createVoicePhoneAgentProductionSmokeHTMLHandler, createVoicePhoneAgentProductionSmokeJSONHandler, createVoicePhoneAgentProductionSmokeRoutes, renderVoicePhoneAgentProductionSmokeHTML, runVoicePhoneAgentProductionSmokeContract } from './phoneAgentProductionSmoke';
|
|
@@ -106,11 +107,12 @@ export type { VoiceEvalBaselineComparison, VoiceEvalBaselineComparisonOptions, V
|
|
|
106
107
|
export type { VoiceSimulationSuiteAssertionInput, VoiceSimulationSuiteAssertionReport, VoiceSimulationSuiteEvalRoutesOptions, VoiceSimulationSuiteOptions, VoiceSimulationSuiteReport, VoiceSimulationSuiteRoutesOptions, VoiceSimulationSuiteSection, VoiceSimulationSuiteSectionSummary, VoiceSimulationSuiteStatus } from './simulationSuite';
|
|
107
108
|
export type { VoiceWorkflowContract, VoiceWorkflowContractDefinition, VoiceWorkflowContractField, VoiceWorkflowContractFieldMatch, VoiceWorkflowContractPresetName, VoiceWorkflowContractPresetOptions, VoiceWorkflowContractTracePayload, VoiceWorkflowContractValidation, VoiceWorkflowContractValidationIssue, VoiceWorkflowOutcome } from './workflowContract';
|
|
108
109
|
export type { VoiceSessionListHTMLHandlerOptions, VoiceSessionListItem, VoiceSessionListOptions, VoiceSessionListRoutesOptions, VoiceSessionListStatus, VoiceProviderFallbackRecoverySummary, VoiceSessionReplay, VoiceSessionReplayHTMLHandlerOptions, VoiceSessionReplayOptions, VoiceSessionReplayRoutesOptions, VoiceSessionReplayTurn } from './sessionReplay';
|
|
109
|
-
export type { AnthropicVoiceAssistantModelOptions, GeminiVoiceAssistantModelOptions, OpenAIVoiceAssistantModelOptions, VoiceProviderRouterEvent, VoiceProviderRouterFallbackMode, VoiceProviderRouterHealthOptions, VoiceProviderRouterOptions, VoiceProviderRouterPolicy, VoiceProviderRouterPolicyPreset, VoiceProviderRouterPolicyWeights, VoiceProviderRouterProviderHealth, VoiceProviderRouterProviderProfile, VoiceProviderRouterStrategy, VoiceJSONAssistantModelHandler, VoiceJSONAssistantModelOptions } from './modelAdapters';
|
|
110
|
+
export type { AnthropicVoiceAssistantModelOptions, GeminiVoiceAssistantModelOptions, OpenAIVoiceAssistantModelOptions, VoiceProviderRouterEvent, VoiceProviderRouterFallbackMode, VoiceProviderRouterHealthOptions, VoiceProviderRouterOptions, VoiceProviderOrchestrationProfile, VoiceProviderOrchestrationProfileOptions, VoiceProviderOrchestrationResolvedSurface, VoiceProviderOrchestrationSurface, VoiceProviderRouterPolicy, VoiceProviderRouterPolicyPreset, VoiceProviderRouterPolicyWeights, VoiceProviderRouterProviderHealth, VoiceProviderRouterProviderProfile, VoiceProviderRouterStrategy, VoiceJSONAssistantModelHandler, VoiceJSONAssistantModelOptions } from './modelAdapters';
|
|
110
111
|
export type { OpenAIVoiceTTSOptions, OpenAIVoiceTTSVoice } from './openaiTTS';
|
|
111
112
|
export type { OpenAIRealtimeAdapterOptions, OpenAIRealtimeModel, OpenAIRealtimeNoiseReduction, OpenAIRealtimeResponseMode, OpenAIRealtimeTranscriptionModel, OpenAIRealtimeVoice } from './openaiRealtime';
|
|
112
113
|
export type { VoiceProviderHealthStatus, VoiceProviderHealthSummary, VoiceProviderHealthSummaryOptions } from './providerHealth';
|
|
113
114
|
export type { VoiceProviderCapabilityDefinition, VoiceProviderCapabilityHandlerOptions, VoiceProviderCapabilityHTMLHandlerOptions, VoiceProviderCapabilityKind, VoiceProviderCapabilityOptions, VoiceProviderCapabilityReport, VoiceProviderCapabilityRoutesOptions, VoiceProviderCapabilitySummary } from './providerCapabilities';
|
|
115
|
+
export type { VoiceProviderOrchestrationIssue, VoiceProviderOrchestrationReport, VoiceProviderOrchestrationReportOptions, VoiceProviderOrchestrationRequirement, VoiceProviderOrchestrationRoutesOptions, VoiceProviderOrchestrationStatus, VoiceProviderOrchestrationSurfaceReport } from './providerOrchestration';
|
|
114
116
|
export type { VoiceProviderRoutingContractAssertionInput, VoiceProviderRoutingContractAssertionReport, VoiceProviderRoutingContractDefinition, VoiceProviderRoutingContractIssue, VoiceProviderRoutingContractReport, VoiceProviderRoutingContractRunOptions, VoiceProviderRoutingExpectation, VoiceProviderRoutingStatus } from './providerRoutingContract';
|
|
115
117
|
export type { VoiceProviderSloAssertionInput, VoiceProviderSloAssertionReport, VoiceProviderSloIssue, VoiceProviderSloKindReport, VoiceProviderSloMetric, VoiceProviderSloReport, VoiceProviderSloReportOptions, VoiceProviderSloRoutesOptions, VoiceProviderSloSessionReport, VoiceProviderSloStatus, VoiceProviderSloThresholdConfig, VoiceProviderSloThresholds } from './providerSlo';
|
|
116
118
|
export type { VoiceTurnLatencyHTMLHandlerOptions, VoiceTurnLatencyItem, VoiceTurnLatencyOptions, VoiceTurnLatencyReport, VoiceTurnLatencyRoutesOptions, VoiceTurnLatencyStage, VoiceTurnLatencyStatus } from './turnLatency';
|