Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
2766413
Integration-e2e
UIPath-Harshit Feb 12, 2026
1ee7955
SDK Commit
UIPath-Harshit Feb 13, 2026
628c29d
Introduced query_multiple_entities method as part of DataFabric integ…
UIPath-Harshit Feb 17, 2026
beaef0a
Merge from master
UIPath-Harshit Feb 17, 2026
ccac3cf
Remvoed uipath from dev-deps
UIPath-Harshit Feb 17, 2026
e32369f
Reverted an accidental removal
UIPath-Harshit Feb 17, 2026
5bc48d5
Updated response to handler failure cases
UIPath-Harshit Feb 17, 2026
a36c164
feat: graph node ID uses last body line + phase lifecycle events (#1332)
cristipufu Feb 17, 2026
c30123c
chore: pre-commit ruff version update (#1333)
cotovanu-cristian Feb 17, 2026
09657f0
fix: move tracing enable check (#1335)
radu-mocanu Feb 17, 2026
aa807ef
fix: emit only updated events at debug time (#1336)
radu-mocanu Feb 17, 2026
40116ee
chore: update sample dependencies (#1337)
radu-mocanu Feb 17, 2026
86c3728
feat: improve logging around binding overwrites (#1328)
cristian-groza Feb 17, 2026
1b001f3
fix: pass correct headers for eval LLM calls (#1341)
AAgnihotry Feb 18, 2026
cbbe270
chore: upgrade uipath-core and runtime minor versions for cas data ty…
maxduu Feb 18, 2026
053d417
fix: update readme.md with integrations (#1346)
cristipufu Feb 19, 2026
3d8180e
fix: deserialize enums with any casing (#1342)
andreiancuta-uipath Feb 19, 2026
38caa02
fix: handle exceptions in serialize_object (#1349)
andreitava-uip Feb 19, 2026
ee4dd71
feat: move bindings resolution before runtime instantiation on debug …
radu-mocanu Feb 19, 2026
876f1a5
feat: add nested path resolution for targetOutputKey (#1294)
Chibionos Feb 20, 2026
942394a
feat: add automation tracker to client scope (#1347)
dianagrecu-uipath Feb 20, 2026
3e21ef4
feat: add DynamicToolsMode to AgentMcpResourceConfig (#1353)
edis-uipath Feb 20, 2026
c61717d
fix: include prompt and model in eval run response (#1351)
ameyjain Feb 20, 2026
18493f0
fix: save trace as agent run suspends and resumes (#1350)
mathurk Feb 20, 2026
9029e3e
chore: bump version 2.8.48 (#1357)
mathurk Feb 20, 2026
bb02d33
fix: skip root evals folder files in push and add telemetry error log…
AAgnihotry Feb 21, 2026
7012ab4
fix: remove obsolete llm agent protocol from evals (#1359)
cristipufu Feb 22, 2026
4cc54b2
fix: remove auto-generated files from samples (#1361)
cristipufu Feb 23, 2026
4cb150b
feat: extract platform module to uipath-platform library (#1354)
radu-mocanu Feb 23, 2026
642722f
fix: decouple CLI from evals (#1360)
cristipufu Feb 23, 2026
06d5bd4
Update citation prompt to use self-closing xml tags [JAR-8939] (#1340)
JoshParkSJ Feb 23, 2026
7d4f51f
feat: add telemetry for cli (#1205)
radugheo Feb 24, 2026
03e0aa2
fix: isolate env variables between cli server command runs (#1366)
cristipufu Feb 24, 2026
f3218b5
fix(evals): Exact match float int mismatch (#1365)
andrei-rusu Feb 24, 2026
c7368df
feat: map legacy conversational eval inputs and outputs (#1276)
shannonsuhendra Feb 24, 2026
494adf1
fix: add input-overrides examples for evaluations with file attachmen…
AAgnihotry Feb 24, 2026
e208e0a
chore: update favicon (#1368)
vnaren23 Feb 25, 2026
f08f414
feat: gracefully handle unknown resource overwrites (#1364)
cotovanu-cristian Feb 25, 2026
d850fd2
feat: wire pull command into middleware system (#1372)
cotovanu-cristian Feb 25, 2026
96a24d4
fix: set default query settings for context (#1373)
andreiancuta-uipath Feb 25, 2026
a508dd5
fix(evals): Recursive float comparison across evaluators (#1370)
andrei-rusu Feb 25, 2026
c2308d0
fix: exclude none for conversational eval expected output type (#1374)
maxduu Feb 25, 2026
f47405a
fix: normalize nil UUID ProcessKey to null for debug runs (#1376)
saksharthakkar Feb 26, 2026
e7f925b
fix: intermittent app insights event loss in serverless env (#1371)
cristian-groza Feb 26, 2026
9cb7955
fix: remove space from citation NO-JIRA (#1377)
JoshParkSJ Feb 26, 2026
064c439
chore: bump version with uipath-platform (#1378)
dianagrecu-uipath Feb 26, 2026
9dc444d
fix: make context and web search format explicit NO-JIRA (#1379)
JoshParkSJ Feb 26, 2026
4876079
fix: context field fix (#1384)
CalebMartinUiPath Feb 27, 2026
ce7a8a1
fix: reconfigure stdout/stderr to UTF-8 on Windows to prevent charmap…
cristipufu Feb 27, 2026
6c1f50e
feat: coded functions (#1254)
cristipufu Feb 27, 2026
c522b2e
fix: subprocess encoding on windows (#1386)
cristipufu Feb 27, 2026
40de0d3
feat: add evaluation-level expectedOutput to EvaluationItem (#1387)
Chibionos Feb 27, 2026
048dafc
fix: fix missing details in json output when running uipath eval (#1382)
bai-uipath Feb 27, 2026
95e55d3
feat: add internal tenant/account headers for local flow tracing (#1392)
mjnovice Feb 28, 2026
c89e5ae
fix: resolve PEP 563 annotations and propagate errors in FunctionsRun…
cristipufu Mar 1, 2026
e262dcb
chore: remove hitl tests (#1367)
radu-mocanu Mar 2, 2026
8d81895
refactor: allow custom evaluator aggregation (#1396)
DragosBobolea Mar 2, 2026
9c4a0a2
feature: add classification evaluators (#1397)
DragosBobolea Mar 2, 2026
060117e
refactor: move conversational utils from cli to eval module (#1402)
cristipufu Mar 3, 2026
2f7b418
fix: evals logs as debug (#1401)
cristipufu Mar 3, 2026
d2dea9c
feat: add support for input overrides for attachments in conversation…
norman-le Mar 3, 2026
a2aaf1b
fix: use runtime factory for eval entrypoint discovery and show usage…
cristipufu Mar 4, 2026
120384a
feat: consolidate uipath-core and uipath-platform into monorepo (#1403)
radu-mocanu Mar 4, 2026
3892693
fix: publish-docs symlinks, remove ci action on push to main (#1407)
radu-mocanu Mar 4, 2026
b198a0a
chore: add readme at root repo level (#1408)
radu-mocanu Mar 4, 2026
a7ef878
chore: make integration tests change-aware (#1409)
radu-mocanu Mar 4, 2026
532c107
fix: pass None to rule evaluation when guardrail references missing f…
valentinabojan Mar 4, 2026
f7fd769
fix: add persona field to AgentSettings for voice (#1399)
JoshParkSJ Mar 4, 2026
2f9c140
feat: restore Data Fabric context changes after main merge
UIPath-Harshit Mar 5, 2026
6666e4c
Merge remote-tracking branch 'origin/feat/df-agent-integrations' into…
UIPath-Harshit Mar 5, 2026
edf56ed
fix: align entity SQL query APIs with merged feature branch tests
UIPath-Harshit Mar 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 11 additions & 3 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
test:uipath-langchain:
- changed-files:
- any-glob-to-any-file: ['packages/uipath/src/**/*.py']
- changed-files:
- any-glob-to-any-file: ['packages/uipath-platform/src/**/*.py']
- changed-files:
- any-glob-to-any-file: ['packages/uipath-core/src/**/*.py']

test:uipath-llamaindex:
- changed-files:
- any-glob-to-any-file: ['src/**/*.py']
- any-glob-to-any-file: ['packages/uipath/src/**/*.py']

test:uipath-langchain:
test:uipath-runtime:
- changed-files:
- any-glob-to-any-file: ['src/**/*.py']
- any-glob-to-any-file: ['packages/uipath-core/src/**/*.py']
162 changes: 162 additions & 0 deletions .github/scripts/detect_changed_packages.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
#!/usr/bin/env python3
"""Detect which packages have changed in a PR or push to main.

Includes dependency-aware propagation: when a package changes, all
downstream dependents are also included in the test list.
"""

import json
import os
import subprocess
import sys
from pathlib import Path

# Internal dependency graph: package -> packages that depend on it.
# When a package changes, its dependents' tests also run.
# Add new entries here as packages are added to the monorepo.
# External dependents (uipath-langchain, uipath-runtime, etc.) are
# handled separately via labeler.yml auto-labels.
DEPENDENTS: dict[str, list[str]] = {
"uipath-core": ["uipath-platform", "uipath"],
"uipath-platform": ["uipath"],
}


def expand_with_dependents(changed: list[str], all_packages: list[str]) -> list[str]:
"""Expand changed package list to include downstream dependents."""
expanded = set(changed)
for pkg in changed:
for dep in DEPENDENTS.get(pkg, []):
if dep in all_packages:
expanded.add(dep)
return sorted(expanded)


def get_all_packages() -> list[str]:
"""Get all packages in the monorepo."""
packages_dir = Path("packages")
packages = []

for item in packages_dir.iterdir():
if item.is_dir() and (item / "pyproject.toml").exists():
packages.append(item.name)

return sorted(packages)


def get_changed_packages(base_sha: str, head_sha: str) -> list[str]:
"""Get packages that have changed between two commits."""
try:
# Get changed files
result = subprocess.run(
["git", "diff", "--name-only", f"{base_sha}...{head_sha}"],
capture_output=True,
text=True,
check=True,
)

changed_files = result.stdout.strip().split("\n")

# Extract package names from paths like "packages/uipath-llamaindex/..."
changed_packages = set()
for file_path in changed_files:
if file_path.startswith("packages/"):
parts = file_path.split("/")
if len(parts) >= 2:
package_name = parts[1]
# Verify it's a real package
if (Path("packages") / package_name / "pyproject.toml").exists():
changed_packages.add(package_name)

return sorted(changed_packages)

except subprocess.CalledProcessError as e:
print(f"Error running git diff: {e}", file=sys.stderr)
return []


def get_changed_packages_auto() -> list[str]:
"""Auto-detect changed packages using git."""
try:
# Try to detect changes against origin/main
result = subprocess.run(
["git", "diff", "--name-only", "origin/main...HEAD"],
capture_output=True,
text=True,
check=True,
)

changed_files = result.stdout.strip().split("\n")

# Extract package names
changed_packages = set()
for file_path in changed_files:
if file_path.startswith("packages/"):
parts = file_path.split("/")
if len(parts) >= 2:
package_name = parts[1]
if (Path("packages") / package_name / "pyproject.toml").exists():
changed_packages.add(package_name)

return sorted(changed_packages)

except (subprocess.CalledProcessError, Exception) as e:
print(f"Warning: Could not auto-detect changes: {e}", file=sys.stderr)
return []


def main():
"""Main entry point."""
event_name = os.getenv("GITHUB_EVENT_NAME", "")
base_sha = os.getenv("BASE_SHA", "")
head_sha = os.getenv("HEAD_SHA", "")

all_packages = get_all_packages()

# If we have explicit SHAs (from PR or push), detect changed packages
if base_sha and head_sha:
packages = get_changed_packages(base_sha, head_sha)
event_type = "pull request" if event_name == "pull_request" else "push"
print(f"{event_type.capitalize()} - detected {len(packages)} directly changed package(s):")
for pkg in packages:
print(f" - {pkg}")

# workflow_call or missing context - try auto-detection
else:
print(f"Event: {event_name or 'workflow_call'} - attempting auto-detection")
packages = get_changed_packages_auto()

if packages:
print(f"Auto-detected {len(packages)} directly changed package(s):")
for pkg in packages:
print(f" - {pkg}")
else:
# Fallback: test all packages
print("Could not detect changes - testing all packages")
packages = all_packages
for pkg in packages:
print(f" - {pkg}")

# Expand with downstream dependents
expanded = expand_with_dependents(packages, all_packages)
added = sorted(set(expanded) - set(packages))
if added:
print(f"\nAdded {len(added)} dependent package(s):")
for pkg in added:
print(f" - {pkg}")
packages = expanded

# Output as JSON for GitHub Actions
packages_json = json.dumps(packages)
print(f"\nPackages JSON: {packages_json}")

# Write to GitHub output
github_output = os.getenv("GITHUB_OUTPUT")
if github_output:
with open(github_output, "a") as f:
f.write(f"packages={packages_json}\n")
f.write(f"count={len(packages)}\n")


if __name__ == "__main__":
main()
75 changes: 53 additions & 22 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,51 @@ on:
branches:
- main
paths:
- pyproject.toml
- 'packages/*/pyproject.toml'
- '!packages/*/samples/**/pyproject.toml'
- '!packages/*/testcases/**/pyproject.toml'

permissions:
contents: read
pull-requests: read

jobs:
lint:
uses: ./.github/workflows/lint.yml
detect-changed-packages:
runs-on: ubuntu-latest
outputs:
packages: ${{ steps.detect.outputs.packages }}
count: ${{ steps.detect.outputs.count }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

test:
uses: ./.github/workflows/test.yml
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Detect changed packages
id: detect
env:
GITHUB_EVENT_NAME: ${{ github.event_name }}
BASE_SHA: ${{ github.event.before }}
HEAD_SHA: ${{ github.event.after }}
run: python .github/scripts/detect_changed_packages.py

build:
name: Build
name: Build ${{ matrix.package }}
needs: detect-changed-packages
if: needs.detect-changed-packages.outputs.count > 0 && github.repository == 'UiPath/uipath-python'
runs-on: ubuntu-latest

needs:
- lint
- test

if: ${{ github.repository == 'UiPath/uipath-python' }}
defaults:
run:
working-directory: packages/${{ matrix.package }}
strategy:
fail-fast: false
matrix:
package: ${{ fromJson(needs.detect-changed-packages.outputs.packages) }}
permissions:
contents: read
actions: write
Expand All @@ -40,15 +67,17 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version-file: ".python-version"
python-version-file: "packages/${{ matrix.package }}/.python-version"

- name: Install dependencies
run: uv sync --all-extras

- name: Update AGENTS.md
if: matrix.package == 'uipath'
run: uv run python scripts/update_agents_md.py

- name: Replace connection string placeholder
if: matrix.package == 'uipath'
run: |
originalfile="src/uipath/telemetry/_constants.py"
tmpfile=$(mktemp)
Expand All @@ -57,24 +86,26 @@ jobs:
rsync -a --no-whole-file --ignore-existing "$originalfile" "$tmpfile"
envsubst '$CONNECTION_STRING' < "$originalfile" > "$tmpfile" && mv "$tmpfile" "$originalfile"
env:
CONNECTION_STRING: ${{ secrets.APPINS_CONNECTION_STRING }}
CONNECTION_STRING: ${{ secrets.APPLICATIONINSIGHTS_CONNECTION_STRING }}

- name: Build
run: uv build
run: uv build --no-sources --package ${{ matrix.package }}

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: release-dists
path: dist/
name: release-dists-${{ matrix.package }}
path: packages/${{ matrix.package }}/dist/

pypi-publish:
name: Upload release to PyPI
name: Upload ${{ matrix.package }} to PyPI
needs: [detect-changed-packages, build]
runs-on: ubuntu-latest
environment: pypi

needs:
- build
strategy:
fail-fast: false
matrix:
package: ${{ fromJson(needs.detect-changed-packages.outputs.packages) }}
permissions:
contents: read
id-token: write
Expand All @@ -83,7 +114,7 @@ jobs:
- name: Retrieve release distributions
uses: actions/download-artifact@v4
with:
name: release-dists
name: release-dists-${{ matrix.package }}
path: dist/

- name: Publish package distributions to PyPI
Expand Down
12 changes: 5 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,20 @@
name: CI

on:
push:
branches:
- main
paths-ignore:
- pyproject.toml
pull_request:
branches:
- main

permissions:
contents: read

jobs:
commit-lint:
if: ${{ github.event_name == 'pull_request' }}
uses: ./.github/workflows/commitlint.yml

lint:
uses: ./.github/workflows/lint.yml
uses: ./.github/workflows/lint-packages.yml

test:
uses: ./.github/workflows/test.yml
uses: ./.github/workflows/test-packages.yml
Loading
Loading