From 51d23e6eafb4f0bbea74659660bc59d11a4fb4af Mon Sep 17 00:00:00 2001 From: Daniel Chalef <131175+danielchalef@users.noreply.github.com> Date: Thu, 30 Oct 2025 16:48:26 -0700 Subject: [PATCH] conductor-checkpoint-msg_01884eN3wprtCkrEgEaRDzko --- mcp_server/src/services/factories.py | 30 ++++++++-------- mcp_server/uv.lock | 53 +++++----------------------- 2 files changed, 22 insertions(+), 61 deletions(-) diff --git a/mcp_server/src/services/factories.py b/mcp_server/src/services/factories.py index f1537967..23b8f256 100644 --- a/mcp_server/src/services/factories.py +++ b/mcp_server/src/services/factories.py @@ -73,8 +73,8 @@ except ImportError: from utils.utils import create_azure_credential_token_provider -def _validate_and_mask_api_key(provider_name: str, api_key: str | None, logger) -> str: - """Validate API key is present and return masked version for logging. +def _validate_api_key(provider_name: str, api_key: str | None, logger) -> str: + """Validate API key is present. Args: provider_name: Name of the provider (e.g., 'OpenAI', 'Anthropic') @@ -82,7 +82,7 @@ def _validate_and_mask_api_key(provider_name: str, api_key: str | None, logger) logger: Logger instance for output Returns: - Masked API key for logging + The validated API key Raises: ValueError: If API key is None or empty @@ -92,11 +92,9 @@ def _validate_and_mask_api_key(provider_name: str, api_key: str | None, logger) f'{provider_name} API key is not configured. Please set the appropriate environment variable.' ) - # Log masked API key for debugging (only show first 4 characters) - masked_key = f'{api_key[:4]}...' if len(api_key) > 4 else '***' - logger.info(f'Creating {provider_name} client with API key: {masked_key}') + logger.info(f'Creating {provider_name} client') - return masked_key + return api_key class LLMClientFactory: @@ -117,7 +115,7 @@ class LLMClientFactory: raise ValueError('OpenAI provider configuration not found') api_key = config.providers.openai.api_key - _validate_and_mask_api_key('OpenAI', api_key, logger) + _validate_api_key('OpenAI', api_key, logger) from graphiti_core.llm_client.config import LLMConfig as CoreLLMConfig @@ -172,7 +170,7 @@ class LLMClientFactory: azure_ad_token_provider = create_azure_credential_token_provider() else: api_key = azure_config.api_key - _validate_and_mask_api_key('Azure OpenAI', api_key, logger) + _validate_api_key('Azure OpenAI', api_key, logger) # Create the Azure OpenAI client first azure_client = AsyncAzureOpenAI( @@ -209,7 +207,7 @@ class LLMClientFactory: raise ValueError('Anthropic provider configuration not found') api_key = config.providers.anthropic.api_key - _validate_and_mask_api_key('Anthropic', api_key, logger) + _validate_api_key('Anthropic', api_key, logger) llm_config = GraphitiLLMConfig( api_key=api_key, @@ -226,7 +224,7 @@ class LLMClientFactory: raise ValueError('Gemini provider configuration not found') api_key = config.providers.gemini.api_key - _validate_and_mask_api_key('Gemini', api_key, logger) + _validate_api_key('Gemini', api_key, logger) llm_config = GraphitiLLMConfig( api_key=api_key, @@ -243,7 +241,7 @@ class LLMClientFactory: raise ValueError('Groq provider configuration not found') api_key = config.providers.groq.api_key - _validate_and_mask_api_key('Groq', api_key, logger) + _validate_api_key('Groq', api_key, logger) llm_config = GraphitiLLMConfig( api_key=api_key, @@ -276,7 +274,7 @@ class EmbedderFactory: raise ValueError('OpenAI provider configuration not found') api_key = config.providers.openai.api_key - _validate_and_mask_api_key('OpenAI Embedder', api_key, logger) + _validate_api_key('OpenAI Embedder', api_key, logger) from graphiti_core.embedder.openai import OpenAIEmbedderConfig @@ -308,7 +306,7 @@ class EmbedderFactory: azure_ad_token_provider = create_azure_credential_token_provider() else: api_key = azure_config.api_key - _validate_and_mask_api_key('Azure OpenAI Embedder', api_key, logger) + _validate_api_key('Azure OpenAI Embedder', api_key, logger) # Create the Azure OpenAI client first azure_client = AsyncAzureOpenAI( @@ -333,7 +331,7 @@ class EmbedderFactory: raise ValueError('Gemini provider configuration not found') api_key = config.providers.gemini.api_key - _validate_and_mask_api_key('Gemini Embedder', api_key, logger) + _validate_api_key('Gemini Embedder', api_key, logger) from graphiti_core.embedder.gemini import GeminiEmbedderConfig @@ -353,7 +351,7 @@ class EmbedderFactory: raise ValueError('Voyage provider configuration not found') api_key = config.providers.voyage.api_key - _validate_and_mask_api_key('Voyage Embedder', api_key, logger) + _validate_api_key('Voyage Embedder', api_key, logger) from graphiti_core.embedder.voyage import VoyageAIEmbedderConfig diff --git a/mcp_server/uv.lock b/mcp_server/uv.lock index 45d48082..2ff3dfc0 100644 --- a/mcp_server/uv.lock +++ b/mcp_server/uv.lock @@ -665,9 +665,6 @@ dependencies = [ falkordb = [ { name = "falkordb" }, ] -kuzu = [ - { name = "kuzu" }, -] [package.metadata] requires-dist = [ @@ -949,40 +946,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595, upload-time = "2024-06-10T19:24:40.698Z" }, ] -[[package]] -name = "kuzu" -version = "0.11.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/0c/f141a81485729a072dc527b474e7580d5632309c68ad1a5aa6ed9ac45387/kuzu-0.11.3.tar.gz", hash = "sha256:e7bea3ca30c4bb462792eedcaa7f2125c800b243bb4a872e1eedc16917c1967a", size = 19430620, upload-time = "2025-10-10T13:36:54.984Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/3d/830489670618ceb6094b6ddc322e3e6457f5cf4fd6916526b7b8cd6e2c1f/kuzu-0.11.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3d93131f3dc7b647da7a5124c975dc2cc207afc38a9fbb83badc23d2e25dbfec", size = 4093610, upload-time = "2025-10-10T13:35:47.691Z" }, - { url = "https://files.pythonhosted.org/packages/82/1c/7cf246a66a287d466c6cc2f01d5f4e12bd6d23350217c592dc6b51988ed5/kuzu-0.11.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:4f021a6b4e31867a0b49e369431c8f05ef4244cea1cb337c76114649975f56e3", size = 4517385, upload-time = "2025-10-10T13:35:49.471Z" }, - { url = "https://files.pythonhosted.org/packages/d6/35/ed37f146225167ed7a8573a09e2ee4ebafd0111b815cb0532dc823069729/kuzu-0.11.3-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ac7d2a81d7370dc12400431a3331c45954340b96439fcf2b730794cf670684a", size = 6795559, upload-time = "2025-10-10T13:35:50.977Z" }, - { url = "https://files.pythonhosted.org/packages/03/9f/2c8e3cf777aba73d515f73c9491ba65fbebb7852f41abedfc70a26bec229/kuzu-0.11.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8621bb470390f95810c7e79e36a670e9a2f27e189ef429f3df892626de63a652", size = 7616362, upload-time = "2025-10-10T13:35:52.717Z" }, - { url = "https://files.pythonhosted.org/packages/fb/02/22789dc00abb34206e6d96b0ae0eb1884b524fb7fdffd5121fc3178a9ed6/kuzu-0.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:126efba7f8a504614f5b307bcb94ac0e6d9f87f7e34b4334ca769ad6cfe2215e", size = 4712323, upload-time = "2025-10-10T13:35:54.44Z" }, - { url = "https://files.pythonhosted.org/packages/46/1b/65d3974551f10d100ca4682b1e4beff23a9c5b7555c6ea552a3855555cc0/kuzu-0.11.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:836739dced9f61912a80bb7ad1df2159cef456c5b5cfe92f15394b9c51a785cb", size = 4094223, upload-time = "2025-10-10T13:35:56.023Z" }, - { url = "https://files.pythonhosted.org/packages/a9/e8/0efbc4812796468ca47273fc53c21c63706bc5f7bc4fa3459918d323ced8/kuzu-0.11.3-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:8d4f0e4085d3a85b0e7a8e337082bec6a3cf8c92c9a35209ffe53b2ed212ab08", size = 4519024, upload-time = "2025-10-10T13:35:57.665Z" }, - { url = "https://files.pythonhosted.org/packages/dd/b2/07e81d9f1858a592d1ddc1f02a483718cdfac3315bbca019b13b2ddd8c3e/kuzu-0.11.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1419ada227d15107c2b2536c66ae715c59876585d434b1918c17598956dcd5f7", size = 6796096, upload-time = "2025-10-10T13:35:59.174Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e0/8ea0d289ef6840fbd00e642657ed07d03690a97a01676e2b79d5c3e9ddf8/kuzu-0.11.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef094001d319804fcc8eb72775a184f1119d84af1bace29581a003bd806c36cd", size = 7616892, upload-time = "2025-10-10T13:36:00.866Z" }, - { url = "https://files.pythonhosted.org/packages/a3/d6/9ea65a74c9140e13d7f68dd9d8f95f42b55b9d7750e7a20df3d9b2f09734/kuzu-0.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:eb0858ec8084b10badeae37e730fbe0c3b2846dfe3508001d123087de262efbb", size = 4712696, upload-time = "2025-10-10T13:36:02.607Z" }, - { url = "https://files.pythonhosted.org/packages/64/88/ed193fd0ddfdbdde6c79e96b96df3b760fe48b2626e7151d81a1ed90fd9f/kuzu-0.11.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d865ca31506867cf1ccf50c094c44de96de94bc77ffb350bfcaca0e4c5e469da", size = 4093637, upload-time = "2025-10-10T13:36:04.206Z" }, - { url = "https://files.pythonhosted.org/packages/d6/6d/06e02828b78297d6d99ff3dfb0ab7b5ec5d075053aae33b53189437bbb66/kuzu-0.11.3-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:109372bc16ce6724f88e0312bc686e34145e330d69b163b22ba92f4d3d96b48f", size = 4520482, upload-time = "2025-10-10T13:36:06.302Z" }, - { url = "https://files.pythonhosted.org/packages/72/d5/0939a953860a8b373bef7b8a66a4571b27ff9faeb22672d2cd2cf3b6ba15/kuzu-0.11.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6274da6c470c001b7d332ec78a076395b009c2f267914640884fd6fa78bf47d", size = 6795398, upload-time = "2025-10-10T13:36:08Z" }, - { url = "https://files.pythonhosted.org/packages/7d/5d/8e3dfb89aa3f70f63aa283c523f2dd2ac90a1b3ed990643e3a89909236f9/kuzu-0.11.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1bb3b833ca2d1d919423cb3e0150592c2587562ab85259277f622e6f06e0b487", size = 7615389, upload-time = "2025-10-10T13:36:09.809Z" }, - { url = "https://files.pythonhosted.org/packages/6c/19/c8e93185d6142f01b2e6daec4ad537dfd32afd1f69894889769b725b08c1/kuzu-0.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:605909f744763775b8647014a03526d7f928a7b5a62a8b8c1d1e7bbdaf9dbb6c", size = 4714355, upload-time = "2025-10-10T13:36:11.527Z" }, - { url = "https://files.pythonhosted.org/packages/c9/e4/2c0e222a9b0605745234fec2774a25dd2e472699931f683f15d28ab8c076/kuzu-0.11.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e20ab3e3b20ccf75219872feb86582f959e313eeb59f51131adf4c91ebfabe30", size = 4093664, upload-time = "2025-10-10T13:36:13.116Z" }, - { url = "https://files.pythonhosted.org/packages/88/05/3020ed9a0a7b492597f211f805233b77ef37266a23c27efc40bb7cb37402/kuzu-0.11.3-cp313-cp313-macosx_11_0_x86_64.whl", hash = "sha256:054479d3ce71410b8af2f5fa6aa37883db7fea5b25606af8d3bd7cf717aa5395", size = 4520498, upload-time = "2025-10-10T13:36:14.933Z" }, - { url = "https://files.pythonhosted.org/packages/0f/66/1a502700a7f2863f8f60621a412a7074d7eda9e92f18fd1d8d86905aa4d3/kuzu-0.11.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:143a37f1ae38b6b4337ccfcf42fa4f779a897223fff9c6c29f1a5a5a86911300", size = 6795804, upload-time = "2025-10-10T13:36:16.55Z" }, - { url = "https://files.pythonhosted.org/packages/79/c2/1ea8cdc05946cb5906a7ebb451d7268e501ebb51ebecc0437969f8c07450/kuzu-0.11.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:548bfb3045d89bce1fbe89f4a890d636789671abfa80cbde2054c671e6069133", size = 7615668, upload-time = "2025-10-10T13:36:18.882Z" }, - { url = "https://files.pythonhosted.org/packages/d1/c3/336d6181f8f50126cf3d7186b3c5479f9f49d973145f79bed45cf87a9bb7/kuzu-0.11.3-cp313-cp313-win_amd64.whl", hash = "sha256:87bf6c369f182a59e5b8a38b3ca288b90fab2827577d9b0d2170a202c42bc8f5", size = 4714372, upload-time = "2025-10-10T13:36:20.877Z" }, - { url = "https://files.pythonhosted.org/packages/94/db/e7e6cada6dc924eb8939bd35c5f724f5de4fc430a64d6d9e71b75cd0c271/kuzu-0.11.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb5c165bc5838059e498e8325939fc6bac075e1941157e8df6ebdd710135d43b", size = 6798556, upload-time = "2025-10-10T13:36:22.472Z" }, - { url = "https://files.pythonhosted.org/packages/cf/68/a0fa02134cb255c80b5ed5bb5f6130fbbc75a8ae8be4fd6ea6eb6bc8014b/kuzu-0.11.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:88c73dfd3d6a1fb374031050b725236fa9dd9a95424b09b20086a3d274bed51f", size = 7620378, upload-time = "2025-10-10T13:36:24.453Z" }, - { url = "https://files.pythonhosted.org/packages/d6/b7/2a4569984995f09476dbf1ef2e0a7298aa9fdb8896f2e8195d80e11786f4/kuzu-0.11.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9d2752a9e37adda6aef3bf041932ae3a1cf74ca7e893bbbacdd5e62b3ac6f8c2", size = 6795649, upload-time = "2025-10-10T13:36:26.15Z" }, - { url = "https://files.pythonhosted.org/packages/77/13/df6e06a7d7506743c3a6cfbe50ee3f9d3fc58228e2a2fcbe7e74e7c17b00/kuzu-0.11.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86be7d113e4e2c6761b1701079af8aeffc04c6981517f2d6aa393e883cc46036", size = 7615882, upload-time = "2025-10-10T13:36:28.215Z" }, - { url = "https://files.pythonhosted.org/packages/32/85/c52c3b167edcc67da3b8788a20a2fb5b4f045060cbe1aed6121ce3ce83d3/kuzu-0.11.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d72ebd88e231b562e7a60ff88d200825d53e78a681bddd7f8d77b78126a5060c", size = 6798657, upload-time = "2025-10-10T13:36:29.935Z" }, - { url = "https://files.pythonhosted.org/packages/06/be/5b4ff168718165c2ff5848ab79e22ecce72ad00522afee6820d390cb0753/kuzu-0.11.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64c7ec822906bdee154eb38d93e64f184d8f94b30bbeaceaa252725f2b9efab3", size = 7620394, upload-time = "2025-10-10T13:36:31.69Z" }, -] - [[package]] name = "langchain-core" version = "0.3.74" @@ -1111,19 +1074,20 @@ wheels = [ [[package]] name = "mcp-server" -version = "1.0.0rc0" +version = "1.0.0" source = { virtual = "." } dependencies = [ - { name = "azure-identity" }, - { name = "graphiti-core", extra = ["falkordb", "kuzu"] }, + { name = "graphiti-core", extra = ["falkordb"] }, { name = "mcp" }, { name = "openai" }, { name = "pydantic-settings" }, - { name = "pytest" }, { name = "pyyaml" }, ] [package.optional-dependencies] +azure = [ + { name = "azure-identity" }, +] dev = [ { name = "graphiti-core" }, { name = "httpx" }, @@ -1152,10 +1116,10 @@ dev = [ [package.metadata] requires-dist = [ { name = "anthropic", marker = "extra == 'providers'", specifier = ">=0.49.0" }, - { name = "azure-identity", specifier = ">=1.21.0" }, + { name = "azure-identity", marker = "extra == 'azure'", specifier = ">=1.21.0" }, { name = "google-genai", marker = "extra == 'providers'", specifier = ">=1.8.0" }, { name = "graphiti-core", marker = "extra == 'dev'", editable = "../" }, - { name = "graphiti-core", extras = ["kuzu", "falkordb"], editable = "../" }, + { name = "graphiti-core", extras = ["falkordb"], editable = "../" }, { name = "groq", marker = "extra == 'providers'", specifier = ">=0.2.0" }, { name = "httpx", marker = "extra == 'dev'", specifier = ">=0.28.1" }, { name = "mcp", specifier = ">=1.9.4" }, @@ -1163,7 +1127,6 @@ requires-dist = [ { name = "openai", specifier = ">=1.91.0" }, { name = "pydantic-settings", specifier = ">=2.0.0" }, { name = "pyright", marker = "extra == 'dev'", specifier = ">=1.1.404" }, - { name = "pytest", specifier = ">=8.4.1" }, { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.0.0" }, { name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=0.21.0" }, { name = "pyyaml", specifier = ">=6.0" }, @@ -1171,7 +1134,7 @@ requires-dist = [ { name = "sentence-transformers", marker = "extra == 'providers'", specifier = ">=2.0.0" }, { name = "voyageai", marker = "extra == 'providers'", specifier = ">=0.2.3" }, ] -provides-extras = ["providers", "dev"] +provides-extras = ["azure", "providers", "dev"] [package.metadata.requires-dev] dev = [