mirror of
https://github.com/temporal-community/temporal-ai-agent.git
synced 2026-03-16 22:48:09 +01:00
uv migration
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
"name": "Temporal AI Agentic Demo",
|
"name": "Temporal AI Agentic Demo",
|
||||||
"features": {
|
"features": {
|
||||||
"ghcr.io/devcontainers/features/node:1": {},
|
"ghcr.io/devcontainers/features/node:1": {},
|
||||||
"ghcr.io/devcontainers-extra/features/poetry:2": {},
|
"ghcr.io/va-h/devcontainers-features/uv:1": {},
|
||||||
"ghcr.io/devcontainers/features/python:1": {},
|
"ghcr.io/devcontainers/features/python:1": {},
|
||||||
"ghcr.io/devcontainers-extra/features/temporal-cli:1": {},
|
"ghcr.io/devcontainers-extra/features/temporal-cli:1": {},
|
||||||
"ghcr.io/mrsimonemms/devcontainers/tcld:1": {}
|
"ghcr.io/mrsimonemms/devcontainers/tcld:1": {}
|
||||||
|
|||||||
45
AGENTS.md
45
AGENTS.md
@@ -34,11 +34,10 @@ Default URLs:
|
|||||||
|
|
||||||
1. **Prerequisites:**
|
1. **Prerequisites:**
|
||||||
```bash
|
```bash
|
||||||
# Install Poetry for Python dependency management
|
# Install uv and Temporal server (MacOS)
|
||||||
curl -sSL https://install.python-poetry.org | python3 -
|
brew install uv
|
||||||
|
|
||||||
# Start Temporal server (Mac)
|
|
||||||
brew install temporal
|
brew install temporal
|
||||||
|
|
||||||
temporal server start-dev
|
temporal server start-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -50,9 +49,9 @@ Default URLs:
|
|||||||
make run-api # Starts the API server
|
make run-api # Starts the API server
|
||||||
|
|
||||||
# Or manually:
|
# Or manually:
|
||||||
poetry install
|
uv sync
|
||||||
poetry run python scripts/run_worker.py # In one terminal
|
uv run python scripts/run_worker.py # In one terminal
|
||||||
poetry run uvicorn api.main:app --reload # In another terminal
|
uv run uvicorn api.main:app --reload # In another terminal
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Frontend (React):**
|
3. **Frontend (React):**
|
||||||
@@ -102,20 +101,20 @@ The project includes comprehensive tests using Temporal's testing framework:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install test dependencies
|
# Install test dependencies
|
||||||
poetry install --with dev
|
uv sync
|
||||||
|
|
||||||
# Run all tests
|
# Run all tests
|
||||||
poetry run pytest
|
uv run pytest
|
||||||
|
|
||||||
# Run with time-skipping for faster execution
|
# Run with time-skipping for faster execution
|
||||||
poetry run pytest --workflow-environment=time-skipping
|
uv run pytest --workflow-environment=time-skipping
|
||||||
|
|
||||||
# Run specific test categories
|
# Run specific test categories
|
||||||
poetry run pytest tests/test_tool_activities.py -v # Activity tests
|
uv run pytest tests/test_tool_activities.py -v # Activity tests
|
||||||
poetry run pytest tests/test_agent_goal_workflow.py -v # Workflow tests
|
uv run pytest tests/test_agent_goal_workflow.py -v # Workflow tests
|
||||||
|
|
||||||
# Run with coverage
|
# Run with coverage
|
||||||
poetry run pytest --cov=workflows --cov=activities
|
uv run pytest --cov=workflows --cov=activities
|
||||||
```
|
```
|
||||||
|
|
||||||
**Test Coverage:**
|
**Test Coverage:**
|
||||||
@@ -130,15 +129,17 @@ poetry run pytest --cov=workflows --cov=activities
|
|||||||
## Linting and Code Quality
|
## Linting and Code Quality
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Using Poetry tasks
|
# Format code
|
||||||
poetry run poe format # Format code with black and isort
|
uv run black .
|
||||||
poetry run poe lint # Check code style and types
|
uv run isort .
|
||||||
poetry run poe test # Run test suite
|
|
||||||
|
|
||||||
# Manual commands
|
# Check code style and types
|
||||||
poetry run black .
|
uv run black --check .
|
||||||
poetry run isort .
|
uv run isort --check-only .
|
||||||
poetry run mypy --check-untyped-defs --namespace-packages .
|
uv run mypy --check-untyped-defs --namespace-packages .
|
||||||
|
|
||||||
|
# Run test suite
|
||||||
|
uv run pytest
|
||||||
```
|
```
|
||||||
|
|
||||||
## Agent Customization
|
## Agent Customization
|
||||||
@@ -192,7 +193,7 @@ For detailed architecture information, see [architecture.md](docs/architecture.m
|
|||||||
- Use clear commit messages describing the change purpose
|
- Use clear commit messages describing the change purpose
|
||||||
- Reference specific files and line numbers when relevant (e.g., `workflows/agent_goal_workflow.py:125`)
|
- Reference specific files and line numbers when relevant (e.g., `workflows/agent_goal_workflow.py:125`)
|
||||||
- Open PRs describing **what changed** and **why**
|
- Open PRs describing **what changed** and **why**
|
||||||
- Ensure tests pass before submitting: `poetry run pytest --workflow-environment=time-skipping`
|
- Ensure tests pass before submitting: `uv run pytest --workflow-environment=time-skipping`
|
||||||
|
|
||||||
## Additional Resources
|
## Additional Resources
|
||||||
- **Setup Guide**: [setup.md](docs/setup.md) - Detailed configuration instructions
|
- **Setup Guide**: [setup.md](docs/setup.md) - Detailed configuration instructions
|
||||||
|
|||||||
18
Dockerfile
18
Dockerfile
@@ -4,17 +4,19 @@ WORKDIR /app
|
|||||||
|
|
||||||
# Install system dependencies
|
# Install system dependencies
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y --no-install-recommends gcc build-essential && \
|
apt-get install -y --no-install-recommends gcc build-essential curl && \
|
||||||
apt-get clean && \
|
apt-get clean && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Copy requirements first for better caching
|
# Install uv
|
||||||
RUN pip install --no-cache-dir poetry
|
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
|
ENV PATH="$PATH:/root/.local/bin"
|
||||||
|
|
||||||
# Install Python dependencies without creating a virtualenv
|
# Copy dependency files and README (needed for package build)
|
||||||
COPY pyproject.toml poetry.lock ./
|
COPY pyproject.toml uv.lock README.md ./
|
||||||
RUN poetry config virtualenvs.create false \
|
|
||||||
&& poetry install --without dev --no-interaction --no-ansi --no-root
|
# Install dependencies and create virtual environment
|
||||||
|
RUN uv sync --frozen
|
||||||
|
|
||||||
# Copy application code
|
# Copy application code
|
||||||
COPY . .
|
COPY . .
|
||||||
@@ -27,4 +29,4 @@ ENV PYTHONPATH=/app
|
|||||||
EXPOSE 8000
|
EXPOSE 8000
|
||||||
|
|
||||||
# Default to running only the API server; worker and train-api are separate Compose services
|
# Default to running only the API server; worker and train-api are separate Compose services
|
||||||
CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
CMD ["uv", "run", "uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||||
|
|||||||
27
Makefile
27
Makefile
@@ -1,35 +1,24 @@
|
|||||||
.PHONY: setup install run-worker run-api run-frontend run-train-api run-legacy-worker run-enterprise setup-venv check-python run-dev
|
.PHONY: setup install run-worker run-api run-frontend run-train-api run-legacy-worker run-enterprise setup-venv check-python run-dev
|
||||||
|
|
||||||
# Setup commands
|
setup:
|
||||||
setup: check-python setup-venv install
|
uv sync
|
||||||
|
|
||||||
check-python:
|
|
||||||
@which python3 >/dev/null 2>&1 || (echo "Python 3 is required. Please install it first." && exit 1)
|
|
||||||
@which poetry >/dev/null 2>&1 || (echo "Poetry is required. Please install it first." && exit 1)
|
|
||||||
|
|
||||||
setup-venv:
|
|
||||||
python3 -m venv venv
|
|
||||||
@echo "Virtual environment created. Don't forget to activate it with 'source venv/bin/activate'"
|
|
||||||
|
|
||||||
install:
|
|
||||||
poetry install
|
|
||||||
cd frontend && npm install
|
cd frontend && npm install
|
||||||
|
|
||||||
# Run commands
|
# Run commands
|
||||||
run-worker:
|
run-worker:
|
||||||
poetry run python scripts/run_worker.py
|
uv run python scripts/run_worker.py
|
||||||
|
|
||||||
run-api:
|
run-api:
|
||||||
poetry run uvicorn api.main:app --reload
|
uv run uvicorn api.main:app --reload
|
||||||
|
|
||||||
run-frontend:
|
run-frontend:
|
||||||
cd frontend && npx vite
|
cd frontend && npx vite
|
||||||
|
|
||||||
run-train-api:
|
run-train-api:
|
||||||
poetry run python thirdparty/train_api.py
|
uv run python thirdparty/train_api.py
|
||||||
|
|
||||||
run-legacy-worker:
|
run-legacy-worker:
|
||||||
poetry run python scripts/run_legacy_worker.py
|
uv run python scripts/run_legacy_worker.py
|
||||||
|
|
||||||
run-enterprise:
|
run-enterprise:
|
||||||
cd enterprise && dotnet build && dotnet run
|
cd enterprise && dotnet build && dotnet run
|
||||||
@@ -50,9 +39,7 @@ run-dev:
|
|||||||
# Help command
|
# Help command
|
||||||
help:
|
help:
|
||||||
@echo "Available commands:"
|
@echo "Available commands:"
|
||||||
@echo " make setup - Create virtual environment and install dependencies"
|
@echo " make setup - Install all dependencies"
|
||||||
@echo " make setup-venv - Create virtual environment only"
|
|
||||||
@echo " make install - Install all dependencies"
|
|
||||||
@echo " make run-worker - Start the Temporal worker"
|
@echo " make run-worker - Start the Temporal worker"
|
||||||
@echo " make run-api - Start the API server"
|
@echo " make run-api - Start the API server"
|
||||||
@echo " make run-frontend - Start the frontend development server"
|
@echo " make run-frontend - Start the frontend development server"
|
||||||
|
|||||||
@@ -65,13 +65,13 @@ The project includes comprehensive tests for workflows and activities using Temp
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install dependencies including test dependencies
|
# Install dependencies including test dependencies
|
||||||
poetry install --with dev
|
uv sync
|
||||||
|
|
||||||
# Run all tests
|
# Run all tests
|
||||||
poetry run pytest
|
uv run pytest
|
||||||
|
|
||||||
# Run with time-skipping for faster execution
|
# Run with time-skipping for faster execution
|
||||||
poetry run pytest --workflow-environment=time-skipping
|
uv run pytest --workflow-environment=time-skipping
|
||||||
```
|
```
|
||||||
|
|
||||||
**Test Coverage:**
|
**Test Coverage:**
|
||||||
|
|||||||
@@ -2,17 +2,17 @@ services:
|
|||||||
api:
|
api:
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/app:cached
|
- ./:/app:cached
|
||||||
command: uvicorn api.main:app --host 0.0.0.0 --port 8000 --reload
|
command: uv run uvicorn api.main:app --host 0.0.0.0 --port 8000 --reload
|
||||||
|
|
||||||
worker:
|
worker:
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/app:cached
|
- ./:/app:cached
|
||||||
command: python scripts/run_worker.py
|
command: uv run python scripts/run_worker.py
|
||||||
|
|
||||||
train-api:
|
train-api:
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/app:cached
|
- ./:/app:cached
|
||||||
command: python thirdparty/train_api.py
|
command: uv run python thirdparty/train_api.py
|
||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ services:
|
|||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
- TEMPORAL_ADDRESS=temporal:7233
|
- TEMPORAL_ADDRESS=temporal:7233
|
||||||
command: python scripts/run_worker.py
|
command: uv run python scripts/run_worker.py
|
||||||
networks:
|
networks:
|
||||||
- temporal-network
|
- temporal-network
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ services:
|
|||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
- TEMPORAL_ADDRESS=temporal:7233
|
- TEMPORAL_ADDRESS=temporal:7233
|
||||||
command: python thirdparty/train_api.py
|
command: uv run python thirdparty/train_api.py
|
||||||
networks:
|
networks:
|
||||||
- temporal-network
|
- temporal-network
|
||||||
|
|
||||||
|
|||||||
@@ -8,40 +8,32 @@ This document provides guidelines for contributing to `temporal-ai-agent`. All s
|
|||||||
We use `black` for code formatting and `isort` for import sorting to maintain a consistent codebase.
|
We use `black` for code formatting and `isort` for import sorting to maintain a consistent codebase.
|
||||||
- **Format code:**
|
- **Format code:**
|
||||||
```bash
|
```bash
|
||||||
poetry run poe format
|
uv run black .
|
||||||
```
|
uv run isort .
|
||||||
Or manually:
|
|
||||||
```bash
|
|
||||||
poetry run black .
|
|
||||||
poetry run isort .
|
|
||||||
```
|
```
|
||||||
Please format your code before committing.
|
Please format your code before committing.
|
||||||
|
|
||||||
### Linting & Type Checking
|
### Linting & Type Checking
|
||||||
We use `mypy` for static type checking and other linters configured via `poe the poet`.
|
We use `mypy` for static type checking.
|
||||||
- **Run linters and type checks:**
|
- **Run type checks:**
|
||||||
```bash
|
```bash
|
||||||
poetry run poe lint
|
uv run mypy --check-untyped-defs --namespace-packages .
|
||||||
```
|
|
||||||
Or manually for type checking:
|
|
||||||
```bash
|
|
||||||
poetry run mypy --check-untyped-defs --namespace-packages .
|
|
||||||
```
|
```
|
||||||
Ensure all linting and type checks pass before submitting a pull request.
|
Ensure all linting and type checks pass before submitting a pull request.
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
Comprehensive testing is crucial for this project. We use `pytest` and Temporal's testing framework.
|
Comprehensive testing is crucial for this project. We use `pytest` and Temporal's testing framework.
|
||||||
- **Install test dependencies** (if not already done with `poetry install --with dev`):
|
- **Install test dependencies:**
|
||||||
```bash
|
```bash
|
||||||
poetry install --with dev
|
uv sync
|
||||||
```
|
```
|
||||||
- **Run all tests:**
|
- **Run all tests:**
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest
|
uv run pytest
|
||||||
```
|
```
|
||||||
- **Run tests with time-skipping (recommended for faster execution, especially in CI):**
|
- **Run tests with time-skipping (recommended for faster execution, especially in CI):**
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --workflow-environment=time-skipping
|
uv run pytest --workflow-environment=time-skipping
|
||||||
```
|
```
|
||||||
|
|
||||||
For detailed information on test categories, running specific tests, test environments, coverage, and troubleshooting, please refer to:
|
For detailed information on test categories, running specific tests, test environments, coverage, and troubleshooting, please refer to:
|
||||||
@@ -73,7 +65,7 @@ When you're ready to submit your changes:
|
|||||||
1. Push your branch to the remote repository.
|
1. Push your branch to the remote repository.
|
||||||
2. Open a Pull Request (PR) against the `main` branch.
|
2. Open a Pull Request (PR) against the `main` branch.
|
||||||
3. **Describe your changes:** Clearly explain what you changed and why. Reference any related issues.
|
3. **Describe your changes:** Clearly explain what you changed and why. Reference any related issues.
|
||||||
4. **Ensure tests pass:** All CI checks, including tests and linters, must pass. The command `poetry run pytest --workflow-environment=time-skipping` is a good one to run locally.
|
4. **Ensure tests pass:** All CI checks, including tests and linters, must pass. The command `uv run pytest --workflow-environment=time-skipping` is a good one to run locally.
|
||||||
5. **Request review:** Request a review from one or more maintainers.
|
5. **Request review:** Request a review from one or more maintainers.
|
||||||
|
|
||||||
## Reporting Bugs
|
## Reporting Bugs
|
||||||
|
|||||||
@@ -22,8 +22,6 @@ We've provided a Makefile to simplify the setup and running of the application.
|
|||||||
```bash
|
```bash
|
||||||
# Initial setup
|
# Initial setup
|
||||||
make setup # Creates virtual environment and installs dependencies
|
make setup # Creates virtual environment and installs dependencies
|
||||||
make setup-venv # Creates virtual environment only
|
|
||||||
make install # Installs all dependencies
|
|
||||||
|
|
||||||
# Running the application
|
# Running the application
|
||||||
make run-worker # Starts the Temporal worker
|
make run-worker # Starts the Temporal worker
|
||||||
@@ -159,24 +157,22 @@ Default urls:
|
|||||||
|
|
||||||
**Python Backend**
|
**Python Backend**
|
||||||
|
|
||||||
Requires [Poetry](https://python-poetry.org/) to manage dependencies.
|
Requires [`uv`](https://docs.astral.sh/uv/) to manage dependencies.
|
||||||
|
|
||||||
1. `python -m venv venv`
|
1. Install uv: `curl -LsSf https://astral.sh/uv/install.sh | sh`
|
||||||
|
|
||||||
2. `source venv/bin/activate`
|
2. `uv sync`
|
||||||
|
|
||||||
3. `poetry install`
|
|
||||||
|
|
||||||
Run the following commands in separate terminal windows:
|
Run the following commands in separate terminal windows:
|
||||||
|
|
||||||
1. Start the Temporal worker:
|
1. Start the Temporal worker:
|
||||||
```bash
|
```bash
|
||||||
poetry run python scripts/run_worker.py
|
uv run python scripts/run_worker.py
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Start the API server:
|
2. Start the API server:
|
||||||
```bash
|
```bash
|
||||||
poetry run uvicorn api.main:app --reload
|
uv run uvicorn api.main:app --reload
|
||||||
```
|
```
|
||||||
Access the API at `/docs` to see the available endpoints.
|
Access the API at `/docs` to see the available endpoints.
|
||||||
|
|
||||||
@@ -261,7 +257,7 @@ NOTE: This goal was developed for an on-stage demo and has failure (and its reso
|
|||||||
|
|
||||||
Required to search and book trains!
|
Required to search and book trains!
|
||||||
```bash
|
```bash
|
||||||
poetry run python thirdparty/train_api.py
|
uv run python thirdparty/train_api.py
|
||||||
|
|
||||||
# example url
|
# example url
|
||||||
# http://localhost:8080/api/search?from=london&to=liverpool&outbound_time=2025-04-18T09:00:00&inbound_time=2025-04-20T09:00:00
|
# http://localhost:8080/api/search?from=london&to=liverpool&outbound_time=2025-04-18T09:00:00&inbound_time=2025-04-20T09:00:00
|
||||||
@@ -273,7 +269,7 @@ poetry run python thirdparty/train_api.py
|
|||||||
These are Python activities that fail (raise NotImplemented) to show how Temporal handles a failure. You can run these activities with.
|
These are Python activities that fail (raise NotImplemented) to show how Temporal handles a failure. You can run these activities with.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
poetry run python scripts/run_legacy_worker.py
|
uv run python scripts/run_legacy_worker.py
|
||||||
```
|
```
|
||||||
|
|
||||||
The activity will fail and be retried infinitely. To rescue the activity (and its corresponding workflows), kill the worker and run the .NET one in the section below.
|
The activity will fail and be retried infinitely. To rescue the activity (and its corresponding workflows), kill the worker and run the .NET one in the section below.
|
||||||
@@ -328,8 +324,8 @@ For more details, check out [adding goals and tools guide](./adding-goals-and-to
|
|||||||
[ ] Select an LLM and add your API key to `.env` <br />
|
[ ] Select an LLM and add your API key to `.env` <br />
|
||||||
[ ] (Optional) set your starting goal and goal category in `.env` <br />
|
[ ] (Optional) set your starting goal and goal category in `.env` <br />
|
||||||
[ ] (Optional) configure your Temporal Cloud settings in `.env` <br />
|
[ ] (Optional) configure your Temporal Cloud settings in `.env` <br />
|
||||||
[ ] `poetry run python scripts/run_worker.py` <br />
|
[ ] `uv run python scripts/run_worker.py` <br />
|
||||||
[ ] `poetry run uvicorn api.main:app --reload` <br />
|
[ ] `uv run uvicorn api.main:app --reload` <br />
|
||||||
[ ] `cd frontend`, `npm install`, `npx vite` <br />
|
[ ] `cd frontend`, `npm install`, `npx vite` <br />
|
||||||
[ ] Access the UI at `http://localhost:5173` <br />
|
[ ] Access the UI at `http://localhost:5173` <br />
|
||||||
|
|
||||||
|
|||||||
@@ -6,17 +6,17 @@ This guide provides instructions for running the comprehensive test suite for th
|
|||||||
|
|
||||||
1. **Install dependencies**:
|
1. **Install dependencies**:
|
||||||
```bash
|
```bash
|
||||||
poetry install --with dev
|
uv sync
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Run all tests**:
|
2. **Run all tests**:
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest
|
uv run pytest
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Run with time-skipping for faster execution**:
|
3. **Run with time-skipping for faster execution**:
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --workflow-environment=time-skipping
|
uv run pytest --workflow-environment=time-skipping
|
||||||
```
|
```
|
||||||
|
|
||||||
## Test Categories
|
## Test Categories
|
||||||
@@ -39,33 +39,33 @@ This guide provides instructions for running the comprehensive test suite for th
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Run only activity tests
|
# Run only activity tests
|
||||||
poetry run pytest tests/test_tool_activities.py -v
|
uv run pytest tests/test_tool_activities.py -v
|
||||||
|
|
||||||
# Run only workflow tests
|
# Run only workflow tests
|
||||||
poetry run pytest tests/test_agent_goal_workflow.py -v
|
uv run pytest tests/test_agent_goal_workflow.py -v
|
||||||
|
|
||||||
# Run a specific test
|
# Run a specific test
|
||||||
poetry run pytest tests/test_tool_activities.py::TestToolActivities::test_sanitize_json_response -v
|
uv run pytest tests/test_tool_activities.py::TestToolActivities::test_sanitize_json_response -v
|
||||||
|
|
||||||
# Run tests matching a pattern
|
# Run tests matching a pattern
|
||||||
poetry run pytest -k "validation" -v
|
uv run pytest -k "validation" -v
|
||||||
```
|
```
|
||||||
|
|
||||||
## Test Environment Options
|
## Test Environment Options
|
||||||
|
|
||||||
### Local Environment (Default)
|
### Local Environment (Default)
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --workflow-environment=local
|
uv run pytest --workflow-environment=local
|
||||||
```
|
```
|
||||||
|
|
||||||
### Time-Skipping Environment (Recommended for CI)
|
### Time-Skipping Environment (Recommended for CI)
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --workflow-environment=time-skipping
|
uv run pytest --workflow-environment=time-skipping
|
||||||
```
|
```
|
||||||
|
|
||||||
### External Temporal Server
|
### External Temporal Server
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --workflow-environment=localhost:7233
|
uv run pytest --workflow-environment=localhost:7233
|
||||||
```
|
```
|
||||||
|
|
||||||
## Environment Variables
|
## Environment Variables
|
||||||
@@ -122,7 +122,7 @@ tests/test_tool_activities.py::TestToolActivities::test_get_wf_env_vars_default_
|
|||||||
|
|
||||||
### Common Issues
|
### Common Issues
|
||||||
|
|
||||||
1. **Module not found errors**: Run `poetry install --with dev`
|
1. **Module not found errors**: Run `uv sync`
|
||||||
2. **Async warnings**: These are expected with pytest-asyncio and can be ignored
|
2. **Async warnings**: These are expected with pytest-asyncio and can be ignored
|
||||||
3. **Test timeouts**: Use `--workflow-environment=time-skipping` for faster execution
|
3. **Test timeouts**: Use `--workflow-environment=time-skipping` for faster execution
|
||||||
4. **Import errors**: Check that you're running tests from the project root directory
|
4. **Import errors**: Check that you're running tests from the project root directory
|
||||||
@@ -131,19 +131,19 @@ tests/test_tool_activities.py::TestToolActivities::test_get_wf_env_vars_default_
|
|||||||
|
|
||||||
Enable verbose logging:
|
Enable verbose logging:
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --log-cli-level=DEBUG -s
|
uv run pytest --log-cli-level=DEBUG -s
|
||||||
```
|
```
|
||||||
|
|
||||||
Run with coverage:
|
Run with coverage:
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --cov=workflows --cov=activities
|
uv run pytest --cov=workflows --cov=activities
|
||||||
```
|
```
|
||||||
|
|
||||||
## Continuous Integration
|
## Continuous Integration
|
||||||
|
|
||||||
For CI environments, use:
|
For CI environments, use:
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --workflow-environment=time-skipping --tb=short
|
uv run pytest --workflow-environment=time-skipping --tb=short
|
||||||
```
|
```
|
||||||
|
|
||||||
## Additional Resources
|
## Additional Resources
|
||||||
|
|||||||
@@ -53,31 +53,31 @@ Provides shared test fixtures and configuration:
|
|||||||
Ensure you have the required dependencies installed:
|
Ensure you have the required dependencies installed:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
poetry install --with dev
|
uv sync
|
||||||
```
|
```
|
||||||
|
|
||||||
### Basic Test Execution
|
### Basic Test Execution
|
||||||
|
|
||||||
Run all tests:
|
Run all tests:
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest
|
uv run pytest
|
||||||
```
|
```
|
||||||
|
|
||||||
Run specific test files:
|
Run specific test files:
|
||||||
```bash
|
```bash
|
||||||
# Workflow tests only
|
# Workflow tests only
|
||||||
poetry run pytest tests/test_agent_goal_workflow.py
|
uv run pytest tests/test_agent_goal_workflow.py
|
||||||
|
|
||||||
# Activity tests only
|
# Activity tests only
|
||||||
poetry run pytest tests/test_tool_activities.py
|
uv run pytest tests/test_tool_activities.py
|
||||||
|
|
||||||
# Legacy tests
|
# Legacy tests
|
||||||
poetry run pytest tests/workflowtests/
|
uv run pytest tests/workflowtests/
|
||||||
```
|
```
|
||||||
|
|
||||||
Run with verbose output:
|
Run with verbose output:
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest -v
|
uv run pytest -v
|
||||||
```
|
```
|
||||||
|
|
||||||
### Test Environment Options
|
### Test Environment Options
|
||||||
@@ -87,34 +87,34 @@ The tests support different Temporal environments via the `--workflow-environmen
|
|||||||
#### Local Environment (Default)
|
#### Local Environment (Default)
|
||||||
Uses a local Temporal test server:
|
Uses a local Temporal test server:
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --workflow-environment=local
|
uv run pytest --workflow-environment=local
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Time-Skipping Environment
|
#### Time-Skipping Environment
|
||||||
Uses Temporal's time-skipping test environment for faster execution:
|
Uses Temporal's time-skipping test environment for faster execution:
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --workflow-environment=time-skipping
|
uv run pytest --workflow-environment=time-skipping
|
||||||
```
|
```
|
||||||
|
|
||||||
#### External Server
|
#### External Server
|
||||||
Connect to an existing Temporal server:
|
Connect to an existing Temporal server:
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --workflow-environment=localhost:7233
|
uv run pytest --workflow-environment=localhost:7233
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Setup Script for AI Agent environments such as OpenAI Codex
|
#### Setup Script for AI Agent environments such as OpenAI Codex
|
||||||
```bash
|
```bash
|
||||||
export SHELL=/bin/bash
|
export SHELL=/bin/bash
|
||||||
curl -sSL https://install.python-poetry.org | python3 -
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
export PATH="$HOME/.local/bin:$PATH"
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
ls
|
ls
|
||||||
poetry install --with dev
|
uv sync
|
||||||
cd frontend
|
cd frontend
|
||||||
npm install
|
npm install
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
# Pre-download the temporal test server binary
|
# Pre-download the temporal test server binary
|
||||||
poetry run python3 -c "
|
uv run python -c "
|
||||||
import asyncio
|
import asyncio
|
||||||
import sys
|
import sys
|
||||||
from temporalio.testing import WorkflowEnvironment
|
from temporalio.testing import WorkflowEnvironment
|
||||||
@@ -139,22 +139,22 @@ asyncio.run(predownload())
|
|||||||
Run tests by pattern:
|
Run tests by pattern:
|
||||||
```bash
|
```bash
|
||||||
# Run only validation tests
|
# Run only validation tests
|
||||||
poetry run pytest -k "validation"
|
uv run pytest -k "validation"
|
||||||
|
|
||||||
# Run only workflow tests
|
# Run only workflow tests
|
||||||
poetry run pytest -k "workflow"
|
uv run pytest -k "workflow"
|
||||||
|
|
||||||
# Run only activity tests
|
# Run only activity tests
|
||||||
poetry run pytest -k "activity"
|
uv run pytest -k "activity"
|
||||||
```
|
```
|
||||||
|
|
||||||
Run tests by marker (if you add custom markers):
|
Run tests by marker (if you add custom markers):
|
||||||
```bash
|
```bash
|
||||||
# Run only integration tests
|
# Run only integration tests
|
||||||
poetry run pytest -m integration
|
uv run pytest -m integration
|
||||||
|
|
||||||
# Skip slow tests
|
# Skip slow tests
|
||||||
poetry run pytest -m "not slow"
|
uv run pytest -m "not slow"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Test Configuration
|
## Test Configuration
|
||||||
@@ -276,7 +276,7 @@ The `sample_combined_input` fixture provides:
|
|||||||
|
|
||||||
Enable detailed logging:
|
Enable detailed logging:
|
||||||
```bash
|
```bash
|
||||||
poetry run pytest --log-cli-level=DEBUG -s
|
uv run pytest --log-cli-level=DEBUG -s
|
||||||
```
|
```
|
||||||
|
|
||||||
### Temporal Web UI
|
### Temporal Web UI
|
||||||
@@ -301,21 +301,18 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-python@v4
|
- uses: astral-sh/setup-uv@v5
|
||||||
with:
|
- run: uv sync
|
||||||
python-version: '3.10'
|
- run: uv run pytest --workflow-environment=time-skipping
|
||||||
- run: pip install poetry
|
|
||||||
- run: poetry install --with dev
|
|
||||||
- run: poetry run pytest --workflow-environment=time-skipping
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Test Coverage
|
### Test Coverage
|
||||||
|
|
||||||
Generate coverage reports:
|
Generate coverage reports:
|
||||||
```bash
|
```bash
|
||||||
poetry add --group dev pytest-cov
|
uv add --group dev pytest-cov
|
||||||
poetry run pytest --cov=workflows --cov=activities --cov-report=html
|
uv run pytest --cov=workflows --cov=activities --cov-report=html
|
||||||
```
|
```
|
||||||
|
|
||||||
## Best Practices
|
## Best Practices
|
||||||
@@ -342,7 +339,7 @@ poetry run pytest --cov=workflows --cov=activities --cov-report=html
|
|||||||
|
|
||||||
- Check Temporal Python SDK documentation
|
- Check Temporal Python SDK documentation
|
||||||
- Review existing test patterns in the codebase
|
- Review existing test patterns in the codebase
|
||||||
- Use `poetry run pytest --collect-only` to verify test discovery
|
- Use `uv run pytest --collect-only` to verify test discovery
|
||||||
- Run with `-v` flag for detailed output
|
- Run with `-v` flag for detailed output
|
||||||
|
|
||||||
## Legacy Tests
|
## Legacy Tests
|
||||||
|
|||||||
Reference in New Issue
Block a user