diff --git a/alembic/versions/0062_drop_userprofile_curator_columns.py b/alembic/versions/0062_drop_userprofile_curator_columns.py new file mode 100644 index 0000000..00e5633 --- /dev/null +++ b/alembic/versions/0062_drop_userprofile_curator_columns.py @@ -0,0 +1,41 @@ +"""drop dead UserProfile curator columns + +Revision ID: 0062 +Revises: 0061 +Create Date: 2026-06-02 + +learned_summary, observations_raw, and observations_updated_at were written by +the curator/LLM-profile machinery removed in the Phase-8 MCP pivot. Nothing has +populated them since; the profile API returned permanently-empty fields. Drop +the columns. +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + + +revision = "0062" +down_revision = "0061" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + op.drop_column("user_profiles", "learned_summary") + op.drop_column("user_profiles", "observations_raw") + op.drop_column("user_profiles", "observations_updated_at") + + +def downgrade() -> None: + op.add_column( + "user_profiles", + sa.Column("observations_updated_at", sa.DateTime(timezone=True), nullable=True), + ) + op.add_column( + "user_profiles", + sa.Column("observations_raw", postgresql.JSONB(), nullable=True), + ) + op.add_column( + "user_profiles", + sa.Column("learned_summary", sa.Text(), nullable=True), + ) diff --git a/src/fabledassistant/models/user_profile.py b/src/fabledassistant/models/user_profile.py index 0e13e61..a5999d5 100644 --- a/src/fabledassistant/models/user_profile.py +++ b/src/fabledassistant/models/user_profile.py @@ -1,6 +1,4 @@ -from datetime import datetime - -from sqlalchemy import DateTime, ForeignKey, Integer, Text +from sqlalchemy import ForeignKey, Integer, Text from sqlalchemy.dialects.postgresql import ARRAY, JSONB from sqlalchemy.orm import Mapped, mapped_column @@ -27,13 +25,6 @@ class UserProfile(Base, TimestampMixin): interests: Mapped[list[str] | None] = mapped_column(ARRAY(Text), nullable=True) # {days: ["Mon","Tue",...], start: "09:00", end: "17:00"} work_schedule: Mapped[dict | None] = mapped_column(JSONB, nullable=True) - # LLM-consolidated summary of learned preferences - learned_summary: Mapped[str | None] = mapped_column(Text, nullable=True) - # [{date: "YYYY-MM-DD", bullets: "..."}, ...] - observations_raw: Mapped[list | None] = mapped_column(JSONB, nullable=True) - observations_updated_at: Mapped[datetime | None] = mapped_column( - DateTime(timezone=True), nullable=True - ) def to_dict(self) -> dict: return { @@ -45,11 +36,4 @@ class UserProfile(Base, TimestampMixin): "tone": self.tone or "casual", "interests": self.interests or [], "work_schedule": self.work_schedule or {}, - "learned_summary": self.learned_summary or "", - "observations_count": len(self.observations_raw or []), - "observations_updated_at": ( - self.observations_updated_at.isoformat() - if self.observations_updated_at - else None - ), }