cognee/cognee/base_config.py
2025-09-19 17:55:08 +02:00

57 lines
2.5 KiB
Python

import os
from typing import Optional
from functools import lru_cache
from cognee.root_dir import get_absolute_path, ensure_absolute_path
from cognee.modules.observability.observers import Observer
from pydantic_settings import BaseSettings, SettingsConfigDict
import pydantic
class BaseConfig(BaseSettings):
data_root_directory: str = get_absolute_path(".data_storage")
system_root_directory: str = get_absolute_path(".cognee_system")
cache_root_directory: str = get_absolute_path(".cognee_cache")
monitoring_tool: object = Observer.NONE
@pydantic.model_validator(mode="after")
def validate_paths(self):
# Adding this here temporarily to ensure that the cache root directory is set correctly for S3 storage automatically
# I'll remove this after we update documentation for S3 storage
# Auto-configure cache root directory for S3 storage if not explicitly set
storage_backend = os.getenv("STORAGE_BACKEND", "").lower()
cache_root_env = os.getenv("CACHE_ROOT_DIRECTORY")
if storage_backend == "s3" and not cache_root_env:
# Auto-generate S3 cache path when using S3 storage
bucket_name = os.getenv("STORAGE_BUCKET_NAME")
if bucket_name:
self.cache_root_directory = f"s3://{bucket_name}/cognee/cache"
# Require absolute paths for root directories
self.data_root_directory = ensure_absolute_path(self.data_root_directory)
self.system_root_directory = ensure_absolute_path(self.system_root_directory)
# Set monitoring tool based on available keys
if self.langfuse_public_key and self.langfuse_secret_key:
self.monitoring_tool = Observer.LANGFUSE
return self
langfuse_public_key: Optional[str] = os.getenv("LANGFUSE_PUBLIC_KEY")
langfuse_secret_key: Optional[str] = os.getenv("LANGFUSE_SECRET_KEY")
langfuse_host: Optional[str] = os.getenv("LANGFUSE_HOST")
default_user_email: Optional[str] = os.getenv("DEFAULT_USER_EMAIL")
default_user_password: Optional[str] = os.getenv("DEFAULT_USER_PASSWORD")
model_config = SettingsConfigDict(env_file=".env", extra="allow")
def to_dict(self) -> dict:
return {
"data_root_directory": self.data_root_directory,
"system_root_directory": self.system_root_directory,
"monitoring_tool": self.monitoring_tool,
"cache_root_directory": self.cache_root_directory,
}
@lru_cache
def get_base_config():
return BaseConfig()