fix: loosen dependency constraints to fix OPIK integration conflict

This commit addresses issue #4201 where crewAI's overly restrictive
dependency constraints (using ~= operator) caused conflicts when
installing alongside packages like opik.

Changes:
- Changed dependency constraints from ~= (compatible release) to >=
  (minimum version) for core dependencies in crewai and crewai-tools
- Key dependencies loosened: openai, pydantic, pydantic-settings,
  opentelemetry-*, and others
- Added tests to verify dependency constraints remain flexible

The ~= operator was too restrictive as it only allows patch version
updates (e.g., openai~=1.83.0 means >=1.83.0,<1.84.0). This caused
dependency resolution failures when other packages needed different
versions of shared dependencies.

Fixes #4201

Co-Authored-By: João <joao@crewai.com>
This commit is contained in:
Devin AI
2026-01-08 04:43:45 +00:00
parent d71e91e8f2
commit d255f1908a
4 changed files with 4690 additions and 4412 deletions

View File

@@ -9,36 +9,36 @@ authors = [
requires-python = ">=3.10, <3.14"
dependencies = [
# Core Dependencies
"pydantic~=2.11.9",
"openai~=1.83.0",
"pydantic>=2.11.9,<3.0.0",
"openai>=1.13.3",
"instructor>=1.3.3",
# Text Processing
"pdfplumber~=0.11.4",
"regex~=2024.9.11",
"pdfplumber>=0.11.4",
"regex>=2024.9.11",
# Telemetry and Monitoring
"opentelemetry-api~=1.34.0",
"opentelemetry-sdk~=1.34.0",
"opentelemetry-exporter-otlp-proto-http~=1.34.0",
"opentelemetry-api>=1.30.0",
"opentelemetry-sdk>=1.30.0",
"opentelemetry-exporter-otlp-proto-http>=1.30.0",
# Data Handling
"chromadb~=1.1.0",
"tokenizers~=0.20.3",
"openpyxl~=3.1.5",
"chromadb>=1.0.0",
"tokenizers>=0.20.3",
"openpyxl>=3.1.5",
# Authentication and Security
"python-dotenv~=1.1.1",
"pyjwt~=2.9.0",
"python-dotenv>=1.0.0",
"pyjwt>=2.9.0",
# Configuration and Utils
"click~=8.1.7",
"appdirs~=1.4.4",
"jsonref~=1.1.0",
"json-repair~=0.25.2",
"tomli-w~=1.1.0",
"tomli~=2.0.2",
"json5~=0.10.0",
"portalocker~=2.7.0",
"pydantic-settings~=2.10.1",
"mcp~=1.16.0",
"uv~=0.9.13",
"aiosqlite~=0.21.0",
"click>=8.1.7",
"appdirs>=1.4.4",
"jsonref>=1.1.0",
"json-repair>=0.25.2",
"tomli-w>=1.1.0",
"tomli>=2.0.2",
"json5>=0.10.0",
"portalocker>=2.7.0",
"pydantic-settings>=2.10.1,<3.0.0",
"mcp>=1.16.0",
"uv>=0.4.25",
"aiosqlite>=0.21.0",
]
[project.urls]
@@ -49,54 +49,54 @@ Repository = "https://github.com/crewAIInc/crewAI"
[project.optional-dependencies]
tools = [
"crewai-tools==1.8.0",
"crewai-tools>=1.8.0",
]
embeddings = [
"tiktoken~=0.8.0"
"tiktoken>=0.8.0"
]
pandas = [
"pandas~=2.2.3",
"pandas>=2.2.3",
]
openpyxl = [
"openpyxl~=3.1.5",
"openpyxl>=3.1.5",
]
mem0 = ["mem0ai~=0.1.94"]
mem0 = ["mem0ai>=0.1.94"]
docling = [
"docling~=2.63.0",
"docling>=2.12.0",
]
qdrant = [
"qdrant-client[fastembed]~=1.14.3",
"qdrant-client[fastembed]>=1.14.3",
]
aws = [
"boto3~=1.40.38",
"aiobotocore~=2.25.2",
"boto3>=1.40.38",
"aiobotocore>=2.25.2",
]
watson = [
"ibm-watsonx-ai~=1.3.39",
"ibm-watsonx-ai>=1.3.39",
]
voyageai = [
"voyageai~=0.3.5",
"voyageai>=0.3.5",
]
litellm = [
"litellm~=1.74.9",
"litellm>=1.74.9",
]
bedrock = [
"boto3~=1.40.45",
"boto3>=1.40.45",
]
google-genai = [
"google-genai~=1.49.0",
"google-genai>=1.2.0",
]
azure-ai-inference = [
"azure-ai-inference~=1.0.0b9",
"azure-ai-inference>=1.0.0b9",
]
anthropic = [
"anthropic~=0.71.0",
"anthropic>=0.69.0",
]
a2a = [
"a2a-sdk~=0.3.10",
"httpx-auth~=0.23.1",
"httpx-sse~=0.4.0",
"aiocache[redis,memcached]~=0.12.3",
"a2a-sdk>=0.3.10",
"httpx-auth>=0.23.1",
"httpx-sse>=0.4.0",
"aiocache[redis,memcached]>=0.12.3",
]