
    Ig(                     b   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      j2                  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        yy)    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           |j	                  dg             }|r.dj                  |D cg c]  }t        |d          c}      |d<   |j                  |        t        d |D              }t        d	 |D              }d
dj                  |dz         z   dj                  |dz         z   dz   g}|D ]Y  }|d   j                  |dz         }	|d   j                  |dz         }
|j	                  dd      }|j                  |	|
z   |z          [ |j                  d       t        j                  d
j                  |             y c c}w )NServiceStatus)r   r   
Publishersz, PublishedPortPublishedPortsc              3   8   K   | ]  }t        |d            yw)r   Nlen.0services     O/var/www/html/answerous/venv/lib/python3.12/site-packages/langsmith/cli/main.py	<genexpr>z"pprint_services.<locals>.<genexpr>"   s     Jg#gi01J   c              3   8   K   | ]  }t        |d            yw)r   Nr   r   s     r   r   z"pprint_services.<locals>.<genexpr>#   s     G7GH-.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)strr	   r   r   getjoinappendmaxljustloggerinfo)r   servicesr   service_status
publishers	publishermax_service_lenmax_state_lenservice_messageservice_str	state_str	ports_strs               r   pprint_servicesr6      s    H" 
(79-.'(+,*
 $t*gkk,&CD
/3yyBLMYY/0M0N+, 	'
( JJJOGhGGM
///A-
.	/
..*
+	, 	O  Di(../BCH%++MA,=>	KK 0"5	{Y6BC	D 	7 KK		/*+1 Ns   E7
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y)LangSmithCommandz$Manage the LangSmith Tracing server.r   Nc                 b    t        t              j                         j                  dz  | _        y )Nzdocker-compose.yaml)r   __file__absoluteparentdocker_compose_fileselfs    r   __init__zLangSmithCommand.__init__<   s&    N##%,,/DD 	     c                 *    t        j                         S N)ls_utilsget_docker_compose_commandr>   s    r   docker_compose_commandz'LangSmithCommand.docker_compose_commandA   s    2244rA   urlc                 R    	 t        j                  d|g       y # t        $ r Y y w xY w)Nopen)
subprocessrunFileNotFoundError)r?   rG   s     r   _open_browserzLangSmithCommand._open_browserE   s)    	NNFC=)  		s    	&&c                 (   g | j                   dt        | j                        }t        j                  g |ddd       t
        j                  d       t
        j                  d       t
        j                  d       | j                  d       y )	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)rF   r$   r=   rJ   rK   r*   r+   rM   )r?   commands     r   _start_localzLangSmithCommand._start_localK   s    
((

 (()

 	  		
 	:	
 	./DE-.rA   0.5.7versionrU   c                    |t         j                  d<   t        j                  g | j                  dt        | j                        d       y)zPull the latest LangSmith images.

        Args:
            version: The LangSmith version to use for LangSmith. Defaults to 0.5.7
        _LANGSMITH_IMAGE_VERSIONrO   pullN)osenvironrJ   rK   rF   r$   r=   )r?   rU   s     r   rX   zLangSmithCommand.pulle   sY     29

-.,, D,,- 		
rA   )openai_api_keyrU   r[   langsmith_license_keyc                    ||t         j                  d<   ||t         j                  d<   | j                  |       | j                          y)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_KEYrT   )rY   rZ   rX   rR   )r?   r[   r\   rU   s       r   startzLangSmithCommand.starty   sH    ( %+9BJJ'( ,2GBJJ./		'	"rA   clear_volumesc                     g | j                   dt        | j                        d}|r;t        d      }|j	                         dk7  rt        d       y|j                  d       t        j                  |       y)Stop the LangSmith server.rO   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)	rF   r$   r=   inputlowerprintr'   rJ   rK   )r?   ra   cmdconfirms       r   stopzLangSmithCommand.stop   s    
((

 (()
 	
 GG
 }}#%k"JJ{#srA   c                 x    t        j                  g | j                  dt        | j                        d       y)z)Print the logs from the LangSmith server.rO   logsN)rJ   rK   rF   r$   r=   r>   s    r   rm   zLangSmithCommand.logs   sH    ,, D,,- 		
rA   c                    g | j                   dt        | j                        ddd}t        j                  |t        j
                  t        j
                        }	 |j                  j                  d      }t        j                  |      }|r!t        j                  d	       t        |       yt        j                  d
       y# t        j                  $ r t        j                  d       Y yw xY w)z6Provide information about the status LangSmith server.rO   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.)rF   r$   r=   rJ   rK   PIPErq   decoderp   loadsJSONDecodeErrorr*   errorr+   r6   )r?   rQ   resultcommand_stdoutr   s        r   statuszLangSmithCommand.status   s    
((

 (()
 	

 
 
 ????

	#]]11':N"jj8O KKDEO,KK>? ## 	LLBC	s   !0C
 
(C54C5r   N)F)__name__
__module____qualname____doc__r@   propertyr   r$   rF   rM   rR   rX   r   r`   boolrk   rm   rz    rA   r   r8   r8   9   s    .

 5S	 5 5  /: 
 
 
	
. )- !  #	
  
6$ 4 *	
rA   r8   c                     t        j                         } | j                  t        j                                | j                  t        j                                t        d | j                         D              }t        j                  d       | j                         D ]#  \  }}t        j                  || dd|        % y)z*Print the runtime environment information.c              3   2   K   | ]  }t        |        y wrC   r   )r   keys     r   r   zenv.<locals>.<genexpr>   s     8cS8s   zLangChain Environment:r#   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,,./ 8SXXZ88N
KK()		 21q.))*"QC012rA   c                    	 t        d       t        d       t        j                         } | j                  d      }t	               	|j                  dd      }|j                  dt        j                  d      d	
       |j                  dt        j                  d      d
       |j                  ddd
       |j                  	fd       |j                  dd      }|j                  ddd       |j                  	fd       |j                  dd      }|j                  ddd
       |j                  	fd       |j                  dd      }|j                  	fd       |j                  d d!      }|j                  	fd"       |j                  d#      }|j                  d$        | j                         }t        |d%      s| j                          y&|j                  |       y&)'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)descriptionr`   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	--versionrS   z>The LangSmith version to use for LangSmith. Defaults to 0.5.7.c                 h    j                  | j                  | j                  | j                        S )N)r[   r\   rU   )r`   r[   r\   rU   argsserver_commands    r   <lambda>zmain.<locals>.<lambda>  s0    ....."&"<"<LL / 
 rA   )funcrk   rc   z--clear-volumes
store_truez?Delete all the locally cached LangSmith containers and volumes.)actionr   c                 <    j                  | j                        S )N)ra   )rk   ra   r   s    r   r   zmain.<locals>.<lambda>  s    .--D<N<N-O rA   rX   z!Pull the latest LangSmith images.c                 <    j                  | j                        S )NrT   )rX   rU   r   s    r   r   zmain.<locals>.<lambda>  s    .--dll-C rA   rm   zShow the LangSmith server logs.c                 $    j                         S rC   )rm   r   s    r   r   zmain.<locals>.<lambda>#  s    n6I6I6K rA   rz   z!Show the LangSmith server status.c                 $    j                         S rC   )rz   r   s    r   r   zmain.<locals>.<lambda>'  s    8M8M8O rA   r   c                     t               S rC   r
   )r   s    r   r   zmain.<locals>.<lambda>)  s    ce rA   r   N)rh   argparseArgumentParseradd_subparsersr8   
add_parseradd_argumentrY   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      sE   	
HI	
<=$$&F&&3K&LJ%'N$//: 0  $$		*+= %  $$!		127 %  $$M % 
 $$
 %  $..8 /  ##N $ 
 ##O $  $..? /  ##M $ 
 ##C $  $..= /  ##)K#L%00A 1  %%+O%P&&u-J!34D4 IIdOrA   __main__r{   )r   rp   loggingrY   rJ   pathlibr   typingr   r   r   r   r   r	   	langsmithr   r   r   rD   basicConfigINFO	getLoggerr|   r*   r:   r<   _DIRr$   r6   r8   r   r   rA   r   <module>r      s       	   = = # '   ',,} =			8	$H~$,T'#uS$s)^7L2L*M%N $,SW $,NV Vr2Od zF rA   