Compare commits

...

3 Commits

Author SHA1 Message Date
Chad Bailey
ff1b2961d8 fixup 2024-05-31 14:23:56 +00:00
Chad Bailey
ba42cffcc2 test cleanup 2024-05-31 14:23:56 +00:00
Chad Bailey
9778d86607 everything but audioframe and endpipeframe 2024-05-31 14:23:52 +00:00
17 changed files with 48 additions and 49 deletions

View File

@@ -3,14 +3,14 @@ import aiohttp
import asyncio
import logging
import os
from pipecat.pipeline.aggregators import SentenceAggregator
from pipecat.processors.aggregators import SentenceAggregator
from pipecat.pipeline.pipeline import Pipeline
from pipecat.transports.daily_transport import DailyTransport
from pipecat.services.azure_ai_services import AzureLLMService, AzureTTSService
from pipecat.services.elevenlabs_ai_services import ElevenLabsTTSService
from pipecat.services.fal_ai_services import FalImageGenService
from pipecat.pipeline.frames import AudioFrame, EndFrame, ImageFrame, LLMMessagesFrame, TextFrame
from pipecat.frames.frames import AudioFrame, EndFrame, ImageFrame, LLMMessagesFrame, TextFrame
from runner import configure

View File

@@ -2,8 +2,8 @@ import asyncio
import aiohttp
import logging
import os
from pipecat.pipeline.frame_processor import FrameProcessor
from pipecat.pipeline.frames import TextFrame, TranscriptionFrame
from pipeline.processors.frame_processor import FrameProcessor
from pipecat.frames.frames import TextFrame, TranscriptionFrame
from pipecat.pipeline.pipeline import Pipeline
from pipecat.services.elevenlabs_ai_services import ElevenLabsTTSService
from pipecat.transports.websocket_transport import WebsocketTransport

View File

@@ -307,7 +307,7 @@ class UserStoppedSpeakingFrame(ControlFrame):
@dataclass
class TTSStartedFrame(ControlFrame):
"""Used to indicate the beginning of a TTS response. Following
AudioRawFrames are part of the TTS response until an TTSEndFrame. These
AudioRawFrames are part of the TTS response until an TTSStoppedFrame. These
frames can be used for aggregating audio frames in a transport to optimize
the size of frames sent to the session, without needing to control this in
the TTS service.

View File

@@ -1,5 +1,5 @@
from typing import List
from pipecat.pipeline.frames import EndFrame, EndPipeFrame
from pipecat.frames.frames import EndFrame
from pipecat.pipeline.pipeline import Pipeline
@@ -16,8 +16,7 @@ class SequentialMergePipeline(Pipeline):
while True:
frame = await pipeline.sink.get()
if isinstance(
frame, EndFrame) or isinstance(
frame, EndPipeFrame):
frame, EndFrame):
break
await self.sink.put(frame)

View File

@@ -17,7 +17,7 @@ class GatedAggregator(FrameProcessor):
Yields gate-opening frame before any accumulated frames, then ensuing frames
until and not including the gate-closed frame.
>>> from pipecat.pipeline.frames import ImageFrame
>>> from pipecat.frames.frames import ImageFrame
>>> async def print_frames(aggregator, frame):
... async for frame in aggregator.process_frame(frame):

View File

@@ -12,7 +12,7 @@ class VisionImageFrameAggregator(FrameProcessor):
"""This aggregator waits for a consecutive TextFrame and an
ImageFrame. After the ImageFrame arrives it will output a VisionImageFrame.
>>> from pipecat.pipeline.frames import ImageFrame
>>> from pipecat.frames.frames import ImageFrame
>>> async def print_frames(aggregator, frame):
... async for frame in aggregator.process_frame(frame):

View File

@@ -1,6 +1,6 @@
from abc import abstractmethod
from pipecat.pipeline.frames import Frame
from pipecat.frames.frames import Frame
class FrameSerializer:

View File

@@ -1,14 +1,14 @@
import dataclasses
from typing import Text
from pipecat.pipeline.frames import AudioFrame, Frame, TextFrame, TranscriptionFrame
import pipecat.pipeline.protobufs.frames_pb2 as frame_protos
from pipecat.frames.frames import AudioRawFrame, Frame, TextFrame, TranscriptionFrame
import pipecat.frames.protobufs.frames_pb2 as frame_protos
from pipecat.serializers.abstract_frame_serializer import FrameSerializer
class ProtobufFrameSerializer(FrameSerializer):
SERIALIZABLE_TYPES = {
TextFrame: "text",
AudioFrame: "audio",
AudioRawFrame: "audio",
TranscriptionFrame: "transcription"
}

View File

@@ -17,8 +17,8 @@ from functools import partial
from typing import Any, Callable, Mapping
from daily import (
CallClient,
Daily,
CallClient,
EventHandler,
VirtualCameraDevice,
VirtualMicrophoneDevice,

View File

@@ -1,8 +1,8 @@
import asyncio
import os
from pipecat.pipeline.openai_frames import OpenAILLMContextFrame
from pipecat.services.azure_ai_services import AzureLLMService
from pipecat.services.openai_llm_context import OpenAILLMContext
from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContextFrame
from pipecat.services.azure import AzureLLMService
from pipecat.services.openai import OpenAILLMContext
from openai.types.chat import (
ChatCompletionSystemMessageParam,

View File

@@ -1,11 +1,10 @@
import asyncio
from pipecat.pipeline.openai_frames import OpenAILLMContextFrame
from pipecat.services.openai_llm_context import OpenAILLMContext
from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContextFrame, OpenAILLMContext
from openai.types.chat import (
ChatCompletionSystemMessageParam,
)
from pipecat.services.ollama_ai_services import OLLamaLLMService
from pipecat.services.ollama import OLLamaLLMService
if __name__ == "__main__":
async def test_chat():

View File

@@ -3,6 +3,7 @@ import json
import os
from typing import List
from pipecat.services.openai import OpenAILLMContextFrame, OpenAILLMContext
from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
from pipecat.frames.frames import (

View File

@@ -3,16 +3,15 @@ import doctest
import functools
import unittest
from pipecat.pipeline.aggregators import (
GatedAggregator,
ParallelPipeline,
SentenceAggregator,
StatelessTextTransformer,
)
from pipecat.pipeline.frames import (
AudioFrame,
from pipecat.processors.aggregators.sentence import SentenceAggregator
from pipecat.processors.text_transformer import StatelessTextTransformer
from pipecat.processors.aggregators.gated import GatedAggregator
from pipecat.pipeline.parallel_pipeline import ParallelPipeline
from pipecat.frames.frames import (
AudioRawFrame,
EndFrame,
ImageFrame,
ImageRawFrame,
LLMResponseEndFrame,
LLMResponseStartFrame,
Frame,
@@ -46,26 +45,26 @@ class TestDailyFrameAggregators(unittest.IsolatedAsyncioTestCase):
async def test_gated_accumulator(self):
gated_aggregator = GatedAggregator(
gate_open_fn=lambda frame: isinstance(
frame, ImageFrame), gate_close_fn=lambda frame: isinstance(
frame, ImageRawFrame), gate_close_fn=lambda frame: isinstance(
frame, LLMResponseStartFrame), start_open=False, )
frames = [
LLMResponseStartFrame(),
TextFrame("Hello, "),
TextFrame("world."),
AudioFrame(b"hello"),
ImageFrame(b"image", (0, 0)),
AudioFrame(b"world"),
AudioRawFrame(b"hello", 1, 1),
ImageRawFrame(b"image", (0, 0)),
AudioRawFrame(b"world", 1, 1),
LLMResponseEndFrame(),
]
expected_output_frames = [
ImageFrame(b"image", (0, 0)),
ImageRawFrame(b"image", (0, 0)),
LLMResponseStartFrame(),
TextFrame("Hello, "),
TextFrame("world."),
AudioFrame(b"hello"),
AudioFrame(b"world"),
AudioRawFrame(b"hello", 1, 1),
AudioRawFrame(b"world", 1, 1),
LLMResponseEndFrame(),
]
for frame in frames:

View File

@@ -3,7 +3,7 @@ import unittest
from typing import AsyncGenerator
from pipecat.services.ai_services import AIService
from pipecat.pipeline.frames import EndFrame, Frame, TextFrame
from pipecat.frames.frames import EndFrame, Frame, TextFrame
class SimpleAIService(AIService):

View File

@@ -2,9 +2,10 @@ import asyncio
import unittest
from unittest.mock import Mock
from pipecat.pipeline.aggregators import SentenceAggregator, StatelessTextTransformer
from pipecat.pipeline.frame_processor import FrameProcessor
from pipecat.pipeline.frames import EndFrame, TextFrame
from pipecat.processors.text_transformer import StatelessTextTransformer
from pipecat.processors.aggregators.sentence import SentenceAggregator
from pipecat.processors.frame_processor import FrameProcessor
from pipecat.frames.frames import EndFrame, TextFrame
from pipecat.pipeline.pipeline import Pipeline

View File

@@ -1,6 +1,6 @@
import unittest
from pipecat.pipeline.frames import AudioFrame, TextFrame, TranscriptionFrame
from pipecat.frames.frames import AudioFrame, TextFrame, TranscriptionFrame
from pipecat.serializers.protobuf_serializer import ProtobufFrameSerializer

View File

@@ -2,7 +2,7 @@ import asyncio
import unittest
from unittest.mock import AsyncMock, patch, Mock
from pipecat.pipeline.frames import AudioFrame, EndFrame, TextFrame, TTSEndFrame, TTSStartFrame
from pipecat.frames.frames import AudioRawFrame, EndFrame, TextFrame, TTSStoppedFrame, TTSStartedFrame
from pipecat.pipeline.pipeline import Pipeline
from pipecat.transports.websocket_transport import WebSocketFrameProcessor, WebsocketTransport
@@ -52,10 +52,10 @@ class TestWebSocketTransportService(unittest.IsolatedAsyncioTestCase):
processor = WebSocketFrameProcessor(audio_frame_size=4)
source_frames = [
TTSStartFrame(),
AudioFrame(b"1234"),
AudioFrame(b"5678"),
TTSEndFrame(),
TTSStartedFrame(),
AudioRawFrame(b"1234", 1, 1),
AudioRawFrame(b"5678", 1, 1),
TTSStoppedFrame(),
TextFrame("hello world")
]
@@ -65,9 +65,9 @@ class TestWebSocketTransportService(unittest.IsolatedAsyncioTestCase):
frames.append(output_frame)
self.assertEqual(len(frames), 3)
self.assertIsInstance(frames[0], AudioFrame)
self.assertIsInstance(frames[0], AudioRawFrame)
self.assertEqual(frames[0].data, b"1234")
self.assertIsInstance(frames[1], AudioFrame)
self.assertIsInstance(frames[1], AudioRawFrame)
self.assertEqual(frames[1].data, b"5678")
self.assertIsInstance(frames[2], TextFrame)
self.assertEqual(frames[2].text, "hello world")