Skip to content

Commit 5399040

Browse files
authored
Merge pull request #169 from UiPath/fix/add_google_adk_integration
feat: add google adk integration
2 parents 9cb4649 + a66bdf8 commit 5399040

43 files changed

Lines changed: 10469 additions & 5 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/lint-packages.yml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,69 @@ jobs:
157157
working-directory: packages/uipath-openai-agents
158158
run: uv run ruff format --check .
159159

160+
lint-google-adk:
161+
name: Lint uipath-google-adk
162+
needs: detect-changed-packages
163+
runs-on: ubuntu-latest
164+
steps:
165+
- name: Check if package changed
166+
id: check
167+
run: |
168+
if [[ "${{ contains(github.event.pull_request.labels.*.name, 'test-core-dev-version') }}" == "true" ]]; then
169+
echo "skip=true" >> $GITHUB_OUTPUT
170+
echo "reason=custom-version-testing" >> $GITHUB_OUTPUT
171+
elif echo '${{ needs.detect-changed-packages.outputs.packages }}' | jq -e 'index("uipath-google-adk")' > /dev/null; then
172+
echo "skip=false" >> $GITHUB_OUTPUT
173+
else
174+
echo "skip=true" >> $GITHUB_OUTPUT
175+
echo "reason=no-changes" >> $GITHUB_OUTPUT
176+
fi
177+
178+
- name: Skip
179+
if: steps.check.outputs.skip == 'true'
180+
run: |
181+
if [[ "${{ steps.check.outputs.reason }}" == "custom-version-testing" ]]; then
182+
echo "Skipping - custom version testing enabled"
183+
else
184+
echo "Skipping - no changes to uipath-google-adk"
185+
fi
186+
187+
- name: Checkout
188+
if: steps.check.outputs.skip != 'true'
189+
uses: actions/checkout@v4
190+
191+
- name: Setup uv
192+
if: steps.check.outputs.skip != 'true'
193+
uses: astral-sh/setup-uv@v5
194+
with:
195+
enable-cache: true
196+
197+
- name: Setup Python
198+
if: steps.check.outputs.skip != 'true'
199+
uses: actions/setup-python@v5
200+
with:
201+
python-version-file: "packages/uipath-google-adk/.python-version"
202+
203+
- name: Install dependencies
204+
if: steps.check.outputs.skip != 'true'
205+
working-directory: packages/uipath-google-adk
206+
run: uv sync --all-extras
207+
208+
- name: Check static types
209+
if: steps.check.outputs.skip != 'true'
210+
working-directory: packages/uipath-google-adk
211+
run: uv run mypy --config-file pyproject.toml .
212+
213+
- name: Check linting
214+
if: steps.check.outputs.skip != 'true'
215+
working-directory: packages/uipath-google-adk
216+
run: uv run ruff check .
217+
218+
- name: Check formatting
219+
if: steps.check.outputs.skip != 'true'
220+
working-directory: packages/uipath-google-adk
221+
run: uv run ruff format --check .
222+
160223
skip-lint:
161224
name: Skip Lint (Custom Version Testing)
162225
runs-on: ubuntu-latest

.github/workflows/publish-dev.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,4 +212,4 @@ jobs:
212212
- name: Publish
213213
run: uv publish --index testpypi
214214
env:
215-
UV_PUBLISH_TOKEN: ${{ matrix.package == 'uipath-openai-agents' && secrets.TEST_PYPI_TOKEN_OPENAI_AGENTS || secrets.TEST_PYPI_TOKEN }}
215+
UV_PUBLISH_TOKEN: ${{ matrix.package == 'uipath-openai-agents' && secrets.TEST_PYPI_TOKEN_OPENAI_AGENTS || matrix.package == 'uipath-google-adk' && secrets.TEST_PYPI_TOKEN_GOOGLE_ADK || secrets.TEST_PYPI_TOKEN }}

.github/workflows/test-packages.yml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,52 @@ jobs:
129129
if: steps.check.outputs.skip != 'true'
130130
working-directory: packages/uipath-openai-agents
131131
run: uv run pytest
132+
133+
test-google-adk:
134+
name: Test (uipath-google-adk, ${{ matrix.python-version }}, ${{ matrix.os }})
135+
needs: detect-changed-packages
136+
runs-on: ${{ matrix.os }}
137+
strategy:
138+
fail-fast: false
139+
matrix:
140+
python-version: ["3.11", "3.12", "3.13"]
141+
os: [ubuntu-latest, windows-latest]
142+
steps:
143+
- name: Check if package changed
144+
id: check
145+
shell: bash
146+
run: |
147+
if echo '${{ needs.detect-changed-packages.outputs.packages }}' | jq -e 'index("uipath-google-adk")' > /dev/null; then
148+
echo "skip=false" >> $GITHUB_OUTPUT
149+
else
150+
echo "skip=true" >> $GITHUB_OUTPUT
151+
fi
152+
153+
- name: Skip
154+
if: steps.check.outputs.skip == 'true'
155+
shell: bash
156+
run: echo "Skipping - no changes to uipath-google-adk"
157+
158+
- name: Checkout
159+
if: steps.check.outputs.skip != 'true'
160+
uses: actions/checkout@v4
161+
162+
- name: Setup uv
163+
if: steps.check.outputs.skip != 'true'
164+
uses: astral-sh/setup-uv@v5
165+
166+
- name: Setup Python
167+
if: steps.check.outputs.skip != 'true'
168+
uses: actions/setup-python@v5
169+
with:
170+
python-version: ${{ matrix.python-version }}
171+
172+
- name: Install dependencies
173+
if: steps.check.outputs.skip != 'true'
174+
working-directory: packages/uipath-google-adk
175+
run: uv sync --all-extras --python ${{ matrix.python-version }}
176+
177+
- name: Run tests
178+
if: steps.check.outputs.skip != 'true'
179+
working-directory: packages/uipath-google-adk
180+
run: uv run pytest

.gitignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,3 +182,11 @@ cython_debug/
182182
/.vscode/launch.json
183183

184184
playground.py
185+
186+
# Samples generated files
187+
**/samples/**/.agent/
188+
**/samples/**/.claude/
189+
**/samples/**/AGENTS.md
190+
**/samples/**/CLAUDE.md
191+
**/samples/**/bindings.json
192+
**/samples/**/entry-points.json

README.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,17 @@ Build agents using the [OpenAI Agents SDK](https://github.com/openai/openai-agen
2828
- [Docs](https://uipath.github.io/uipath-python/openai-agents/quick_start/)
2929
- [Samples](packages/uipath-openai-agents/samples/)
3030

31+
### Google ADK
32+
33+
[![PyPI - Version](https://img.shields.io/pypi/v/uipath-google-adk)](https://pypi.org/project/uipath-google-adk/)
34+
[![PyPI downloads](https://img.shields.io/pypi/dm/uipath-google-adk.svg)](https://pypi.org/project/uipath-google-adk/)
35+
36+
Build agents using the [Google Agent Development Kit (ADK)](https://github.com/google/adk-python):
37+
38+
- [README](packages/uipath-google-adk/README.md)
39+
- [Docs](https://uipath.github.io/uipath-python/google-adk/quick_start/)
40+
- [Samples](packages/uipath-google-adk/samples/)
41+
3142

3243
## Structure
3344

@@ -37,7 +48,8 @@ This repository is organized as a monorepo with multiple packages:
3748
uipath-integrations-python/
3849
└── packages/
3950
├── uipath-llamaindex/ # LlamaIndex runtime
40-
└── uipath-openai-agents/ # OpenAI Agents runtime
51+
├── uipath-openai-agents/ # OpenAI Agents runtime
52+
└── uipath-google-adk/ # Google ADK runtime
4153
```
4254

4355
## Development
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3.11
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# UiPath Google ADK Python SDK
2+
3+
[![PyPI - Version](https://img.shields.io/pypi/v/uipath-google-adk)](https://pypi.org/project/uipath-google-adk/)
4+
[![PyPI downloads](https://img.shields.io/pypi/dm/uipath-google-adk.svg)](https://pypi.org/project/uipath-google-adk/)
5+
[![Python versions](https://img.shields.io/pypi/pyversions/uipath-google-adk.svg)](https://pypi.org/project/uipath-google-adk/)
6+
7+
A Python SDK that enables developers to build and deploy Google ADK agents to the UiPath Cloud Platform. It provides programmatic interaction with UiPath Cloud Platform services.
8+
9+
This package is an extension to the [UiPath Python SDK](https://github.com/UiPath/uipath-python) and implements the [UiPath Runtime Protocol](https://github.com/UiPath/uipath-runtime-python).
10+
11+
Check out these [sample projects](https://github.com/UiPath/uipath-integrations-python/tree/main/packages/uipath-google-adk/samples) to see the SDK in action.
12+
13+
## Requirements
14+
15+
- Python 3.11 or higher
16+
- UiPath Automation Cloud account
17+
18+
## Installation
19+
20+
```bash
21+
pip install uipath-google-adk
22+
```
23+
24+
using `uv`:
25+
26+
```bash
27+
uv add uipath-google-adk
28+
```
29+
30+
## Configuration
31+
32+
### Environment Variables
33+
34+
Create a `.env` file in your project root with the following variables:
35+
36+
```
37+
UIPATH_URL=https://cloud.uipath.com/ACCOUNT_NAME/TENANT_NAME
38+
UIPATH_ACCESS_TOKEN=YOUR_TOKEN_HERE
39+
```
40+
41+
## Command Line Interface (CLI)
42+
43+
The SDK provides a command-line interface for creating, packaging, and deploying Google ADK Agents:
44+
45+
### Authentication
46+
47+
```bash
48+
uipath auth
49+
```
50+
51+
This command opens a browser for authentication and creates/updates your `.env` file with the proper credentials.
52+
53+
### Initialize a Project
54+
55+
```bash
56+
uipath init
57+
```
58+
59+
Running `uipath init` will process the agent definitions in the `google_adk.json` file and create the corresponding `entry-points.json` file needed for deployment.
60+
61+
For more details on the configuration format, see the [UiPath configuration specifications](https://github.com/UiPath/uipath-python/blob/main/specs/README.md).
62+
63+
### Debug a Project
64+
65+
```bash
66+
uipath run AGENT [INPUT]
67+
```
68+
69+
Executes the agent with the provided JSON input arguments.
70+
71+
### Package a Project
72+
73+
```bash
74+
uipath pack
75+
```
76+
77+
Packages your project into a `.nupkg` file that can be deployed to UiPath.
78+
79+
**Note:** Your `pyproject.toml` must include:
80+
81+
- A description field (avoid characters: &, <, >, ", ', ;)
82+
- Author information
83+
84+
Example:
85+
86+
```toml
87+
description = "Your package description"
88+
authors = [{name = "Your Name", email = "your.email@example.com"}]
89+
```
90+
91+
### Publish a Package
92+
93+
```bash
94+
uipath publish
95+
```
96+
97+
Publishes the most recently created package to your UiPath Orchestrator.
98+
99+
## Project Structure
100+
101+
To properly use the CLI for packaging and publishing, your project should include:
102+
103+
- A `pyproject.toml` file with project metadata
104+
- A `google_adk.json` file with your agent definitions (e.g., `"agents": {"agent": "main.py:agent"}`)
105+
- A `entry-points.json` file (generated by `uipath init`)
106+
- A `bindings.json` file (generated by `uipath init`) to configure resource overrides
107+
- Any Python files needed for your automation
108+
109+
## Development
110+
111+
### Developer Tools
112+
113+
Check out [uipath-dev](https://github.com/uipath/uipath-dev-python) - an interactive terminal application for building, testing, and debugging UiPath Python runtimes, agents, and automation scripts.
114+
115+
### Setting Up a Development Environment
116+
117+
Please read our [contribution guidelines](https://github.com/UiPath/uipath-integrations-python/packages/uipath-google-adk/blob/main/CONTRIBUTING.md) before submitting a pull request.
118+
119+
### Special Thanks
120+
121+
A huge thank-you to the open-source community and the maintainers of the libraries that make this project possible:
122+
123+
- [Google ADK](https://github.com/google/adk-python) for providing a powerful framework for building AI agents.
124+
- [OpenInference](https://github.com/Arize-ai/openinference) for observability and instrumentation support.
125+
- [Pydantic](https://github.com/pydantic/pydantic) for reliable, typed configuration and validation.

0 commit comments

Comments
 (0)