examples: some function calling examples cleanup

This commit is contained in:
Aleix Conchillo Flaqué
2024-05-30 11:05:08 -07:00
parent 3655c4a0fc
commit 42f772beed
2 changed files with 27 additions and 36 deletions

View File

@@ -7,9 +7,9 @@
import asyncio import asyncio
import aiohttp import aiohttp
import os import os
import json
import sys import sys
from pipecat.frames.frames import TextFrame
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 PipelineTask from pipecat.pipeline.task import PipelineTask
@@ -17,18 +17,13 @@ from pipecat.processors.aggregators.llm_response import (
LLMAssistantContextAggregator, LLMAssistantContextAggregator,
LLMUserContextAggregator, LLMUserContextAggregator,
) )
from pipecat.services.openai import OpenAILLMContext
from pipecat.processors.logger import FrameLogger from pipecat.processors.logger import FrameLogger
from pipecat.services.elevenlabs import ElevenLabsTTSService from pipecat.services.elevenlabs import ElevenLabsTTSService
from pipecat.services.openai import OpenAILLMService from pipecat.services.openai import OpenAILLMContext, OpenAILLMService
from pipecat.transports.services.daily import DailyParams, DailyTransport from pipecat.transports.services.daily import DailyParams, DailyTransport
from pipecat.vad.silero import SileroVADAnalyzer from pipecat.vad.silero import SileroVADAnalyzer
from openai.types.chat import (
ChatCompletionToolParam, from openai.types.chat import ChatCompletionToolParam
)
from pipecat.frames.frames import (
TextFrame
)
from runner import configure from runner import configure

View File

@@ -1,11 +1,15 @@
#
# Copyright (c) 2024, Daily
#
# SPDX-License-Identifier: BSD 2-Clause License
#
import asyncio import asyncio
import aiohttp import aiohttp
import copy
import json
import os import os
import re
import sys import sys
import wave import wave
from typing import List from typing import List
from openai._types import NotGiven, NOT_GIVEN from openai._types import NotGiven, NOT_GIVEN
@@ -14,23 +18,18 @@ from openai.types.chat import (
ChatCompletionToolParam, ChatCompletionToolParam,
) )
from pipecat.frames.frames import AudioRawFrame
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 PipelineTask from pipecat.pipeline.task import PipelineParams, PipelineTask
from pipecat.processors.aggregators.llm_response import LLMUserContextAggregator, LLMAssistantContextAggregator from pipecat.processors.aggregators.llm_response import LLMUserContextAggregator, LLMAssistantContextAggregator
from pipecat.processors.logger import FrameLogger from pipecat.processors.logger import FrameLogger
from pipecat.frames.frames import ( from pipecat.processors.frame_processor import FrameDirection
Frame,
LLMMessagesFrame,
AudioRawFrame,
)
from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
from pipecat.services.elevenlabs import ElevenLabsTTSService from pipecat.services.elevenlabs import ElevenLabsTTSService
from pipecat.services.openai import OpenAILLMService from pipecat.services.openai import OpenAILLMContext, OpenAILLMContextFrame, OpenAILLMService
from pipecat.services.ai_services import AIService from pipecat.services.ai_services import AIService
from pipecat.transports.services.daily import DailyParams, DailyTranscriptionSettings, DailyTransport from pipecat.transports.services.daily import DailyParams, DailyTransport
from pipecat.vad.silero import SileroVADAnalyzer from pipecat.vad.silero import SileroVADAnalyzer
from pipecat.services.openai import OpenAILLMContext, OpenAILLMContextFrame
from runner import configure from runner import configure
@@ -242,7 +241,6 @@ class IntakeProcessor:
self._context.add_message( self._context.add_message(
{"role": "system", "content": "Finally, ask the user the reason for their doctor visit today. Once they answer, call the list_visit_reasons function."}) {"role": "system", "content": "Finally, ask the user the reason for their doctor visit today. Once they answer, call the list_visit_reasons function."})
await llm.process_frame(OpenAILLMContextFrame(self._context), FrameDirection.DOWNSTREAM) await llm.process_frame(OpenAILLMContextFrame(self._context), FrameDirection.DOWNSTREAM)
pass
async def start_visit_reasons(self, llm): async def start_visit_reasons(self, llm):
print("!!! doing start visit reasons") print("!!! doing start visit reasons")
@@ -251,7 +249,6 @@ class IntakeProcessor:
self._context.add_message({"role": "system", self._context.add_message({"role": "system",
"content": "Now, thank the user and end the conversation."}) "content": "Now, thank the user and end the conversation."})
await llm.process_frame(OpenAILLMContextFrame(self._context), FrameDirection.DOWNSTREAM) await llm.process_frame(OpenAILLMContextFrame(self._context), FrameDirection.DOWNSTREAM)
pass
async def save_data(self, llm, args): async def save_data(self, llm, args):
logger.info(f"!!! Saving data: {args}") logger.info(f"!!! Saving data: {args}")
@@ -305,12 +302,10 @@ async def main(room_url: str, token):
model="gpt-4o") model="gpt-4o")
messages = [] messages = []
context = OpenAILLMContext( context = OpenAILLMContext(messages=messages)
messages=messages,
)
user_context = LLMUserContextAggregator(context) user_context = LLMUserContextAggregator(context)
assistant_context = LLMAssistantContextAggregator(context) assistant_context = LLMAssistantContextAggregator(context)
# checklist = ChecklistProcessor(context, llm)
intake = IntakeProcessor(context, llm) intake = IntakeProcessor(context, llm)
llm.register_function("verify_birthday", intake.verify_birthday) llm.register_function("verify_birthday", intake.verify_birthday)
llm.register_function( llm.register_function(
@@ -329,19 +324,20 @@ async def main(room_url: str, token):
"list_visit_reasons", "list_visit_reasons",
intake.save_data, intake.save_data,
start_callback=intake.start_visit_reasons) start_callback=intake.start_visit_reasons)
fl = FrameLogger("LLM Output") fl = FrameLogger("LLM Output")
pipeline = Pipeline([ pipeline = Pipeline([
transport.input(), transport.input(), # Transport input
user_context, user_context, # User responses
llm, llm, # LLM
fl, fl, # Frame logger
tts, tts, # TTS
transport.output(), transport.output(), # Transport output
assistant_context, assistant_context, # Assistant responses
]) ])
task = PipelineTask(pipeline, allow_interruptions=False) task = PipelineTask(pipeline, PipelineParams(allow_interruptions=False))
@transport.event_handler("on_first_participant_joined") @transport.event_handler("on_first_participant_joined")
async def on_first_participant_joined(transport, participant): async def on_first_participant_joined(transport, participant):