pipecatcloud 0.2.15__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.
Files changed (56) hide show
  1. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/CHANGELOG.md +7 -0
  2. {pipecatcloud-0.2.15/src/pipecatcloud.egg-info → pipecatcloud-0.2.16}/PKG-INFO +1 -1
  3. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/deploy.py +51 -30
  4. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16/src/pipecatcloud.egg-info}/PKG-INFO +1 -1
  5. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/.github/workflows/publish-pypi.yml +0 -0
  6. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/.github/workflows/publish-test.yml +0 -0
  7. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/.github/workflows/tests.yml +0 -0
  8. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/.gitignore +0 -0
  9. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/LICENSE +0 -0
  10. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/README.md +0 -0
  11. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/pipecat-cloud.png +0 -0
  12. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/pyproject.toml +0 -0
  13. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/pytest.ini +0 -0
  14. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/setup.cfg +0 -0
  15. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/__init__.py +0 -0
  16. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/__main__.py +0 -0
  17. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/__version__.py +0 -0
  18. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/__init__.py +0 -0
  19. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/async_utils.py +0 -0
  20. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/auth_utils.py +0 -0
  21. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/console_utils.py +0 -0
  22. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/deploy_utils.py +0 -0
  23. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/_utils/regions.py +0 -0
  24. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/agent.py +0 -0
  25. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/api.py +0 -0
  26. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/__init__.py +0 -0
  27. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/api.py +0 -0
  28. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/__init__.py +0 -0
  29. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/agent.py +0 -0
  30. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/auth.py +0 -0
  31. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/docker.py +0 -0
  32. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/organizations.py +0 -0
  33. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/regions.py +0 -0
  34. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/commands/secrets.py +0 -0
  35. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/config.py +0 -0
  36. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/cli/entry_point.py +0 -0
  37. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/config.py +0 -0
  38. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/constants.py +0 -0
  39. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/exception.py +0 -0
  40. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/py.typed +0 -0
  41. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/session.py +0 -0
  42. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud/smallwebrtc/session_manager.py +0 -0
  43. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud.egg-info/SOURCES.txt +0 -0
  44. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud.egg-info/dependency_links.txt +0 -0
  45. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud.egg-info/entry_points.txt +0 -0
  46. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud.egg-info/requires.txt +0 -0
  47. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/src/pipecatcloud.egg-info/top_level.txt +0 -0
  48. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/tests/__init__.py +0 -0
  49. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/tests/test_agent_sessions.py +0 -0
  50. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/tests/test_agent_stop.py +0 -0
  51. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/tests/test_api_client.py +0 -0
  52. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/tests/test_docker_commands.py +0 -0
  53. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/tests/test_krisp_viva.py +0 -0
  54. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/tests/test_managed_keys.py +0 -0
  55. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/tests/test_regions.py +0 -0
  56. {pipecatcloud-0.2.15 → pipecatcloud-0.2.16}/uv.lock +0 -0
@@ -5,6 +5,13 @@ 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
+
8
15
  ## [0.2.15] - 2025-12-09
9
16
 
10
17
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pipecatcloud
3
- Version: 0.2.15
3
+ Version: 0.2.16
4
4
  Summary: Cloud hosting for Pipecat AI applications
5
5
  License: BSD 2-Clause License
6
6
  Project-URL: Website, https://docs.pipecat.daily.co/
@@ -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(console.status("[dim]Preparing deployment...", spinner="dots"), transient=True) as 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
- if agent_status.get("activeDeploymentReady", False):
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 += f"[bold yellow]`{PIPECAT_CLI_NAME} organizations keys create`[/bold yellow]"
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("--enable-krisp is deprecated, use --krisp-viva-audio-filter instead for the latest Krisp VIVA models.")
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 min_agents is not None
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 = f"[green]{props['defaultRegion']}[/green] [dim](organization default)[/dim]"
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
- (f"[bold white]Secret set:[/bold white] {'[dim]None[/dim]' if not partial_config.secret_set else '[green] '+ partial_config.secret_set + '[/green]'}"),
446
- (f"[bold white]Image pull secret:[/bold white] {'[dim]None[/dim]' if not partial_config.image_credentials else '[green]' + partial_config.image_credentials + '[/green]'}"),
447
- (f"[bold white]Agent profile:[/bold white] {'[dim]None[/dim]' if not partial_config.agent_profile else '[green]' + partial_config.agent_profile + '[/green]'}"),
448
- (f"[bold white]Krisp (deprecated):[/bold white] {'[dim]Disabled[/dim]' if not partial_config.enable_krisp else '[green]Enabled[/green]'}"),
449
- (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]'}"),
450
- (f"[bold white]Managed Keys:[/bold white] {'[dim]Disabled[/dim]' if not partial_config.enable_managed_keys else '[green]Enabled[/green]'}"),
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
- )] if partial_config.scaling.min_agents else [
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(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pipecatcloud
3
- Version: 0.2.15
3
+ Version: 0.2.16
4
4
  Summary: Cloud hosting for Pipecat AI applications
5
5
  License: BSD 2-Clause License
6
6
  Project-URL: Website, https://docs.pipecat.daily.co/
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes