57 lines
2.5 KiB
Python
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()
|