
    yj!                       U d Z ddlmZ ddlmZ ddlZddlZddlm	Z	 ddl
mZ ddlmZmZ ddlmZ dd	lmZmZmZmZmZ dd
l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<   d*dZd*dZ dededdfdZ!dededdfdZ"dededdfdZ#dededdfdZ$dededdfdZ%dededdfdZ&dededdfdZ'dededdfdZ(dededdfdZ)deddfdZ*dededdfd Z+dededdfd!Z,dededdfd"Z-dededdfd#Z.dededdfd$Z/dededdfd%Z0dededdfd&Z1dededdfd'Z2dededdfd(Z3deddfd)Z4dS )+znadopt peer paradigm

Revision ID: d429de0e5338
Revises: 66e63cf2cf77
Create Date: 2025-06-09 15:16:38.164067

    )Sequence)suppressN)op)generate)	Inspectortext)
postgresql)column_existsconstraint_exists	fk_existsindex_existstable_exists)settingsd429de0e5338revision66e63cf2cf77down_revisionbranch_labels
depends_onreturnc                     t           j        j        } t          j        t          j                              }t          | |           t          | |           t          | |           t          | |           t          | |           t          | |           t          | |           t          | |           t          | |           t!          d|          rt          j        d|            t%          dd|          rt          j        dd|            t%          dd|          rt          j        dd|            dS dS )z/Upgrade database schema to adopt peer paradigm.metamessagesschemasessionsapp_iduser_idN)r   DBSCHEMAsainspectr   get_bindrename_tablesupdate_workspaces_tableupdate_peers_table-update_queue_and_active_queue_sessions_tablesupdate_sessions_table'create_and_populate_session_peers_tableupdate_messages_tableupdate_collections_tableupdate_documents_tabler   
drop_tabler
   drop_columnr   	inspectors     \/DATA/AppData/hermes/projects/honcho/migrations/versions/d429de0e5338_adopt_peer_paradigm.pyupgrader1   #   sT   [F
2;==))I &)$$$ FI... vy))) 2&)DDD &),,, ,FI>>> &),,, VY/// 69--- NI.. 5
nV4444 Z955 <
z8F;;;;ZI66 =
z9V<<<<<<= =    c                  V	   t           j        j        } t          j        t          j                              }t          | |           t          | |           t          | |           t          | |           t          d|          rt          j        d|            t          | |           t          | |           t          | |           t!          | |           t#          | |           t%          |            t          d|          st          j        dt          j        dt          j                    t          j        d          dddd          t          j        d	t          j                    ddd
          t          j        dt          j                    d          t          j        dt          j                    t          j        d          dd          t          j        dt          j        d          ddt          j        d                    t          j        dt          j                    dd          t          j        dt          j                    t          j        d          dd          t          j        dt          j                    t          j        d          dd          t          j        dt          j                    t          j        d          dd          t          j        dt7          j        t          j                              dt          j        d                    t          j        ddt          j        d           g d!"          t          j        d#ddt          j        d                     t          j        d$ddt          j        d                     t          j        d%ddt          j        d                     t          j        d&d'(          t          j        d)d*(          t          j        d+d,(          t          j        d-d.(          t          j        d/d0(          t          j         dg|  d1gd2          t          j         dg|  d3gd4          t          j         dg|  d5gd6                     d7S d7S )8z<Downgrade database schema to reverse peer paradigm adoption.session_peersr   r   idF)alwaysT)primary_keyautoincrementindexnullable	public_id)r:   r9   uniquecontentr:   
message_idzmessages.public_id)r:   r9   
created_attimezoneznow())r:   r9   server_defaultlabel
session_idzsessions.public_idr   zusers.public_idr   zapps.public_idmetadataastext_typez'{}'::jsonbr:   rC   idx_metamessages_lookupzid DESC)r;   r?   r@   )postgresql_includeidx_metamessages_user_lookupidx_metamessages_session_lookupidx_metamessages_message_lookuplength(public_id) = 21public_id_length)namepublic_id ~ '^[A-Za-z0-9_-]+$'public_id_formatzlength(content) <= 65535content_lengthzlength(label) <= 512label_lengthz0(message_id IS NULL) OR (session_id IS NOT NULL)message_requires_sessionz.sessions.public_id#fk_metamessages_session_id_sessionsz.users.public_idfk_metamessages_user_id_usersz.apps.public_idfk_metamessages_app_id_appsN)!r   r   r   r    r!   r   r"   restore_app_user_columnsrestore_documents_tablerestore_collections_tablerestore_messages_tabler   r,   restore_sessions_tablerestore_peers_tablerestore_workspaces_table.restore_queue_and_active_queue_sessions_tablesrestore_table_namesrestore_foreign_keyscreate_tableColumn
BigIntegerIdentityTEXT
ForeignKeyDateTimer   r	   JSONBTextIndexCheckConstraintForeignKeyConstraintr.   s     r0   	downgraderp   N   s   [F
2;==))I VY/// FI... fi000 69--- OY// 6
of5555 69--- 	*** VY/// 369EEE 	***     	22 j

I5))) "   Ik2799uDQUVVVIiT:::I		233   IT***!ww//   Igrwyy5EEEI		233   I		/00   I		.//   I RWYY777!w}55	   H)	""#L#L#L	   H.	""	  H1	""	  H1	""	  7>PQQQ07I   9@PQQQ5NKKKB/   #///05 
 #,,,-/ 
 #
+++,- Ii	
 i	
 i	
 i	
 i	
j
 j
r2   r   r/   c                     |                     d|           rt          j        dd|            |                     d|           rt          j        dd|            dS dS )z0Rename apps->workspaces and users->peers tables.appsr   
workspacesuserspeersN	has_tabler   rename_tabler.   s     r0   r#   r#      sv    6&11 =
V<<<<7622 9
8888889 9r2   c           
      X   t          j        dt          j        dt	          j        t          j                              dd          |            t          j        dt          j        dt	          j        t          j                              dd          |            t          dd	d
|          rt          j        d	dd
|            t          ddd
|          rt          j        ddd
|            t          ddd|          rt          j        ddd|            t          dd|          rt          j
        dd|            t          j        ddd|            t          j        dddg|            t          j        ddd|            t          j        ddd|            dS )z(Update workspaces table (formerly apps).rs   configurationrG   F{}rI   r   internal_metadatarP   checktype_r   rS   pk_appsprimaryr5   r;   new_column_namer   pk_workspaces	id_lengthlength(id) = 21	id_formatid ~ '^[A-Za-z0-9_-]+$'N)r   
add_columnr    re   r	   rk   rl   r   drop_constraintr
   r-   alter_columncreate_primary_keycreate_check_constraintr.   s     r0   r$   r$      s    M
	333		
 	
 	
 	 	 	 	 M
	333		
 	
 	
 	 	 	 	 '97INN 

GF	
 	
 	
 	
 '97INN 

GF	
 	
 	
 	

 y)YGG T
9l)FSSSS\433 :
|T&9999OL+tFSSSS/<$OOOO\#4V    \#<V     r2   c           
      .   t          j        dt          j        dt	          j        t          j                              dd          |            t          j        dt          j        dt	          j        t          j                              dd          |            t          j        dt          j        d	t          j                    d
          |            t          j        t          j	        d|  d|  d                     t          ddd|          rt          j        ddd|            t          ddd|          rt          j        ddd|            t          ddd|          rt          j        ddd|            t          j        dd|            t          j        ddd|            t          j        dddg|            t          dd|          rt          j        ddd|            t          dd|          rt          j        ddd|            t          j        dddd	gdg|            t          dd d!|          rt          j        d dd!|            t          j        d"ddd	g|            t          j        d#d|            t          j        d$dd	dg|            t          j        d%dd&|            t          j        d'dd(|            t          j        dd)|            t          j        dd	d| *           d+S ),z$Update peers table (formerly users).ru   rz   rG   Fr{   rI   r   r|   workspace_nameTr>   UPDATE z1.peers SET workspace_name = workspaces.name FROM z..workspaces WHERE peers.app_id = workspaces.idrP   r}   r~   rS   pk_usersr   r5   r;   r   pk_peersfk_users_app_id_apps
foreignkeyusers_app_id_fkey"fk_peers_workspace_name_workspacesrs   rQ   referent_schemaunique_name_app_userr<   unique_name_workspace_peeridx_users_app_lookupidx_peers_workspace_lookupr   r   r   r   r   r:   r   N)r   r   r    re   r	   rk   rl   rh   executer   r   r   r-   r   r   r   create_foreign_keycreate_unique_constraint
drop_indexcreate_indexr   r.   s     r0   r%   r%      s    M
	333		
 	
 	
 	 	 	 	 M
	333		
 	
 	
 	 	 	 	 M+RWYYFFFv    J
 Ff  F  Fv  F  F  F	
 	
   "4gyII V
-wgfUUUU"4gyII V
-wgfUUUU *iCC P
:wiOOOON7D0000OG[$vNNNN*gvfEEEE 0)<< 

"G<	
 	
 	
 	
 -y99 

V	
 	
 	
 	
 ,		    "8(INN 

"G8F	
 	
 	
 	
 $g8H/IRX   
 M('&AAAAO$g0@&/IRX    {G5FvVVVVW7    N7HV4444OG-fMMMMMMr2   c           
         t          j        dt          j        dt	          j        t          j                              dd          |            t          j        dt          j        dt	          j        t          j                              dd          |            t          j        dt          j        d	t          j                    d
          |            t          j        t          j	        d|  d|  d                     t          j
        dd	d|            t          j        dt          j        dt          j                    d
          |            t          j        t          j	        d|  d                     t          j
        ddd|            t          j        dddd	g|            t          ddd|          rt          j        ddd|            t          ddd|          rt          j        ddd|            t          ddd|          rt          j        ddd|            t          j        dd|            t          j
        ddd|            t          j        dddg|            t!          dd|          rt          j        ddd|            t!          dd|          rt          j        ddd|            t!          dd|          rt          j        ddd|            t          j        d dd!d	gdg| "           t          j        d#dd$|            t          j        d%dd&|            t          j        d'dd(|            d)S )*zUpdate sessions table.r   rz   rG   Fr{   rI   r   r|   r   Tr>   r   z4.sessions SET workspace_name = workspaces.name FROM z1.workspaces WHERE sessions.app_id = workspaces.idr   rQ   z.sessions SET name = public_idunique_session_namerP   r}   r~   rS   pk_sessionsr   r5   r;   r   fk_sessions_user_id_usersr   fk_sessions_app_id_appssessions_app_id_fkey%fk_sessions_workspace_name_workspacesrs   r   r   r   r   r   name_lengthzlength(name) <= 512N)r   r   r    re   r	   rk   rl   rh   r   r   r   r   r   r   r-   r   r   r   r   r.   s     r0   r'   r'   }  s?    M
	333		
 	
 	
 	 	 	 	 M
	333		
 	
 	
 	 	 	 	 MBI.		DIIIRX    J
 Lf  L  LRX  L  L  L	
 	
  
 OJ 05PPPPM
	&"'))d333   
 JrwGGGGHHIIIOJvFFFFzF4D+Ef   
 %7)LL Y
-zQWXXXX%7)LL Y
-zQWXXXX ]IyII V
=*IfUUUUN:tF3333OJT&QQQQ-dVFKKKK 8)DD 

'<PV	
 	
 	
 	
 6	BB 

%zf	
 	
 	
 	
 3Y?? 

"Jl6	
 	
 	
 	

 /		    Z!26    Z!:6    z#8     r2   c                    t          d|          st          j        dt          j        dt          j                    d          t          j        dt          j                    d          t          j        dt          j                    d          t          j        dt          j        t          j                              dd	
          t          j        dt          j        t          j                              dd	
          t          j        dt          j	        d          dt          j
                                        
          t          j        dt          j	        d          d          t          j        ddg|  d|  dg          t          j        ddg|  d|  dg          t          j        ddd                     t          j                    }|                    t          j        d|  d                    }i }|D ]\}|\  }}t#                      }||f||<   t          j        t          j        d|  d                              |||                     ]|                    t          j        d|  d|  d                                                    }	|	D ]}
|
\  }}}}t          j        t          j        d                              |||                     ||         \  }}t          j        t          j        d|  d                              |||                     dS ) z(Create and populate session_peers table.r4   r   Fr>   session_name	peer_namerz   rG   r{   rI   r|   	joined_atTrA   left_atz.peers.namez.peers.workspace_namez.sessions.namez.sessions.workspace_namezSELECT id, name FROM z.workspaceszINSERT INTO zF.peers (id, name, workspace_name) VALUES (:id, :name, :workspace_name))r5   rQ   r   zV
        SELECT s.user_id, s.name, s.workspace_name, p.name as peer_name
        FROM z.sessions s
        JOIN zI.peers p ON p.id = s.user_id AND p.workspace_name = s.workspace_name
    zwINSERT INTO session_peers (workspace_name, session_name, peer_name) VALUES (:workspace_name, :session_name, :peer_name))r   r   r   zl.session_peers (workspace_name, session_name, peer_name) VALUES (:workspace_name, :session_name, :peer_name)N)r   r   rd   r    re   rh   r	   rk   rl   rj   funcnowro   PrimaryKeyConstraintr"   r   r   generate_nanoid
bindparamsfetchall)r   r/   connrs   agent_peers_map	workspaceworkspace_idr   agent_peer_idr   sessionr   r   r   _s                  r0   r(   r(     s    33 &

I&		EBBBInbgii%@@@Ik2799u===I RWYY777#	   I# RWYY777#	   IT***!w{{}}	   IT***  
 #./'''F)I)I)IJ  #!12***v,O,O,OP  #$4nkRRI%	
 %	
 %	
P ;==Dbg&Qf&Q&Q&QRRSSJO 

 

	'0$n'))+8,*G'

Gmvmmm j }^   	
 	
 	
 	
 ||
      		 		  hjj   
 
;B8~y

G J j-)#   	
 	
 	
 +>:q

G Tv  T  T  T j-)'   	
 	
 	
 	

 
r2   c                    t          dd|          s=t          j        dt          j        dt          j                    d          |            t          dd|          s=t          j        dt          j        dt          j                    d          |            t          dd|          s=t          j        dt          j        dt          j                    d          |            t          j        t          j        d|  d	|  d
                     t          j        t          j        d|  d|  d                     t          j        t          j        d|  d|  d|  d|  d|  d|  d                     t          j        ddd|            t          j        ddd|            t          dd|          rt          j
        ddd|            t          dd|          rt          j
        ddd|            t          dd|          rt          j
        ddd|            t          dd|          rt          j
        ddd|            t          j        dd|            t          j        dd|            t          j        dd|            t          j        dd|            t          j        ddd ddgd!dg| "           t          j        d#dd$ddgd!dg| "           t          j        d%dd&dgd!g| "           t          dd'|          rt          j        d'd| (           t          j        d'ddd)gd)d*g| +           t          j        d,ddg|            t          j        d-ddg|            t          j        d.dt          j        d/          gd0| 1           t          j        dt          j        d2t          j                    dd34          |            t          j        dt          j        d5t#          j        t          j                    6          dd74          |            t)          |            d8S )9zUpdate messages table.messagesr   Tr>   r   r   r   
        UPDATE z9.messages SET
        workspace_name = (SELECT name FROM z7.workspaces WHERE workspaces.id = messages.app_id)
    z7.messages SET
        session_name = (SELECT name FROM z7.sessions WHERE sessions.id = messages.session_id)
    z.messages SET
        peer_name = CASE
            WHEN is_user = true THEN (
                SELECT p.name
                FROM z.peers p
                JOIN z.sessions s ON s.user_id = p.id
                WHERE s.name = messages.session_name
            )
            ELSE (
                SELECT sp.peer_name
                FROM z.session_peers sp
                WHERE sp.session_name = messages.session_name
                AND sp.peer_name != (
                    SELECT p.name
                    FROM ".peers p
                    JOIN z.sessions s ON s.user_id = p.id
                    WHERE s.name = messages.session_name
                )
            )
        END
    Fr   fk_messages_session_id_sessionsr   r~   messages_app_id_fkeyfk_messages_app_id_appsmessages_user_id_fkeyis_userr   r   rE   !fk_messages_session_name_sessionsr   rQ   r   fk_messages_peer_name_peersru   %fk_messages_workspace_name_workspacesrs   idx_messages_session_lookup
table_namer   r5   r@   rK   r   ix_messages_peer_nameix_messages_workspace_nameidx_messages_content_ginzto_tsvector('english', content)gin)postgresql_usingr   token_count0rI   r|   rG   r{   N)r
   r   r   r    re   rh   r   r   r   r   r   r-   r   r   r   r   Integerr	   rk   rl   backfill_token_countsr.   s     r0   r)   r)   :  s    [)<< 

	+rwyy4HHHQW	
 	
 	
 	
 %5yAA 

I&		DAAA	
 	
 	
 	

 ^Y?? 

Inbgii$???	
 	
 	
 	
 J
  ,2   		 		   J
  *0   		 		   J
  
       !   !!   		 		  4 OJeFKKKKOJ 05PPPP >	JJ 

-		
 	
 	
 	
 3Y?? 

"Jl6	
 	
 	
 	
 6	BB 

%zf	
 	
 	
 	
 4i@@ 

#Z|F	
 	
 	
 	
 N:y8888N:y8888N:x7777N:|F;;;; +	)*	!"    %	&'	!"    /		    J =yII 

)j	
 	
 	
 	
 O%	 ,/    O+Z+vVVVVO$j3C2DV   
 O"	2	3	34    M
	-cRRR   
 M
	333		
 	
 	
 	 	 	 	 &!!!!!r2   c                 L   t          dd|          s=t          j        dt          j        dt          j                    d          |            t          dd|          s=t          j        dt          j        dt          j                    d          |            t          dd|          sQt          j        dt          j        dt          j        t          j                              d	d
          |            t          j	        t          j
        d|  d|  d|  d                     t          j        ddd	|            t          j        ddd	|            t          ddd|          rt          j        ddd|            t          dd|          rt          j        dd|            t          j        ddd|            t          j        dddg|            t!          dd|          rt          j        ddd|            t!          dd|          rt          j        ddd|            t!          dd|          rt          j        ddd|            t!          dd|          rt          j        ddd|            t          j        ddd|            t          j        dd|            t          j        dd|            t          j        d dg d!|            t          j        d"dd#ddgd$dg| %           t          j        d&dd'dgd$g| %           t          dd(d)|          rt          j        d(dd)|            t          dd*d)|          rt          j        d*dd)|            t          j        d+dd,|            t          j        d-dd.|            d/S )0zUpdate collections table.collectionsr   Tr>   r   r   r|   rG   Fr{   rI   r   z7.collections SET
        peer_name = (SELECT name FROM zY.peers WHERE peers.id = collections.user_id),
        workspace_name = (SELECT name FROM z:.workspaces WHERE workspaces.id = collections.app_id)
    r   pk_collectionsr   r~   r5   r;   r   fk_collections_user_id_usersr   fk_collections_app_id_appscollections_app_id_fkeycollections_user_id_fkeyunique_name_collection_userr<   r   r   unique_name_collection_peerrQ   r   r   fk_collections_peer_name_peersru   rQ   r   (fk_collections_workspace_name_workspacesrs   rP   r}   rS   r   r   r   r   N)r
   r   r   r    re   rh   r	   rk   rl   r   r   r   r   r   r-   r   r   r   r   r   r.   s     r0   r*   r*     s    Y?? 

Ik2799t<<<	
 	
 	
 	

 (8)DD 

I&		DAAA	
 	
 	
 	

 (;YGG 


I# RWYY777#	   		
 		
 		
 		
 J
  '-  -3   		 		   OM;vNNNNOM#3eFSSSS (8)YOO 

m9V	
 	
 	
 	
 ]D)44 ;
}d6::::OM;VTTTT*MD6&QQQQ  >	JJ 

*		
 	
 	
 	
  <iHH 

(		
 	
 	
 	
  99EE 

%}LQW	
 	
 	
 	
  :IFF 

&\RX	
 	
 	
 	
 %}HV    N=)F;;;;N=(6:::: %///	    (	&'	!"    2		    (:GYOO 

WV	
 	
 	
 	
 (:GYOO 

WV	
 	
 	
 	
 ]$5f    ]$=f     r2   c                 R   t          dd|          s=t          j        dt          j        dt          j                    d          |            t          dd|          s=t          j        dt          j        dt          j                    d          |            t          j        t          j        d|  d|  d	|  d
                     t          dd|          rt          j	        ddd|            t          dd|          rt          j	        ddd|            t          dd|          rt          j	        ddd|            t          dd|          rt          j	        ddd|            t          dd|          rt          j	        ddd|            t          dd|          rt          j
        ddd|            t          j
        ddd|            t          j        t          j        d|  d|  d                     t          j
        ddd|            t          j
        ddd|            t          ddd|          rt          j	        ddd|            t          dd|          rt          j        dd|            t          j
        ddd|            t          j        dddg|            t          j        dd|            t          j        dd |            t          j        d!dd"g d#g d$| %           t          j        d&dd'dgd(g| %           t          dd)d*|          rt          j	        d)dd*|            t          dd+d*|          rt          j	        d+dd*|            t          j        d,dd-|            t          j        d.dd/|            d0S )1zUpdate documents table.	documentsr   Tr>   r   r   r   z5.documents SET
        peer_name = (SELECT name FROM zW.peers WHERE peers.id = documents.user_id),
        workspace_name = (SELECT name FROM z8.workspaces WHERE workspaces.id = documents.app_id)
    &fk_documents_collection_id_collectionsr   r~   fk_documents_user_id_usersfk_documents_app_id_appsdocuments_app_id_fkeydocuments_user_id_fkeycollection_idcollection_namer   rF   r|   zV.documents
        SET collection_name = (
            SELECT c.name
            FROM z.collections c
            WHERE c.id = documents.collection_name
            AND c.peer_name = documents.peer_name
            AND c.workspace_name = documents.workspace_name
        )
    Fr   pk_documentsr   r5   r;   r   r   (fk_documents_collection_name_collectionsr   )r   r   r   r   r   &fk_documents_workspace_name_workspacesrs   rQ   rP   r}   rS   r   r   r   r   N)r
   r   r   r    re   rh   r   r   r   r   r   r   r-   r   r   r   r.   s     r0   r+   r+   W  s    k9== 

;		DIIIRX	
 	
 	
 	
 &6	BB 

I&		DAAA	
 	
 	
 	
 J
  '-  -3   		 		   F	RR 

4		
 	
 	
 	
 :IFF 

(+\RX	
 	
 	
 	
 8)DD 

&<PV	
 	
 	
 	
 5yAA 

#[V	
 	
 	
 	
 6	BB 

$kf	
 	
 	
 	

 [/9== 

-		
 	
 	
 	
 O+	    J
 		 	 		 	 	 			 			   OKuVLLLLOK!1E&QQQQ niKK X
>;iPVWWWW[$	22 9
{D8888OKd6RRRR.+vfMMMMN;	&9999N;8888 2:::///    0		    &8'9MM 

76	
 	
 	
 	
 &8'9MM 

76	
 	
 	
 	
 ["3F    [";F     r2   c                 R	   t          d|          r)t          dd|          rt          j        ddd|            t          d|          r)t          dd|          rt          j        ddd|            t          j                    }i }t          d|          rJ|                    t          j        d|  d	                                                    }|D ]
\  }}|||<   t          d|          r|                    t          j        d
|  d                                                    }t          j	        ddt          j
                    t          j                    dd           |D ]Y\  }||v rQ||         }|                    t          j        d|  d          t          |          t          |          d           Zt          d|          r|                    t          j        d
|  d                                                    }	t          ddd|          rt          j        ddd|            t          j        dt          j        dt          j                    d          |            t          j                    }|                    t          j        d|  d                                                    }
|
r=d |
D             }|D ].}|                    t          j        d|  d          |           /t          j	        ddd|            t          j        dddg|            t          j	        ddt          j
                    dt          j                    d           |	D ]Y\  }||v rQ||         }|                    t          j        d|  d           t          |          t          |          d           Zt          j        dt          j        d!t          j                    d          |            t          j        dt          j        d"t          j                    d          |            t          j        dt          j        d#t          j                    d          |            t          j        d$dg d%|            d&S d&S )'z.Update queue and active_queue_sessions tables.queuefk_queue_session_id_sessionsr   r~   active_queue_sessions,fk_active_queue_sessions_session_id_sessionsr   SELECT id, public_id FROM 	.sessions SELECT DISTINCT session_id FROM #.queue WHERE session_id IS NOT NULLrE   zsession_id::textT)r   existing_typer   r:   r   z:.queue SET session_id = :new_id WHERE session_id = :old_id)new_idold_id3.active_queue_sessions WHERE session_id IS NOT NULLpk_active_queue_sessionsr   r5   r>   r   zSELECT session_id FROM z'.active_queue_sessions WHERE id IS NULLc                 <    g | ]}|d          t                      dS )r   )rE   nanoid)r   ).0rows     r0   
<listcomp>zAupdate_queue_and_active_queue_sessions_tables.<locals>.<listcomp>H  s:         #1v1B1BCC  r2   zU.active_queue_sessions SET id = :nanoid WHERE session_id = :session_id AND id IS NULLFr   )r   r:   r   r   zJ.active_queue_sessions SET session_id = :new_id WHERE session_id = :old_idsender_nametarget_name	task_typeunique_active_queue_session)rE   r  r  r  N)r   r   r   r   r"   r   r    r   r   r   rl   rf   strr   r   re   rh   r   r   )r   r/   
connectionsession_id_mappingsessions_mappingr   r   queue_session_idsrE   active_queue_session_idsrows_needing_idsupdatesupdates                r0   r&   r&     s    GY'' 
I/- - 
 	*		
 	
 	
 	
 +Y77 

I6= = 


 	:#		
 	
 	
 	
 J *,J	** 0%--GBBBBCC
 

(** 	 / 	0 	0NFF)/v&& GY'' &..G^6^^^ 
 
 (**	 	 	'))-///	
 	
 	
 	
 / 	 	MZ///+J7""Gd&ddd   #6{{c*ooFF	   +Y77 e
#-#5#5Gn6nnn $
 $
 (**	 	! #%?I
 
 	 *'	    	#I		  
 	
 	
 	
 	
 []]
 &--GY&YYY 
 
 (**	 	  	 +  G "  ""G&  	    	/fUUUU
&#F		
 	
 	
 	
 	#'))-///	
 	
 	
 	
 6 	 	MZ///+J7""Gt&ttt   #6{{c*ooFF	   	#ImRWYY>>>	
 	
 	
 	

 	#ImRWYY>>>	
 	
 	
 	

 	#Ik2799u===	
 	
 	
 	

 	#)#EEE		
 	
 	
 	
 	
 	
Ae
 e
r2   c                    t          j                    }dt          t                    5  t	          j        d          ddd           n# 1 swxY w Y   dt          dt          ffd}d}d}	 |                    t          d	|  d
          ||d          }|
                                }|sdS g }|D ]'\  }}	 ||	          }
|                    ||
f           (d}t          dt          |          |          D ]Q}||||z            }d |D             }d |D             }|                    t          d|  d          ||d           R||z  })z@Backfill token counts for existing messages using batch updates.N
o200k_baser   r   c                     | sdS rNt          t                    5  t                              |                     cddd           S # 1 swxY w Y   t          |           dz  S )z-Count tokens in a text string using tiktoken.r   N   )r   	Exceptionlenencode)r   	tokenizers    r0   _count_tokensz,backfill_token_counts.<locals>._count_tokens  s     	1 	3)$$ 3 39++D11223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4yyA~s   "AAAi  r   TzSELECT id, content FROM z%.messages LIMIT :limit OFFSET :offset)limitoffset   c                     g | ]
}|d          S )r    r   items     r0   r   z)backfill_token_counts.<locals>.<listcomp>  s    333t47333r2   c                     g | ]
}|d          S )   r  r  s     r0   r   z)backfill_token_counts.<locals>.<listcomp>  s    <<<DG<<<r2   z
                    UPDATE a$  .messages
                    SET token_count = batch_data.token_count
                    FROM (
                        SELECT UNNEST(:ids) as id, UNNEST(:token_counts) as token_count
                    ) AS batch_data
                    WHERE messages.id = batch_data.id
                )idstoken_counts)r   r"   r   r  tiktokenget_encodingr  intr   r   r   appendranger  )r   r  r  
batch_sizer  resultr   batch_updatesr?   r=   r   update_batch_sizeibatch_chunkr   r!  r  s                   @r0   r   r     s/   J I	)		 8 8),77	8 8 8 8 8 8 8 8 8 8 8 8 8 8 8C C       JF'##X6XXX  !F33	
 
 ??$$ 	E 02#+ 	< 	<J'-00K  *k!:;;;;  q#m,,.?@@ 	 	A'A0A,A(ABK 43{333C<<<<<L "     \::
 
 
 
 	*O's   AAAc                    t          dd|          st          j        dt          j        dt          j                    d          |            t          j        t          j        d|  d|  d                     t          j        ddd	| 
           t          dd|          st          j        dt          j        dt          j                    d          |            t          j        t          j        d|  d|  d                     t          j        ddd	| 
           t          dd|          st          j        dt          j        dt          j                    d          |            t          j        t          j        d|  d|  d|  d                     t          j        ddd	| 
           dS dS )z9Restore app_id and user_id columns to peers and sessions.ru   r   Tr>   r   
                UPDATE z9.peers SET app_id = (
                    SELECT id FROM zL.workspaces WHERE name = peers.workspace_name
                )
            Fr   r   z<.sessions SET app_id = (
                    SELECT id FROM zO.workspaces WHERE name = sessions.workspace_name
                )
            r   z?.sessions SET user_id = (
                    SELECT p.id FROM r   a2  .session_peers sp ON p.name = sp.peer_name AND p.workspace_name = sp.workspace_name
                    WHERE sp.session_name = sessions.name
                    AND p.workspace_name = sessions.workspace_name
                    AND p.id != p.name
                    LIMIT 1
                )
            N)	r
   r   r   r    re   rh   r   r   r   r.   s     r0   rZ   rZ     s?    (I66 J
Ih		D999	
 	
 	
 	
 	
G  $*    	
 	
 	
 	E&IIII Xy99 M
Ih		D999	
 	
 	
 	
 	
G  $*    	
 	
 	
 	
HuVLLLL Y	:: N
IiT:::	
 	
 	
 	
 	
G 		 	&,	 	 !	 	 	 	 		
 	
 	
 	
IfMMMMMM+N Nr2   c           
         t          dd|          s=t          j        dt          j        dt          j                    d          |            t          j        d|  d           t          j        d|  d	|  d
           t          j        ddd|            t          ddd|          rt          j	        ddd|            t          j        ddd|            t          j        ddd|            t          j        ddd|            t          j
        dddg|            t          j        dddt          j        d|  d          |            t          j        d|  d|  d           t          dd|          st          j        dt          j        dt          j                    d          |            t          j        t          j        d|  d|  d                     t          j        ddd|            t          dd|          st          j        dt          j        dt          j                    d          |            t          j        t          j        d|  d |  d!                     t          j        ddd|            t          dd"|          rt          j	        d"dd#|            t          dd$|          rt          j	        d$dd#|            t          j        t          j        d%|  d&|  d'                     t          j        dd(d)|            t          j        dd*|            t          j        dd+|            t          j        d,dd-d)gdg| .           t          dd/d0|          rt          j	        d/dd0|            t          dd1d0|          rt          j	        d1dd0|            t          j        d2dd3|            t          j        d4dd5|            d6S )7z3Restore documents table to pre-peer paradigm state.r   temp_idTr>   r   CREATE SEQUENCE IF NOT EXISTS z.documents_id_seqr   z*.documents
        SET temp_id = nextval('z6.documents_id_seq')
        WHERE temp_id IS NULL
    Fr   r   r   r~   r5   r;   r   r|   rF   	nextval('z.documents_id_seq')r:   rC   r   ALTER SEQUENCE z.documents_id_seq OWNED BY z.documents.idr   r.  z>.documents SET user_id = (
                    SELECT id FROM zt.peers WHERE name = documents.peer_name AND workspace_name = documents.workspace_name
                )
            r   z=.documents SET app_id = (
                    SELECT id FROM zP.workspaces WHERE name = documents.workspace_name
                )
            r   r   r   z
            UPDATE zB.documents SET collection_name = (
                SELECT id FROM z.collections WHERE name = documents.collection_name AND workspace_name = documents.workspace_name AND peer_name = documents.peer_name
            )
        r   r   r   r   r   r   r   r   r}   r   rP   rO   rS   rR   N)r
   r   r   r    re   rf   r   r   r   r   r   r   rh   r   r-   r   r   r.   s     r0   r[   r[     s?    i;; 

Ii4@@@	
 	
 	
 	
 JIIIIJJJJ   &   	 	 	 OKU6JJJJ niKK X
>;iPVWWWWOK{6RRRROKDPPPPO(*V    .+vfMMMMOwF6FFFGG    JR&RRVRRR  
 i;; O
IiT:::	
 	
 	
 	
 	
G  $*    	
 	
 	
 	YvNNNNh	:: N
Ih		D999	
 	
 	
 	
 	
G  $*    	
 	
 	
 	XfMMMM H)TT 

6		
 	
 	
 	
 F	RR 

4		
 	
 	
 	
 J
   &   	 	   O&PV   
 N;F;;;;N; 0@@@@ 0		    k7IFF S
;76RRRRk7IFF S
;76RRRRK)A&    K)IRX     r2   c           
         t          dd|          s;t          j        dt          j        dt          j                              |            t          j        d|  d           t          j        d|  d|  d           t          j        ddd	| 
           t          ddd|          rt          j	        ddd|            t          j        ddd|            t          j        ddd|            t          j
        dddg|            t          j        ddd	t          j        d|  d          |            t          j        d|  d|  d           t          dd|          st          j        dt          j        dt          j                    d          |            t          j        t          j        d|  d|  d                     t          j        ddd	| 
           t          dd|          st          j        dt          j        dt          j                    d          |            t          j        t          j        d|  d|  d                     t          j        ddd	| 
           t          dd |          rt          j	        d dd!|            t          dd"|          rt          j	        d"dd!|            t          j	        d#dd$|            t          j        dd%|            t          j        dd&|            t          j        dd'|            t          j        d(dd)dg|            t          dd*d+|          rt          j	        d*dd+|            t          dd,d+|          rt          j	        d,dd+|            t          j        d-dd.|            t          j        d/dd0|            d1S )2z5Restore collections table to pre-peer paradigm state.r   r0  r   r1  z.collections_id_seqr   z,.collections
        SET temp_id = nextval('z8.collections_id_seq')
        WHERE temp_id IS NULL
    Fr   r   r   r~   r5   r;   r   r2  z.collections_id_seq')r3  r4  z.collections_id_seq OWNED BY z.collections.idr   Tr>   r.  z@.collections SET user_id = (
                    SELECT id FROM zx.peers WHERE name = collections.peer_name AND workspace_name = collections.workspace_name
                )
            r   z?.collections SET app_id = (
                    SELECT id FROM zR.workspaces WHERE name = collections.workspace_name
                )
            r   r   r   r   r<   r   r   r|   r   rQ   r   r}   r   rP   rO   rS   rR   N)r
   r   r   r    re   rf   r   r   r   r   r   r   rh   r   r-   r   r   r.   s     r0   r\   r\     s    	9== 

Ii11	
 	
 	
 	
 JKKKKLLLJ   &   	 	 	 OM9uVLLLL (8)YOO 

m9V	
 	
 	
 	
 OM4VTTTTOM9d6RRRR*MD6&QQQQOwH6HHHII    JV&VVvVVV  
 	9== Q
IiT:::	
 	
 	
 	
 	
G  $*    	
 	
 	
 	y5PPPP)<< P
Ih		D999	
 	
 	
 	
 	
G  $*    	
 	
 	
 	x%OOOO  @)LL 

,		
 	
 	
 	
  JIVV 

6		
 	
 	
 	
 %}HV   
 N=+f====N="26BBBBN="5fEEEE %		    WiHH U
;WVTTTTWiHH U
;WVTTTTM+CF    (	     r2   c           	         t          dd|          st          j        dt          j        dt          j                    d          |            t          j        t          j        d|  d|  d                     t          j        ddd	| 
           t          dd|          st          j        dt          j        dt          j	                    d          |            t          j        t          j        d|  d|  d                     t          j        ddd	| 
           t          dd|          st          j        dt          j        dt          j	                    d          |            t          j        t          j        d|  d|  d                     t          j        ddd	| 
           t          dd|          st          j        dt          j        dt          j
                    d          |            t          j        t          j        d|  d|  d                     t          j        ddd	| 
           t          dd|          rt          j        ddd|            t          dd|          rt          j        ddd|            t          dd|          rt          j        ddd|            t          dd|          rt          j        dd|            t          dd|          rt          j        dd|            t          dd|          rt          j        dd|            t          j        dd|            t          j        dd|            t          j        dd|            t          j        dd |            t          j        dd!|            t          j        d"dd#dgd$g| %           t          j        d&ddd$gg d'| (           d)S )*z2Restore messages table to pre-peer paradigm state.r   rE   Tr>   r   r.  z@.messages SET session_id = (
                    SELECT id FROM zO.sessions s WHERE s.name = messages.session_name
                )
            Fr   r   z=.messages SET user_id = (
                    SELECT id FROM zr.peers WHERE name = messages.peer_name AND workspace_name = messages.workspace_name
                )
            r   z<.messages SET app_id = (
                    SELECT id FROM zO.workspaces WHERE name = messages.workspace_name
                )
            r   z.messages SET is_user = (
                    SELECT CASE
                        WHEN s.user_id = messages.peer_name THEN true
                        ELSE false
                    END
                    FROM zc.sessions s
                    WHERE s.name = messages.session_name
                )
            r   r   r~   r   r   r   r   r   r   r   r   r   r   r|   r   r   r5   r   r   )r;   r   r@   r   N)r
   r   r   r    re   rl   r   r   r   rh   Booleanr   r   r   r   r-   r   r   r.   s     r0   r]   r]     s	    \9== Q
IlBGII===	
 	
 	
 	

 	
G  $*    	
 	
 	
 	
L5PPPPY	:: N
IiT:::	
 	
 	
 	
 	
G  $*    	
 	
 	
 	
IfMMMMXy99 M
Ih		D999	
 	
 	
 	
 	
G  $*    	
 	
 	
 	
HuVLLLLY	:: N
Ii===	
 	
 	
 	
 	
G 		 	 !	 	 	 	 		
 	
 	
 	
IfMMMM @)LL 

/		
 	
 	
 	
 :IFF 

):\RX	
 	
 	
 	
 DiPP 

3		
 	
 	
 	
 J 7CC U
-*VTTTTJ <iHH 

(Z	
 	
 	
 	

 J :IFF X
0ZPVWWWW N:{6::::N:/????N:~f====N:}V<<<<N:26BBBB )		    O%	t
 
 

 
 
 
 
 
 
r2   c           
      H   t          dd|          s;t          j        dt          j        dt          j                              |            t          j        d|  d           t          j        d|  d|  d           t          dd	d
|          rt          j        d	dd
|            t          j	        ddd|            t          j	        ddd|            t          j
        d	ddg|            t          j	        dddt          j        d|  d          |            t          j        d|  d|  d           t          dd|          rt          j        ddd|            t          j        ddd|            t          j        dd|            t          j        dd|            t          j        dd|            t          j        dd|            t          ddd|          rt          j        ddd|            t          dd d|          rt          j        d dd|            t          dd!d|          rt          j        d!dd|            t          j        d"dd#|            t          j        d$dd%|            t          j        d&dd'dg|            d(S ))z2Restore sessions table to pre-peer paradigm state.r   r0  r   r1  z.sessions_id_seqr   z).sessions
        SET temp_id = nextval('z5.sessions_id_seq')
        WHERE temp_id IS NULL
    r   r   r~   r5   r;   r   Fr2  z.sessions_id_seq')r3  r4  z.sessions_id_seq OWNED BY z.sessions.idr   r   r   r<   rQ   r   rz   r|   r   r}   r   r   rP   rO   rS   rR   idx_sessions_user_lookupr   N)r
   r   r   r    re   rf   r   r   r   r   r   r   r   r-   r   r   r.   s     r0   r^   r^     sV    Y	:: 

Ii11	
 	
 	
 	
 JHHHHIIIJ   &   	 	 	 ]IyII V
=*IfUUUUOJk&QQQQOJ	4OOOO-dVFKKKKOwE6EEEFF    JWWW6WWWXXX DiPP 

3		
 	
 	
 	
 ,jQWXXXX N:vf5555N:/????N:v>>>>N:26BBBB ['9EE R
;
'&QQQQ['9EE R
;
'&QQQQ]GYGG T
=*GFSSSSJ(@    J(HQW    O"JK0HQW     r2   c           
      n   t          dd|          s;t          j        dt          j        dt          j                              |            t          j        d|  d           t          j        d|  d|  d           t          dd	d
|          rt          j        d	dd
|            t          j	        ddd|            t          j	        ddd|            t          j	        dddt          j
        d|  d          |            t          j        d|  d|  d           t          j        dddg|            t          dd|          rt          j        ddd|            t          ddd|          rt          j        ddd|            t          dd|          rt          j        dd|            t          j        ddddg|            t          j        d dddg|            t          j        dd!|            t          j        dd"|            t          j        dd#|            t          dd$d%|          rt          j        d$dd%|            t          dd&d%|          rt          j        d&dd%|            t          j        d'dd(|            t          j        d)dd*|            d+S ),z/Restore peers table to pre-user paradigm state.ru   r0  r   r1  z.peers_id_seqr   z&.peers
        SET temp_id = nextval('z2.peers_id_seq')
        WHERE temp_id IS NULL
    r   r   r~   r5   r;   r   Fr2  z.peers_id_seq')r3  r4  z.peers_id_seq OWNED BY z	.peers.idr   r   r   r   r<   r   r   r   rQ   r   r   r   rz   r|   r   r}   r   rP   rO   rS   rR   N)r
   r   r   r    re   rf   r   r   r   r   r   r   r   r   r   r   r   r-   r   r.   s     r0   r_   r_     s}    )Y77 

Ii11	
 	
 	
 	
 JEEEEFFFJ   &   	 	 	 *iCC P
:wiOOOOOGT;vNNNNOGYVLLLLOwB6BBBCC    JQQQQQQRRR*gvfEEEE >	JJ 

0		
 	
 	
 	
 ">)TT 

('&	
 	
 	
 	
 G99EE W
2wvVVVV &();F    O*Gh5GPVWWWW N7,V<<<<N7OF;;;;N7/???? +w	BB O
;wvNNNN+w	BB O
;wvNNNNG%=f    G%Ef     r2   c           
         t          dd|          s;t          j        dt          j        dt          j                              |            t          j        d|  d           t          j        d|  d|  d           t          dd	d
|          rt          j        d	dd
|            t          j	        ddd|            t          j	        ddd|            t          j
        dddg|            t          j	        dddt          j        d|  d          |            t          j        d|  d|  d           t          j        dd|            t          j        dd|            t          ddd|          rt          j        ddd|            t          ddd|          rt          j        ddd|            t          j        ddd|            t          j        ddd|            d S )!z;Restore workspaces table to pre-peer paradigm state (apps).rs   r0  r   r1  z.workspaces_id_seqr   z+.workspaces
        SET temp_id = nextval('z7.workspaces_id_seq')
        WHERE temp_id IS NULL
    r   r   r~   r5   r;   r   r   Fr2  z.workspaces_id_seq')r3  r4  z.workspaces_id_seq OWNED BY z.workspaces.idrz   r|   r   r}   r   rP   rO   rS   rR   N)r
   r   r   r    re   rf   r   r   r   r   r   r   r-   r   r.   s     r0   r`   r`   *  s    y)<< 

Ii11	
 	
 	
 	
 JJJJJKKKJ   &   	 	 	 	9MM 

\6	
 	
 	
 	
 OL$FSSSSOL)T&QQQQ)\D6&IIIIOwG6GGGHH    JT&TTfTTT  
 N<@@@@N<!4VDDDD {GYGG T
;GFSSSS{GYGG T
;GFSSSSL*B6    (	     r2   c                    t          j                    }i }t          d|          rJ|                    t	          j        d|  d                                                    }|D ]
\  }}|||<   t          d|          r|r|                    t	          j        d|  d                                                    }|D ]Y\  }||v rQ||         }	|                    t	          j        d|  d          t          |	          t          |          d	           Zt          j        dd
t	          j	                    t	          j
                    d           t          d|          r|r|                    t	          j        d|  d                                                    }
t          ddd|          rt          j        ddd|            |
D ]Y\  }||v rQ||         }	|                    t	          j        d|  d          t          |	          t          |          d	           Zt          j        dd
t	          j	                    t	          j
                    d           t          ddd|          st          j        ddd
g|            t          ddd|          rt          j        ddd|            t          dd|          rt          j        dd|            t          dd|          rt          j        dd|            t          dd|          rt          j        dd|            t          dd|          rt          j        dd|            dS dS dS )zJRestore queue and active_queue_sessions tables to pre-peer paradigm state.r   r   r   r   r   r   r   z:.queue SET session_id = :old_id WHERE session_id = :new_id)r   r   rE   zsession_id::bigint)r   r   r   r   r   r   r   r~   zJ.active_queue_sessions SET session_id = :old_id WHERE session_id = :new_idr   r  r<   r5   r  r  r  N)r   r"   r   r   r    r   r   r  r   rf   rl   r   r   r   r
   r-   )r   r/   r  session_id_reverse_mappingr  
big_int_idtext_idr	  rE   r   r
  s              r0   ra   ra   g  sR   
 J 24J	** =%--GBBBBCC
 

(** 	 $4 	= 	=J2<&w// GY'' 
% 	 * 2 2bvbbb ! ! hjj	  "3  !;;;7
CF&&hfhhh  $'v;;#j//JJ	   	-//'))1	
 	
 	
 	
 +Y77 IP% 	'1'9'9rvrrr ( ( hjj	 % !'*	   ".+#!	    ":  !;;;7
CF&&xfxxx  $'v;;#j//JJ	   	#-//'))1	
 	
 	
 	
 !#%?I
 
 	 !*'	    #)	
 
 	 -'	    0$	BB 	IN2DHHHH0-KK 	RN2M&QQQQ0-KK 	RN2M&QQQQ0+yII 	PN2KOOOOOOSIP IPP	P 	Pr2   c                     |                     d|           rt          j        dd|            |                     d|           rt          j        dd|            dS dS )z7Restore table names: workspaces->apps and peers->users.rs   r   rr   ru   rt   Nrv   r.   s     r0   rb   rb     sv    <77 =
fV<<<<7622 9
8888889 9r2   c                 n   t          j        ddddgdg|            t          j        dddd	gdg|            t          j        d
dddgdg|            t          j        dddd	gdg|            t          j        dddd	gdg|            t          j        ddddgdg|            t          j        ddddgdg|            t          j        ddddgdg|            t          j        dddd	gdg|            t          j        ddddgdg|            t          j        dddd	gdg|            d S )Nr   r   rt   r   r;   r   r   rr   r   r   r   r   r   r   fk_messages_user_id_usersr   r   r   rE   r5   r   r   r   r   r   )r   r   r   s    r0   rc   rc     s0   $		    "	
	    &		    $	
	    !	
	    #		    &		    6		    !	
	    #		    	
	     r2   )r   N)5__doc__collections.abcr   
contextlibr   
sqlalchemyr    r"  alembicr   r   r   r   r   r   sqlalchemy.dialectsr	   migrations.utilsr
   r   r   r   r   
src.configr   r   r  __annotations__r   r   r   r1   rp   r#   r$   r%   r'   r(   r)   r*   r+   r&   r   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   r  r2   r0   <module>rL     sG     % $ $ $ $ $                  . . . . . . & & & & & & & & * * * * * *                     #   *sTz * * *,0sXc]"T) 0 0 0)-
C(3-$& - - -(= (= (= (=VR
 R
 R
 R
j9# 9) 9 9 9 9 92C 2I 2$ 2 2 2 2jZNs ZNy ZNT ZN ZN ZN ZNz_# _) _ _ _ _ _DX
C X
I X
RV X
 X
 X
 X
v_"# _") _" _" _" _" _"DxS xY x4 x x x xvA3 A9 A A A A AHk
k
%k
	k
 k
 k
 k
\># >$ > > > >B:NS :NY :N4 :N :N :N :NzCC CI C$ C C C CL|c |i |D | | | |~B3 B9 B B B B BJH3 H9 H H H H HVK K	 Kd K K K K\:S :Y :4 : : : :zzPzP%zP	zP zP zP zP~9 9	 9d 9 9 9 9Z Z Z Z Z Z Z Zr2   