aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorNavan Chauhan <navanchauhan@gmail.com>2023-10-13 23:50:10 -0600
committerNavan Chauhan <navanchauhan@gmail.com>2023-10-13 23:50:10 -0600
commit9f914f8d479d58d7ccc045784fe614dfea9a1219 (patch)
treedb5a58ae9bdae7a7aa139c6220e048c359657298 /tools
parent6edba6384b42fa03785ac5887e91eb310e876ced (diff)
langchain
Diffstat (limited to 'tools')
-rw-r--r--tools/contacts.py19
-rw-r--r--tools/vocode.py64
2 files changed, 83 insertions, 0 deletions
diff --git a/tools/contacts.py b/tools/contacts.py
new file mode 100644
index 0000000..4f4a3be
--- /dev/null
+++ b/tools/contacts.py
@@ -0,0 +1,19 @@
+from typing import List
+from langchain.agents import tool
+
+from dotenv import load_dotenv
+load_dotenv()
+
+import os
+
+CONTACTS = [
+ {
+ "name": "Greg",
+ "phone" : os.getenv("TEST_PHONE_NUMBER")
+ }
+]
+
+@tool("get_all_contacts")
+def get_all_contacts(placeholder: str) -> List[dict]:
+ """Returns all contacts in the user's phone book."""
+ return CONTACTS \ No newline at end of file
diff --git a/tools/vocode.py b/tools/vocode.py
new file mode 100644
index 0000000..f752eff
--- /dev/null
+++ b/tools/vocode.py
@@ -0,0 +1,64 @@
+import logging
+import asyncio
+import os
+from langchain.agents import tool
+from dotenv import load_dotenv
+
+from vocode.streaming.models.message import BaseMessage
+from vocode.streaming.models.synthesizer import ElevenLabsSynthesizerConfig
+from vocode.streaming.models.transcriber import DeepgramTranscriberConfig, PunctuationEndpointingConfig
+
+
+load_dotenv()
+
+from call_transcript_utils import delete_transcript, get_transcript
+
+from vocode.streaming.telephony.conversation.outbound_call import OutboundCall
+from vocode.streaming.telephony.config_manager.redis_config_manager import (
+ RedisConfigManager,
+)
+from vocode.streaming.models.agent import ChatGPTAgentConfig
+import time
+
+LOOP = asyncio.new_event_loop()
+asyncio.set_event_loop(LOOP)
+
+@tool("call phone number")
+def call_phone_number(input: str) -> str:
+ """calls a phone number as a bot and returns a transcript of the conversation.
+ the input to this tool is a pipe separated list of a phone number, a prompt, and the first thing the bot should say.
+ The prompt should instruct the bot with what to do on the call and be in the 3rd person,
+ like 'the assistant is performing this task' instead of 'perform this task'.
+
+ should only use this tool once it has found an adequate phone number to call.
+
+ for example, `+15555555555|the assistant is explaining the meaning of life|i'm going to tell you the meaning of life` will call +15555555555, say 'i'm going to tell you the meaning of life', and instruct the assistant to tell the human what the meaning of life is.
+ """
+ phone_number, prompt, initial_message = input.split("|",2)
+ call = OutboundCall(
+ base_url=os.environ["BASE_URL"],
+ to_phone=phone_number,
+ from_phone=os.environ['TWILIO_PHONE'],
+ config_manager=RedisConfigManager(),
+ agent_config=ChatGPTAgentConfig(
+ initial_message=BaseMessage(text=initial_message),
+ prompt_preamble=prompt,
+ generate_responses=True,
+ ),
+ synthesizer_config=ElevenLabsSynthesizerConfig.from_telephone_output_device(
+ api_key=os.getenv("ELEVENLABS_API_KEY"),
+ voice_id=os.getenv("ELEVENLABS_VOICE_ID")
+ ),
+ transcriber_config=DeepgramTranscriberConfig.from_telephone_input_device(
+ endpointing_config=PunctuationEndpointingConfig()
+ ),
+ logger=logging.Logger("OutboundCall")
+ )
+ LOOP.run_until_complete(call.start())
+ while True:
+ maybe_transcript = get_transcript(call.conversation_id)
+ if maybe_transcript:
+ delete_transcript(call.conversation_id)
+ return maybe_transcript
+ else:
+ time.sleep(1) \ No newline at end of file