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
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.13"
version = "0.1.14"
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
47 changes: 47 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,47 @@
"""Init file for memory module."""

from ._memory_service import MemoryService
from .memory import (
EpisodicMemoryCreateRequest,
EpisodicMemoryField,
EpisodicMemoryIndex,
EpisodicMemoryListResponse,
EpisodicMemoryPatchRequest,
EpisodicMemoryStatus,
FeedbackMemoryStatus,
FieldSettings,
MemoryIngestRequest,
MemoryIngestResponse,
MemoryItemResponse,
MemoryItemUpdateRequest,
MemoryMatch,
MemoryMatchField,
MemorySearchRequest,
MemorySearchResponse,
SearchField,
SearchMode,
SearchSettings,
)

__all__ = [
"EpisodicMemoryCreateRequest",
"EpisodicMemoryField",
"EpisodicMemoryIndex",
"EpisodicMemoryListResponse",
"EpisodicMemoryPatchRequest",
"EpisodicMemoryStatus",
"FeedbackMemoryStatus",
"FieldSettings",
"MemoryIngestRequest",
"MemoryIngestResponse",
"MemoryItemResponse",
"MemoryItemUpdateRequest",
"MemoryMatch",
"MemoryMatchField",
"MemorySearchRequest",
"MemorySearchResponse",
"MemoryService",
"SearchField",
"SearchMode",
"SearchSettings",
]
Loading
Loading