80 lines
2.2 KiB
Python
80 lines
2.2 KiB
Python
"""Configuration for Spore Agent Commons node."""
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
from pydantic_settings import BaseSettings
|
|
from koi_net.config.full_node import FullNodeConfig
|
|
from koi_net.config.koi_net_config import KoiNetConfig, NodeContact
|
|
from koi_net.config.server_config import ServerConfig
|
|
from koi_net.protocol.node import NodeProfile, NodeType, NodeProvides
|
|
from rid_lib.core import RID
|
|
|
|
from .rid_types import SPORE_RID_TYPES, SporeHolon
|
|
|
|
|
|
class SporeConfig(BaseSettings):
|
|
"""App-level config loaded from env vars."""
|
|
|
|
node_name: str = "spore-commons"
|
|
node_port: int = 8351
|
|
root_dir: Path = Path("/data")
|
|
|
|
# Database
|
|
postgres_host: str = "spore-db"
|
|
postgres_port: int = 5432
|
|
postgres_user: str = "spore"
|
|
postgres_password: str = ""
|
|
postgres_db: str = "spore_commons"
|
|
|
|
# Redis
|
|
redis_url: str = "redis://spore-redis:6379"
|
|
|
|
# Federation
|
|
bkc_node_url: str = ""
|
|
|
|
# AI
|
|
embedding_api_url: str = "http://litellm:4000"
|
|
|
|
@property
|
|
def database_url(self) -> str:
|
|
return (
|
|
f"postgresql://{self.postgres_user}:{self.postgres_password}"
|
|
f"@{self.postgres_host}:{self.postgres_port}/{self.postgres_db}"
|
|
)
|
|
|
|
model_config = {"env_prefix": "", "case_sensitive": False}
|
|
|
|
|
|
def build_node_config(cfg: SporeConfig) -> FullNodeConfig:
|
|
"""Build koi-net FullNodeConfig from our SporeConfig."""
|
|
koi_net = KoiNetConfig(
|
|
node_name=cfg.node_name,
|
|
node_profile=NodeProfile(
|
|
node_type=NodeType.FULL,
|
|
provides=NodeProvides(
|
|
event=list(SPORE_RID_TYPES),
|
|
state=list(SPORE_RID_TYPES),
|
|
),
|
|
),
|
|
rid_types_of_interest=list(SPORE_RID_TYPES),
|
|
cache_directory_path=cfg.root_dir / ".rid_cache",
|
|
private_key_pem_path=cfg.root_dir / "priv_key.pem",
|
|
)
|
|
|
|
# Add BKC as first contact if configured
|
|
if cfg.bkc_node_url:
|
|
koi_net.first_contact = NodeContact(
|
|
rid=None,
|
|
url=cfg.bkc_node_url,
|
|
)
|
|
|
|
return FullNodeConfig(
|
|
koi_net=koi_net,
|
|
server=ServerConfig(
|
|
host="0.0.0.0",
|
|
port=cfg.node_port,
|
|
path="/koi-net",
|
|
),
|
|
)
|