Compare commits

..

1 Commits

Author SHA1 Message Date
Quan HL
4ead43b761 support dial translate with s2s services 2025-02-03 21:23:53 +07:00
4 changed files with 752 additions and 2047 deletions

2568
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@jambonz/verb-specifications",
"version": "0.0.115",
"version": "0.0.95",
"description": "Jambonz Verb Specification Utilities",
"main": "index.js",
"scripts": {
@@ -20,7 +20,7 @@
"devDependencies": {
"eslint": "^7.32.0",
"eslint-plugin-promise": "^4.3.1",
"tape": "^5.7.5"
"tape": "^5.6.1"
},
"dependencies": {
"debug": "^4.3.4",

View File

@@ -1,13 +1,4 @@
{
"alert" : {
"properties": {
"id": "string",
"message": "string"
},
"required": [
"message"
]
},
"answer": {
"properties": {
"id": "string"
@@ -66,7 +57,6 @@
"amd": "#amd",
"fillerNoise": "#fillerNoise",
"notifyEvents": "boolean",
"notifySttLatency": "boolean",
"reset": "string|array",
"onHoldMusic": "string",
"actionHookDelayAction": "#actionHookDelayAction",
@@ -74,8 +64,7 @@
"boostAudioSignal": "number|string",
"vad":"#vad",
"referHook": "object|string",
"earlyMedia": "boolean",
"autoStreamTts": "boolean"
"earlyMedia": "boolean"
},
"required": []
},
@@ -224,7 +213,6 @@
"properties": {
"id": "string",
"text": "string|array",
"instructions": "string",
"stream": "boolean",
"loop": "number|string",
"synthesizer": "#synthesizer",
@@ -311,7 +299,7 @@
"amd": "#amd",
"dub": ["#dub"],
"tag": "object",
"forwardPAI": "boolean"
"translate": "#translate"
},
"required": [
"target"
@@ -456,7 +444,6 @@
"model": "string",
"auth": "object",
"connectOptions": "object",
"mcpServers": ["#mcpServer"],
"actionHook": "object|string",
"eventHook": "object|string",
"toolHook": "object|string",
@@ -465,19 +452,11 @@
},
"required": [
"vendor",
"model",
"auth",
"llmOptions"
]
},
"mcpServer": {
"properties": {
"url": "string",
"auth": "object",
"roots": ["#root"]
},
"required": [
"url"
]
},
"message": {
"properties": {
"id": "string",
@@ -599,6 +578,7 @@
"channel": "number"
},
"required": [
"transcriptionHook"
]
},
"target": {
@@ -754,8 +734,7 @@
"googleOptions": "#googleOptions",
"customOptions": "#customOptions",
"verbioOptions": "#verbioOptions",
"speechmaticsOptions": "#speechmaticsOptions",
"openaiOptions": "#openaiOptions"
"speechmaticsOptions": "#speechmaticsOptions"
},
"required": [
"vendor"
@@ -886,7 +865,6 @@
"version": "string",
"punctuate": "boolean",
"smartFormatting": "boolean",
"noDelay": "boolean",
"profanityFilter": "boolean",
"redact": {
"type": "string",
@@ -906,19 +884,12 @@
"search": "array",
"replace": "array",
"keywords": "array",
"keyterms": "array",
"endpointing": "boolean | number",
"utteranceEndMs": "number",
"shortUtterance": "boolean",
"vadTurnoff": "number",
"tag": "string",
"fillerWords" : "boolean",
"preflightThreshold": "number",
"eotThreshold": "number",
"eotTimeoutMs": "number",
"mipOptOut": "boolean",
"entityPrompt": "string",
"eagerEotThreshold":"number"
"fillerWords" : "boolean"
}
},
"sonioxOptions": {
@@ -949,60 +920,6 @@
"required": [
]
},
"openaiOptions": {
"properties": {
"apiKey": "string",
"model": "string",
"prompt": "string",
"promptTemplates": "#promptTemplates",
"language": "string",
"input_audio_noise_reduction": {
"type": "string",
"enum": [
"near_field",
"far_field"
]
},
"turn_detection": "#turnDetection"
},
"required": [
]
},
"promptTemplates": {
"properties": {
"hintsTemplate": "string",
"conversationHistoryTemplate": "string"
},
"required": [
]
},
"turnDetection": {
"properties": {
"type": {
"type": "string",
"enum": [
"none",
"server_vad",
"semantic_vad"
]
},
"eagerness": {
"type": "string",
"enum": [
"low",
"medium",
"high",
"auto"
]
},
"threshold": "number",
"prefix_padding_ms": "number",
"silence_duration_ms": "number"
},
"required": [
"type"
]
},
"speechmaticsOptions": {
"properties": {
"transcription_config": "#sm_transcriptionConfig",
@@ -1152,18 +1069,7 @@
},
"assemblyAiOptions": {
"properties": {
"apiKey": "string",
"serviceVersion": {
"type": "string",
"enum": [
"v2",
"v3"
]
},
"formatTurns": "boolean",
"endOfTurnConfidenceThreshold": "number",
"minEndOfTurnSilenceWhenConfident": "number",
"maxTurnSilence": "number"
"apiKey": "string"
}
},
"resource": {
@@ -1244,25 +1150,16 @@
"voiceMs": "number",
"silenceMs": "number",
"strategy": "string",
"mode": "number",
"vendor": {
"type": "string",
"enum": [
"webrtc",
"silero"
]
},
"threshold": "number",
"speechPadMs": "number"
"mode": "number"
},
"required": [
"enable"
]
},
"amd": {
"properties": {
"actionHook": "object|string",
"thresholdWordCount": "number",
"digitCount": "number",
"timers": "#amdTimers",
"recognizer": "#recognizer"
},
@@ -1295,35 +1192,18 @@
"sampleRate": "number"
}
},
"pipeline": {
"translate": {
"properties": {
"id": "string",
"stt": "#recognizer",
"tts": "#synthesizer",
"vad": "#vad",
"turnDetection": "#turnDetectionPipeline",
"llm": "#llm",
"preflightLlm": "boolean",
"actionHook": "object|string",
"eventHook": "object|string"
},
"required": [
"stt",
"llm",
"tts"
]
"callerLanguage": "string",
"calleeLanguage": "string",
"gain": "#gain",
"llm": "#llm"
}
},
"turnDetectionPipeline": {
"gain": {
"properties": {
"vendor": {
"type": "string",
"enum": ["krisp"]
},
"threshold": "number",
"preflightThreshold": "number"
},
"required": [
"vendor"
]
"naturalVoice": "string",
"translatedVoice": "string"
}
}
}

View File

@@ -72,18 +72,12 @@ test("validate correct verbs", async (t) => {
},
{
"verb": "config",
"notifySttLatency": true,
"recognizer": {
"vendor": "google",
"language": "de-DE",
"label": "label1",
"assemblyAiOptions": {
"apiKey": "apikey",
"serviceVersion": "v3",
"formatTurns": true,
"endOfTurnConfidenceThreshold": 0.5,
"minEndOfTurnSilenceWhenConfident": 500,
"maxTurnSilence": 2000
"apiKey": "apikey"
}
}
},
@@ -172,7 +166,23 @@ test("validate correct verbs", async (t) => {
"type": "user",
"name": "spike@sip.example.com"
}
]
],
"translate": {
"callerLanguage": "en-US",
"calleeLanguage": "vn-VN",
"gain": {
"naturalVoice": "-10db",
"translatedVoice": "+2dB"
},
"llm": {
"model": 'openai',
"vendor": "openai",
"auth": {
"apiKey": "API key"
},
"llmOptions": {}
}
}
},
{
"verb": "dialogflow",
@@ -211,13 +221,7 @@ test("validate correct verbs", async (t) => {
"hintsBoost": 10,
"fastRecognitionTimeout": 2000,
"deepgramOptions": {
"endpointing": 500,
"noDelay": true,
preflightThreshold: 1000,
eotThreshold: 500,
eotTimeoutMs: 5000,
eagerEotThreshold: 200,
mipOptOut: true
"endpointing": 500
}
},
"say": {
@@ -232,10 +236,6 @@ test("validate correct verbs", async (t) => {
"fallbackVoice": "voice"
}
},
"say": {
"text": "To speak to Sales press 1 or say Sales. To speak to customer support press 2 or say Support",
"instructions": "Voice: High-energy, upbeat, and encouraging, projecting enthusiasm and motivation."
},
"say": {
"text": "To speak to Sales press 1 or say Sales. To speak to customer support press 2 or say Support",
"synthesizer": {
@@ -389,10 +389,6 @@ test("validate correct verbs", async (t) => {
}
}
},
{
"verb": "config",
"autoStreamTts": true
},
{
"verb": "config",
"vad": {
@@ -400,10 +396,7 @@ test("validate correct verbs", async (t) => {
"voiceMs": 250,
"silenceMs": 150,
"strategy": "one-shot",
"mode": 2,
"vendor": "webrtc",
"threshold": 0.5,
"speechPadMs": 1000
"mode": 2
}
},
{
@@ -544,26 +537,6 @@ test("validate correct verbs", async (t) => {
},
"dual_streams": true,
"timeLimit" : 10
},
{
"verb": "llm",
"vendor": 'ultravox',
"model": 'fixie-ai/ultravox',
"auth": {
"apiKey": "sk-1234567890abcdefg"
},
"llmOptions": {
"firstSpeaker": 'FIRST_SPEAKER_AGENT',
},
"mcpServers": [
{
"url": 'https://mcp.example.com',
"auth": {
"username": 'username',
"password": 'password'
}
}
]
}
];
try {