allow api_key assignment to occur after imports
This commit is contained in:
parent
41096377d5
commit
d1118d375e
9 changed files with 43 additions and 60 deletions
|
|
@ -1,6 +1,6 @@
|
|||
[tool.poetry]
|
||||
name = "vocode"
|
||||
version = "0.1.45"
|
||||
version = "0.1.48"
|
||||
description = "The all-in-one voice SDK"
|
||||
authors = ["Ajay Raj <ajay@vocode.dev>"]
|
||||
license = "MIT License"
|
||||
|
|
@ -31,8 +31,6 @@ sounddevice = { version = "0.4.6", optional = true }
|
|||
starlette = "0.25.0"
|
||||
urllib3 = "1.26.14"
|
||||
uvicorn = "0.20.0"
|
||||
black = "23.1.0"
|
||||
flake8 = "6.0.0"
|
||||
mccabe = "0.7.0"
|
||||
mypy-extensions = "1.0.0"
|
||||
packaging = "23.0"
|
||||
|
|
@ -45,7 +43,6 @@ pyjwt = "2.6.0"
|
|||
python-multipart = "0.0.6"
|
||||
pytz = "2022.7.1"
|
||||
tomli = "2.0.1"
|
||||
twilio = "7.16.5"
|
||||
|
||||
[tool.poetry.extras]
|
||||
io = ["pyaudio", "sounddevice"]
|
||||
|
|
|
|||
|
|
@ -1,12 +1,10 @@
|
|||
anyio==3.6.2
|
||||
black==23.1.0
|
||||
certifi==2022.12.7
|
||||
cffi==1.15.1
|
||||
charset-normalizer==3.0.1
|
||||
click==8.1.3
|
||||
decorator==5.1.1
|
||||
fastapi==0.92.0
|
||||
flake8==6.0.0
|
||||
h11==0.14.0
|
||||
idna==3.4
|
||||
mccabe==0.7.0
|
||||
|
|
@ -31,7 +29,6 @@ sniffio==1.3.0
|
|||
sounddevice==0.4.6
|
||||
starlette==0.25.0
|
||||
tomli==2.0.1
|
||||
twilio==7.16.5
|
||||
typing_extensions>=3.10.0.2
|
||||
urllib3==1.26.14
|
||||
uvicorn==0.20.0
|
||||
|
|
|
|||
|
|
@ -3,13 +3,6 @@ import logging
|
|||
import signal
|
||||
from dotenv import load_dotenv
|
||||
import os
|
||||
|
||||
load_dotenv()
|
||||
|
||||
import vocode
|
||||
|
||||
vocode.api_key = os.getenv("VOCODE_API_KEY")
|
||||
|
||||
from vocode.conversation import Conversation
|
||||
from vocode.helpers import create_microphone_input_and_speaker_output
|
||||
from vocode.models.transcriber import (
|
||||
|
|
@ -30,6 +23,10 @@ from vocode.models.agent import (
|
|||
from vocode.models.message import BaseMessage
|
||||
from vocode.models.synthesizer import AzureSynthesizerConfig
|
||||
from vocode.user_implemented_agent.restful_agent import RESTfulAgent
|
||||
import vocode
|
||||
|
||||
load_dotenv()
|
||||
vocode.api_key = os.getenv("VOCODE_API_KEY")
|
||||
|
||||
logging.basicConfig()
|
||||
logging.root.setLevel(logging.INFO)
|
||||
|
|
|
|||
|
|
@ -12,18 +12,19 @@ from vocode.telephony.zoom_dial_in import ZoomDialIn
|
|||
|
||||
if __name__ == "__main__":
|
||||
call = ZoomDialIn(
|
||||
recipient=CallEntity(phone_number="<zoom_phone_number>"),
|
||||
recipient=CallEntity(phone_number="<your zoom phone number>"),
|
||||
caller=CallEntity(
|
||||
phone_number="<your_phone_number>",
|
||||
phone_number="<your phone number>",
|
||||
),
|
||||
zoom_meeting_id="<zoom_meeting_id>",
|
||||
zoom_meeting_password="<zoom_meeting_password>",
|
||||
zoom_meeting_id="<your zoom meeting id>",
|
||||
zoom_meeting_password="<your zoom meeting password>",
|
||||
agent_config=ChatGPTAgentConfig(
|
||||
initial_message=BaseMessage(text="the quick fox jumped over the lazy dog "),
|
||||
prompt_preamble="respond two sentences at a time",
|
||||
generate_responses=True,
|
||||
end_conversation_on_goodbye=True,
|
||||
send_filler_audio=True,
|
||||
allowed_idle_time_seconds=30
|
||||
),
|
||||
synthesizer_config=AzureSynthesizerConfig.from_output_device(
|
||||
output_device=TelephoneOutput(), voice_name="en-US-JennyNeural"
|
||||
|
|
|
|||
|
|
@ -4,4 +4,4 @@ from dotenv import load_dotenv
|
|||
load_dotenv()
|
||||
|
||||
api_key = os.getenv("VOCODE_API_KEY")
|
||||
BASE_URL = os.getenv("VOCODE_BASE_URL", "api.vocode.dev")
|
||||
base_url = os.getenv("VOCODE_BASE_URL", "api.vocode.dev")
|
||||
|
|
@ -7,19 +7,16 @@ import os
|
|||
import logging
|
||||
import threading
|
||||
import queue
|
||||
import vocode
|
||||
from vocode.input_device.base_input_device import BaseInputDevice
|
||||
from vocode.output_device.base_output_device import BaseOutputDevice
|
||||
from vocode.models.transcriber import TranscriberConfig
|
||||
from vocode.models.agent import AgentConfig
|
||||
from vocode.models.synthesizer import SynthesizerConfig
|
||||
from vocode.models.websocket import ReadyMessage, AudioMessage, StartMessage, StopMessage
|
||||
|
||||
load_dotenv()
|
||||
|
||||
from .input_device.base_input_device import BaseInputDevice
|
||||
from .output_device.base_output_device import BaseOutputDevice
|
||||
from .models.transcriber import TranscriberConfig
|
||||
from .models.agent import AgentConfig
|
||||
from .models.synthesizer import SynthesizerConfig
|
||||
from .models.websocket import ReadyMessage, AudioMessage, StartMessage, StopMessage
|
||||
from . import api_key, BASE_URL
|
||||
|
||||
VOCODE_WEBSOCKET_URL = f"wss://{BASE_URL}/conversation"
|
||||
|
||||
class Conversation:
|
||||
def __init__(
|
||||
self,
|
||||
|
|
@ -41,6 +38,7 @@ class Conversation:
|
|||
self.active = True
|
||||
self.output_loop = asyncio.new_event_loop()
|
||||
self.output_audio_queue = queue.Queue()
|
||||
self.vocode_websocket_url = f"wss://{vocode.base_url}/conversation"
|
||||
|
||||
async def wait_for_ready(self):
|
||||
while not self.receiver_ready:
|
||||
|
|
@ -63,7 +61,7 @@ class Conversation:
|
|||
loop.run_until_complete(run())
|
||||
|
||||
async def start(self):
|
||||
async with websockets.connect(f"{VOCODE_WEBSOCKET_URL}?key={api_key}") as ws:
|
||||
async with websockets.connect(f"{self.vocode_websocket_url}?key={vocode.api_key}") as ws:
|
||||
|
||||
async def sender(ws: WebSocketClientProtocol):
|
||||
start_message = StartMessage(
|
||||
|
|
|
|||
|
|
@ -2,17 +2,12 @@ from fastapi import FastAPI, Response, Form
|
|||
from typing import Optional
|
||||
import requests
|
||||
import uvicorn
|
||||
from vocode.models.synthesizer import SynthesizerConfig
|
||||
from twilio.jwt.access_token.grants import VoiceGrant
|
||||
|
||||
import vocode
|
||||
from vocode.models.transcriber import TranscriberConfig
|
||||
from .. import api_key, BASE_URL
|
||||
|
||||
from ..models.agent import AgentConfig
|
||||
from ..models.telephony import CreateInboundCall, TwilioConfig, TwilioConfig
|
||||
|
||||
VOCODE_INBOUND_CALL_URL = f"https://{BASE_URL}/create_inbound_call"
|
||||
|
||||
from vocode.models.synthesizer import SynthesizerConfig
|
||||
from vocode.models.agent import AgentConfig
|
||||
from vocode.models.telephony import CreateInboundCall, TwilioConfig, TwilioConfig
|
||||
|
||||
class InboundCallServer:
|
||||
def __init__(
|
||||
|
|
@ -33,11 +28,12 @@ class InboundCallServer:
|
|||
or "The line is really busy right now, check back later!"
|
||||
)
|
||||
self.twilio_config = twilio_config
|
||||
self.vocode_inbound_call_url = f"https://{vocode.base_url}/create_inbound_call"
|
||||
|
||||
async def handle_call(self, twilio_sid: str = Form(alias="CallSid")):
|
||||
response = requests.post(
|
||||
VOCODE_INBOUND_CALL_URL,
|
||||
headers={"Authorization": f"Bearer {api_key}"},
|
||||
self.vocode_inbound_call_url,
|
||||
headers={"Authorization": f"Bearer {vocode.api_key}"},
|
||||
json=CreateInboundCall(
|
||||
agent_config=self.agent_config,
|
||||
twilio_sid=twilio_sid,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,7 @@
|
|||
from typing import Optional
|
||||
import requests
|
||||
|
||||
import vocode
|
||||
from vocode.models.agent import AgentConfig
|
||||
from vocode.models.synthesizer import SynthesizerConfig
|
||||
from vocode.models.transcriber import TranscriberConfig
|
||||
|
|
@ -8,14 +11,6 @@ from ..models.telephony import (
|
|||
EndOutboundCall,
|
||||
TwilioConfig,
|
||||
)
|
||||
import requests
|
||||
from .. import api_key, BASE_URL
|
||||
|
||||
from twilio.jwt.access_token.grants import VoiceGrant
|
||||
|
||||
|
||||
VOCODE_CREATE_OUTBOUND_CALL_URL = f"https://{BASE_URL}/create_outbound_call"
|
||||
VOCODE_END_OUTBOUND_CALL_URL = f"https://{BASE_URL}/end_outbound_call"
|
||||
|
||||
|
||||
class OutboundCall:
|
||||
|
|
@ -36,11 +31,13 @@ class OutboundCall:
|
|||
self.synthesizer_config = synthesizer_config
|
||||
self.conversation_id = conversation_id
|
||||
self.twilio_config = twilio_config
|
||||
self.vocode_create_outbound_call_url = f"https://{vocode.base_url}/create_outbound_call"
|
||||
self.vocode_end_outbound_call_url = f"https://{vocode.base_url}/end_outbound_call"
|
||||
|
||||
def start(self) -> str:
|
||||
response = requests.post(
|
||||
VOCODE_CREATE_OUTBOUND_CALL_URL,
|
||||
headers={"Authorization": f"Bearer {api_key}"},
|
||||
self.vocode_create_outbound_call_url,
|
||||
headers={"Authorization": f"Bearer {vocode.api_key}"},
|
||||
json=CreateOutboundCall(
|
||||
recipient=self.recipient,
|
||||
caller=self.caller,
|
||||
|
|
@ -57,8 +54,8 @@ class OutboundCall:
|
|||
|
||||
def end(self) -> str:
|
||||
response = requests.post(
|
||||
VOCODE_END_OUTBOUND_CALL_URL,
|
||||
headers={"Authorization": f"Bearer {api_key}"},
|
||||
self.vocode_end_outbound_call_url,
|
||||
headers={"Authorization": f"Bearer {vocode.api_key}"},
|
||||
json=EndOutboundCall(
|
||||
call_id=self.conversation_id,
|
||||
twilio_config=self.twilio_config,
|
||||
|
|
|
|||
|
|
@ -1,17 +1,16 @@
|
|||
from typing import Optional
|
||||
import requests
|
||||
|
||||
import vocode
|
||||
from vocode.models.agent import AgentConfig
|
||||
from vocode.models.synthesizer import SynthesizerConfig
|
||||
from vocode.models.transcriber import TranscriberConfig
|
||||
from vocode.telephony.outbound_call import OutboundCall
|
||||
from ..models.telephony import (
|
||||
from vocode.models.telephony import (
|
||||
CallEntity,
|
||||
DialIntoZoomCall,
|
||||
TwilioConfig,
|
||||
)
|
||||
import requests
|
||||
from .. import api_key, BASE_URL
|
||||
|
||||
VOCODE_ZOOM_DIAL_IN_URL = f"https://{BASE_URL}/dial_into_zoom_call"
|
||||
|
||||
|
||||
class ZoomDialIn(OutboundCall):
|
||||
|
|
@ -38,11 +37,12 @@ class ZoomDialIn(OutboundCall):
|
|||
)
|
||||
self.zoom_meeting_id = zoom_meeting_id
|
||||
self.zoom_meeting_password = zoom_meeting_password
|
||||
self.vocode_zoom_dial_in_url = f"https://{vocode.base_url}/dial_into_zoom_call"
|
||||
|
||||
def start(self) -> str:
|
||||
response = requests.post(
|
||||
VOCODE_ZOOM_DIAL_IN_URL,
|
||||
headers={"Authorization": f"Bearer {api_key}"},
|
||||
self.vocode_zoom_dial_in_url,
|
||||
headers={"Authorization": f"Bearer {vocode.api_key}"},
|
||||
json=DialIntoZoomCall(
|
||||
recipient=self.recipient,
|
||||
caller=self.caller,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue