chore(ci): Add uv support and use for unit tests (#4127)
* cherrypick just relevant commits? * make work with poetry * update poetry? * regen? * change tests and dev to dependency groups instead of optional extras * Fix Poetry/UV compatibility issues - Fix sqlite-vec dependency: Remove optional flag from Poetry section to match main deps - Regenerate poetry.lock to sync with pyproject.toml changes - Test both package managers successfully: - Poetry: `poetry install --with dev --with test -E postgres -E external-tools -E cloud-tool-sandbox` - UV: `uv sync --group dev --group test --extra postgres --extra external-tools --extra cloud-tool-sandbox` Resolves Poetry lock sync errors and ensures sqlite-vec is available for tests. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * more robust pip install * Fix fern SDK wheel installation in CI workflow Replace unreliable command substitution with proper error handling: - Check if directory exists before attempting to find wheels - Store wheel file path in variable to avoid empty arguments - Provide clear error messages when directory/wheels are missing - Prevents "required arguments were not provided" error in uv pip install Fixes: error: the following required arguments were not provided: <PACKAGE> 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * debugging * trigger CI * ls * revert whl installation to -e * programmatic HIT version insertion * version templating properly * set var properly * labelling * remove version insertion * ? * try using sed '2r /dev/stdin' * version * try again smh * not trigger on poetry version * only add once * filter only for project not poetry * hand re-construct the file * save tail? * fix docker command * please please please * rename test -> tests * update poetry and rename group to -E * move async into tests extra and regen lock files and add sqlite extra * remove loading cached venv from cloud api integration * add uv dependency to CI runners * test removing the custom event loop * regen poetry.lock and try to fix async tests * wrap async pg exception and event loop tweak in plugins * remove event loop from plugins test and remove caching from cloud-api-integration-test * migrate all tests away from event loop for pytest-asyncio * pin firecrawl * pin e2b * take claude's suggestion * deeper down the claude rabbit hole * increase timeout for httpbin.org --------- Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,93 @@
|
||||
[project]
|
||||
name = "letta"
|
||||
version = "0.10.0"
|
||||
description = "Create LLM agents with long-term memory and custom tools"
|
||||
authors = [
|
||||
{name = "Letta Team", email = "contact@letta.com"},
|
||||
]
|
||||
license = {text = "Apache License"}
|
||||
readme = "README.md"
|
||||
requires-python = "<3.14,>=3.11"
|
||||
dependencies = [
|
||||
"typer>=0.15.2",
|
||||
"questionary>=2.0.1",
|
||||
"pytz>=2023.3.post1",
|
||||
"tqdm>=4.66.1",
|
||||
"black[jupyter]>=24.2.0",
|
||||
"setuptools>=70",
|
||||
"prettytable>=3.9.0",
|
||||
"docstring-parser>=0.16,<0.17",
|
||||
"httpx>=0.28.0",
|
||||
"numpy>=2.1.0",
|
||||
"demjson3>=3.0.6",
|
||||
"pyyaml>=6.0.1",
|
||||
"sqlalchemy-json>=0.7.0",
|
||||
"pydantic>=2.10.6",
|
||||
"html2text>=2020.1.16",
|
||||
"sqlalchemy[asyncio]>=2.0.41",
|
||||
"python-box>=7.1.1",
|
||||
"sqlmodel>=0.0.16",
|
||||
"python-multipart>=0.0.19",
|
||||
"sqlalchemy-utils>=0.41.2",
|
||||
"pydantic-settings>=2.2.1",
|
||||
"httpx-sse>=0.4.0",
|
||||
"nltk>=3.8.1",
|
||||
"jinja2>=3.1.5",
|
||||
"composio-core>=0.7.7",
|
||||
"alembic>=1.13.3",
|
||||
"pyhumps>=3.8.0",
|
||||
"pathvalidate>=3.2.1",
|
||||
"sentry-sdk[fastapi]==2.19.1",
|
||||
"rich>=13.9.4",
|
||||
"brotli>=1.1.0",
|
||||
"grpcio>=1.68.1",
|
||||
"grpcio-tools>=1.68.1",
|
||||
"llama-index>=0.12.2",
|
||||
"llama-index-embeddings-openai>=0.3.1",
|
||||
"anthropic>=0.49.0",
|
||||
"letta_client>=0.1.276",
|
||||
"openai>=1.99.9",
|
||||
"opentelemetry-api==1.30.0",
|
||||
"opentelemetry-sdk==1.30.0",
|
||||
"opentelemetry-instrumentation-requests==0.51b0",
|
||||
"opentelemetry-instrumentation-sqlalchemy==0.51b0",
|
||||
"opentelemetry-exporter-otlp==1.30.0",
|
||||
"faker>=36.1.0",
|
||||
"colorama>=0.4.6",
|
||||
"marshmallow-sqlalchemy>=1.4.1",
|
||||
"datamodel-code-generator[http]>=0.25.0",
|
||||
"mcp[cli]>=1.9.4",
|
||||
"firecrawl-py==2.16.5",
|
||||
"apscheduler>=3.11.0",
|
||||
"aiomultiprocess>=0.9.1",
|
||||
"matplotlib>=3.10.1",
|
||||
"tavily-python>=0.7.2",
|
||||
"mistralai>=1.8.1",
|
||||
"structlog>=25.4.0",
|
||||
"certifi>=2025.6.15",
|
||||
"markitdown[docx,pdf,pptx]>=0.1.2",
|
||||
"orjson>=3.11.1",
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
postgres = ["pgvector>=0.2.3", "pg8000>=1.30.3", "psycopg2-binary>=2.9.10", "psycopg2>=2.9.10", "asyncpg>=0.30.0"]
|
||||
redis = ["redis>=6.2.0"]
|
||||
pinecone = ["pinecone[asyncio]>=7.3.0"]
|
||||
dev = ["pytest>=8.0.0", "pytest-asyncio>=0.24.0", "pexpect>=4.9.0", "black>=24.2.0", "pre-commit>=3.5.0", "pyright>=1.1.347", "pytest-order>=1.2.0", "autoflake>=2.3.0", "isort>=5.13.2", "locust>=2.31.5"]
|
||||
experimental = ["uvloop>=0.21.0; sys_platform != 'win32'", "granian[reload]>=2.3.2", "google-cloud-profiler>=4.1.0"]
|
||||
server = ["websockets>=12.0", "fastapi>=0.115.6", "uvicorn>=0.24.0.post1"]
|
||||
cloud-tool-sandbox = ["e2b-code-interpreter==1.5.2", "modal>=1.1.0"]
|
||||
external-tools = ["docker>=7.1.0", "langchain>=0.3.7", "wikipedia>=1.4.0", "langchain-community>=0.3.7", "firecrawl-py==2.16.5"]
|
||||
tests = ["wikipedia>=1.4.0", "pytest-asyncio>=0.24.0"]
|
||||
sqlite = ["aiosqlite>=0.21.0", "sqlite-vec>=0.1.7a2"]
|
||||
bedrock = ["boto3>=1.36.24", "aioboto3>=14.3.0"]
|
||||
google = ["google-genai>=1.15.0"]
|
||||
desktop = ["pyright>=1.1.347", "fastapi>=0.115.6", "uvicorn>=0.24.0.post1", "docker>=7.1.0", "langchain>=0.3.7", "wikipedia>=1.4.0", "langchain-community>=0.3.7", "locust>=2.31.5", "sqlite-vec>=0.1.7a2", "pgvector>=0.2.3"]
|
||||
all = ["pgvector>=0.2.3", "turbopuffer>=0.5.17", "pg8000>=1.30.3", "psycopg2-binary>=2.9.10", "psycopg2>=2.9.10", "pytest", "pytest-asyncio>=0.24.0", "pexpect>=4.9.0", "black>=24.2.0", "pre-commit>=3.5.0", "pyright>=1.1.347", "pytest-order>=1.2.0", "autoflake>=2.3.0", "isort>=5.13.2", "fastapi>=0.115.6", "uvicorn>=0.24.0.post1", "docker>=7.1.0", "langchain>=0.3.7", "wikipedia>=1.4.0", "langchain-community>=0.3.7", "locust>=2.31.5", "uvloop>=0.21.0; sys_platform != 'win32'", "granian[reload]>=2.3.2", "redis>=6.2.0", "pinecone[asyncio]>=7.3.0", "google-cloud-profiler>=4.1.0"]
|
||||
|
||||
[project.scripts]
|
||||
letta = "letta.main:app"
|
||||
|
||||
[tool.poetry]
|
||||
name = "letta"
|
||||
version = "0.10.0"
|
||||
|
||||
Reference in New Issue
Block a user