mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-05-02 06:48:21 +00:00
Introduce a unified database configuration (DatabaseConfig) that controls both the LangGraph checkpointer and the DeerFlow application persistence layer from a single `database:` config section. New modules: - deerflow.config.database_config — Pydantic config with memory/sqlite/postgres backends - deerflow.persistence — async engine lifecycle, DeclarativeBase with to_dict mixin, Alembic skeleton - deerflow.runtime.runs.store — RunStore ABC + MemoryRunStore implementation Gateway integration initializes/tears down the persistence engine in the existing langgraph_runtime() context manager. Legacy checkpointer config is preserved for backward compatibility. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
"""SQLAlchemy declarative base with automatic to_dict support.
|
|
|
|
All DeerFlow ORM models inherit from this Base. It provides a generic
|
|
to_dict() method via SQLAlchemy's inspect() so individual models don't
|
|
need to write their own serialization logic.
|
|
|
|
LangGraph's checkpointer tables are NOT managed by this Base.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from sqlalchemy import inspect as sa_inspect
|
|
from sqlalchemy.orm import DeclarativeBase
|
|
|
|
|
|
class Base(DeclarativeBase):
|
|
"""Base class for all DeerFlow ORM models.
|
|
|
|
Provides:
|
|
- Automatic to_dict() via SQLAlchemy column inspection.
|
|
- Standard __repr__() showing all column values.
|
|
"""
|
|
|
|
def to_dict(self, *, exclude: set[str] | None = None) -> dict:
|
|
"""Convert ORM instance to plain dict.
|
|
|
|
Uses SQLAlchemy's inspect() to iterate mapped column attributes.
|
|
|
|
Args:
|
|
exclude: Optional set of column keys to omit.
|
|
|
|
Returns:
|
|
Dict of {column_key: value} for all mapped columns.
|
|
"""
|
|
exclude = exclude or set()
|
|
return {c.key: getattr(self, c.key) for c in sa_inspect(type(self)).mapper.column_attrs if c.key not in exclude}
|
|
|
|
def __repr__(self) -> str:
|
|
cols = ", ".join(f"{c.key}={getattr(self, c.key)!r}" for c in sa_inspect(type(self)).mapper.column_attrs)
|
|
return f"{type(self).__name__}({cols})"
|