U
    h                     @   s  d Z 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mZm	Z	m
Z
 ddlmZ ddlmZ zddlZdaW n ek
r   daY nX eeZedd	d
Zeee
eef f dddZejddedddZejdde	e dddZejdde	e dddZejdde	e dddZejdde	e dddZejdde	ee  dddZ ejddedddZ!edddZ"ejddeddd Z#ejdde	e dd!d"Z$ejddeeef dd#d$Z%dS )%zEnvironment information.    N)DictListOptionalUnion)get_docker_compose_command)exec_gitTF)returnc                   C   s   t  t S )z/Get the runtime information as well as metrics.)get_runtime_environmentget_system_metrics r   r   >/tmp/pip-unpacked-wheel-cqvhoa9t/langsmith/env/_runtime_env.pyget_runtime_and_metrics   s    r   c               
   C   s   t si S ztt } i }|  p |  }t|  |d< dt|j	i|d< | 
 }|  }|j|jdt|jt|jd|  d|d< W 5 Q R X |W S  tk
r } zda td	| i  W Y S d
}~X Y nX d
S )z&Get CPU and other performance metrics.Zthread_countrssZmem)sysuser)	voluntaryinvoluntary)timectx_switchespercentcpuFz Failed to get system metrics: %sN)_PSUTIL_AVAILABLEpsutilProcessosgetpidZoneshotZmemory_infofloatZnum_threadsr   Znum_ctx_switches	cpu_timessystemr   r   r   Zcpu_percent	Exceptionloggerdebug)processZmetricsZmem_infor   r   er   r   r   r
      s4    
 r
      )maxsizec               
   C   s>   ddl m}  t }d| dt dt t t t d	|S )&Get information about the environment.r   )__version__zlangsmith-py	langsmithpython)	ZsdkZsdk_versionlibraryplatformZruntimeZpy_implementationZruntime_versionZlangchain_versionZlangchain_core_version)r(   r'   get_release_shasr+   python_implementationpython_versionget_langchain_environmentget_langchain_core_version)r'   shasr   r   r   r	   A   s    
r	   c                  C   s$   zdd l } | jW S    Y d S X d S Nr   )	langchainr'   )r3   r   r   r   r/   V   s
    r/   c                  C   s,   zdd l } | jW S  tk
r&   Y d S X d S r2   )langchain_corer'   ImportError)r4   r   r   r   r0   `   s
    r0   c                  C   sN   dd l } z| ddgd }W n$ tk
r<   d}Y n   Y d S X |S )Nr   Zdocker	--versionutf-8unknown
subprocesscheck_outputdecodestripFileNotFoundError)r:   docker_versionr   r   r   get_docker_versionj   s    r@   c                  C   sF   zt ddgd } W n$ tk
r4   d} Y n   Y d S X | S )Nzdocker-composer6   r7   r8   r9   )docker_compose_versionr   r   r   get_docker_compose_versiony   s    rB   c               
   C   sJ   z
t  } W n: tk
r8 } zd| g} W 5 d }~X Y n   Y d S X | S )NzNOT INSTALLED: )r   
ValueError)compose_commandr#   r   r   r   _get_compose_command   s    
rE   c                  C   s(   t  } t | dk	rd| ndt dS )r&   N )r?   Zdocker_compose_commandrA   )rE   r@   joinrB   )rD   r   r   r   get_docker_environment   s
    rH   c                  C   sf   dd t j D } t| D ]D}d| kr| | }|dd dt|d   |dd  | |< q| S )	-Retrieve the langchain environment variables.c                 S   s    i | ]\}}| d r||qS )
LANGCHAIN_)
startswith.0kvr   r   r   
<dictcomp>   s     
  z*get_langchain_env_vars.<locals>.<dictcomp>keyN   *   )r   environitemslistlowerlen)Zenv_varsrQ   rO   r   r   r   get_langchain_env_vars   s    .r[   c                     sX   ddddddh  fddt j D } | d	d
}|rB|| d< nt  }rT|| d< | S )rI   ZLANGCHAIN_API_KEYZLANGCHAIN_ENDPOINTZLANGCHAIN_TRACING_V2ZLANGCHAIN_PROJECTZLANGCHAIN_SESSIONZLANGSMITH_RUNS_ENDPOINTSc                    sV   i | ]N\}}| d s | dr| krd| krd| krd| kr||qS )rJ   Z
LANGSMITH_rQ   secrettoken)rK   rY   rL   Zexcludedr   r   rP      s   
 
 z2get_langchain_env_var_metadata.<locals>.<dictcomp>ZLANGCHAIN_REVISION_IDNZrevision_id)r   rV   rW   pop_get_default_revision_id)Zlangchain_metadataZenv_revision_idZdefault_revision_idr   r^   r   get_langchain_env_var_metadata   s     
	

ra   c                   C   s.   zt ddddgW S  tk
r(   Y dS X dS )z4Get the default revision ID based on `git describe`.Zdescribez--tagsz--alwaysz--dirtyN)r   BaseExceptionr   r   r   r   r`      s    r`   c                  C   sX   ddddddddd	d
dddddddddg} i }| D ] }t j|}|d k	r2|||< q2|S )NZVERCEL_GIT_COMMIT_SHAZ!NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHAZ
COMMIT_REFZRENDER_GIT_COMMITZCI_COMMIT_SHAZCIRCLE_SHA1ZCF_PAGES_COMMIT_SHAZREACT_APP_GIT_SHAZSOURCE_VERSIONZ
GITHUB_SHAZTRAVIS_COMMITZ
GIT_COMMITZBUILD_VCS_NUMBERZbamboo_planRepository_revisionzBuild.SourceVersionZBITBUCKET_COMMITZDRONE_COMMIT_SHAZSEMAPHORE_GIT_SHAZBUILDKITE_COMMIT)r   rV   get)Zcommon_release_envsr1   envenv_varr   r   r   r,      s4    
r,   )&__doc__	functoolsloggingr   r+   r:   typingr   r   r   r   Zlangsmith.utilsr   Zlangsmith.env._gitr   r   r   r5   	getLogger__name__r    dictr   strr   r
   	lru_cacher	   r/   r0   r@   rB   rE   rH   r[   ra   r`   r,   r   r   r   r   <module>   sJ   

%

	
	








