Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
91653a0
feat: scaffold MemoryService for Agent Episodic Memory (URT migration)
mjnovice Mar 20, 2026
ef36ee3
fix: sort MemoryService import to fix ruff I001 lint error
mjnovice Mar 23, 2026
66e3af3
fix: resolve ruff I001 import sorting errors across platform package
mjnovice Mar 23, 2026
bf6da0e
fix: align MemoryService models and endpoints with ECS v2 swagger con…
mjnovice Mar 27, 2026
dfc086a
fix: route ingest and search through LLMOps, not directly to ECS
mjnovice Mar 27, 2026
0180323
fix: resolve mypy type-arg errors in MemoryService
mjnovice Mar 27, 2026
bc58899
test: add E2E tests for MemoryService against real ECS + LLMOps
mjnovice Mar 27, 2026
e1adf5e
fix: use llmopstenant_ gateway prefix and require field settings
mjnovice Mar 27, 2026
166d400
ci: add E2E memory tests to GitHub Actions workflow
mjnovice Mar 27, 2026
4443fe0
fix: resolve folder key from folder_path for serverless environments
mjnovice Mar 27, 2026
d066733
refactor: clean up MemoryService to match actual API usage
mjnovice Mar 30, 2026
0090a21
fix: address PR review comments on MemoryService
mjnovice Mar 30, 2026
8bdf090
test: add unit tests for MemoryService with HTTP mocking
mjnovice Mar 30, 2026
5e8c8e0
chore: remove unused EpisodicMemoryField and EpisodicMemoryStatus
mjnovice Mar 30, 2026
a0ea814
refactor: rename EpisodicMemoryIndex to MemorySpace per review
mjnovice Mar 30, 2026
cdae57e
fix: resolve ruff I001 import sorting errors after rebase
mjnovice Mar 30, 2026
38291b4
chore: bump uipath-platform version to 0.1.16
mjnovice Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 54 additions & 1 deletion .github/workflows/test-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,55 @@ jobs:
working-directory: packages/uipath-platform
run: uv run pytest

e2e-uipath-platform:
name: E2E (uipath-platform, memory)
needs: detect-changed-packages
runs-on: ubuntu-latest
steps:
- name: Check if package changed
id: check
shell: bash
run: |
if echo '${{ needs.detect-changed-packages.outputs.packages }}' | jq -e 'index("uipath-platform")' > /dev/null; then
echo "skip=false" >> $GITHUB_OUTPUT
else
echo "skip=true" >> $GITHUB_OUTPUT
fi

- name: Skip
if: steps.check.outputs.skip == 'true'
shell: bash
run: echo "Skipping - no changes to uipath-platform"

- name: Checkout
if: steps.check.outputs.skip != 'true'
uses: actions/checkout@v4

- name: Setup uv
if: steps.check.outputs.skip != 'true'
uses: astral-sh/setup-uv@v5

- name: Setup Python
if: steps.check.outputs.skip != 'true'
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install dependencies
if: steps.check.outputs.skip != 'true'
working-directory: packages/uipath-platform
run: uv sync --all-extras --python 3.11

- name: Run E2E memory tests
if: steps.check.outputs.skip != 'true'
working-directory: packages/uipath-platform
env:
UIPATH_URL: ${{ secrets.ALPHA_BASE_URL }}
UIPATH_CLIENT_ID: ${{ secrets.ALPHA_TEST_CLIENT_ID }}
UIPATH_CLIENT_SECRET: ${{ secrets.ALPHA_TEST_CLIENT_SECRET }}
UIPATH_FOLDER_KEY: ${{ secrets.UIPATH_MEMORY_FOLDER }}
run: uv run pytest tests/services/test_memory_service_e2e.py -m e2e -v --no-cov

test-uipath:
name: Test (uipath, ${{ matrix.python-version }}, ${{ matrix.os }})
needs: detect-changed-packages
Expand Down Expand Up @@ -184,7 +233,7 @@ jobs:

test-gate:
name: Test
needs: [test-uipath-core, test-uipath-platform, test-uipath]
needs: [test-uipath-core, test-uipath-platform, test-uipath, e2e-uipath-platform]
runs-on: ubuntu-latest
if: always()
steps:
Expand All @@ -196,4 +245,8 @@ jobs:
echo "Tests failed"
exit 1
fi
# E2E tests are informational — log but don't block
if [[ "${{ needs.e2e-uipath-platform.result }}" == "failure" ]]; then
echo "⚠️ E2E memory tests failed (non-blocking)"
fi
echo "All tests passed"
7 changes: 5 additions & 2 deletions packages/uipath-platform/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "uipath-platform"
version = "0.1.15"
version = "0.1.16"
description = "HTTP client library for programmatic access to UiPath Platform"
readme = { file = "README.md", content-type = "text/markdown" }
requires-python = ">=3.11"
Expand Down Expand Up @@ -98,9 +98,12 @@ warn_required_dynamic_aliases = true
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = "test_*.py"
addopts = "-ra -q --cov=src/uipath --cov-report=term-missing"
addopts = "-ra -q --cov=src/uipath --cov-report=term-missing -m 'not e2e'"
asyncio_default_fixture_loop_scope = "function"
asyncio_mode = "auto"
markers = [
"e2e: end-to-end tests against real ECS/LLMOps (requires UIPATH_URL, UIPATH_ACCESS_TOKEN, UIPATH_FOLDER_KEY)",
]

[tool.coverage.report]
show_missing = true
Expand Down
5 changes: 5 additions & 0 deletions packages/uipath-platform/src/uipath/platform/_uipath.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from .entities import EntitiesService
from .errors import BaseUrlMissingError, SecretMissingError
from .guardrails import GuardrailsService
from .memory import MemoryService
from .orchestrator import (
AssetsService,
AttachmentsService,
Expand Down Expand Up @@ -113,6 +114,10 @@ def context_grounding(self) -> ContextGroundingService:
self.buckets,
)

@property
def memory(self) -> MemoryService:
return MemoryService(self._config, self._execution_context, self.folders)

@property
def documents(self) -> DocumentsService:
return DocumentsService(self._config, self._execution_context)
Expand Down
39 changes: 39 additions & 0 deletions packages/uipath-platform/src/uipath/platform/memory/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
"""Init file for memory module."""

from ._memory_service import MemoryService
from .memory import (
CachedRecall,
EscalationMemoryIngestRequest,
EscalationMemoryMatch,
EscalationMemorySearchResponse,
FieldSettings,
MemoryMatch,
MemoryMatchField,
MemorySearchRequest,
MemorySearchResponse,
MemorySpace,
MemorySpaceCreateRequest,
MemorySpaceListResponse,
SearchField,
SearchMode,
SearchSettings,
)

__all__ = [
"CachedRecall",
"EscalationMemoryIngestRequest",
"EscalationMemoryMatch",
"EscalationMemorySearchResponse",
"FieldSettings",
"MemoryMatch",
"MemoryMatchField",
"MemorySearchRequest",
"MemorySearchResponse",
"MemoryService",
"MemorySpace",
"MemorySpaceCreateRequest",
"MemorySpaceListResponse",
"SearchField",
"SearchMode",
"SearchSettings",
]
Loading
Loading