Docstring cleanup, fix missing examples imports

This commit is contained in:
Mark Backman
2025-07-02 07:27:29 -07:00
parent 05753fb207
commit e71cb3ba68
10 changed files with 9 additions and 79 deletions

View File

@@ -2,4 +2,4 @@ aiofiles
python-dotenv python-dotenv
fastapi[all] fastapi[all]
uvicorn uvicorn
pipecat-ai[daily,deepgram,openai,silero,cartesia] pipecat-ai[daily,deepgram,openai,silero,cartesia,soundfile]

View File

@@ -1,6 +1,6 @@
fastapi fastapi
uvicorn uvicorn
python-dotenv python-dotenv
pipecat-ai[webrtc,silero,cartesia,deepgram,openai,tracing] pipecat-ai[daily,webrtc,silero,cartesia,deepgram,openai,tracing]
pipecat-ai-small-webrtc-prebuilt pipecat-ai-small-webrtc-prebuilt
opentelemetry-exporter-otlp-proto-grpc opentelemetry-exporter-otlp-proto-grpc

View File

@@ -1,6 +1,6 @@
fastapi fastapi
uvicorn uvicorn
python-dotenv python-dotenv
pipecat-ai[webrtc,silero,cartesia,deepgram,openai,tracing] pipecat-ai[daily,webrtc,silero,cartesia,deepgram,openai,tracing]
pipecat-ai-small-webrtc-prebuilt pipecat-ai-small-webrtc-prebuilt
opentelemetry-exporter-otlp-proto-http opentelemetry-exporter-otlp-proto-http

View File

@@ -1,4 +1,4 @@
pipecat-ai[daily,elevenlabs,openai,silero] pipecat-ai[daily,cartesia,openai,silero]
fastapi==0.115.6 fastapi==0.115.6
uvicorn uvicorn
python-dotenv python-dotenv

View File

@@ -47,7 +47,7 @@ class DebugLogObserver(BaseObserver):
Log specific frame types from any source/destination:: Log specific frame types from any source/destination::
from pipecat.frames.frames import TranscriptionFrame, InterimTranscriptionFrame from pipecat.frames.frames import LLMTextFrame, TranscriptionFrame
observers=[ observers=[
DebugLogObserver(frame_types=(LLMTextFrame,TranscriptionFrame,)), DebugLogObserver(frame_types=(LLMTextFrame,TranscriptionFrame,)),
] ]
@@ -55,7 +55,8 @@ class DebugLogObserver(BaseObserver):
Log frames with specific source/destination filters:: Log frames with specific source/destination filters::
from pipecat.frames.frames import StartInterruptionFrame, UserStartedSpeakingFrame, LLMTextFrame from pipecat.frames.frames import StartInterruptionFrame, UserStartedSpeakingFrame, LLMTextFrame
from pipecat.transports.base_output_transport import BaseOutputTransport from pipecat.observers.loggers.debug_log_observer import DebugLogObserver, FrameEndpoint
from pipecat.transports.base_output import BaseOutputTransport
from pipecat.services.stt_service import STTService from pipecat.services.stt_service import STTService
observers=[ observers=[

View File

@@ -26,29 +26,6 @@ class GatedAggregator(FrameProcessor):
until and not including the gate-closed frame. The aggregator maintains an until and not including the gate-closed frame. The aggregator maintains an
internal gate state that controls whether frames are passed through immediately internal gate state that controls whether frames are passed through immediately
or accumulated for later release. or accumulated for later release.
Doctest: FIXME to work with asyncio
>>> from pipecat.frames.frames import ImageRawFrame
>>> async def print_frames(aggregator, frame):
... async for frame in aggregator.process_frame(frame):
... if isinstance(frame, TextFrame):
... print(frame.text)
... else:
... print(frame.__class__.__name__)
>>> aggregator = GatedAggregator(
... gate_close_fn=lambda x: isinstance(x, LLMResponseStartFrame),
... gate_open_fn=lambda x: isinstance(x, ImageRawFrame),
... start_open=False)
>>> asyncio.run(print_frames(aggregator, TextFrame("Hello")))
>>> asyncio.run(print_frames(aggregator, TextFrame("Hello again.")))
>>> asyncio.run(print_frames(aggregator, ImageRawFrame(image=bytes([]), size=(0, 0))))
ImageRawFrame
Hello
Hello again.
>>> asyncio.run(print_frames(aggregator, TextFrame("Goodbye.")))
Goodbye.
""" """
def __init__( def __init__(

View File

@@ -23,20 +23,10 @@ class SentenceAggregator(FrameProcessor):
Useful for ensuring downstream processors receive coherent, complete sentences Useful for ensuring downstream processors receive coherent, complete sentences
rather than fragmented text. rather than fragmented text.
Frame input/output: Frame input/output::
TextFrame("Hello,") -> None TextFrame("Hello,") -> None
TextFrame(" world.") -> TextFrame("Hello, world.") TextFrame(" world.") -> TextFrame("Hello, world.")
Doctest: FIXME to work with asyncio
>>> import asyncio
>>> async def print_frames(aggregator, frame):
... async for frame in aggregator.process_frame(frame):
... print(frame.text)
>>> aggregator = SentenceAggregator()
>>> asyncio.run(print_frames(aggregator, TextFrame("Hello,")))
>>> asyncio.run(print_frames(aggregator, TextFrame(" world.")))
Hello, world.
""" """
def __init__(self): def __init__(self):

View File

@@ -20,17 +20,6 @@ class VisionImageFrameAggregator(FrameProcessor):
This aggregator waits for a consecutive TextFrame and an InputImageRawFrame. This aggregator waits for a consecutive TextFrame and an InputImageRawFrame.
After the InputImageRawFrame arrives it will output a VisionImageRawFrame After the InputImageRawFrame arrives it will output a VisionImageRawFrame
combining both the text and image data for multimodal processing. combining both the text and image data for multimodal processing.
>>> from pipecat.frames.frames import ImageFrame
>>> async def print_frames(aggregator, frame):
... async for frame in aggregator.process_frame(frame):
... print(frame)
>>> aggregator = VisionImageFrameAggregator()
>>> asyncio.run(print_frames(aggregator, TextFrame("What do you see?")))
>>> asyncio.run(print_frames(aggregator, ImageFrame(image=bytes([]), size=(0, 0))))
VisionImageFrame, text: What do you see?, image size: 0x0, buffer size: 0 B
""" """
def __init__(self): def __init__(self):

View File

@@ -18,14 +18,6 @@ class StatelessTextTransformer(FrameProcessor):
This processor intercepts TextFrame objects and applies a user-provided This processor intercepts TextFrame objects and applies a user-provided
transformation function to the text content. The function can be either transformation function to the text content. The function can be either
synchronous or asynchronous (coroutine). synchronous or asynchronous (coroutine).
>>> async def print_frames(aggregator, frame):
... async for frame in aggregator.process_frame(frame):
... print(frame.text)
>>> aggregator = StatelessTextTransformer(lambda x: x.upper())
>>> asyncio.run(print_frames(aggregator, TextFrame("Hello")))
HELLO
""" """
def __init__( def __init__(

View File

@@ -25,15 +25,6 @@ def obj_id() -> int:
Returns: Returns:
A unique integer identifier that increments globally across all objects. A unique integer identifier that increments globally across all objects.
Examples::
>>> obj_id()
0
>>> obj_id()
1
>>> obj_id()
2
""" """
with _ID_LOCK: with _ID_LOCK:
return next(_ID) return next(_ID)
@@ -47,16 +38,6 @@ def obj_count(obj) -> int:
Returns: Returns:
A unique integer count that increments per class type. A unique integer count that increments per class type.
Examples::
>>> obj_count(object())
0
>>> obj_count(object())
1
>>> new_type = type('NewType', (object,), {})
>>> obj_count(new_type())
0
""" """
with _COUNTS_LOCK: with _COUNTS_LOCK:
return next(_COUNTS[obj.__class__.__name__]) return next(_COUNTS[obj.__class__.__name__])