examples: deprecate start_callback from LLMService.register_function()
This commit is contained in:
@@ -30,13 +30,8 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -62,9 +57,10 @@ async def main():
|
|||||||
)
|
)
|
||||||
|
|
||||||
llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"), model="gpt-4o")
|
llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"), model="gpt-4o")
|
||||||
# Register a function_name of None to get all functions
|
|
||||||
|
# You can also register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -31,13 +31,8 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -66,9 +61,9 @@ async def main():
|
|||||||
api_key=os.getenv("TOGETHER_API_KEY"),
|
api_key=os.getenv("TOGETHER_API_KEY"),
|
||||||
model="meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",
|
model="meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",
|
||||||
)
|
)
|
||||||
# Register a function_name of None to get all functions
|
# You can also register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -33,13 +33,8 @@ logger.add(sys.stderr, level="DEBUG")
|
|||||||
video_participant_id = None
|
video_participant_id = None
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def get_weather(function_name, tool_call_id, arguments, llm, context, result_callback):
|
async def get_weather(function_name, tool_call_id, arguments, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
location = arguments["location"]
|
location = arguments["location"]
|
||||||
await result_callback(f"The weather in {location} is currently 72 degrees and sunny.")
|
await result_callback(f"The weather in {location} is currently 72 degrees and sunny.")
|
||||||
|
|
||||||
@@ -72,7 +67,7 @@ async def main():
|
|||||||
)
|
)
|
||||||
|
|
||||||
llm = GoogleLLMService(api_key=os.getenv("GOOGLE_API_KEY"), model="gemini-2.0-flash-001")
|
llm = GoogleLLMService(api_key=os.getenv("GOOGLE_API_KEY"), model="gemini-2.0-flash-001")
|
||||||
llm.register_function("get_weather", get_weather, start_fetch_weather)
|
llm.register_function("get_weather", get_weather)
|
||||||
llm.register_function("get_image", get_image)
|
llm.register_function("get_image", get_image)
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
|
|||||||
@@ -31,13 +31,8 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -65,9 +60,9 @@ async def main():
|
|||||||
)
|
)
|
||||||
|
|
||||||
llm = GroqLLMService(api_key=os.getenv("GROQ_API_KEY"), model="llama-3.3-70b-versatile")
|
llm = GroqLLMService(api_key=os.getenv("GROQ_API_KEY"), model="llama-3.3-70b-versatile")
|
||||||
# Register a function_name of None to get all functions
|
# You can also register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ from runner import configure
|
|||||||
from pipecat.adapters.schemas.function_schema import FunctionSchema
|
from pipecat.adapters.schemas.function_schema import FunctionSchema
|
||||||
from pipecat.adapters.schemas.tools_schema import ToolsSchema
|
from pipecat.adapters.schemas.tools_schema import ToolsSchema
|
||||||
from pipecat.audio.vad.silero import SileroVADAnalyzer
|
from pipecat.audio.vad.silero import SileroVADAnalyzer
|
||||||
from pipecat.frames.frames import TTSSpeakFrame
|
|
||||||
from pipecat.pipeline.pipeline import Pipeline
|
from pipecat.pipeline.pipeline import Pipeline
|
||||||
from pipecat.pipeline.runner import PipelineRunner
|
from pipecat.pipeline.runner import PipelineRunner
|
||||||
from pipecat.pipeline.task import PipelineParams, PipelineTask
|
from pipecat.pipeline.task import PipelineParams, PipelineTask
|
||||||
@@ -31,12 +30,6 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
@@ -63,9 +56,9 @@ async def main():
|
|||||||
)
|
)
|
||||||
|
|
||||||
llm = GrokLLMService(api_key=os.getenv("GROK_API_KEY"))
|
llm = GrokLLMService(api_key=os.getenv("GROK_API_KEY"))
|
||||||
# Register a function_name of None to get all functions
|
# You can also register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -31,13 +31,8 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -67,9 +62,9 @@ async def main():
|
|||||||
endpoint=os.getenv("AZURE_CHATGPT_ENDPOINT"),
|
endpoint=os.getenv("AZURE_CHATGPT_ENDPOINT"),
|
||||||
model=os.getenv("AZURE_CHATGPT_MODEL"),
|
model=os.getenv("AZURE_CHATGPT_MODEL"),
|
||||||
)
|
)
|
||||||
# Register a function_name of None to get all functions
|
# You can also register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -31,13 +31,8 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -64,11 +59,11 @@ async def main():
|
|||||||
|
|
||||||
llm = FireworksLLMService(
|
llm = FireworksLLMService(
|
||||||
api_key=os.getenv("FIREWORKS_API_KEY"),
|
api_key=os.getenv("FIREWORKS_API_KEY"),
|
||||||
model="accounts/fireworks/models/firefunction-v2",
|
model="accounts/fireworks/models/llama-v3p1-405b-instruct",
|
||||||
)
|
)
|
||||||
# Register a function_name of None to get all functions
|
# You can also register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -31,13 +31,8 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -66,9 +61,9 @@ async def main():
|
|||||||
llm = NimLLMService(
|
llm = NimLLMService(
|
||||||
api_key=os.getenv("NVIDIA_API_KEY"), model="meta/llama-3.3-70b-instruct"
|
api_key=os.getenv("NVIDIA_API_KEY"), model="meta/llama-3.3-70b-instruct"
|
||||||
)
|
)
|
||||||
# Register a function_name of None to get all functions
|
# You can also register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -31,13 +31,8 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -63,9 +58,9 @@ async def main():
|
|||||||
)
|
)
|
||||||
|
|
||||||
llm = CerebrasLLMService(api_key=os.getenv("CEREBRAS_API_KEY"), model="llama-3.3-70b")
|
llm = CerebrasLLMService(api_key=os.getenv("CEREBRAS_API_KEY"), model="llama-3.3-70b")
|
||||||
# Register a function_name of None to get all functions
|
# You can also register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -31,13 +31,8 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -63,9 +58,9 @@ async def main():
|
|||||||
)
|
)
|
||||||
|
|
||||||
llm = DeepSeekLLMService(api_key=os.getenv("DEEPSEEK_API_KEY"), model="deepseek-chat")
|
llm = DeepSeekLLMService(api_key=os.getenv("DEEPSEEK_API_KEY"), model="deepseek-chat")
|
||||||
# Register a function_name of None to get all functions
|
# You can also register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -31,13 +31,8 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -67,9 +62,9 @@ async def main():
|
|||||||
llm = OpenRouterLLMService(
|
llm = OpenRouterLLMService(
|
||||||
api_key=os.getenv("OPENROUTER_API_KEY"), model="openai/gpt-4o-2024-11-20"
|
api_key=os.getenv("OPENROUTER_API_KEY"), model="openai/gpt-4o-2024-11-20"
|
||||||
)
|
)
|
||||||
# Register a function_name of None to get all functions
|
# You can also register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -31,13 +31,8 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -63,11 +58,9 @@ async def main():
|
|||||||
)
|
)
|
||||||
|
|
||||||
llm = GoogleLLMOpenAIBetaService(api_key=os.getenv("GEMINI_API_KEY"))
|
llm = GoogleLLMOpenAIBetaService(api_key=os.getenv("GEMINI_API_KEY"))
|
||||||
# Register a function_name of None to get all functions
|
# You can aslo register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
"get_current_weather", fetch_weather_from_api, start_callback=start_fetch_weather
|
|
||||||
)
|
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -31,13 +31,8 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -68,11 +63,9 @@ async def main():
|
|||||||
project_id="<google-project-id>",
|
project_id="<google-project-id>",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
# Register a function_name of None to get all functions
|
# You can aslo register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
"get_current_weather", fetch_weather_from_api, start_callback=start_fetch_weather
|
|
||||||
)
|
|
||||||
|
|
||||||
weather_function = FunctionSchema(
|
weather_function = FunctionSchema(
|
||||||
name="get_current_weather",
|
name="get_current_weather",
|
||||||
|
|||||||
@@ -199,13 +199,8 @@ class OutputGate(FrameProcessor):
|
|||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -239,9 +234,9 @@ async def main():
|
|||||||
|
|
||||||
# This is the regular LLM.
|
# This is the regular LLM.
|
||||||
llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"), model="gpt-4o")
|
llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"), model="gpt-4o")
|
||||||
# Register a function_name of None to get all functions
|
# You can also register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
tools = [
|
tools = [
|
||||||
ChatCompletionToolParam(
|
ChatCompletionToolParam(
|
||||||
|
|||||||
@@ -403,13 +403,8 @@ class OutputGate(FrameProcessor):
|
|||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
"""Push a frame to the LLM; this is handy when the LLM response might take a while."""
|
|
||||||
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
|
await llm.push_frame(TTSSpeakFrame("Let me check on that."))
|
||||||
await result_callback({"conditions": "nice", "temperature": "75"})
|
await result_callback({"conditions": "nice", "temperature": "75"})
|
||||||
|
|
||||||
|
|
||||||
@@ -451,7 +446,7 @@ async def main():
|
|||||||
)
|
)
|
||||||
# Register a function_name of None to get all functions
|
# Register a function_name of None to get all functions
|
||||||
# sent to the same callback with an additional function_name parameter.
|
# sent to the same callback with an additional function_name parameter.
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
tools = [
|
tools = [
|
||||||
ChatCompletionToolParam(
|
ChatCompletionToolParam(
|
||||||
|
|||||||
@@ -30,10 +30,6 @@ logger.remove(0)
|
|||||||
logger.add(sys.stderr, level="DEBUG")
|
logger.add(sys.stderr, level="DEBUG")
|
||||||
|
|
||||||
|
|
||||||
async def start_fetch_weather(function_name, llm, context):
|
|
||||||
logger.debug(f"Starting fetch_weather_from_api with function_name: {function_name}")
|
|
||||||
|
|
||||||
|
|
||||||
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
async def fetch_weather_from_api(function_name, tool_call_id, args, llm, context, result_callback):
|
||||||
# Add a delay to test interruption during function calls
|
# Add a delay to test interruption during function calls
|
||||||
logger.info("Weather API call starting...")
|
logger.info("Weather API call starting...")
|
||||||
@@ -72,7 +68,7 @@ async def main():
|
|||||||
tts = DeepgramTTSService(api_key=os.getenv("DEEPGRAM_API_KEY"), voice="aura-helios-en")
|
tts = DeepgramTTSService(api_key=os.getenv("DEEPGRAM_API_KEY"), voice="aura-helios-en")
|
||||||
|
|
||||||
llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"), model="gpt-4o")
|
llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"), model="gpt-4o")
|
||||||
llm.register_function(None, fetch_weather_from_api, start_callback=start_fetch_weather)
|
llm.register_function("get_current_weather", fetch_weather_from_api)
|
||||||
|
|
||||||
tools = [
|
tools = [
|
||||||
ChatCompletionToolParam(
|
ChatCompletionToolParam(
|
||||||
|
|||||||
@@ -142,7 +142,9 @@ class IntakeProcessor:
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
async def start_prescriptions(self, function_name, llm, context):
|
async def list_prescriptions(
|
||||||
|
self, function_name, tool_call_id, args, llm, context, result_callback
|
||||||
|
):
|
||||||
print(f"!!! doing start prescriptions")
|
print(f"!!! doing start prescriptions")
|
||||||
# Move on to allergies
|
# Move on to allergies
|
||||||
context.set_tools(
|
context.set_tools(
|
||||||
@@ -182,9 +184,12 @@ class IntakeProcessor:
|
|||||||
print(f"!!! about to await llm process frame in start prescrpitions")
|
print(f"!!! about to await llm process frame in start prescrpitions")
|
||||||
await llm.queue_frame(OpenAILLMContextFrame(context), FrameDirection.DOWNSTREAM)
|
await llm.queue_frame(OpenAILLMContextFrame(context), FrameDirection.DOWNSTREAM)
|
||||||
print(f"!!! past await process frame in start prescriptions")
|
print(f"!!! past await process frame in start prescriptions")
|
||||||
|
await self.save_data(args, result_callback)
|
||||||
|
|
||||||
async def start_allergies(self, function_name, llm, context):
|
async def list_allergies(
|
||||||
print("!!! doing start allergies")
|
self, function_name, tool_call_id, args, llm, context, result_callback
|
||||||
|
):
|
||||||
|
print("!!! doing list allergies")
|
||||||
# Move on to conditions
|
# Move on to conditions
|
||||||
context.set_tools(
|
context.set_tools(
|
||||||
[
|
[
|
||||||
@@ -221,8 +226,11 @@ class IntakeProcessor:
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
await llm.queue_frame(OpenAILLMContextFrame(context), FrameDirection.DOWNSTREAM)
|
await llm.queue_frame(OpenAILLMContextFrame(context), FrameDirection.DOWNSTREAM)
|
||||||
|
await self.save_data(args, result_callback)
|
||||||
|
|
||||||
async def start_conditions(self, function_name, llm, context):
|
async def list_conditions(
|
||||||
|
self, function_name, tool_call_id, args, llm, context, result_callback
|
||||||
|
):
|
||||||
print("!!! doing start conditions")
|
print("!!! doing start conditions")
|
||||||
# Move on to visit reasons
|
# Move on to visit reasons
|
||||||
context.set_tools(
|
context.set_tools(
|
||||||
@@ -260,8 +268,11 @@ class IntakeProcessor:
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
await llm.queue_frame(OpenAILLMContextFrame(context), FrameDirection.DOWNSTREAM)
|
await llm.queue_frame(OpenAILLMContextFrame(context), FrameDirection.DOWNSTREAM)
|
||||||
|
await self.save_data(args, result_callback)
|
||||||
|
|
||||||
async def start_visit_reasons(self, function_name, llm, context):
|
async def list_visit_reasons(
|
||||||
|
self, function_name, tool_call_id, args, llm, context, result_callback
|
||||||
|
):
|
||||||
print("!!! doing start visit reasons")
|
print("!!! doing start visit reasons")
|
||||||
# move to finish call
|
# move to finish call
|
||||||
context.set_tools([])
|
context.set_tools([])
|
||||||
@@ -269,8 +280,9 @@ class IntakeProcessor:
|
|||||||
{"role": "system", "content": "Now, thank the user and end the conversation."}
|
{"role": "system", "content": "Now, thank the user and end the conversation."}
|
||||||
)
|
)
|
||||||
await llm.queue_frame(OpenAILLMContextFrame(context), FrameDirection.DOWNSTREAM)
|
await llm.queue_frame(OpenAILLMContextFrame(context), FrameDirection.DOWNSTREAM)
|
||||||
|
await self.save_data(args, result_callback)
|
||||||
|
|
||||||
async def save_data(self, function_name, tool_call_id, args, llm, context, result_callback):
|
async def save_data(self, args, result_callback):
|
||||||
logger.info(f"!!! Saving data: {args}")
|
logger.info(f"!!! Saving data: {args}")
|
||||||
# Since this is supposed to be "async", returning None from the callback
|
# Since this is supposed to be "async", returning None from the callback
|
||||||
# will prevent adding anything to context or re-prompting
|
# will prevent adding anything to context or re-prompting
|
||||||
@@ -319,18 +331,10 @@ async def main():
|
|||||||
|
|
||||||
intake = IntakeProcessor(context)
|
intake = IntakeProcessor(context)
|
||||||
llm.register_function("verify_birthday", intake.verify_birthday)
|
llm.register_function("verify_birthday", intake.verify_birthday)
|
||||||
llm.register_function(
|
llm.register_function("list_prescriptions", intake.list_prescriptions)
|
||||||
"list_prescriptions", intake.save_data, start_callback=intake.start_prescriptions
|
llm.register_function("list_allergies", intake.list_allergies)
|
||||||
)
|
llm.register_function("list_conditions", intake.list_conditions)
|
||||||
llm.register_function(
|
llm.register_function("list_visit_reasons", intake.list_visit_reasons)
|
||||||
"list_allergies", intake.save_data, start_callback=intake.start_allergies
|
|
||||||
)
|
|
||||||
llm.register_function(
|
|
||||||
"list_conditions", intake.save_data, start_callback=intake.start_conditions
|
|
||||||
)
|
|
||||||
llm.register_function(
|
|
||||||
"list_visit_reasons", intake.save_data, start_callback=intake.start_visit_reasons
|
|
||||||
)
|
|
||||||
|
|
||||||
fl = FrameLogger("LLM Output")
|
fl = FrameLogger("LLM Output")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user