pipecatcloud 0.0.8__tar.gz → 0.0.9__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 (49) hide show
  1. pipecatcloud-0.0.9/.github/workflows/publish-pypi.yml +59 -0
  2. pipecatcloud-0.0.9/.github/workflows/publish-test.yml +59 -0
  3. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/.github/workflows/python-publish.yml +1 -13
  4. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/CHANGELOG.md +19 -0
  5. pipecatcloud-0.0.9/LICENSE +24 -0
  6. pipecatcloud-0.0.9/PKG-INFO +85 -0
  7. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/README.md +13 -15
  8. pipecatcloud-0.0.9/publish-pypi.yml +59 -0
  9. pipecatcloud-0.0.9/publish-test.yml +59 -0
  10. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/pyproject.toml +13 -6
  11. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/_utils/console_utils.py +4 -2
  12. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/_utils/deploy_utils.py +3 -0
  13. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/api.py +45 -6
  14. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/__init__.py +1 -1
  15. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/commands/agent.py +230 -109
  16. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/commands/deploy.py +5 -5
  17. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/commands/organizations.py +1 -1
  18. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/entry_point.py +2 -2
  19. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/config.py +1 -1
  20. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/errors.py +3 -3
  21. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/exception.py +1 -1
  22. pipecatcloud-0.0.9/src/pipecatcloud.egg-info/PKG-INFO +85 -0
  23. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud.egg-info/SOURCES.txt +5 -0
  24. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud.egg-info/entry_points.txt +1 -1
  25. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud.egg-info/requires.txt +3 -3
  26. pipecatcloud-0.0.8/PKG-INFO +0 -13
  27. pipecatcloud-0.0.8/src/pipecatcloud.egg-info/PKG-INFO +0 -13
  28. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/.gitignore +0 -0
  29. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/dev-requirements.txt +0 -0
  30. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/pipecat-cloud.png +0 -0
  31. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/setup.cfg +0 -0
  32. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/__init__.py +0 -0
  33. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/__main__.py +0 -0
  34. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/__version__.py +0 -0
  35. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/_utils/__init__.py +0 -0
  36. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/_utils/agent_utils.py +0 -0
  37. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/_utils/async_utils.py +0 -0
  38. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/_utils/auth_utils.py +0 -0
  39. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/_utils/local_runner.py +0 -0
  40. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/api.py +0 -0
  41. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/commands/__init__.py +0 -0
  42. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/commands/auth.py +0 -0
  43. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/commands/init.py +0 -0
  44. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/commands/run.py +0 -0
  45. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/commands/secrets.py +0 -0
  46. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/cli/config.py +0 -0
  47. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud/session.py +0 -0
  48. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud.egg-info/dependency_links.txt +0 -0
  49. {pipecatcloud-0.0.8 → pipecatcloud-0.0.9}/src/pipecatcloud.egg-info/top_level.txt +0 -0
@@ -0,0 +1,59 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ version:
7
+ description: 'Version to publish (must match pyproject.toml, e.g. 0.0.4)'
8
+ required: true
9
+ type: string
10
+
11
+ jobs:
12
+ build-and-publish:
13
+ runs-on: ubuntu-latest
14
+ environment:
15
+ name: pypi
16
+ url: https://pypi.org/p/pipecat-cloud
17
+ permissions:
18
+ id-token: write # IMPORTANT: this permission is needed for trusted publishing
19
+ contents: write # Needed for tagging
20
+
21
+ steps:
22
+ - name: Checkout code
23
+ uses: actions/checkout@v4
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v4
27
+ with:
28
+ python-version: '3.10'
29
+
30
+ - name: Verify version matches
31
+ run: |
32
+ pip install tomli
33
+ PROJECT_VERSION=$(python -c "import tomli; print(tomli.load(open('pyproject.toml', 'rb'))['project']['version'])")
34
+ if [ "$PROJECT_VERSION" != "${{ github.event.inputs.version }}" ]; then
35
+ echo "Error: Input version (${{ github.event.inputs.version }}) does not match pyproject.toml version ($PROJECT_VERSION)"
36
+ exit 1
37
+ fi
38
+
39
+ - name: Install dependencies
40
+ run: |
41
+ python -m pip install --upgrade pip
42
+ pip install -r requirements.txt
43
+ pip install build twine
44
+
45
+ - name: Build package
46
+ run: python -m build
47
+
48
+ - name: Create release tag
49
+ run: |
50
+ git config --local user.email "action@github.com"
51
+ git config --local user.name "GitHub Action"
52
+ git tag -a "v${{ github.event.inputs.version }}" -m "Version ${{ github.event.inputs.version }}"
53
+ git push origin "v${{ github.event.inputs.version }}"
54
+
55
+ - name: Publish to PyPI
56
+ uses: pypa/gh-action-pypi-publish@release/v1
57
+ with:
58
+ verbose: true
59
+ print-hash: true
@@ -0,0 +1,59 @@
1
+ name: Publish to TEST PyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ version:
7
+ description: 'Version to publish (must match pyproject.toml, e.g. 0.0.4)'
8
+ required: true
9
+ type: string
10
+
11
+ jobs:
12
+ build-and-publish:
13
+ runs-on: ubuntu-latest
14
+ environment:
15
+ name: pypi
16
+ url: https://test.pypi.org/project/pipecat-cloud
17
+ permissions:
18
+ id-token: write # IMPORTANT: this permission is needed for trusted publishing
19
+ contents: write # Needed for tagging
20
+
21
+ steps:
22
+ - name: Checkout code
23
+ uses: actions/checkout@v4
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v4
27
+ with:
28
+ python-version: '3.10'
29
+
30
+ - name: Verify version matches
31
+ run: |
32
+ pip install tomli
33
+ PROJECT_VERSION=$(python -c "import tomli; print(tomli.load(open('pyproject.toml', 'rb'))['project']['version'])")
34
+ if [ "$PROJECT_VERSION" != "${{ github.event.inputs.version }}" ]; then
35
+ echo "Error: Input version (${{ github.event.inputs.version }}) does not match pyproject.toml version ($PROJECT_VERSION)"
36
+ exit 1
37
+ fi
38
+
39
+ - name: Install dependencies
40
+ run: |
41
+ python -m pip install --upgrade pip
42
+ pip install -r requirements.txt
43
+ pip install build twine
44
+
45
+ - name: Build package
46
+ run: python -m build
47
+
48
+ - name: Create release tag
49
+ run: |
50
+ git config --local user.email "action@github.com"
51
+ git config --local user.name "GitHub Action"
52
+ git tag -a "v${{ github.event.inputs.version }}" -m "Version ${{ github.event.inputs.version }}"
53
+ git push origin "v${{ github.event.inputs.version }}"
54
+
55
+ - name: Publish to PyPI
56
+ uses: pypa/gh-action-pypi-publish@release/v1
57
+ with:
58
+ verbose: true
59
+ print-hash: true
@@ -49,7 +49,7 @@ jobs:
49
49
 
50
50
  environment:
51
51
  name: pypi
52
- url: https://pypi.org/p/pipecatcloud
52
+ url: https://pypi.org/p/pipecat-cloud
53
53
 
54
54
  steps:
55
55
  - uses: actions/checkout@v4
@@ -65,23 +65,11 @@ jobs:
65
65
  with:
66
66
  packages-dir: dist/
67
67
 
68
- - name: Read CHANGELOG
69
- id: changelog
70
- run: |
71
- if [ -f "CHANGELOG.md" ]; then
72
- CHANGELOG_CONTENT=$(cat CHANGELOG.md)
73
- echo "CHANGELOG_CONTENT=${CHANGELOG_CONTENT}" >> $GITHUB_ENV
74
- else
75
- echo "CHANGELOG_CONTENT=No changelog available." >> $GITHUB_ENV
76
- fi
77
-
78
68
  - name: Create GitHub Release
79
69
  uses: softprops/action-gh-release@v2
80
70
  with:
81
71
  tag_name: ${{ github.ref }}
82
72
  name: Release ${{ github.ref_name }}
83
- body: |
84
- ${{ env.CHANGELOG_CONTENT }}
85
73
  draft: false
86
74
  prerelease: false
87
75
  files: |
@@ -5,6 +5,25 @@ 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.0.9] - 2025-02-27
9
+
10
+ ### Added
11
+ - `agent status [agent-name]` now shows deployment info and scaling configuration
12
+ - `agent sessions [agent-name]` lists active session count for an agent (will list session details in future)
13
+ - `agent start [agent-name] -D` now shows the Daily room URL (and token) to join in the terminal output
14
+
15
+ ### Changed
16
+ - Changed CLI command from `pipecat` to `pipecatcloud` or `pcc`
17
+ - `agent delete` prompts the user for confirmation first
18
+ - `agent start` now checks the target deployment first to ensure it exists and is in a healthy state
19
+ - Changed the information order of `agent status` so the health badge is clearly visible in terminal
20
+ - `agent deploy` now defaults to "Y" for the confirmation prompts
21
+
22
+ ### Fixed
23
+ - Fixed lint error with payload data in `agent start`
24
+ - Fixed a bug where `pcc-deploy.toml` files were required to be present
25
+ - `deploy` command now correctly passes the secret set to the deployment from the `pcc-deploy.toml` file
26
+
8
27
  ## [0.0.8] - 2025-02-03
9
28
 
10
29
  ### Added
@@ -0,0 +1,24 @@
1
+ BSD 2-Clause License
2
+
3
+ Copyright (c) 2024, Daily
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,85 @@
1
+ Metadata-Version: 2.2
2
+ Name: pipecatcloud
3
+ Version: 0.0.9
4
+ Summary: Cloud hosting for Pipecat AI applications
5
+ License: BSD 2-Clause License
6
+ Project-URL: Website, https://docs.pipecat.daily.co/
7
+ Keywords: pipecat,pipecat-ai,voice,ai,llm
8
+ Requires-Python: >=3.10
9
+ Description-Content-Type: text/markdown
10
+ License-File: LICENSE
11
+ Requires-Dist: aiohttp<4.0.0,~=3.11.13
12
+ Requires-Dist: fastapi~=0.115.6
13
+ Requires-Dist: loguru~=0.7.3
14
+ Requires-Dist: python-dotenv~=1.0.1
15
+ Requires-Dist: uvicorn~=0.32.0
16
+ Requires-Dist: typer~=0.13.0
17
+ Requires-Dist: synchronicity~=0.7.6
18
+ Requires-Dist: toml~=0.10.2
19
+ Requires-Dist: questionary~=2.1.0
20
+
21
+ <h1><div align="center">
22
+ <img alt="pipecat cloud" width="500px" height="auto" src="./pipecat-cloud.png">
23
+ </div></h1>
24
+
25
+ [![Docs](https://img.shields.io/badge/documentation-blue)](https://docs.pipecat.daily.co)
26
+ [![PyPI](https://img.shields.io/pypi/v/pipecatcloud)](https://pypi.org/project/pipecatcloud)
27
+
28
+ # Pipecat Cloud
29
+
30
+ Python module and CLI for interacting with [Pipecat Cloud](https://pipecat.daily.co).
31
+
32
+ ### Requirements
33
+
34
+ - Python 3.10+
35
+ - Docker and a Docker repository (e.g. Docker Hub)
36
+ - Active [Pipecat Cloud](https://pipecat.daily.co)
37
+ account
38
+
39
+ ### Documentation
40
+
41
+ Documentation for Pipecat Cloud is available [here](https://docs.pipecat.daily.co).
42
+
43
+ ### Installation
44
+
45
+ ```shell
46
+ pip install pipecatcloud
47
+
48
+ pcc --version
49
+ pcc --help
50
+
51
+ # Note: you can use `pcc` or `pipecatcloud` interchangeably
52
+ pcc auth login
53
+ ```
54
+
55
+ ! All CLI commands have a `--help` flag that will display the command usage and options.
56
+
57
+ ## Usage
58
+
59
+ 1. Create an account at [Pipecat Cloud](https://pipecat.daily.co)
60
+
61
+ 2. Login to your account `pcc auth login`
62
+
63
+ 3. (Optional): Clone the starter agent [here](https://github.com/daily-co/pipecat-cloud-starter)
64
+
65
+ 4. Build your agent `docker build --platform linux/arm64 -t your-agent-name .`
66
+
67
+ 5. Push your Docker image to your repository `docker push your-repository/your-agent-name:0.1`
68
+
69
+ 6. Deploy your agent `pcc deploy starter-agent your-repository/your-agent-name:0.1`
70
+
71
+ ### Usage in Python scripts
72
+
73
+ If want to programmatically start an agent within a Python script, you can use the `pipecatcloud.agent` module.
74
+
75
+ ```python
76
+ from pipecatcloud.agent import Agent
77
+
78
+ agent = Agent(
79
+ agent_name="your-agent-name",
80
+ organization="your-organization",
81
+ api_key="your-api-key",
82
+ )
83
+
84
+ await agent.start()
85
+ ```
@@ -1,36 +1,34 @@
1
-
2
1
  <h1><div align="center">
3
2
  <img alt="pipecat cloud" width="500px" height="auto" src="./pipecat-cloud.png">
4
3
  </div></h1>
5
4
 
6
-
7
- [![Docs](https://img.shields.io/badge/documentation-blue)](https://docs.pipecat.cloud)
5
+ [![Docs](https://img.shields.io/badge/documentation-blue)](https://docs.pipecat.daily.co)
8
6
  [![PyPI](https://img.shields.io/pypi/v/pipecatcloud)](https://pypi.org/project/pipecatcloud)
9
7
 
10
8
  # Pipecat Cloud
11
9
 
12
- Python module and CLI for interacting with [Pipecat Cloud](https://pipecat.cloud).
10
+ Python module and CLI for interacting with [Pipecat Cloud](https://pipecat.daily.co).
13
11
 
14
12
  ### Requirements
15
13
 
16
14
  - Python 3.10+
17
15
  - Docker and a Docker repository (e.g. Docker Hub)
18
- - Active [Pipecat Cloud](https://dashboard.pipecat.cloud)
19
- account
16
+ - Active [Pipecat Cloud](https://pipecat.daily.co)
17
+ account
20
18
 
21
19
  ### Documentation
22
20
 
23
- Documentation for Pipecat Cloud is available [here](https://docs.pipecat.cloud).
21
+ Documentation for Pipecat Cloud is available [here](https://docs.pipecat.daily.co).
24
22
 
25
23
  ### Installation
26
24
 
27
25
  ```shell
28
26
  pip install pipecatcloud
29
27
 
30
- pipecat --version
31
- pipecat --help
28
+ pcc --version
29
+ pcc --help
32
30
 
33
- # Note: you can use `pipecat` or `pcc` interchangeably
31
+ # Note: you can use `pcc` or `pipecatcloud` interchangeably
34
32
  pcc auth login
35
33
  ```
36
34
 
@@ -38,17 +36,17 @@ pcc auth login
38
36
 
39
37
  ## Usage
40
38
 
41
- 1. Create an account at [Pipecat Cloud](https://pipecat.cloud)
39
+ 1. Create an account at [Pipecat Cloud](https://pipecat.daily.co)
42
40
 
43
- 2. Login to your account `pipecat auth login`
41
+ 2. Login to your account `pcc auth login`
44
42
 
45
- 3. (Optional): Clone the starter agent [here](https://github.com/pipecat-ai/pipecat-cloud-starter-agent)
43
+ 3. (Optional): Clone the starter agent [here](https://github.com/daily-co/pipecat-cloud-starter)
46
44
 
47
45
  4. Build your agent `docker build --platform linux/arm64 -t your-agent-name .`
48
46
 
49
47
  5. Push your Docker image to your repository `docker push your-repository/your-agent-name:0.1`
50
48
 
51
- 6. Deploy your agent `pipecat deploy starter-agent your-repository/your-agent-name:0.1`
49
+ 6. Deploy your agent `pcc deploy starter-agent your-repository/your-agent-name:0.1`
52
50
 
53
51
  ### Usage in Python scripts
54
52
 
@@ -64,4 +62,4 @@ agent = Agent(
64
62
  )
65
63
 
66
64
  await agent.start()
67
- ```
65
+ ```
@@ -0,0 +1,59 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ version:
7
+ description: 'Version to publish (must match pyproject.toml, e.g. 0.0.4)'
8
+ required: true
9
+ type: string
10
+
11
+ jobs:
12
+ build-and-publish:
13
+ runs-on: ubuntu-latest
14
+ environment:
15
+ name: pypi
16
+ url: https://pypi.org/p/pipecat-cloud
17
+ permissions:
18
+ id-token: write # IMPORTANT: this permission is needed for trusted publishing
19
+ contents: write # Needed for tagging
20
+
21
+ steps:
22
+ - name: Checkout code
23
+ uses: actions/checkout@v4
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v4
27
+ with:
28
+ python-version: '3.10'
29
+
30
+ - name: Verify version matches
31
+ run: |
32
+ pip install tomli
33
+ PROJECT_VERSION=$(python -c "import tomli; print(tomli.load(open('pyproject.toml', 'rb'))['project']['version'])")
34
+ if [ "$PROJECT_VERSION" != "${{ github.event.inputs.version }}" ]; then
35
+ echo "Error: Input version (${{ github.event.inputs.version }}) does not match pyproject.toml version ($PROJECT_VERSION)"
36
+ exit 1
37
+ fi
38
+
39
+ - name: Install dependencies
40
+ run: |
41
+ python -m pip install --upgrade pip
42
+ pip install -r requirements.txt
43
+ pip install build twine
44
+
45
+ - name: Build package
46
+ run: python -m build
47
+
48
+ - name: Create release tag
49
+ run: |
50
+ git config --local user.email "action@github.com"
51
+ git config --local user.name "GitHub Action"
52
+ git tag -a "v${{ github.event.inputs.version }}" -m "Version ${{ github.event.inputs.version }}"
53
+ git push origin "v${{ github.event.inputs.version }}"
54
+
55
+ - name: Publish to PyPI
56
+ uses: pypa/gh-action-pypi-publish@release/v1
57
+ with:
58
+ verbose: true
59
+ print-hash: true
@@ -0,0 +1,59 @@
1
+ name: Publish to TEST PyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ version:
7
+ description: 'Version to publish (must match pyproject.toml, e.g. 0.0.4)'
8
+ required: true
9
+ type: string
10
+
11
+ jobs:
12
+ build-and-publish:
13
+ runs-on: ubuntu-latest
14
+ environment:
15
+ name: pypi
16
+ url: https://test.pypi.org/project/pipecat-cloud
17
+ permissions:
18
+ id-token: write # IMPORTANT: this permission is needed for trusted publishing
19
+ contents: write # Needed for tagging
20
+
21
+ steps:
22
+ - name: Checkout code
23
+ uses: actions/checkout@v4
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v4
27
+ with:
28
+ python-version: '3.10'
29
+
30
+ - name: Verify version matches
31
+ run: |
32
+ pip install tomli
33
+ PROJECT_VERSION=$(python -c "import tomli; print(tomli.load(open('pyproject.toml', 'rb'))['project']['version'])")
34
+ if [ "$PROJECT_VERSION" != "${{ github.event.inputs.version }}" ]; then
35
+ echo "Error: Input version (${{ github.event.inputs.version }}) does not match pyproject.toml version ($PROJECT_VERSION)"
36
+ exit 1
37
+ fi
38
+
39
+ - name: Install dependencies
40
+ run: |
41
+ python -m pip install --upgrade pip
42
+ pip install -r requirements.txt
43
+ pip install build twine
44
+
45
+ - name: Build package
46
+ run: python -m build
47
+
48
+ - name: Create release tag
49
+ run: |
50
+ git config --local user.email "action@github.com"
51
+ git config --local user.name "GitHub Action"
52
+ git tag -a "v${{ github.event.inputs.version }}" -m "Version ${{ github.event.inputs.version }}"
53
+ git push origin "v${{ github.event.inputs.version }}"
54
+
55
+ - name: Publish to PyPI
56
+ uses: pypa/gh-action-pypi-publish@release/v1
57
+ with:
58
+ verbose: true
59
+ print-hash: true
@@ -4,23 +4,27 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pipecatcloud"
7
- version = "0.0.8"
7
+ version = "0.0.9"
8
8
  requires-python = ">=3.10"
9
+ description = "Cloud hosting for Pipecat AI applications"
10
+ license = { text = "BSD 2-Clause License" }
11
+ readme = "README.md"
12
+ keywords = ["pipecat", "pipecat-ai", "voice", "ai", "llm"]
9
13
  dependencies = [
10
- "aiohttp~=3.10.10",
11
- "fastapi~=0.115.5",
12
- "loguru~=0.7.2",
14
+ "aiohttp~=3.11.13,<4.0.0",
15
+ "fastapi~=0.115.6",
16
+ "loguru~=0.7.3",
13
17
  "python-dotenv~=1.0.1",
14
18
  "uvicorn~=0.32.0",
15
19
  "typer~=0.13.0",
16
20
  "synchronicity~=0.7.6",
17
21
  "toml~=0.10.2",
18
- "questionary~=2.1.0",
22
+ "questionary~=2.1.0"
19
23
  ]
20
24
 
21
25
  [project.scripts]
22
26
  pcc = "pipecatcloud.__main__:main"
23
- pipecat = "pipecatcloud.__main__:main"
27
+ pipecatcloud = "pipecatcloud.__main__:main"
24
28
 
25
29
  [tool.setuptools]
26
30
  package-dir = {"" = "src"}
@@ -32,3 +36,6 @@ include = ["pipecatcloud*"]
32
36
  [tool.ruff]
33
37
  exclude = ["*_pb2.py"]
34
38
  line-length = 100
39
+
40
+ [project.urls]
41
+ Website = "https://docs.pipecat.daily.co/"
@@ -30,10 +30,12 @@ class PipecatConsole(Console):
30
30
  def error(
31
31
  self,
32
32
  message,
33
+ title: Optional[str] = None,
33
34
  title_extra: Optional[str] = None,
34
35
  subtitle: Optional[str] = None):
35
36
 
36
- title = f"{PANEL_TITLE_ERROR}{f' - {title_extra}' if title_extra is not None else ''}"
37
+ if not title:
38
+ title = f"{PANEL_TITLE_ERROR}{f' - {title_extra}' if title_extra is not None else ''}"
37
39
 
38
40
  self.print(
39
41
  Panel(
@@ -67,7 +69,7 @@ class PipecatConsole(Console):
67
69
  f"[red]{title}[/red]\n\n"
68
70
  f"[dim]Error message:[/dim]\n{error_message}",
69
71
  title=f"[bold red]{PANEL_TITLE_ERROR} - {error_code}[/bold red]",
70
- subtitle=f"[dim]Docs: https://docs.pipecat.cloud/troubleshooting/#{error_code}[/dim]" if not hide_subtitle else None,
72
+ subtitle=f"[dim]Docs: https://docs.pipecat.daily.co/agents/error-codes#{error_code}[/dim]" if not hide_subtitle else None,
71
73
  title_align="left",
72
74
  subtitle_align="left",
73
75
  border_style="red"))
@@ -69,7 +69,10 @@ def load_deploy_config_file() -> Optional[DeployConfigParams]:
69
69
  try:
70
70
  with open(deploy_config_path, "r") as f:
71
71
  config_data = toml.load(f)
72
+ except Exception as e:
73
+ return None
72
74
 
75
+ try:
73
76
  # Extract scaling parameters if present
74
77
  scaling_data = config_data.pop('scaling', {})
75
78
  scaling_params = ScalingParams(**scaling_data)
@@ -1,5 +1,5 @@
1
1
  from functools import wraps
2
- from typing import Callable, Optional
2
+ from typing import Callable, List, Optional
3
3
 
4
4
  import aiohttp
5
5
  from loguru import logger
@@ -37,10 +37,10 @@ class _API():
37
37
 
38
38
  return f"{config.get('api_host', '')}{config.get(path, '')}"
39
39
 
40
- def _configure_headers(self) -> dict:
41
- if not self.token:
40
+ def _configure_headers(self, override_token: Optional[str] = None) -> dict:
41
+ if not self.token and not override_token:
42
42
  return {}
43
- return {"Authorization": f"Bearer {self.token}"}
43
+ return {"Authorization": f"Bearer {override_token or self.token}"}
44
44
 
45
45
  async def _base_request(
46
46
  self,
@@ -48,13 +48,14 @@ class _API():
48
48
  url: str,
49
49
  params: Optional[dict] = None,
50
50
  json: Optional[dict] = None,
51
- not_found_is_empty: bool = False
51
+ not_found_is_empty: bool = False,
52
+ override_token: Optional[str] = None
52
53
  ) -> Optional[dict]:
53
54
  async with aiohttp.ClientSession() as session:
54
55
  response = await session.request(
55
56
  method=method,
56
57
  url=url,
57
- headers=self._configure_headers(),
58
+ headers=self._configure_headers(override_token),
58
59
  params=params,
59
60
  json=json
60
61
  )
@@ -323,3 +324,41 @@ class _API():
323
324
  org: Organization ID
324
325
  """
325
326
  return self.create_api_method(self._agent)
327
+
328
+ async def _agents(self, org: str) -> List[dict] | None:
329
+ url = f"{self.construct_api_url('services_path').format(org=org)}"
330
+ result = await self._base_request("GET", url) or {}
331
+
332
+ if "services" in result:
333
+ return result["services"]
334
+
335
+ return None
336
+
337
+ @property
338
+ def agents(self):
339
+ return self.create_api_method(self._agents)
340
+
341
+ async def _start_agent(
342
+ self, agent_name: str, api_key: str, use_daily: bool, data: Optional[str] = None
343
+ ) -> dict | None:
344
+ url = f"{self.construct_api_url('start_path').format(service=agent_name)}"
345
+
346
+ payload: dict = {"createDailyRoom": use_daily}
347
+ if data is not None:
348
+ payload["body"] = data
349
+
350
+ return await self._base_request(
351
+ "POST", url, override_token=api_key, json=payload, not_found_is_empty=True
352
+ )
353
+
354
+ @property
355
+ def start_agent(self):
356
+ return self.create_api_method(self._start_agent)
357
+
358
+ async def _agent_delete(self, agent_name: str, org: str) -> dict | None:
359
+ url = f"{self.construct_api_url('services_path').format(org=org)}/{agent_name}"
360
+ return await self._base_request("DELETE", url, not_found_is_empty=True)
361
+
362
+ @property
363
+ def agent_delete(self):
364
+ return self.create_api_method(self._agent_delete)
@@ -1,4 +1,4 @@
1
- PIPECAT_CLI_NAME = "pipecat"
1
+ PIPECAT_CLI_NAME = "pcc"
2
2
  PIPECAT_CREDENTIALS_PATH = "~/.pipecatcloud.toml"
3
3
  PIPECAT_DEPLOY_CONFIG_PATH = "pcc-deploy.toml"
4
4