
    Ng(                     v   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZ  ej        ej        d            ej        e          Z ee          j        Zde	e
eeee	e         f         f                  d	dfd
Z G d d          ZddZddZedk    r e             dS dS )    N)Path)DictListMappingOptionalUnioncastenv)utilsz%(message)s)levelformatservices_statusreturnc                    g }| D ]}t          |d                   t          |d                   d}t          t          t                   |                    dg                     }|r"d                    d |D                       |d<   |                    |           t          d |D                       }t          d	 |D                       }d
d                    |dz             z   d                    |dz             z   dz   g}|D ]o}|d                             |dz             }|d                             |dz             }	|                    dd          }
|                    ||	z   |
z              p|                    d           t          
                    d
                    |                     d S )NServiceStatus)r   r   
Publishersz, c                 8    g | ]}t          |d                    S )PublishedPort)str).0	publishers     N/var/www/html/ai-engine/env/lib/python3.11/site-packages/langsmith/cli/main.py
<listcomp>z#pprint_services.<locals>.<listcomp>   s%    MMMYY/00MMM    PublishedPortsc              3   @   K   | ]}t          |d                    V  dS )r   Nlenr   services     r   	<genexpr>z"pprint_services.<locals>.<genexpr>"   s/      JJg#gi011JJJJJJr   c              3   @   K   | ]}t          |d                    V  dS )r   Nr   r!   s     r   r#   z"pprint_services.<locals>.<genexpr>#   s/      GG7GH-..GGGGGGr   
   zPublished Ports z
To connect, set the following environment variables in your LangChain application:
LANGSMITH_TRACING_V2=true
LANGSMITH_ENDPOINT=http://localhost:80/api)r   r	   r   r   getjoinappendmaxljustloggerinfo)r   servicesr"   service_status
publishersmax_service_lenmax_state_lenservice_messageservice_str	state_str	ports_strs              r   pprint_servicesr8      s    H" 
( 
(79-..'(+,,*
 *
 $t*gkk,&C&CDD
 	/3yyMM*MMM0 0N+, 	''''JJJJJJJOGGhGGGGGM
///A-
.
.	/
..*
+
+	, 	O  D Di(../BCCH%++MA,=>>	KK 0"55	{Y6BCCCC	7   KK		/**+++++r   c            	           e Zd ZdZddZedee         fd            ZdeddfdZ	ddZ
d	d
deddfdZdd	ddee         dededdfdZddeddfdZddZddZdS )LangSmithCommandz$Manage the LangSmith Tracing server.r   Nc                 l    t          t                                                    j        dz  | _        d S )Nzdocker-compose.yaml)r   __file__absoluteparentdocker_compose_fileselfs    r   __init__zLangSmithCommand.__init__<   s.    NN##%%,/DD 	   r   c                 (    t          j                    S N)ls_utilsget_docker_compose_commandr@   s    r   docker_compose_commandz'LangSmithCommand.docker_compose_commandA   s    2444r   urlc                 V    	 t          j        d|g           d S # t          $ r Y d S w xY w)Nopen)
subprocessrunFileNotFoundError)rA   rH   s     r   _open_browserzLangSmithCommand._open_browserE   sC    	NFC=)))))  	 	 	DD	s    
((c                 B   g | j         dt          | j                  }t          j        g |ddd           t
                              d           t
                              d           t
                              d           |                     d           d S )	N-fupz--quiet-pullz--waita  LangSmith server is running at http://localhost:80/api.
To view the app, navigate your browser to http://localhost:80

To connect your LangChain application to the server locally,
set the following environment variable when running your LangChain application.
z	LANGSMITH_TRACING=truez,	LANGSMITH_ENDPOINT=http://localhost:80/api
zhttp://localhost)rG   r   r?   rK   rL   r-   r.   rN   )rA   commands     r   _start_localzLangSmithCommand._start_localK   s    
(

 ())

 	  		
 	
 	
 	:	
 	
 	
 	.///DEEE-.....r   0.5.7versionrV   c                    |t           j        d<   t          j        g | j        dt          | j                  d           dS )zPull the latest LangSmith images.

        Args:
            version: The LangSmith version to use for LangSmith. Defaults to 0.5.7
        _LANGSMITH_IMAGE_VERSIONrP   pullN)osenvironrK   rL   rG   r   r?   )rA   rV   s     r   rY   zLangSmithCommand.pulle   sf     29
-., D,-- 		
 	
 	
 	
 	
r   )openai_api_keyrV   r\   langsmith_license_keyc                    ||t           j        d<   ||t           j        d<   |                     |           |                                  dS )a  Run the LangSmith server locally.

        Args:
            openai_api_key: The OpenAI API key to use for LangSmith
                If not provided, the OpenAI API Key will be read from the
                OPENAI_API_KEY environment variable. If neither are provided,
                some features of LangSmith will not be available.
            langsmith_license_key: The LangSmith license key to use for LangSmith
                If not provided, the LangSmith license key will be read from the
                LANGSMITH_LICENSE_KEY environment variable. If neither are provided,
                Langsmith will not start up.
            version: The LangSmith version to use for LangSmith. Defaults to latest.
        NOPENAI_API_KEYLANGSMITH_LICENSE_KEYrU   )rZ   r[   rY   rS   )rA   r\   r]   rV   s       r   startzLangSmithCommand.starty   sV    ( %+9BJ'( ,2GBJ./		'	"""r   Fclear_volumesc                    g | j         dt          | j                  d}|rMt          d          }|                                dk    rt          d           dS |                    d           t          j        |           dS )Stop the LangSmith server.rP   downzYou are about to delete all the locally cached LangSmith containers and volumes. This operation cannot be undone. Are you sure? [y/N]yz	Aborting.Nz	--volumes)	rG   r   r?   inputlowerprintr*   rK   rL   )rA   rb   cmdconfirms       r   stopzLangSmithCommand.stop   s    
(

 ())
 	
  		$G G
 }}#%%k"""JJ{###sr   c                 l    t          j        g | j        dt          | j                  d           dS )z)Print the logs from the LangSmith server.rP   logsN)rK   rL   rG   r   r?   r@   s    r   rn   zLangSmithCommand.logs   sW    , D,-- 		
 	
 	
 	
 	
r   c                    g | j         dt          | j                  ddd}t          j        |t          j        t          j                  }	 |j                            d          }t          j	        |          }n0# t          j
        $ r t                              d           Y dS w xY w|r+t                              d	           t          |           dS t                              d
           dS )z6Provide information about the status LangSmith server.rP   psz--formatjson)stdoutstderrzutf-8z'Error checking LangSmith server status.Nz*The LangSmith server is currently running.z$The LangSmith server is not running.)rG   r   r?   rK   rL   PIPErr   decoderq   loadsJSONDecodeErrorr-   errorr.   r8   )rA   rR   resultcommand_stdoutr   s        r   statuszLangSmithCommand.status   s    
(

 ())
 	

 
 
 ??
 
 

	#]11'::N"j88OO# 	 	 	LLBCCCFF	  	KKDEEEO,,,,,KK>???Fs   .B )B.-B.r   N)F)__name__
__module____qualname____doc__rB   propertyr   r   rG   rN   rS   rY   r   ra   boolrl   rn   r{    r   r   r:   r:   9   sg       ..
 
 
 

 5S	 5 5 5 X5     / / / /: 
 
 
 
 
	
 
 
 
. )-   !  #	
  
   6 $ 4    *	
 	
 	
 	
     r   r:   c                     t          j                    } |                     t          j                               |                     t          j                               t          d |                                 D                       }t                              d           | 	                                D ]&\  }}t                              || d|            'dS )z*Print the runtime environment information.c              3   4   K   | ]}t          |          V  d S rD   r   )r   keys     r   r#   zenv.<locals>.<genexpr>   s(      88cS888888r   zLangChain Environment:z: N)
ls_envget_runtime_environmentupdateget_docker_environmentget_langchain_env_varsr+   keysr-   r.   items)r   max_key_lengthkvs       r   r   r      s    

(
*
*CJJv,..///JJv,../// 88SXXZZ88888N
KK()))		 2 21q.000Q0011112 2r   c                    	 t          d           t          d           t          j                    } |                     d          }t	                      	|                    dd          }|                    dt          j        d          d	
           |                    dt          j        d          d
           |                    ddd
           |	                    	fd           |                    dd          }|                    ddd           |	                    	fd           |                    dd          }|                    ddd
           |	                    	fd           |                    dd          }|	                    	fd           |                    d d!          }|	                    	fd"           |                    d#          }|	                    d$            | 
                                }t          |d%          s|                                  d&S |                    |           d&S )'zMain entrypoint for the CLI.z<BY USING THIS SOFTWARE YOU AGREE TO THE TERMS OF SERVICE AT:z0https://smith.langchain.com/terms-of-service.pdfzLangSmith CLI commands)descriptionra   zStart the LangSmith server.z--openai-api-keyr_   zThe OpenAI API key to use for LangSmith. If not provided, the OpenAI API Key will be read from the OPENAI_API_KEY environment variable. If neither are provided, some features of LangSmith will not be available.)defaulthelpz--langsmith-license-keyr`   zThe LangSmith license key to use for LangSmith. If not provided, the LangSmith License Key will be read from the LANGSMITH_LICENSE_KEY environment variable. If neither are provided, the Langsmith application will not spin up.z	--versionrT   z>The LangSmith version to use for LangSmith. Defaults to 0.5.7.c                 R                         | j        | j        | j                  S )N)r\   r]   rV   )ra   r\   r]   rV   argsserver_commands    r   <lambda>zmain.<locals>.<lambda>  s-    ...."&"<L / 
 
 r   )funcrl   rd   z--clear-volumes
store_truez?Delete all the locally cached LangSmith containers and volumes.)actionr   c                 :                         | j                  S )N)rb   )rl   rb   r   s    r   r   zmain.<locals>.<lambda>  s    .--D<N-OO r   rY   z!Pull the latest LangSmith images.c                 :                         | j                  S )NrU   )rY   rV   r   s    r   r   zmain.<locals>.<lambda>  s    .--dl-CC r   rn   zShow the LangSmith server logs.c                 ,                                     S rD   )rn   r   s    r   r   zmain.<locals>.<lambda>#  s    n6I6I6K6K r   r{   z!Show the LangSmith server status.c                 ,                                     S rD   )r{   r   s    r   r   zmain.<locals>.<lambda>'  s    8M8M8O8O r   r   c                     t                      S rD   r
   )r   s    r   r   zmain.<locals>.<lambda>)  s
    cee r   r   N)ri   argparseArgumentParseradd_subparsersr:   
add_parseradd_argumentrZ   getenvset_defaults
parse_argshasattr
print_helpr   )
parser
subparsersserver_start_parserserver_stop_parserserver_pull_parserserver_logs_parserserver_status_parser
env_parserr   r   s
            @r   mainr      s(   	
HIII	
<===$&&F&&3K&LLJ%''N$//: 0   $$	*++= %    $$!	1227 %    $$M %   
 $$
 
 
 
 %    $..8 /   ##N $   
 ##OOOO $    $..? /   ##M $   
 ##CCCC $    $..= /   ##)K)K)K)K#LLL%00A 1   %%+O+O+O+O%PPP&&u--J!3!3444D4   IIdOOOOOr   __main__r|   )r   rq   loggingrZ   rK   pathlibr   typingr   r   r   r   r   r	   	langsmithr   r   r   rE   basicConfigINFO	getLoggerr}   r-   r<   r>   _DIRr   r8   r:   r   r   r   r   <module>r      s      				           = = = = = = = = = = = = = = = = # # # # # # ' ' ' ' ' '  ',} = = = =		8	$	$tH~~$,T'#uS$s)^7L2L*M%N $,SW $, $, $, $,NV V V V V V V Vr2 2 2 2O O O Od zDFFFFF r   