add voice configs + transcriber configs
This commit is contained in:
parent
68a51e7131
commit
1807fbef0d
6 changed files with 62 additions and 12 deletions
9
vocode/input_device/telephone_input.py
Normal file
9
vocode/input_device/telephone_input.py
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
from vocode.input_device.base_input_device import BaseInputDevice
|
||||||
|
from vocode.models.audio_encoding import AudioEncoding
|
||||||
|
|
||||||
|
|
||||||
|
class TelephoneInput(BaseInputDevice):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__(
|
||||||
|
sampling_rate=8000, audio_encoding=AudioEncoding.MULAW, chunk_size=160
|
||||||
|
)
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
from typing import Optional
|
from typing import Optional, Union
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
from vocode.models.message import BaseMessage
|
from vocode.models.message import BaseMessage
|
||||||
from .model import TypedModel, BaseModel
|
from .model import TypedModel, BaseModel
|
||||||
|
|
||||||
|
FILLER_AUDIO_DEFAULT_SILENCE_THRESHOLD_SECONDS = 0.5
|
||||||
|
|
||||||
|
|
||||||
class AgentType(str, Enum):
|
class AgentType(str, Enum):
|
||||||
BASE = "agent_base"
|
BASE = "agent_base"
|
||||||
|
|
@ -16,11 +18,16 @@ class AgentType(str, Enum):
|
||||||
WEBSOCKET_USER_IMPLEMENTED = "agent_websocket_user_implemented"
|
WEBSOCKET_USER_IMPLEMENTED = "agent_websocket_user_implemented"
|
||||||
|
|
||||||
|
|
||||||
|
class FillerAudioConfig(BaseModel):
|
||||||
|
silence_threshold_seconds: float = FILLER_AUDIO_DEFAULT_SILENCE_THRESHOLD_SECONDS
|
||||||
|
|
||||||
|
|
||||||
class AgentConfig(TypedModel, type=AgentType.BASE):
|
class AgentConfig(TypedModel, type=AgentType.BASE):
|
||||||
initial_message: Optional[BaseMessage] = None
|
initial_message: Optional[BaseMessage] = None
|
||||||
generate_responses: bool = True
|
generate_responses: bool = True
|
||||||
allowed_idle_time_seconds: Optional[float] = None
|
allowed_idle_time_seconds: Optional[float] = None
|
||||||
end_conversation_on_goodbye: bool = False
|
end_conversation_on_goodbye: bool = False
|
||||||
|
send_filler_audio: Union[bool, FillerAudioConfig] = False
|
||||||
|
|
||||||
|
|
||||||
class LLMAgentConfig(AgentConfig, type=AgentType.LLM):
|
class LLMAgentConfig(AgentConfig, type=AgentType.LLM):
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ from typing import Optional
|
||||||
from vocode.models.model import BaseModel
|
from vocode.models.model import BaseModel
|
||||||
from vocode.models.agent import AgentConfig
|
from vocode.models.agent import AgentConfig
|
||||||
from vocode.models.synthesizer import SynthesizerConfig
|
from vocode.models.synthesizer import SynthesizerConfig
|
||||||
|
from vocode.models.transcriber import TranscriberConfig
|
||||||
|
|
||||||
|
|
||||||
class CallEntity(BaseModel):
|
class CallEntity(BaseModel):
|
||||||
|
|
@ -9,7 +10,9 @@ class CallEntity(BaseModel):
|
||||||
|
|
||||||
|
|
||||||
class CreateInboundCall(BaseModel):
|
class CreateInboundCall(BaseModel):
|
||||||
|
transcriber_config: Optional[TranscriberConfig] = None
|
||||||
agent_config: AgentConfig
|
agent_config: AgentConfig
|
||||||
|
synthesizer_config: Optional[SynthesizerConfig] = None
|
||||||
twilio_sid: str
|
twilio_sid: str
|
||||||
conversation_id: Optional[str] = None
|
conversation_id: Optional[str] = None
|
||||||
|
|
||||||
|
|
@ -17,6 +20,7 @@ class CreateInboundCall(BaseModel):
|
||||||
class CreateOutboundCall(BaseModel):
|
class CreateOutboundCall(BaseModel):
|
||||||
recipient: CallEntity
|
recipient: CallEntity
|
||||||
caller: CallEntity
|
caller: CallEntity
|
||||||
|
transcriber_config: Optional[TranscriberConfig] = None
|
||||||
agent_config: AgentConfig
|
agent_config: AgentConfig
|
||||||
synthesizer_config: Optional[SynthesizerConfig] = None
|
synthesizer_config: Optional[SynthesizerConfig] = None
|
||||||
conversation_id: Optional[str] = None
|
conversation_id: Optional[str] = None
|
||||||
|
|
|
||||||
7
vocode/output_device/telephone_output.py
Normal file
7
vocode/output_device/telephone_output.py
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
from .base_output_device import BaseOutputDevice
|
||||||
|
from ..models.audio_encoding import AudioEncoding
|
||||||
|
|
||||||
|
|
||||||
|
class TelephoneOutput(BaseOutputDevice):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__(sampling_rate=8000, audio_encoding=AudioEncoding.MULAW)
|
||||||
|
|
@ -2,6 +2,9 @@ from fastapi import FastAPI, Response, Form
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
import requests
|
import requests
|
||||||
import uvicorn
|
import uvicorn
|
||||||
|
from vocode.models.synthesizer import SynthesizerConfig
|
||||||
|
|
||||||
|
from vocode.models.transcriber import TranscriberConfig
|
||||||
from .. import api_key, BASE_URL
|
from .. import api_key, BASE_URL
|
||||||
|
|
||||||
from ..models.agent import AgentConfig
|
from ..models.agent import AgentConfig
|
||||||
|
|
@ -12,9 +15,15 @@ VOCODE_INBOUND_CALL_URL = f"https://{BASE_URL}/create_inbound_call"
|
||||||
|
|
||||||
class InboundCallServer:
|
class InboundCallServer:
|
||||||
def __init__(
|
def __init__(
|
||||||
self, agent_config: AgentConfig, response_on_rate_limit: Optional[str] = None
|
self,
|
||||||
|
agent_config: AgentConfig,
|
||||||
|
transcriber_config: Optional[TranscriberConfig] = None,
|
||||||
|
synthesizer_config: Optional[SynthesizerConfig] = None,
|
||||||
|
response_on_rate_limit: Optional[str] = None,
|
||||||
):
|
):
|
||||||
self.agent_config = agent_config
|
self.agent_config = agent_config
|
||||||
|
self.transcriber_config = transcriber_config
|
||||||
|
self.synthesizer_config = synthesizer_config
|
||||||
self.app = FastAPI()
|
self.app = FastAPI()
|
||||||
self.app.post("/vocode")(self.handle_call)
|
self.app.post("/vocode")(self.handle_call)
|
||||||
self.response_on_rate_limit = (
|
self.response_on_rate_limit = (
|
||||||
|
|
@ -27,7 +36,10 @@ class InboundCallServer:
|
||||||
VOCODE_INBOUND_CALL_URL,
|
VOCODE_INBOUND_CALL_URL,
|
||||||
headers={"Authorization": f"Bearer {api_key}"},
|
headers={"Authorization": f"Bearer {api_key}"},
|
||||||
json=CreateInboundCall(
|
json=CreateInboundCall(
|
||||||
agent_config=self.agent_config, twilio_sid=twilio_sid
|
agent_config=self.agent_config,
|
||||||
|
twilio_sid=twilio_sid,
|
||||||
|
transcriber_config=self.transcriber_config,
|
||||||
|
synthesizer_config=self.synthesizer_config,
|
||||||
).dict(),
|
).dict(),
|
||||||
)
|
)
|
||||||
if response.status_code == 429:
|
if response.status_code == 429:
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,38 @@
|
||||||
|
from typing import Optional
|
||||||
|
from vocode.models.agent import AgentConfig
|
||||||
|
from vocode.models.synthesizer import SynthesizerConfig
|
||||||
|
from vocode.models.transcriber import TranscriberConfig
|
||||||
from ..models.telephony import CallEntity, CreateOutboundCall
|
from ..models.telephony import CallEntity, CreateOutboundCall
|
||||||
import requests
|
import requests
|
||||||
from .. import api_key, BASE_URL
|
from .. import api_key, BASE_URL
|
||||||
|
|
||||||
VOCODE_OUTBOUND_CALL_URL = f"https://{BASE_URL}/create_outbound_call"
|
VOCODE_OUTBOUND_CALL_URL = f"https://{BASE_URL}/create_outbound_call"
|
||||||
|
|
||||||
class OutboundCall:
|
|
||||||
|
|
||||||
def __init__(self, recipient: CallEntity, caller: CallEntity, agent_config):
|
class OutboundCall:
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
recipient: CallEntity,
|
||||||
|
caller: CallEntity,
|
||||||
|
agent_config: AgentConfig,
|
||||||
|
transcriber_config: Optional[TranscriberConfig] = None,
|
||||||
|
synthesizer_config: Optional[SynthesizerConfig] = None,
|
||||||
|
):
|
||||||
self.recipient = recipient
|
self.recipient = recipient
|
||||||
self.caller = caller
|
self.caller = caller
|
||||||
self.agent_config = agent_config
|
self.agent_config = agent_config
|
||||||
|
self.transcriber_config = transcriber_config
|
||||||
|
self.synthesizer_config = synthesizer_config
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
return requests.post(
|
return requests.post(
|
||||||
VOCODE_OUTBOUND_CALL_URL,
|
VOCODE_OUTBOUND_CALL_URL,
|
||||||
headers={
|
headers={"Authorization": f"Bearer {api_key}"},
|
||||||
"Authorization": f"Bearer {api_key}"
|
|
||||||
},
|
|
||||||
json=CreateOutboundCall(
|
json=CreateOutboundCall(
|
||||||
recipient=self.recipient,
|
recipient=self.recipient,
|
||||||
caller=self.caller,
|
caller=self.caller,
|
||||||
agent_config=self.agent_config
|
agent_config=self.agent_config,
|
||||||
).dict()
|
transcriber_config=self.transcriber_config,
|
||||||
|
synthesizer_config=self.synthesizer_config,
|
||||||
|
).dict(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue