
    yj/                         U d Z ddlmZ ddlZddlmZ ddlmZ ddl	m
Z
mZmZmZ dZeed<   d	Zedz  ed
<   dZeee         z  dz  ed<   dZeee         z  dz  ed<    e            ZddZddZdS )a  make embeddings nullable, add soft delete, add vector sync state

This migration:
1. Makes embedding columns nullable in both message_embeddings and documents tables
   since embeddings are now stored in external vector stores instead of PostgreSQL.
2. Adds deleted_at column to documents table for soft delete support, enabling
   hybrid sync/soft delete pattern for vector store consistency.
3. Adds sync_state, last_sync_at, and sync_attempts columns to documents and
   message_embeddings tables for tracking vector store synchronization status.
4. Adds partial unique index on queue table for reconciler task deduplication,
   ensuring only one pending reconciler task exists per work_unit_key.
5. Makes workspace_name nullable on queue table for system-level tasks (e.g., reconciler)
   that don't belong to any specific workspace.

Revision ID: 119a52b73c60
Revises: 7c0d9a4e3b1f
Create Date: 2025-11-24 12:00:00.000000

    )SequenceN)op)Vector)column_existsconstraint_exists
get_schemaindex_exists119a52b73c60revision7c0d9a4e3b1fdown_revisionbranch_labels
depends_onreturnc                  T	   t          j        t          j                              } t          j        ddt          d          dt                     t          j        ddt          d          dt                     t          dd|           sut          j        dt          j	        dt          j
        d          d	          t          
           t          j        dddgt          t          j        d                     t          dd|           sst          j        dt          j	        dt          j                    dt          j        d                    t          
           t          j        dddgt          
           t          dd|           sDt          j        dt          j	        dt          j
        d          d	          t          
           t          dd|           sUt          j        dt          j	        dt          j                    dt          j        d                    t          
           t          dd|           st          j        ddddgt          
           t          dd|           sst          j        dt          j	        dt          j                    dt          j        d                    t          
           t          j        dddgt          
           t          dd|           sDt          j        dt          j	        dt          j
        d          d	          t          
           t          dd|           sUt          j        dt          j	        dt          j                    dt          j        d                    t          
           t          dd|           st          j        ddddgt          
           t          dd|           s2t          j        dddgdt          t          j        d                     t!          ddd|           rt          j        dddt                      t          j        dd!t          j                    dt                     t          j        ddd"d!gd#gt          t          $           d%S )&z9Make embeddings nullable, add deleted_at, add sync state.message_embeddings	embeddingi   Texisting_typenullableschema	documents
deleted_at)timezone)r   r   ix_documents_deleted_atzdeleted_at IS NOT NULL)r   postgresql_where
sync_stateFz	'pending')r   server_defaultix_documents_sync_statelast_sync_atsync_attempts0$ix_documents_sync_state_last_sync_at ix_message_embeddings_sync_state-ix_message_embeddings_sync_state_last_sync_atqueue)uq_queue_reconciler_pending_work_unit_keywork_unit_keyz.task_type = 'reconciler' AND processed = false)uniquer   r   fk_queue_workspace_name
foreignkeytype_r   workspace_name
workspacesnamesource_schemareferent_schemaN)sainspectr   get_bindalter_columnr   r   r   
add_columnColumnDateTimecreate_indextextTEXTIntegerr	   r   drop_constraintcreate_foreign_key)	inspectors    d/DATA/AppData/hermes/projects/honcho/migrations/versions/119a52b73c60_support_external_embeddings.pyupgraderD   &   sR   
2;==))IOTll    OTll    lI>> 

IT***  
 	
 	
 	
 	
 	%NW%=>>	
 	
 	
 	
 lI>> 

I		!w   	   	
 	
 	
 	
 	%N		
 	
 	
 	
 ni@@ 	

IT***  
 	
 	
 	
 	
 oyAA 


I
!ws||	   		
 		
 		
 		
 %KYWW 

2>*		
 	
 	
 	
 -|YGG 

 I		!w   	   	
 	
 	
 	
 	. N		
 	
 	
 	
 -~yII 	

 IT***  
 	
 	
 	
 	
 -	JJ 


 I
!ws||	   		
 		
 		
 		
 My  
 	; >*		
 	
 	
 	
 <i  

 	7W%UVV	
 	
 	
 	
 ";\9UU 

%wl6	
 	
 	
 	
 Ogii    !		         c            	         t          j        t          j                              } t          j                    }d}	 |                    t          j        dt           dt           d          d|i          }|j        dk    rnH	 |                    t          j        dt           dt           d	          d|i          }|j        dk    rnHt          j        d
ddt                     t          j	        ddt          j
                    dt                     t          j        d
dddgdgt          t                     t          dd|           rt          j        ddt                     t          dd|           rt          j        ddt                     t          dd|           rt          j        ddt                     t          dd|           rt          j        ddt                     t          dd|           rt          j        ddt                     t          dd|           rt          j        ddt                     t          dd|           rt          j        ddt                     t          dd|           rt          j        ddt                     t          dd|           rt          j        ddt                     t          dd|           rt          j        ddt                     t          dd|           rt          j        ddt                     t          dd |           rt          j        d dt                     t          dd!|           rt          j        dd!t                     d"S d"S )#z7Remove deleted_at columns and revert embedding columns.i  TzN
                WITH del AS (
                    SELECT work_unit_key FROM "z".queue
                    WHERE workspace_name IS NULL
                    LIMIT :batch_size
                )
                DELETE FROM "zo".active_queue_sessions
                WHERE work_unit_key IN (SELECT work_unit_key FROM del)
                
batch_sizer   zE
                WITH del AS (
                    SELECT ctid FROM "zM".queue
                WHERE ctid IN (SELECT ctid FROM del)
                r+   r'   r,   r-   r/   Fr   r0   r1   r2   r(   )
table_namer   r   r&   r%   r   r   r"   r!   r   r$   r    r   r   N)r5   r6   r   r7   executer=   r   rowcountr@   r8   r>   rA   r	   
drop_indexr   drop_column)rB   connrG   results       rC   	downgraderO      s4   
2;==))I;==D JG06  %  
 
 :&
 
 ?a!(G'-  %  
 
 :&
 
 ?a!& !7,v    Ogii    !		    GH)TT 

7	
 	
 	
 	
 My  
 	;+	
 	
 	
 	

 @)  
 	.+	
 	
 	
 	
 )<CC J
+\&IIII)?IFF M
+_VLLLL)>9EE L
+^FKKKK K!GSS 

2"	
 	
 	
 	

 K!:IFF X
/KPVWWWW[,	:: A
{L@@@@ [/9== D
{OFCCCC[.)<< C
{N6BBBB K!:IFF X
/KPVWWWW[,	:: A
{L@@@@@@A ArE   )r   N)__doc__collections.abcr   
sqlalchemyr5   alembicr   pgvector.sqlalchemyr   migrations.utilsr   r   r   r	   r   str__annotations__r   r   r   r   rD   rO    rE   rC   <module>rY      s,    ( % $ $ $ $ $           & & & & & & W W W W W W W W W W W W #   *sTz * * *,0sXc]"T) 0 0 0)-
C(3-$& - - -	y y y yxAA AA AA AA AA AArE   