diff --git a/.github/workflows/test_s3_file_storage.yml b/.github/workflows/test_s3_file_storage.yml index a477d8933..04d140513 100644 --- a/.github/workflows/test_s3_file_storage.yml +++ b/.github/workflows/test_s3_file_storage.yml @@ -6,6 +6,10 @@ on: permissions: contents: read +env: + RUNTIME__LOG_LEVEL: ERROR + ENV: 'dev' + jobs: test-gemini: name: Run S3 File Storage Test diff --git a/cognee-mcp/src/__init__.py b/cognee-mcp/src/__init__.py index c71afdd1b..933bcd73f 100644 --- a/cognee-mcp/src/__init__.py +++ b/cognee-mcp/src/__init__.py @@ -1,12 +1,42 @@ from .server import main as server_main import warnings +import sys def main(): """Deprecated main entry point for the package.""" import asyncio - # Show deprecation warning + deprecation_notice = """ +DEPRECATION NOTICE +The CLI entry-point used to start the Cognee MCP service has been renamed from +"cognee" to "cognee-mcp". Calling the old entry-point will stop working in a +future release. + +WHAT YOU NEED TO DO: +Locate every place where you launch the MCP process and replace the final +argument cognee → cognee-mcp. + +For the example mcpServers block from Cursor shown below the change is: +{ + "mcpServers": { + "Cognee": { + "command": "uv", + "args": [ + "--directory", + "/path/to/cognee-mcp", + "run", + "cognee" // <-- CHANGE THIS to "cognee-mcp" + ] + } + } +} + +Continuing to use the old "cognee" entry-point will result in failures once it +is removed, so please update your configuration and any shell scripts as soon +as possible. +""" + warnings.warn( "The 'cognee' command for cognee-mcp is deprecated and will be removed in a future version. " "Please use 'cognee-mcp' instead to avoid conflicts with the main cognee library.", @@ -14,9 +44,8 @@ def main(): stacklevel=2, ) - print("⚠️ DEPRECATION WARNING: Use 'cognee-mcp' command instead of 'cognee'") - print(" This avoids conflicts with the main cognee library.") - print() + print("⚠️ DEPRECATION WARNING", file=sys.stderr) + print(deprecation_notice, file=sys.stderr) asyncio.run(server_main()) diff --git a/cognee/api/health.py b/cognee/api/health.py index 1b1e45efa..0241a0712 100644 --- a/cognee/api/health.py +++ b/cognee/api/health.py @@ -189,12 +189,12 @@ class HealthChecker: start_time = time.time() try: from cognee.infrastructure.llm.config import get_llm_config - from cognee.infrastructure.llm import LLMGateway config = get_llm_config() - # Test actual API connection with minimal request - LLMGateway.show_prompt("test", "test.txt") + from cognee.infrastructure.llm.utils import test_llm_connection + + await test_llm_connection() response_time = int((time.time() - start_time) * 1000) return ComponentHealth( @@ -217,13 +217,9 @@ class HealthChecker: """Check embedding service health (non-critical).""" start_time = time.time() try: - from cognee.infrastructure.databases.vector.embeddings.get_embedding_engine import ( - get_embedding_engine, - ) + from cognee.infrastructure.llm.utils import test_embedding_connection - # Test actual embedding generation with minimal text - engine = get_embedding_engine() - await engine.embed_text(["test"]) + await test_embedding_connection() response_time = int((time.time() - start_time) * 1000) return ComponentHealth( diff --git a/cognee/api/v1/ui/ui.py b/cognee/api/v1/ui/ui.py index 438195990..108806ba2 100644 --- a/cognee/api/v1/ui/ui.py +++ b/cognee/api/v1/ui/ui.py @@ -516,7 +516,7 @@ def start_ui( env_file, "-e", "TRANSPORT_MODE=sse", - "cognee/cognee-mcp:daulet-dev", + "cognee/cognee-mcp:main", ], stdout=subprocess.PIPE, stderr=subprocess.PIPE, diff --git a/cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/generic_llm_api/adapter.py b/cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/generic_llm_api/adapter.py index 8c15a5804..917599d4d 100644 --- a/cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/generic_llm_api/adapter.py +++ b/cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/generic_llm_api/adapter.py @@ -118,7 +118,7 @@ class GenericAPIAdapter(LLMInterface): if not (self.fallback_model and self.fallback_api_key and self.fallback_endpoint): raise ContentPolicyFilterError( f"The provided input contains content that is not aligned with our content policy: {text_input}" - ) + ) from error try: return await self.aclient.chat.completions.create( @@ -151,4 +151,4 @@ class GenericAPIAdapter(LLMInterface): else: raise ContentPolicyFilterError( f"The provided input contains content that is not aligned with our content policy: {text_input}" - ) + ) from error diff --git a/cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/openai/adapter.py b/cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/openai/adapter.py index 989b240ac..527f64d75 100644 --- a/cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/openai/adapter.py +++ b/cognee/infrastructure/llm/structured_output_framework/litellm_instructor/llm/openai/adapter.py @@ -146,11 +146,11 @@ class OpenAIAdapter(LLMInterface): ContentFilterFinishReasonError, ContentPolicyViolationError, InstructorRetryException, - ): + ) as e: if not (self.fallback_model and self.fallback_api_key): raise ContentPolicyFilterError( f"The provided input contains content that is not aligned with our content policy: {text_input}" - ) + ) from e try: return await self.aclient.chat.completions.create( @@ -183,7 +183,7 @@ class OpenAIAdapter(LLMInterface): else: raise ContentPolicyFilterError( f"The provided input contains content that is not aligned with our content policy: {text_input}" - ) + ) from error @observe @sleep_and_retry_sync() diff --git a/poetry.lock b/poetry.lock index 44dac3bc4..551295733 100644 --- a/poetry.lock +++ b/poetry.lock @@ -510,7 +510,7 @@ description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "extra == \"redis\" and python_full_version < \"3.11.3\" or python_version == \"3.10\"" +markers = "python_version == \"3.10\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -3954,8 +3954,6 @@ groups = ["main"] markers = "extra == \"dlt\"" files = [ {file = "jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c"}, - {file = "jsonpath_ng-1.7.0-py2-none-any.whl", hash = "sha256:898c93fc173f0c336784a3fa63d7434297544b7198124a68f9a3ef9597b0ae6e"}, - {file = "jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6"}, ] [package.dependencies] @@ -8140,7 +8138,6 @@ files = [ {file = "psycopg2-2.9.10-cp311-cp311-win_amd64.whl", hash = "sha256:0435034157049f6846e95103bd8f5a668788dd913a7c30162ca9503fdf542cb4"}, {file = "psycopg2-2.9.10-cp312-cp312-win32.whl", hash = "sha256:65a63d7ab0e067e2cdb3cf266de39663203d38d6a8ed97f5ca0cb315c73fe067"}, {file = "psycopg2-2.9.10-cp312-cp312-win_amd64.whl", hash = "sha256:4a579d6243da40a7b3182e0430493dbd55950c493d8c68f4eec0b302f6bbf20e"}, - {file = "psycopg2-2.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:91fd603a2155da8d0cfcdbf8ab24a2d54bca72795b90d2a3ed2b6da8d979dee2"}, {file = "psycopg2-2.9.10-cp39-cp39-win32.whl", hash = "sha256:9d5b3b94b79a844a986d029eee38998232451119ad653aea42bb9220a8c5066b"}, {file = "psycopg2-2.9.10-cp39-cp39-win_amd64.whl", hash = "sha256:88138c8dedcbfa96408023ea2b0c369eda40fe5d75002c0964c78f46f11fa442"}, {file = "psycopg2-2.9.10.tar.gz", hash = "sha256:12ec0b40b0273f95296233e8750441339298e6a572f7039da5b260e3c8b60e11"}, @@ -8202,7 +8199,6 @@ files = [ {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bb89f0a835bcfc1d42ccd5f41f04870c1b936d8507c6df12b7737febc40f0909"}, {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f0c2d907a1e102526dd2986df638343388b94c33860ff3bbe1384130828714b1"}, {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8157bed2f51db683f31306aa497311b560f2265998122abe1dce6428bd86567"}, - {file = "psycopg2_binary-2.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:27422aa5f11fbcd9b18da48373eb67081243662f9b46e6fd07c3eb46e4535142"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:eb09aa7f9cecb45027683bb55aebaaf45a0df8bf6de68801a6afdc7947bb09d4"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b73d6d7f0ccdad7bc43e6d34273f70d587ef62f824d7261c4ae9b8b1b6af90e8"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce5ab4bf46a211a8e924d307c1b1fcda82368586a19d0a24f8ae166f5c784864"}, @@ -9314,13 +9310,6 @@ optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, - {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, - {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3"}, - {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6"}, - {file = "PyYAML-6.0.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369"}, - {file = "PyYAML-6.0.3-cp38-cp38-win32.whl", hash = "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295"}, - {file = "PyYAML-6.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b"}, {file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"}, {file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"}, {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"}, @@ -9640,27 +9629,6 @@ lxml = ["lxml (>=4.3,<6.0)"] networkx = ["networkx (>=2,<4)"] orjson = ["orjson (>=3.9.14,<4)"] -[[package]] -name = "redis" -version = "5.3.1" -description = "Python client for Redis database and key-value store" -optional = true -python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"redis\"" -files = [ - {file = "redis-5.3.1-py3-none-any.whl", hash = "sha256:dc1909bd24669cc31b5f67a039700b16ec30571096c5f1f0d9d2324bff31af97"}, - {file = "redis-5.3.1.tar.gz", hash = "sha256:ca49577a531ea64039b5a36db3d6cd1a0c7a60c34124d46924a45b956e8cf14c"}, -] - -[package.dependencies] -async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} -PyJWT = ">=2.9.0" - -[package.extras] -hiredis = ["hiredis (>=3.0.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"] - [[package]] name = "referencing" version = "0.36.2" @@ -12766,9 +12734,8 @@ ollama = ["transformers"] postgres = ["asyncpg", "pgvector", "psycopg2"] postgres-binary = ["asyncpg", "pgvector", "psycopg2-binary"] posthog = ["posthog"] -redis = ["redis"] [metadata] lock-version = "2.1" python-versions = ">=3.10,<=3.13" -content-hash = "a29966d21523a531aa9e1ae0d2ea4be01bdd6989a0072900c91cad704c1895fc" +content-hash = "38353807b06e5c06caaa107979529937b978204f0f405c6b38cee283f4a49d3c" diff --git a/pyproject.toml b/pyproject.toml index 933cf3963..fb5bbb9d9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "cognee" -version = "0.3.4" +version = "0.3.5" description = "Cognee - is a library for enriching LLM context with a semantic layer for better understanding and reasoning." authors = [ { name = "Vasilije Markovic" }, @@ -141,7 +141,6 @@ Homepage = "https://www.cognee.ai" Repository = "https://github.com/topoteretes/cognee" [project.scripts] -cognee = "cognee.cli._cognee:main" cognee-cli = "cognee.cli._cognee:main" [build-system] diff --git a/uv.lock b/uv.lock index f749310ad..570da9289 100644 --- a/uv.lock +++ b/uv.lock @@ -1005,9 +1005,6 @@ postgres-binary = [ posthog = [ { name = "posthog" }, ] -redis = [ - { name = "redis" }, -] [package.metadata] requires-dist = [ @@ -1083,7 +1080,6 @@ requires-dist = [ { name = "python-magic-bin", marker = "sys_platform == 'win32'", specifier = "<0.5" }, { name = "python-multipart", specifier = ">=0.0.20,<1.0.0" }, { name = "rdflib", specifier = ">=7.1.4,<7.2.0" }, - { name = "redis", marker = "extra == 'redis'", specifier = ">=5.0.3,<6.0.0" }, { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.9.2,<=0.13.1" }, { name = "s3fs", extras = ["boto3"], marker = "extra == 'aws'", specifier = "==2025.3.2" }, { name = "scikit-learn", marker = "extra == 'evals'", specifier = ">=1.6.1,<2" }, @@ -1102,7 +1098,7 @@ requires-dist = [ { name = "uvicorn", specifier = ">=0.34.0,<1.0.0" }, { name = "websockets", specifier = ">=15.0.1,<16.0.0" }, ] -provides-extras = ["api", "distributed", "neo4j", "neptune", "postgres", "postgres-binary", "notebook", "langchain", "llama-index", "huggingface", "ollama", "mistral", "anthropic", "deepeval", "posthog", "groq", "chromadb", "docs", "codegraph", "evals", "graphiti", "aws", "dlt", "baml", "dev", "debug", "redis", "monitoring"] +provides-extras = ["api", "distributed", "neo4j", "neptune", "postgres", "postgres-binary", "notebook", "langchain", "llama-index", "huggingface", "ollama", "mistral", "anthropic", "deepeval", "posthog", "groq", "chromadb", "docs", "codegraph", "evals", "graphiti", "aws", "dlt", "baml", "dev", "debug", "monitoring"] [[package]] name = "colorama" @@ -6850,19 +6846,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f4/31/e9b6f04288dcd3fa60cb3179260d6dad81b92aef3063d679ac7d80a827ea/rdflib-7.1.4-py3-none-any.whl", hash = "sha256:72f4adb1990fa5241abd22ddaf36d7cafa5d91d9ff2ba13f3086d339b213d997", size = 565051, upload-time = "2025-03-29T02:22:44.987Z" }, ] -[[package]] -name = "redis" -version = "5.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "async-timeout", marker = "python_full_version < '3.11.3'" }, - { name = "pyjwt" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6a/cf/128b1b6d7086200c9f387bd4be9b2572a30b90745ef078bd8b235042dc9f/redis-5.3.1.tar.gz", hash = "sha256:ca49577a531ea64039b5a36db3d6cd1a0c7a60c34124d46924a45b956e8cf14c", size = 4626200, upload-time = "2025-07-25T08:06:27.778Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/26/5c5fa0e83c3621db835cfc1f1d789b37e7fa99ed54423b5f519beb931aa7/redis-5.3.1-py3-none-any.whl", hash = "sha256:dc1909bd24669cc31b5f67a039700b16ec30571096c5f1f0d9d2324bff31af97", size = 272833, upload-time = "2025-07-25T08:06:26.317Z" }, -] - [[package]] name = "referencing" version = "0.36.2"