Docstring cleanup, fix missing examples imports
This commit is contained in:
@@ -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]
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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=[
|
||||||
|
|||||||
@@ -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__(
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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__(
|
||||||
|
|||||||
@@ -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__])
|
||||||
|
|||||||
Reference in New Issue
Block a user