
    XjZ                     V   d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZmZ d dlmZ  ee          Z e            Zdefd	Z G d
 de	          ZdeddfdZdeddfdZe                    dd           edd          fdedefd            Zdededz  ddfdZdS )    N)Literal)	APIRouterHeaderHTTPExceptionstatus)	BaseModel)settings)ServiceModeget_status_manager)
get_loggerreturnc                      t           j        S )N)r	   SWITCH_MODE_SCRIPT     D/lsinfo/ai/hellotax_ai/base_platform/app/api/internal/switch_mode.py_get_script_pathr      s    &&r   c                   :    e Zd ZU ed         ed<   dZedz  ed<   dS )SwitchModeRequest)	inferencetrainingmedia_processingmodeNtraining_info)__name__
__module____qualname__r   __annotations__r   dictr   r   r   r   r      s8         
=
>>>>!%M4$;%%%%%r   r   tokenc                     t          t          dd           }|st          t          j        d          | |k    rt          t          j        d          d S )NINTERNAL_API_TOKENz4INTERNAL_API_TOKEN is not configured on this server.)status_codedetailzInvalid internal token.)getattrr	   r   r   HTTP_500_INTERNAL_SERVER_ERRORHTTP_403_FORBIDDEN)r    expecteds     r   _verify_internal_tokenr)      sh    x!5t<<H 
=I
 
 
 	
 (AJcdddd r   r   c                 .  K   t                      }	 t          j        d|| t          j        j        t          j        j                   d {V }|                                 d {V \  }}|r|                    d          nd}|j        dk    r't          
                    d|j         d|            d S t                              d	|  d|d d
                     d S # t          $ r(}t          
                    d|            Y d }~d S d }~ww xY w)Nbash)stdoutstderrreplace)errors r   zswitch_mode.sh exited z: z"switch_mode.sh completed for mode=   zFailed to run switch_mode.sh: )r   asynciocreate_subprocess_exec
subprocessPIPESTDOUTcommunicatedecode
returncodeloggererrorinfo	Exception)r   script_pathprocr,   _outputes          r   _run_switch_scriptrC   #   sa     "$$K;3%*%,
 
 
 
 
 
 
 
 
 **,,,,,,,,	4:Bi000?aLLM$/MMVMMNNNNNKKSTSSVDSD\SSTTTTT ; ; ;9a99:::::::::;s   B$C" 8(C" "
D,DDz/switch_modez"Switch LLM service mode (internal))summary.zX-Internal-Token)aliasbodyx_internal_tokenc                 
  K   t          |           t                      }t          | j                  }|                    t          j                   t                              d| j                    |t          j        k    rD| j	        r=dd l
}ddlm} |j                            ||                    | j	                             t!          j        t%          ||| j	                             d| j        d| j         ddS )NzMode switch initiated: target=r   )REDIS_KEY_TRAINING_INFO	switchingzMode switch to 'z?' initiated. Service will be in switching state until complete.)r   target_modemessage)r)   r   r
   r   set_mode	SWITCHINGr:   r<   TRAININGr   json'app.services.llm.service_status_managerrI   _redissetdumpsr2   create_task_background_switch)rF   rG   managerrK   rP   rI   s         r   switch_moderX   7   s      +,,, ""Gdi((K[*+++
KK<<<===k***t/A*SSSSSS2DJJt?Q4R4RSSS*7KASTTUUUypdippp  r   rK   r   c                 T  K   	 t          |j                   d {V  |                     ||           t                              d|j         d           d S # t
          $ rC}t                              d| d           |                     t          j                    d }~ww xY w)N)r   zMode switch complete: now in z modezBackground switch failed: z. Reverting to inference mode.)	rC   valuerM   r:   r<   r=   r;   r
   	INFERENCE)rW   rK   r   rB   s       r   rV   rV   N   s       !2333333333MBBBLK4ELLLMMMMM   S!SSSTTT.///s   AA 
B'$>B""B')r2   typingr   fastapir   r   r   r   pydanticr   
app.configr	   rQ   r
   r   common_loggingr   r   r:   routerstrr   r   r)   rC   postrX   r   rV   r   r   r   <module>rd      s          < < < < < < < < < < < <             S S S S S S S S % % % % % %	H			'# ' ' ' '& & & & &	 & & &
e# e$ e e e e;3 ;4 ; ; ; ;( ^%IJJ5;VCGY5Z5Z5Z 
/2   KJ,
%
6:Tk
	
 
 
 
 
 
r   