pipecatcloud 0.2.14__tar.gz → 0.2.16__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/CHANGELOG.md +13 -0
- {pipecatcloud-0.2.14/src/pipecatcloud.egg-info → pipecatcloud-0.2.16}/PKG-INFO +1 -1
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/auth.py +1 -1
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/deploy.py +51 -30
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16/src/pipecatcloud.egg-info}/PKG-INFO +1 -1
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/.github/workflows/publish-pypi.yml +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/.github/workflows/publish-test.yml +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/.github/workflows/tests.yml +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/.gitignore +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/LICENSE +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/README.md +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/pipecat-cloud.png +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/pyproject.toml +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/pytest.ini +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/setup.cfg +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/__init__.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/__main__.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/__version__.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/__init__.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/async_utils.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/auth_utils.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/console_utils.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/deploy_utils.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/regions.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/agent.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/api.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/__init__.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/api.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/__init__.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/agent.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/docker.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/organizations.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/regions.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/secrets.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/config.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/entry_point.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/config.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/constants.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/exception.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/py.typed +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/session.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud/smallwebrtc/session_manager.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud.egg-info/SOURCES.txt +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud.egg-info/dependency_links.txt +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud.egg-info/entry_points.txt +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud.egg-info/requires.txt +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/src/pipecatcloud.egg-info/top_level.txt +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/tests/__init__.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/tests/test_agent_sessions.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/tests/test_agent_stop.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/tests/test_api_client.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/tests/test_docker_commands.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/tests/test_krisp_viva.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/tests/test_managed_keys.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/tests/test_regions.py +0 -0
- {pipecatcloud-0.2.14 → pipecatcloud-0.2.16}/uv.lock +0 -0
|
@@ -5,6 +5,19 @@ All notable changes to **Pipecat Cloud** will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.16] - 2025-12-18
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Fixed an issue where deployments would appear to be ready right away. Now,
|
|
13
|
+
the deployment readiness matches that of the service.
|
|
14
|
+
|
|
15
|
+
## [0.2.15] - 2025-12-09
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Additional update for `auth login` authentication codes.
|
|
20
|
+
|
|
8
21
|
## [0.2.14] - 2025-12-09
|
|
9
22
|
|
|
10
23
|
### Added
|
|
@@ -44,7 +44,7 @@ class _AuthFlow:
|
|
|
44
44
|
async with aiohttp.ClientSession() as session:
|
|
45
45
|
url = f"{API.construct_api_url('login_path')}"
|
|
46
46
|
logger.debug(url)
|
|
47
|
-
async with session.post(url) as resp:
|
|
47
|
+
async with session.post(url, params={"use_code": "true"}) as resp:
|
|
48
48
|
if resp.status != 200:
|
|
49
49
|
raise Exception(f"Failed to start auth flow: {resp.status}")
|
|
50
50
|
data = await resp.json()
|
|
@@ -25,10 +25,10 @@ from pipecatcloud._utils.deploy_utils import (
|
|
|
25
25
|
with_deploy_config,
|
|
26
26
|
)
|
|
27
27
|
from pipecatcloud._utils.regions import get_region_codes, validate_region
|
|
28
|
-
from pipecatcloud.constants import KRISP_VIVA_MODELS, Region
|
|
29
28
|
from pipecatcloud.cli import PIPECAT_CLI_NAME
|
|
30
29
|
from pipecatcloud.cli.api import API
|
|
31
30
|
from pipecatcloud.cli.config import config
|
|
31
|
+
from pipecatcloud.constants import KRISP_VIVA_MODELS, Region
|
|
32
32
|
|
|
33
33
|
MAX_ALIVE_CHECKS = 18
|
|
34
34
|
ALIVE_CHECK_SLEEP = 5
|
|
@@ -38,7 +38,6 @@ ALIVE_CHECK_SLEEP = 5
|
|
|
38
38
|
|
|
39
39
|
async def _deploy(params: DeployConfigParams, org, force: bool = False):
|
|
40
40
|
existing_agent = False
|
|
41
|
-
deployed_region = None # Will be captured from API response
|
|
42
41
|
|
|
43
42
|
# Check for an existing deployment with this agent name
|
|
44
43
|
with Live(
|
|
@@ -64,7 +63,9 @@ async def _deploy(params: DeployConfigParams, org, force: bool = False):
|
|
|
64
63
|
return typer.Exit()
|
|
65
64
|
|
|
66
65
|
# Start the deployment process
|
|
67
|
-
with Live(
|
|
66
|
+
with Live(
|
|
67
|
+
console.status("[dim]Preparing deployment...", spinner="dots"), transient=True
|
|
68
|
+
) as live:
|
|
68
69
|
"""
|
|
69
70
|
# 1. Check that provided secret set exists
|
|
70
71
|
"""
|
|
@@ -141,13 +142,12 @@ async def _deploy(params: DeployConfigParams, org, force: bool = False):
|
|
|
141
142
|
checks_performed = 0
|
|
142
143
|
|
|
143
144
|
console.print(
|
|
144
|
-
f"[bold cyan]{'Updating' if existing_agent else 'Pushing'}[/bold cyan] deployment for agent '{params.agent_name}'"
|
|
145
|
+
f"[bold cyan]{'Updating' if existing_agent else 'Pushing'}[/bold cyan] deployment for agent '{params.agent_name}'"
|
|
146
|
+
)
|
|
145
147
|
|
|
146
148
|
# Create a simple spinner for the polling phase
|
|
147
149
|
deployment_status_message = "[dim]Waiting for deployment to become ready...[/dim]"
|
|
148
|
-
with console.status(
|
|
149
|
-
deployment_status_message, spinner="bouncingBar"
|
|
150
|
-
) as status:
|
|
150
|
+
with console.status(deployment_status_message, spinner="bouncingBar") as status:
|
|
151
151
|
try:
|
|
152
152
|
while checks_performed < MAX_ALIVE_CHECKS:
|
|
153
153
|
logger.debug("Polling for deployment status")
|
|
@@ -187,7 +187,11 @@ async def _deploy(params: DeployConfigParams, org, force: bool = False):
|
|
|
187
187
|
# @TODO - Implement this
|
|
188
188
|
|
|
189
189
|
# Check if deployment is ready
|
|
190
|
-
|
|
190
|
+
# Both the service AND the active deployment must be ready
|
|
191
|
+
service_ready = agent_status.get("ready", False)
|
|
192
|
+
deployment_ready = agent_status.get("activeDeploymentReady", False)
|
|
193
|
+
|
|
194
|
+
if service_ready and deployment_ready:
|
|
191
195
|
is_ready = True
|
|
192
196
|
break
|
|
193
197
|
|
|
@@ -207,7 +211,9 @@ async def _deploy(params: DeployConfigParams, org, force: bool = False):
|
|
|
207
211
|
extra_message = ""
|
|
208
212
|
if not public_api_key:
|
|
209
213
|
extra_message = "\n\n[yellow]Note: if you have not already created a public API key (required to start a session), you can do so by running:\n[/yellow]"
|
|
210
|
-
extra_message +=
|
|
214
|
+
extra_message += (
|
|
215
|
+
f"[bold yellow]`{PIPECAT_CLI_NAME} organizations keys create`[/bold yellow]"
|
|
216
|
+
)
|
|
211
217
|
|
|
212
218
|
console.success(
|
|
213
219
|
f"Agent deployment [bold]'{params.agent_name}'[/bold] is ready\n\n"
|
|
@@ -219,7 +225,8 @@ async def _deploy(params: DeployConfigParams, org, force: bool = False):
|
|
|
219
225
|
else:
|
|
220
226
|
console.error(
|
|
221
227
|
f"Deployment did not enter ready state within {MAX_ALIVE_CHECKS * ALIVE_CHECK_SLEEP} seconds. "
|
|
222
|
-
f"Please check logs with `{PIPECAT_CLI_NAME} agent logs {params.agent_name}`"
|
|
228
|
+
f"Please check logs with `{PIPECAT_CLI_NAME} agent logs {params.agent_name}`"
|
|
229
|
+
)
|
|
223
230
|
|
|
224
231
|
return typer.Exit()
|
|
225
232
|
|
|
@@ -276,7 +283,6 @@ def create_deploy_command(app: typer.Typer):
|
|
|
276
283
|
help="Organization to deploy to",
|
|
277
284
|
rich_help_panel="Deployment Configuration",
|
|
278
285
|
),
|
|
279
|
-
|
|
280
286
|
krisp: bool = typer.Option(
|
|
281
287
|
False,
|
|
282
288
|
"--enable-krisp",
|
|
@@ -342,7 +348,6 @@ def create_deploy_command(app: typer.Typer):
|
|
|
342
348
|
max=50,
|
|
343
349
|
),
|
|
344
350
|
):
|
|
345
|
-
|
|
346
351
|
# Handle @deprecated options
|
|
347
352
|
if min_instances is not None:
|
|
348
353
|
logger.warning("min_instances is deprecated, use min_agents instead")
|
|
@@ -353,7 +358,9 @@ def create_deploy_command(app: typer.Typer):
|
|
|
353
358
|
max_agents = max_instances
|
|
354
359
|
|
|
355
360
|
if krisp:
|
|
356
|
-
logger.warning(
|
|
361
|
+
logger.warning(
|
|
362
|
+
"--enable-krisp is deprecated, use --krisp-viva-audio-filter instead for the latest Krisp VIVA models."
|
|
363
|
+
)
|
|
357
364
|
|
|
358
365
|
org = organization or config.get("org")
|
|
359
366
|
|
|
@@ -371,12 +378,8 @@ def create_deploy_command(app: typer.Typer):
|
|
|
371
378
|
partial_config.image_credentials = credentials or partial_config.image_credentials
|
|
372
379
|
partial_config.secret_set = secret_set or partial_config.secret_set
|
|
373
380
|
partial_config.scaling = ScalingParams(
|
|
374
|
-
min_agents=min_agents
|
|
375
|
-
if
|
|
376
|
-
else partial_config.scaling.min_agents,
|
|
377
|
-
max_agents=max_agents
|
|
378
|
-
if max_agents is not None
|
|
379
|
-
else partial_config.scaling.max_agents,
|
|
381
|
+
min_agents=min_agents if min_agents is not None else partial_config.scaling.min_agents,
|
|
382
|
+
max_agents=max_agents if max_agents is not None else partial_config.scaling.max_agents,
|
|
380
383
|
)
|
|
381
384
|
partial_config.enable_krisp = krisp or partial_config.enable_krisp
|
|
382
385
|
partial_config.enable_managed_keys = managed_keys or partial_config.enable_managed_keys
|
|
@@ -435,32 +438,50 @@ def create_deploy_command(app: typer.Typer):
|
|
|
435
438
|
props, error = await API.properties(org)
|
|
436
439
|
if error:
|
|
437
440
|
return typer.Exit()
|
|
438
|
-
region_display =
|
|
441
|
+
region_display = (
|
|
442
|
+
f"[green]{props['defaultRegion']}[/green] [dim](organization default)[/dim]"
|
|
443
|
+
)
|
|
439
444
|
|
|
440
445
|
content = Group(
|
|
441
446
|
(f"[bold white]Agent name:[/bold white] [green]{partial_config.agent_name}[/green]"),
|
|
442
447
|
(f"[bold white]Image:[/bold white] [green]{partial_config.image}[/green]"),
|
|
443
448
|
(f"[bold white]Organization:[/bold white] [green]{org}[/green]"),
|
|
444
449
|
(f"[bold white]Region:[/bold white] {region_display}"),
|
|
445
|
-
(
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
(
|
|
449
|
-
|
|
450
|
-
|
|
450
|
+
(
|
|
451
|
+
f"[bold white]Secret set:[/bold white] {'[dim]None[/dim]' if not partial_config.secret_set else '[green] ' + partial_config.secret_set + '[/green]'}"
|
|
452
|
+
),
|
|
453
|
+
(
|
|
454
|
+
f"[bold white]Image pull secret:[/bold white] {'[dim]None[/dim]' if not partial_config.image_credentials else '[green]' + partial_config.image_credentials + '[/green]'}"
|
|
455
|
+
),
|
|
456
|
+
(
|
|
457
|
+
f"[bold white]Agent profile:[/bold white] {'[dim]None[/dim]' if not partial_config.agent_profile else '[green]' + partial_config.agent_profile + '[/green]'}"
|
|
458
|
+
),
|
|
459
|
+
(
|
|
460
|
+
f"[bold white]Krisp (deprecated):[/bold white] {'[dim]Disabled[/dim]' if not partial_config.enable_krisp else '[green]Enabled[/green]'}"
|
|
461
|
+
),
|
|
462
|
+
(
|
|
463
|
+
f"[bold white]Krisp VIVA:[/bold white] {'[dim]Disabled[/dim]' if not partial_config.krisp_viva.audio_filter else '[green]Enabled (' + partial_config.krisp_viva.audio_filter + ')[/green]'}"
|
|
464
|
+
),
|
|
465
|
+
(
|
|
466
|
+
f"[bold white]Managed Keys:[/bold white] {'[dim]Disabled[/dim]' if not partial_config.enable_managed_keys else '[green]Enabled[/green]'}"
|
|
467
|
+
),
|
|
451
468
|
"\n[dim]Scaling configuration:[/dim]",
|
|
452
469
|
table,
|
|
453
|
-
*
|
|
454
|
-
(
|
|
470
|
+
*(
|
|
455
471
|
[
|
|
456
472
|
Text(
|
|
457
473
|
f"Note: Usage costs will apply for {partial_config.scaling.min_agents} reserved agent(s). Please see: https://www.daily.co/pricing/pipecat-cloud/",
|
|
458
474
|
style="red",
|
|
459
|
-
)
|
|
475
|
+
)
|
|
476
|
+
]
|
|
477
|
+
if partial_config.scaling.min_agents
|
|
478
|
+
else [
|
|
460
479
|
Text(
|
|
461
480
|
"Note: Deploying with 0 minimum agents may result in cold starts",
|
|
462
481
|
style="red",
|
|
463
|
-
)
|
|
482
|
+
)
|
|
483
|
+
]
|
|
484
|
+
),
|
|
464
485
|
)
|
|
465
486
|
|
|
466
487
|
console.print(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|