
    Xj^              
          d dl m Z  d dlmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlm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  ee          Z e            Ze                    de e                    ee           ee          fde
defd            Z!e"                    de           ee           ee          fdede
defd            Z#e$                    de           ee           ee          fde%dede
defd            Z&e"                    d           ee           ee          fde%de
defd            Z'e"                    d           ee           ee          fde%de
defd            Z(e"                    d           ee           ee          fde
defd            Z)e*                    d           ee           ee          fde%de
defd            Z+dS )    )datetime)Path)	APIRouterDependsHTTPException)
get_logger)Session)get_current_user)settings)get_db)
LocalModel)ModelModelProvider)User)LocalModelCreateLocalModelResponseLocalModelUpdate )response_modeldbcurrent_userc                     |                      t                                        t          j        |j        k                                              }|S N)queryr   filter	tenant_idall)r   r   modelss      B/lsinfo/ai/hellotax_ai/base_platform/app/api/v1/ai/local_models.pyget_local_modelsr       s=    XXj!!(()=AW)WXX\\^^FM    
model_datac                 x   t                               d| j         d|j                    t	          di |                                 d|j        i}|                    |           |                                 |	                    |           t                               d|j         d|j
                    |S )NzCreating local model: name=, user=r   zLocal model created: id=z, identifier= )loggerinfonameidr   
model_dumpr   addcommitrefresh
identifier)r"   r   r   models       r   create_local_modelr0      s     KKWjoWWloWWXXXSS..00SSL<RSSSEFF5MMMIIKKKJJu
KKT58TT%BRTTUUULr!   z/{model_id}model_idc                    |                     t                                        t          j        | k    t          j        |j        k                                              }|st          dd          |                    d                                          D ]\  }}t          |||           |
                                 |                    |           |S )N  Model not foundstatus_codedetailT)exclude_unset)r   r   r   r)   r   firstr   r*   itemssetattrr,   r-   )r1   r"   r   r   r/   keyvalues          r   update_local_modelr>   )   s     		
):+?<CY+Y	Z	Z	 

  G4EFFFF ++$+??EEGG # #
UsE""""IIKKKJJuLr!   z/{model_id}/publishc                 >   t                               d|  d|j                    |                    t                                        t          j        | k    t          j        |j        k                                              }|s.t                               d|             t          dd          |j
        r.t                               d|             t          dd	          |                    t                                        t          j        d
k                                              }|s+t                               d           t          dd          t          |j        |j        |j        dd|j        ddd	  	        }|                    |           |                                 |j        |_
        |                                 |                    |           t                               d|  d|j                    d|j        dS )NzPublishing local model: id=r$   zLocal model not found: id=r3   Local model not foundr5   zModel already published: id=  zModel already published	local_mlxzLocal MLX provider not foundi  chatTF2   )	provider_idcoder(   typeenabledremote_model_idsupports_streamsupports_toolspriorityzLocal model published: id=z, published_model_id=)successpublished_model_id)r&   r'   r)   r   r   r   r   r9   warningr   rN   r   provider_kinderrorr   r.   r(   r+   flushr,   r-   )r1   r   r   local_modellocal_providerpublished_models         r   publish_local_modelrV   >   s    KKPhPP|PPQQQ
	
):+?<CY+Y	Z	Z	 
  M>H>>???4KLLLL% O@h@@AAA4MNNNN
&&}'Bk'QRRXXZZ   T34444RSSSS"%##.
 
 
O FF?HHJJJ%4%7K"IIKKKJJ{
KK`X``OL^``aaa?3EFFFr!   z/{model_id}/unpublishc                 T   |                     t                                        t          j        | k    t          j        |j        k                                              }|st          dd          |j        st          dd          |                     t                                        t          j        |j        k                                              }|r|	                    |           d |_        |
                                 |                    |           ddiS )Nr3   r@   r5   rA   zModel not publishedrM   T)r   r   r   r)   r   r9   r   rN   r   deleter,   r-   )r1   r   r   rS   rU   s        r   unpublish_local_modelrY   h   s    
 		
):+?<CY+Y	Z	Z	 
  M4KLLLL) K4IJJJJhhuoo,,UX9W-WXX^^``O #
		/"""%)K"IIKKKJJ{tr!   z/import-trainedc                 R   t                               d|j                    t          t          j                  }|                                s-t                               dt          j                    ddddS d}d}t          d |	                                D                       D ]}|dz  }|                                st          |
                    d                    D ]}|d	z  }|                                s|d
z  }"|dz  }	|dz  }
|	                                r|
                                s|d
z  }Z|j         d|j         }|}	 |j                            d          }t          j        |d          }|j         d|                    d           }n# t           $ r Y nw xY w|                     t$                                        t$          j        |k    t$          j        |j        k                                              }|r|d
z  }7t%          ||d|j        t/          |          d|j        ddd
  
        }|                     |           |d
z  }|                                  t                               d| d|            ||dS )NzImporting trained models, user=z$Trained models directory not found: r   ztrained_models not found)importedskippedmessagec              3   B   K   | ]}|                                 |V  d S r   )is_dir).0paths     r   	<genexpr>z(import_trained_models.<locals>.<genexpr>   s/      UUTt{{}}UDUUUUUUr!   jobszjob_*final_model   zadapters.safetensorszadapter_config.json__job_z%Y%m%d_%H%M%Sz LoRA z%Y-%m-%d %H:%Mloraactiveadaptermlxtrained)
r(   r.   
model_type
base_model
model_pathstatusr   
asset_kindruntime_kindsource_kindz"Trained models imported: imported=z
, skipped=)r[   r\   )r&   r'   r)   r   r   TRAINED_MODELS_DIRexistsrO   sortediterdirglobr(   removeprefixr   strptimestrftime
ValueErrorr   r   r   r.   r   r9   strr+   r,   )r   r   trained_rootr[   r\   	model_dirjobs_dirjob_dirfinal_model_diradapter_fileconfig_filer.   readable_nametsdtru   r/   s                    r   import_trained_modelsr   ~   s    KKC,/CCDDD344L   T[h>Y[[\\\!8RSSSHGUU\-A-A-C-CUUUUU . .	v%   	hmmG4455 *	 *	G%5O"))++ 1*-CCL),AAK&&(( 0B0B0D0D 1%N<<gl<<J&M\..v66&r?;;#,> X XEU9V9V X X    $$)Z7(L,BB     1"%!$>//&0$"%  E FF5MMMMHHU*	V IIKKK
KKRXRRRRSSS W555s   AF((
F54F5c                 D   |                     t                                        t          j        | k    t          j        |j        k                                              }|st          dd          |                    |           |                                 ddiS )Nr3   r4   r5   r]   zModel deleted successfully)	r   r   r   r)   r   r9   r   rX   r,   )r1   r   r   r/   s       r   delete_local_modelr      s    
 		
):+?<CY+Y	Z	Z	 

  G4EFFFFIIeIIKKK344r!   N),r   pathlibr   fastapir   r   r   common_loggingr   sqlalchemy.ormr	   app.api.depsr
   
app.configr   app.db.sessionr   app.models.local_modelr   app.models.providerr   r   app.models.userr   app.schemas.local_modelr   r   r   __name__r&   routergetlistr    postr0   putintr>   rV   rY   r   rX   r   r%   r!   r   <module>r      s               5 5 5 5 5 5 5 5 5 5 % % % % % % " " " " " " ) ) ) ) ) )       ! ! ! ! ! ! - - - - - - 4 4 4 4 4 4 4 4             Z Z Z Z Z Z Z Z Z Z	H			 Bt$6788#*76??QaIbIb   $    98
 R 233 '&// !122      43 M*<== '&// !122	   	 	   >=( "##!(wwO_G`G`&G &G&G&G@D&G &G &G $#&GR $%%!(wwO_G`G` @D   &%* '&//@P8Q8Q;6 ;6;615;6 ;6 ;6  ;6| }!(wwO_G`G`5 555@D5 5 5 5 5 5r!   