pipecatcloud 0.2.3__tar.gz → 0.2.5__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.5/.github/workflows/publish-pypi.yml +78 -0
- pipecatcloud-0.2.5/.github/workflows/publish-test.yml +51 -0
- pipecatcloud-0.2.5/.github/workflows/tests.yml +41 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/CHANGELOG.md +30 -0
- {pipecatcloud-0.2.3/src/pipecatcloud.egg-info → pipecatcloud-0.2.5}/PKG-INFO +2 -2
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/README.md +1 -1
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/pyproject.toml +18 -1
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/__init__.py +4 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/_utils/deploy_utils.py +15 -3
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/agent.py +26 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/api.py +1 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/commands/agent.py +13 -1
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/commands/deploy.py +8 -0
- pipecatcloud-0.2.5/src/pipecatcloud/cli/commands/docker.py +344 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/commands/init.py +8 -8
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/entry_point.py +2 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/config.py +1 -1
- pipecatcloud-0.2.5/src/pipecatcloud/smallwebrtc/session_manager.py +87 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5/src/pipecatcloud.egg-info}/PKG-INFO +2 -2
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud.egg-info/SOURCES.txt +6 -3
- pipecatcloud-0.2.5/tests/test_docker_commands.py +169 -0
- pipecatcloud-0.2.5/tests/test_managed_keys.py +437 -0
- pipecatcloud-0.2.3/.github/workflows/publish-pypi.yml +0 -66
- pipecatcloud-0.2.3/.github/workflows/publish-test.yml +0 -67
- pipecatcloud-0.2.3/.github/workflows/python-publish.yml +0 -40
- pipecatcloud-0.2.3/dev-requirements.txt +0 -8
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/.gitignore +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/LICENSE +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/pipecat-cloud.png +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/pytest.ini +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/setup.cfg +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/__main__.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/__version__.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/_utils/__init__.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/_utils/async_utils.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/_utils/auth_utils.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/_utils/console_utils.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/_utils/local_runner.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/__init__.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/api.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/commands/__init__.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/commands/auth.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/commands/organizations.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/commands/run.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/commands/secrets.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/cli/config.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/exception.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/py.typed +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud/session.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud.egg-info/dependency_links.txt +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud.egg-info/entry_points.txt +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud.egg-info/requires.txt +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/src/pipecatcloud.egg-info/top_level.txt +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/tests/__init__.py +0 -0
- {pipecatcloud-0.2.3 → pipecatcloud-0.2.5}/tests/test_agent_sessions.py +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
gitref:
|
|
7
|
+
type: string
|
|
8
|
+
description: 'what git tag to build (e.g. v0.0.74)'
|
|
9
|
+
required: true
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
name: 'Build and upload wheels'
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout repo
|
|
17
|
+
uses: actions/checkout@v4
|
|
18
|
+
with:
|
|
19
|
+
ref: ${{ github.event.inputs.gitref }}
|
|
20
|
+
|
|
21
|
+
- name: Install uv
|
|
22
|
+
uses: astral-sh/setup-uv@v3
|
|
23
|
+
with:
|
|
24
|
+
version: 'latest'
|
|
25
|
+
- name: Set up Python
|
|
26
|
+
run: uv python install 3.12
|
|
27
|
+
- name: Install development dependencies
|
|
28
|
+
run: uv sync --group dev
|
|
29
|
+
- name: Build project
|
|
30
|
+
run: uv build
|
|
31
|
+
- name: Upload wheels
|
|
32
|
+
uses: actions/upload-artifact@v4
|
|
33
|
+
with:
|
|
34
|
+
name: wheels
|
|
35
|
+
path: ./dist
|
|
36
|
+
|
|
37
|
+
publish-to-pypi:
|
|
38
|
+
name: 'Publish to PyPI'
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
needs: [build]
|
|
41
|
+
environment:
|
|
42
|
+
name: pypi
|
|
43
|
+
url: https://pypi.org/p/pipecatcloud
|
|
44
|
+
permissions:
|
|
45
|
+
id-token: write
|
|
46
|
+
steps:
|
|
47
|
+
- name: Download wheels
|
|
48
|
+
uses: actions/download-artifact@v4
|
|
49
|
+
with:
|
|
50
|
+
name: wheels
|
|
51
|
+
path: ./dist
|
|
52
|
+
- name: Publish to PyPI
|
|
53
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
54
|
+
with:
|
|
55
|
+
verbose: true
|
|
56
|
+
print-hash: true
|
|
57
|
+
|
|
58
|
+
publish-to-test-pypi:
|
|
59
|
+
name: 'Publish to Test PyPI'
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
needs: [build]
|
|
62
|
+
environment:
|
|
63
|
+
name: testpypi
|
|
64
|
+
url: https://test.pypi.org/p/pipecatcloud
|
|
65
|
+
permissions:
|
|
66
|
+
id-token: write
|
|
67
|
+
steps:
|
|
68
|
+
- name: Download wheels
|
|
69
|
+
uses: actions/download-artifact@v4
|
|
70
|
+
with:
|
|
71
|
+
name: wheels
|
|
72
|
+
path: ./dist
|
|
73
|
+
- name: Publish to Test PyPI
|
|
74
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
75
|
+
with:
|
|
76
|
+
verbose: true
|
|
77
|
+
print-hash: true
|
|
78
|
+
repository-url: https://test.pypi.org/legacy/
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: Publish to TEST PyPI
|
|
2
|
+
|
|
3
|
+
on: workflow_dispatch
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
build:
|
|
7
|
+
name: 'Build and upload wheels'
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
steps:
|
|
10
|
+
- name: Checkout repo
|
|
11
|
+
uses: actions/checkout@v4
|
|
12
|
+
with:
|
|
13
|
+
fetch-tags: true
|
|
14
|
+
fetch-depth: 100
|
|
15
|
+
- name: Install uv
|
|
16
|
+
uses: astral-sh/setup-uv@v3
|
|
17
|
+
with:
|
|
18
|
+
version: 'latest'
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
run: uv python install 3.12
|
|
21
|
+
- name: Install development dependencies
|
|
22
|
+
run: uv sync --group dev
|
|
23
|
+
- name: Build project
|
|
24
|
+
run: uv build
|
|
25
|
+
- name: Upload wheels
|
|
26
|
+
uses: actions/upload-artifact@v4
|
|
27
|
+
with:
|
|
28
|
+
name: wheels
|
|
29
|
+
path: ./dist
|
|
30
|
+
|
|
31
|
+
publish-to-test-pypi:
|
|
32
|
+
name: 'Publish to Test PyPI'
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
needs: [build]
|
|
35
|
+
environment:
|
|
36
|
+
name: testpypi
|
|
37
|
+
url: https://test.pypi.org/p/pipecatcloud
|
|
38
|
+
permissions:
|
|
39
|
+
id-token: write
|
|
40
|
+
steps:
|
|
41
|
+
- name: Download wheels
|
|
42
|
+
uses: actions/download-artifact@v4
|
|
43
|
+
with:
|
|
44
|
+
name: wheels
|
|
45
|
+
path: ./dist
|
|
46
|
+
- name: Publish to Test PyPI
|
|
47
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
48
|
+
with:
|
|
49
|
+
verbose: true
|
|
50
|
+
print-hash: true
|
|
51
|
+
repository-url: https://test.pypi.org/legacy/
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- main
|
|
8
|
+
pull_request:
|
|
9
|
+
branches:
|
|
10
|
+
- '**'
|
|
11
|
+
|
|
12
|
+
concurrency:
|
|
13
|
+
group: build-test-${{ github.event.pull_request.number || github.ref }}
|
|
14
|
+
cancel-in-progress: true
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
test:
|
|
18
|
+
name: 'Unit Tests'
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout repo
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
|
|
24
|
+
- name: Install uv
|
|
25
|
+
uses: astral-sh/setup-uv@v3
|
|
26
|
+
with:
|
|
27
|
+
version: 'latest'
|
|
28
|
+
|
|
29
|
+
- name: Set up Python
|
|
30
|
+
run: uv python install 3.12
|
|
31
|
+
|
|
32
|
+
- name: Install dependencies
|
|
33
|
+
run: |
|
|
34
|
+
uv sync --group dev
|
|
35
|
+
|
|
36
|
+
- name: Test Docker commands
|
|
37
|
+
run: |
|
|
38
|
+
uv run pytest tests/test_docker_commands.py -v
|
|
39
|
+
|
|
40
|
+
# Note: test_agent_sessions.py is excluded because it requires complex
|
|
41
|
+
# API mocking for CI. These tests can be run locally with proper auth.
|
|
@@ -5,6 +5,36 @@ 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.5] - 2025-10-02
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Added a `body` parameter to the fallback type, `WebsocketRunnerArguments`.
|
|
13
|
+
|
|
14
|
+
- Added `SmallWebRTCSessionManager`, a Session Manager to simplify bot creation
|
|
15
|
+
in Pipecat Cloud using `SmallWebRTCTransport`.
|
|
16
|
+
- Added a `SmallWebRTCSessionArguments` dataclass.
|
|
17
|
+
|
|
18
|
+
- `deploy` command now accepts a `--enable-managed-keys` flag which enables
|
|
19
|
+
properly configured agents to use Daily's API keys for supported upstream
|
|
20
|
+
services. This can also be enabled via `pcc-deploy.toml` by adding the
|
|
21
|
+
`enable_managed_keys` attribute and a boolean value.
|
|
22
|
+
|
|
23
|
+
- `agent status` now reflects the state of the managed keys feature.
|
|
24
|
+
|
|
25
|
+
## [0.2.4] - 2025-08-26
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- Added `docker build-push` command for building, tagging, and pushing Docker
|
|
30
|
+
images. Automatically parses registry information from the `image` field in
|
|
31
|
+
`pcc-deploy.toml` and supports both Docker Hub and custom registries. Includes
|
|
32
|
+
real-time build output and helpful authentication error hints.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- `pcc init` now points to https://github.com/pipecat-ai/pipecat-quickstart.
|
|
37
|
+
|
|
8
38
|
## [0.2.3] - 2025-08-19
|
|
9
39
|
|
|
10
40
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pipecatcloud
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
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/
|
|
@@ -63,7 +63,7 @@ pcc auth login
|
|
|
63
63
|
|
|
64
64
|
2. Login to your account `pcc auth login`
|
|
65
65
|
|
|
66
|
-
3. (Optional): Clone the
|
|
66
|
+
3. (Optional): Clone the quickstart repo [here](https://github.com/pipecat-ai/pipecat-quickstart)
|
|
67
67
|
|
|
68
68
|
4. Build your agent `docker build --platform linux/arm64 -t your-agent-name .`
|
|
69
69
|
|
|
@@ -40,7 +40,7 @@ pcc auth login
|
|
|
40
40
|
|
|
41
41
|
2. Login to your account `pcc auth login`
|
|
42
42
|
|
|
43
|
-
3. (Optional): Clone the
|
|
43
|
+
3. (Optional): Clone the quickstart repo [here](https://github.com/pipecat-ai/pipecat-quickstart)
|
|
44
44
|
|
|
45
45
|
4. Build your agent `docker build --platform linux/arm64 -t your-agent-name .`
|
|
46
46
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pipecatcloud"
|
|
7
|
-
|
|
7
|
+
dynamic = ["version"]
|
|
8
8
|
requires-python = ">=3.10"
|
|
9
9
|
description = "Cloud hosting for Pipecat AI applications"
|
|
10
10
|
license = { text = "BSD 2-Clause License" }
|
|
@@ -25,6 +25,19 @@ dependencies = [
|
|
|
25
25
|
[project.optional-dependencies]
|
|
26
26
|
pipecat = ["pipecat-ai>=0.0.79"]
|
|
27
27
|
|
|
28
|
+
[dependency-groups]
|
|
29
|
+
dev = [
|
|
30
|
+
"build~=1.2.2",
|
|
31
|
+
"grpcio-tools~=1.67.1",
|
|
32
|
+
"pre-commit~=4.2.0",
|
|
33
|
+
"pyright~=1.1.402",
|
|
34
|
+
"pytest~=8.4.1",
|
|
35
|
+
"pytest-asyncio~=1.0.0",
|
|
36
|
+
"ruff~=0.12.1",
|
|
37
|
+
"setuptools~=78.1.1",
|
|
38
|
+
"setuptools_scm~=8.3.1",
|
|
39
|
+
]
|
|
40
|
+
|
|
28
41
|
[project.scripts]
|
|
29
42
|
pcc = "pipecatcloud.__main__:main"
|
|
30
43
|
pipecatcloud = "pipecatcloud.__main__:main"
|
|
@@ -45,3 +58,7 @@ line-length = 100
|
|
|
45
58
|
|
|
46
59
|
[project.urls]
|
|
47
60
|
Website = "https://docs.pipecat.daily.co/"
|
|
61
|
+
|
|
62
|
+
[tool.setuptools_scm]
|
|
63
|
+
local_scheme = "no-local-version"
|
|
64
|
+
fallback_version = "0.0.0-dev"
|
|
@@ -13,6 +13,7 @@ from pipecatcloud.agent import (
|
|
|
13
13
|
DailySessionArguments,
|
|
14
14
|
PipecatSessionArguments,
|
|
15
15
|
SessionArguments,
|
|
16
|
+
SmallWebRTCRunnerArguments,
|
|
16
17
|
WebSocketSessionArguments,
|
|
17
18
|
)
|
|
18
19
|
from pipecatcloud.exception import (
|
|
@@ -25,6 +26,7 @@ from pipecatcloud.exception import (
|
|
|
25
26
|
InvalidError,
|
|
26
27
|
)
|
|
27
28
|
from pipecatcloud.session import Session, SessionParams
|
|
29
|
+
from pipecatcloud.smallwebrtc.session_manager import SmallWebRTCSessionManager
|
|
28
30
|
|
|
29
31
|
logger.remove()
|
|
30
32
|
logger.add(sys.stderr, level=str(os.getenv("PCC_LOG_LEVEL", "INFO")))
|
|
@@ -35,10 +37,12 @@ __all__ = [
|
|
|
35
37
|
"DailySessionArguments",
|
|
36
38
|
"PipecatSessionArguments",
|
|
37
39
|
"SessionArguments",
|
|
40
|
+
"SmallWebRTCRunnerArguments",
|
|
38
41
|
"WebSocketSessionArguments",
|
|
39
42
|
# Session classes
|
|
40
43
|
"Session",
|
|
41
44
|
"SessionParams",
|
|
45
|
+
"SmallWebRTCSessionManager",
|
|
42
46
|
# Exception classes
|
|
43
47
|
"AgentNotHealthyError",
|
|
44
48
|
"AgentStartError",
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
# SPDX-License-Identifier: BSD 2-Clause License
|
|
5
5
|
#
|
|
6
6
|
|
|
7
|
-
import os
|
|
8
7
|
import functools
|
|
9
|
-
|
|
8
|
+
import os
|
|
9
|
+
from typing import Callable, Optional
|
|
10
10
|
|
|
11
11
|
import toml
|
|
12
12
|
from attr import dataclass, field
|
|
@@ -64,6 +64,8 @@ class DeployConfigParams:
|
|
|
64
64
|
secret_set: Optional[str] = None
|
|
65
65
|
scaling: ScalingParams = ScalingParams()
|
|
66
66
|
enable_krisp: bool = False
|
|
67
|
+
enable_managed_keys: bool = False
|
|
68
|
+
docker_config: dict = field(factory=dict)
|
|
67
69
|
|
|
68
70
|
def __attrs_post_init__(self):
|
|
69
71
|
if self.image is not None and ":" not in self.image:
|
|
@@ -77,6 +79,8 @@ class DeployConfigParams:
|
|
|
77
79
|
"secret_set": self.secret_set,
|
|
78
80
|
"scaling": self.scaling.to_dict() if self.scaling else None,
|
|
79
81
|
"enable_krisp": self.enable_krisp,
|
|
82
|
+
"enable_managed_keys": self.enable_managed_keys,
|
|
83
|
+
"docker_config": self.docker_config,
|
|
80
84
|
}
|
|
81
85
|
|
|
82
86
|
|
|
@@ -97,10 +101,14 @@ def load_deploy_config_file() -> Optional[DeployConfigParams]:
|
|
|
97
101
|
scaling_data = config_data.pop("scaling", {})
|
|
98
102
|
scaling_params = ScalingParams(**scaling_data)
|
|
99
103
|
|
|
104
|
+
# Extract docker configuration if present
|
|
105
|
+
docker_data = config_data.pop("docker", {})
|
|
106
|
+
|
|
100
107
|
# Create DeployConfigParams with validated data
|
|
101
108
|
validated_config = DeployConfigParams(
|
|
102
109
|
**config_data,
|
|
103
110
|
scaling=scaling_params,
|
|
111
|
+
docker_config=docker_data,
|
|
104
112
|
)
|
|
105
113
|
|
|
106
114
|
# Check for unexpected keys
|
|
@@ -111,6 +119,8 @@ def load_deploy_config_file() -> Optional[DeployConfigParams]:
|
|
|
111
119
|
"secret_set",
|
|
112
120
|
"scaling",
|
|
113
121
|
"enable_krisp",
|
|
122
|
+
"enable_managed_keys",
|
|
123
|
+
"docker",
|
|
114
124
|
}
|
|
115
125
|
unexpected_keys = set(config_data.keys()) - expected_keys
|
|
116
126
|
if unexpected_keys:
|
|
@@ -128,13 +138,15 @@ def with_deploy_config(func: Callable) -> Callable:
|
|
|
128
138
|
Decorator that loads the deploy config file and injects it into the function.
|
|
129
139
|
If the config file exists, it will be loaded and passed to the function as `deploy_config`.
|
|
130
140
|
"""
|
|
141
|
+
|
|
131
142
|
@functools.wraps(func)
|
|
132
143
|
def wrapper(*args, **kwargs):
|
|
133
144
|
try:
|
|
134
145
|
deploy_config = load_deploy_config_file()
|
|
135
|
-
kwargs[
|
|
146
|
+
kwargs["deploy_config"] = deploy_config
|
|
136
147
|
except Exception as e:
|
|
137
148
|
logger.error(f"Error loading deploy config: {e}")
|
|
138
149
|
raise ConfigFileError(str(e))
|
|
139
150
|
return func(*args, **kwargs)
|
|
151
|
+
|
|
140
152
|
return wrapper
|
|
@@ -16,6 +16,7 @@ try:
|
|
|
16
16
|
DailyRunnerArguments,
|
|
17
17
|
RunnerArguments,
|
|
18
18
|
WebSocketRunnerArguments,
|
|
19
|
+
SmallWebRTCRunnerArguments,
|
|
19
20
|
)
|
|
20
21
|
|
|
21
22
|
_PIPECAT_RUNNER_TYPES_AVAILABLE = True
|
|
@@ -62,6 +63,17 @@ except ImportError:
|
|
|
62
63
|
"""
|
|
63
64
|
|
|
64
65
|
websocket: WebSocket
|
|
66
|
+
body: Any
|
|
67
|
+
|
|
68
|
+
@dataclass
|
|
69
|
+
class SmallWebRTCRunnerArguments(RunnerArguments):
|
|
70
|
+
"""Fallback Small WebRTC transport session arguments for the runner.
|
|
71
|
+
|
|
72
|
+
Parameters:
|
|
73
|
+
webrtc_connection: Pre-configured WebRTC peer connection
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
webrtc_connection: Any
|
|
65
77
|
|
|
66
78
|
|
|
67
79
|
def _warn_standalone_usage():
|
|
@@ -131,3 +143,17 @@ class WebSocketSessionArguments(WebSocketRunnerArguments, SessionArguments):
|
|
|
131
143
|
def __post_init__(self):
|
|
132
144
|
WebSocketRunnerArguments.__post_init__(self)
|
|
133
145
|
_warn_standalone_usage()
|
|
146
|
+
|
|
147
|
+
@dataclass
|
|
148
|
+
class SmallWebRTCSessionArguments(SmallWebRTCRunnerArguments, SessionArguments):
|
|
149
|
+
"""SmallWebRTCTransport based agent session arguments.
|
|
150
|
+
|
|
151
|
+
Inherits from SmallWebRTCRunnerArguments for compatibility with pipecat-ai runner.
|
|
152
|
+
When pipecat-ai is not installed, uses a fallback implementation (deprecated).
|
|
153
|
+
|
|
154
|
+
For best compatibility, install: pip install pipecatcloud[pipecat]
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
def __post_init__(self):
|
|
158
|
+
SmallWebRTCRunnerArguments.__post_init__(self)
|
|
159
|
+
_warn_standalone_usage()
|
|
@@ -321,6 +321,7 @@ class _API:
|
|
|
321
321
|
"maxAgents": deploy_config.scaling.max_agents,
|
|
322
322
|
},
|
|
323
323
|
"enableKrisp": deploy_config.enable_krisp,
|
|
324
|
+
"enableIntegratedKeysProxy": deploy_config.enable_managed_keys, # API expects this field name
|
|
324
325
|
}
|
|
325
326
|
|
|
326
327
|
# Remove None values recursively
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
#
|
|
6
6
|
|
|
7
7
|
import json
|
|
8
|
-
import statistics
|
|
9
8
|
from enum import Enum
|
|
10
9
|
|
|
11
10
|
import aiohttp
|
|
@@ -132,6 +131,19 @@ async def status(
|
|
|
132
131
|
"[bold]Updated At:[/bold]",
|
|
133
132
|
str(data.get("updatedAt", "N/A")),
|
|
134
133
|
)
|
|
134
|
+
|
|
135
|
+
# Check for Managed Keys status
|
|
136
|
+
# API returns integratedKeysProxy but we display as "Managed Keys"
|
|
137
|
+
integrated_keys = data.get("deployment", {}).get("manifest", {}).get("spec", {}).get("integratedKeysProxy", {})
|
|
138
|
+
if isinstance(integrated_keys, dict):
|
|
139
|
+
integrated_keys_enabled = integrated_keys.get("enabled", False)
|
|
140
|
+
else:
|
|
141
|
+
integrated_keys_enabled = bool(integrated_keys)
|
|
142
|
+
|
|
143
|
+
deployment_table.add_row(
|
|
144
|
+
"[bold]Managed Keys:[/bold]",
|
|
145
|
+
"[green]Enabled[/green]" if integrated_keys_enabled else "[dim]Disabled[/dim]",
|
|
146
|
+
)
|
|
135
147
|
|
|
136
148
|
# Autoscaling info
|
|
137
149
|
autoscaling_data = data.get("autoScaling", None)
|
|
@@ -279,6 +279,12 @@ def create_deploy_command(app: typer.Typer):
|
|
|
279
279
|
help="Enable Krisp integration for this deployment",
|
|
280
280
|
rich_help_panel="Deployment Configuration",
|
|
281
281
|
),
|
|
282
|
+
managed_keys: bool = typer.Option(
|
|
283
|
+
False,
|
|
284
|
+
"--enable-managed-keys",
|
|
285
|
+
help="Enable Managed Keys for this deployment",
|
|
286
|
+
rich_help_panel="Deployment Configuration",
|
|
287
|
+
),
|
|
282
288
|
skip_confirm: bool = typer.Option(
|
|
283
289
|
False,
|
|
284
290
|
"--force",
|
|
@@ -345,6 +351,7 @@ def create_deploy_command(app: typer.Typer):
|
|
|
345
351
|
else partial_config.scaling.max_agents,
|
|
346
352
|
)
|
|
347
353
|
partial_config.enable_krisp = krisp or partial_config.enable_krisp
|
|
354
|
+
partial_config.enable_managed_keys = managed_keys or partial_config.enable_managed_keys
|
|
348
355
|
|
|
349
356
|
# Assert agent name and image are provided
|
|
350
357
|
if not partial_config.agent_name:
|
|
@@ -382,6 +389,7 @@ def create_deploy_command(app: typer.Typer):
|
|
|
382
389
|
(f"[bold white]Secret set:[/bold white] {'[dim]None[/dim]' if not partial_config.secret_set else '[green] '+ partial_config.secret_set + '[/green]'}"),
|
|
383
390
|
(f"[bold white]Image pull secret:[/bold white] {'[dim]None[/dim]' if not partial_config.image_credentials else '[green]' + partial_config.image_credentials + '[/green]'}"),
|
|
384
391
|
(f"[bold white]Krisp:[/bold white] {'[dim]Disabled[/dim]' if not partial_config.enable_krisp else '[green]Enabled[/green]'}"),
|
|
392
|
+
(f"[bold white]Managed Keys:[/bold white] {'[dim]Disabled[/dim]' if not partial_config.enable_managed_keys else '[green]Enabled[/green]'}"),
|
|
385
393
|
"\n[dim]Scaling configuration:[/dim]",
|
|
386
394
|
table,
|
|
387
395
|
*
|