Wrap LemonSlice session creation params in LemonSliceNewSessionRequest

This commit is contained in:
filipi87
2026-03-02 19:15:18 -03:00
parent daf14f5065
commit f07e55a4ed
2 changed files with 46 additions and 51 deletions

View File

@@ -25,7 +25,11 @@ from pipecat.processors.aggregators.llm_response_universal import (
from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.deepgram.stt import DeepgramSTTService
from pipecat.services.elevenlabs.tts import ElevenLabsTTSService from pipecat.services.elevenlabs.tts import ElevenLabsTTSService
from pipecat.services.groq.llm import GroqLLMService from pipecat.services.groq.llm import GroqLLMService
from pipecat.transports.lemonslice.transport import LemonSliceParams, LemonSliceTransport from pipecat.transports.lemonslice.transport import (
LemonSliceNewSessionRequest,
LemonSliceParams,
LemonSliceTransport,
)
load_dotenv(override=True) load_dotenv(override=True)
@@ -38,8 +42,10 @@ async def main():
transport = LemonSliceTransport( transport = LemonSliceTransport(
bot_name="Pipecat", bot_name="Pipecat",
api_key=os.getenv("LEMONSLICE_API_KEY"), api_key=os.getenv("LEMONSLICE_API_KEY"),
agent_id=os.getenv("LEMONSLICE_AGENT_ID"),
session=session, session=session,
session_request=LemonSliceNewSessionRequest(
agent_id=os.getenv("LEMONSLICE_AGENT_ID"),
),
params=LemonSliceParams( params=LemonSliceParams(
audio_in_enabled=True, audio_in_enabled=True,
audio_out_enabled=True, audio_out_enabled=True,

View File

@@ -43,6 +43,29 @@ from pipecat.transports.daily.transport import (
from pipecat.transports.lemonslice.api import LemonSliceApi from pipecat.transports.lemonslice.api import LemonSliceApi
class LemonSliceNewSessionRequest(BaseModel):
"""Request model for creating a new LemonSlice session.
Parameters:
agent_image_url: URL to an agent image. Provide either agent_id or agent_image_url.
agent_id: ID of a LemonSlice agent. Provide either agent_id or agent_image_url.
agent_prompt: A high-level system prompt that subtly influences the avatar's movements,
expressions, and emotional demeanor.
idle_timeout: Idle timeout in seconds.
daily_room_url: Daily room URL to use for the session.
daily_token: Daily token for authenticating with the room.
lemonslice_properties: Additional properties to pass to the session.
"""
agent_image_url: Optional[str] = None
agent_id: Optional[str] = None
agent_prompt: Optional[str] = None
idle_timeout: Optional[int] = None
daily_room_url: Optional[str] = None
daily_token: Optional[str] = None
lemonslice_properties: Optional[dict] = None
class LemonSliceCallbacks(BaseModel): class LemonSliceCallbacks(BaseModel):
"""Callback handlers for LemonSlice events. """Callback handlers for LemonSlice events.
@@ -87,13 +110,7 @@ class LemonSliceTransportClient:
params: LemonSliceParams = LemonSliceParams(), params: LemonSliceParams = LemonSliceParams(),
callbacks: LemonSliceCallbacks, callbacks: LemonSliceCallbacks,
api_key: str, api_key: str,
agent_image_url: Optional[str] = None, session_request: Optional[LemonSliceNewSessionRequest] = None,
agent_id: Optional[str] = None,
agent_prompt: Optional[str] = None,
idle_timeout: Optional[int] = None,
daily_room_url: Optional[str] = None,
daily_token: Optional[str] = None,
lemonslice_properties: Optional[dict] = None,
session: aiohttp.ClientSession, session: aiohttp.ClientSession,
) -> None: ) -> None:
"""Initialize the LemonSlice transport client. """Initialize the LemonSlice transport client.
@@ -103,24 +120,13 @@ class LemonSliceTransportClient:
params: Optional parameters for LemonSlice operation. params: Optional parameters for LemonSlice operation.
callbacks: Callback handlers for LemonSlice-related events. callbacks: Callback handlers for LemonSlice-related events.
api_key: API key for authenticating with LemonSlice API. api_key: API key for authenticating with LemonSlice API.
agent_image_url: Optional URL to an agent image. session_request: Optional session creation parameters. If not provided, a default
agent_id: Optional ID of LemonSlice agent. agent will be used.
agent_prompt: Optional system prompt for the avatar.
idle_timeout: Optional idle timeout in seconds.
daily_room_url: Optional Daily room URL to add the LemonSlice avatar to.
daily_token: Optional Daily token for authenticating with the room.
lemonslice_properties: Optional additional properties for the session.
session: The aiohttp session for making async HTTP requests. session: The aiohttp session for making async HTTP requests.
""" """
self._bot_name = bot_name self._bot_name = bot_name
self._api = LemonSliceApi(api_key, session) self._api = LemonSliceApi(api_key, session)
self._agent_id = agent_id self._session_request = session_request or LemonSliceNewSessionRequest()
self._agent_image_url = agent_image_url
self._agent_prompt = agent_prompt
self._idle_timeout = idle_timeout
self._daily_room_url = daily_room_url
self._daily_token = daily_token
self._lemonslice_properties = lemonslice_properties
self._session_id: Optional[str] = None self._session_id: Optional[str] = None
self._control_url: Optional[str] = None self._control_url: Optional[str] = None
self._daily_transport_client: Optional[DailyTransportClient] = None self._daily_transport_client: Optional[DailyTransportClient] = None
@@ -130,13 +136,13 @@ class LemonSliceTransportClient:
async def _initialize(self) -> str: async def _initialize(self) -> str:
"""Initialize the conversation and return the room URL.""" """Initialize the conversation and return the room URL."""
response = await self._api.create_session( response = await self._api.create_session(
agent_image_url=self._agent_image_url, agent_image_url=self._session_request.agent_image_url,
agent_id=self._agent_id, agent_id=self._session_request.agent_id,
agent_prompt=self._agent_prompt, agent_prompt=self._session_request.agent_prompt,
idle_timeout=self._idle_timeout, idle_timeout=self._session_request.idle_timeout,
daily_room_url=self._daily_room_url, daily_room_url=self._session_request.daily_room_url,
daily_token=self._daily_token, daily_token=self._session_request.daily_token,
properties=self._lemonslice_properties, properties=self._session_request.lemonslice_properties,
) )
self._session_id = response["session_id"] self._session_id = response["session_id"]
self._control_url = response["control_url"] self._control_url = response["control_url"]
@@ -675,16 +681,10 @@ class LemonSliceTransport(BaseTransport):
bot_name: str, bot_name: str,
session: aiohttp.ClientSession, session: aiohttp.ClientSession,
api_key: str, api_key: str,
agent_image_url: Optional[str] = None, session_request: Optional[LemonSliceNewSessionRequest] = None,
agent_id: Optional[str] = None,
agent_prompt: Optional[str] = None,
idle_timeout: Optional[int] = None,
params: LemonSliceParams = LemonSliceParams(), params: LemonSliceParams = LemonSliceParams(),
input_name: Optional[str] = None, input_name: Optional[str] = None,
output_name: Optional[str] = None, output_name: Optional[str] = None,
daily_room_url: Optional[str] = None,
daily_token: Optional[str] = None,
lemonslice_properties: Optional[dict] = None,
): ):
"""Initialize the LemonSlice transport. """Initialize the LemonSlice transport.
@@ -692,16 +692,11 @@ class LemonSliceTransport(BaseTransport):
bot_name: The name of the Pipecat bot. bot_name: The name of the Pipecat bot.
session: aiohttp session used for async HTTP requests. session: aiohttp session used for async HTTP requests.
api_key: LemonSlice API key for authentication. api_key: LemonSlice API key for authentication.
agent_image_url: Optional URL to an agent image. session_request: Optional session creation parameters. If not provided, a default
agent_id: Optional ID of the LemonSlice agent. agent will be used.
agent_prompt: Optional system prompt for the avatar.
idle_timeout: Optional idle timeout in seconds.
params: Optional LemonSlice-specific configuration parameters. params: Optional LemonSlice-specific configuration parameters.
input_name: Optional name for the input transport. input_name: Optional name for the input transport.
output_name: Optional name for the output transport. output_name: Optional name for the output transport.
daily_room_url: Optional Daily room URL to add the LemonSlice avatar to.
daily_token: Optional Daily token for authenticating with the room.
lemonslice_properties: Optional additional properties for the session.
""" """
super().__init__(input_name=input_name, output_name=output_name) super().__init__(input_name=input_name, output_name=output_name)
self._params = params self._params = params
@@ -714,13 +709,7 @@ class LemonSliceTransport(BaseTransport):
bot_name=bot_name, bot_name=bot_name,
callbacks=callbacks, callbacks=callbacks,
api_key=api_key, api_key=api_key,
agent_image_url=agent_image_url, session_request=session_request,
agent_id=agent_id,
agent_prompt=agent_prompt,
idle_timeout=idle_timeout,
daily_room_url=daily_room_url,
daily_token=daily_token,
lemonslice_properties=lemonslice_properties,
session=session, session=session,
params=params, params=params,
) )