
    .`i'                        d dl 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 d dl	m
Z
 d dlmZ d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ  ee          Zdeej        ej        j        z           fdZd	efd
Zdeded	efdZd	efdZ ded	efdZ!ded	e"eef         fdZ#deded	efdZ$deded	efdZ%deded	efdZ&d	efdZ'd	efdZ(d	efdZ)d+ded	e*e         fdZ+d	efdZ,ded	ej-        dz  fdZ.d ed	e"eeef         fd!Z/d,d"edededz  d	efd#Z0	 	 	 d-d$ej        j1        ej1        z  d ed%e
d&edz  d'e2dz  d(edz  d	ej        ej        j        z  fd)Z3e j4        	 	 	 d.d ed%e
d&edz  d(ed'e2dz  d	eej                 fd*            Z5dS )/    N)IteratorSequence)Anyuuid4)	parse_url)init_loggersocketsc                 @    | D ]}||                     d           d S )Nr   linger)close)r
   socks     l/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/utils/network_utils.pyclose_socketsr      s6     ! !JJaJ   ! !    returnc                     t           j        } dt          j        v r(dt          j        vrt                              d           | r| S 	 t          j        t          j        t          j                  5 }|	                    d           |
                                d         cd d d            S # 1 swxY w Y   n# t          $ r Y nw xY w	 t          j        t          j        t          j                  5 }|	                    d           |
                                d         cd d d            S # 1 swxY w Y   n# t          $ r Y nw xY wt          j        dd	           d
S )NHOST_IPVLLM_HOST_IPa  The environment variable HOST_IP is deprecated and ignored, as it is often used by Docker and other software to interact with the container's network stack. Please use VLLM_HOST_IP instead to set the IP address for vLLM processes to communicate with each other.)z8.8.8.8P   r   )z2001:4860:4860::8888r   zFailed to get the IP address, using 0.0.0.0 by default.The value can be set by the environment variable VLLM_HOST_IP or HOST_IP.   )
stacklevelz0.0.0.0)envsr   osenvironloggerwarningsocketAF_INET
SOCK_DGRAMconnectgetsockname	ExceptionAF_INET6warningswarn)host_ipss     r   get_ipr*   !   s   GBJ>#C#C/	
 	
 	
  
]6>6+<== 	&IIo&&&==??1%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&    ]6?F,=>> 	&! II2333==??1%		& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&
     M	$ 	    9sl   )B9 1/B- B9 -B11B9 4B15B9 9
CC
)D; 3/D/"D; /D33D; 6D37D; ;
EEaddressfamilyc                     	 t          j         |t           j                  }|                    | df           |                                 dS # t          $ r Y dS w xY w)Nr   TF)r   r!   bindr   OSError)r+   r,   r)   s      r   test_loopback_bindr0   K   se    M&&"344	|				t   uus   A
A 
AAc                      t           j        } | r| S t          dt          j                  rdS t          dt          j                  rdS t          d          )Nz	127.0.0.1z::1zsNeither 127.0.0.1 nor ::1 are bound to a local interface. Set the VLLM_LOOPBACK_IP environment variable explicitly.)r   VLLM_LOOPBACK_IPr0   r   r    r%   RuntimeError)loopback_ips    r   get_loopback_ipr5   U   sd    'K  +v~66 
{	E6?	3	3 
uH
 
 	
r   c                 R    	 t          j        |            dS # t          $ r Y dS w xY w)NTF)	ipaddressIPv6Address
ValueError)r+   s    r   is_valid_ipv6_addressr:   g   s?    g&&&t   uus    
&&	host_portc                    |                      d          rO|                     dd          \  }}|dd          }|                    d          d         }|t          |          fS |                     d          \  }}|t          |          fS )N[]   :)
startswithrsplitsplitint)r;   hostports      r   split_host_portrG   o   s    C   %%c1--
dABBxzz#q!SYY__S))
dSYYr   rE   rF   c                 >    t          |           rd|  d| S |  d| S )Nr=   ]:r@   r:   )rE   rF   s     r   join_host_portrK   {   s<    T""  !4!!4!!!r   ipc                 "    t          | |          S N)get_tcp_urirL   rF   s     r   get_distributed_init_methodrQ      s    r4   r   c                 @    t          |           rd|  d| S d|  d| S )Nztcp://[rI   ztcp://r@   rJ   rP   s     r   rO   rO      s>    R   $%%%t%%%###T###r   c                  B    t           j        } d|  dt                       S )Nzipc:///)r   VLLM_RPC_BASE_PATHr   )base_rpc_paths    r   get_open_zmq_ipc_pathrW      s$    +M-M--EGG---r   c                  $    dt                       S )Nz	inproc://r    r   r   get_open_zmq_inproc_pathrZ      s     uww   r   c                      dt           j        v r5t          j        } t	          | | dz             }	 t                      }||vr|S t                      S )a<  
    Get an open port for the vLLM process to listen on.
    An edge case to handle, is when we run data parallel,
    we need to avoid ports that are potentially used by
    the data parallel master process.
    Right now we reserve 10 ports for the data parallel master
    process. Currently it uses 2 ports.
    VLLM_DP_MASTER_PORT
   )r   r   r   r\   range_get_open_port)dp_master_portreserved_port_rangecandidate_ports      r   get_open_portrc      sc     
**1#NNR4GHH	&+--N%888%%	& r      countc                     t          t                               }t          |          | k     r4|                    t	                                 t          |          | k     4t          |          S )zGet a list of open ports.)setrD   lenaddrc   list)re   portss     r   get_open_ports_listrl      sU    HJJE
e**u

		-//""" e**u

;;r   c                  .   t           j        } | 	 	 t          j        t          j        t          j                  5 }|                    d| f           | cd d d            S # 1 swxY w Y   n4# t          $ r' | dz  } t                              d| dz
  |            Y nw xY w	 t          j        t          j        t          j                  5 }|                    d           |	                                d         cd d d            S # 1 swxY w Y   d S # t          $ rv t          j        t          j
        t          j                  5 }|                    d           |	                                d         cd d d            cY S # 1 swxY w Y   Y d S w xY w)NT r?   z)Port %d is already in use, trying port %d)rn   r   )r   	VLLM_PORTr   r    SOCK_STREAMr.   r/   r   infor#   r%   )rF   r)   s     r   r_   r_      sY   >D	YY]6>63EFF  !FFB:&&&                                   Y Y Y	GPQSWXXXXXY	Y&]6>6+=>> 	&!FF7OOO==??1%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&  & & &]6?F,>?? 	&1FF7OOO==??1%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&&s   )A, A A,  A$$A, 'A$(A, ,.BB")D /D:D DD DD 3F/F6FF			FF		FFc                 D   t           j                            d          rd S t          j                    }t          j                    D ]W}|j        j        | k    rE|j	        >|j	        |k    r3	 t          j
        |j	                  c S # t
          j        $ r Y  d S w xY wXd S )Ndarwin)sysplatformrA   r   getpidpsutilnet_connectionsladdrrF   pidProcessNoSuchProcess)rF   our_pidconns      r   find_process_using_portr      s    
 |x(( tikkG&((  :?d""(<WATAT~dh/////'   ttt4s   -BBBpathc                    t          |           }|j        st          d|            |j        }|j        pd}t	          |j        pd          }|                    d          r|                    d          r
|dd         }|dk    r#t          ||f          st          d|            |dk    r|rt          d|            |||fS )z Split a zmq path into its parts.zInvalid zmq path: rn   r=   r>   r?   tcp)	r   schemer9   hostnamestrrF   rA   endswithall)r   parsedr   rE   rF   s        r   split_zmq_pathr      s    t__F= 64d44555]F? bDv{ b!!Ds c 2 2 AbDzsD$<004d4455544d445554r   r   c                 Z    ||  d| S t          |          r
|  d| d| S |  d| d| S )a8  Make a ZMQ path from its parts.

    Args:
        scheme: The ZMQ transport scheme (e.g. tcp, ipc, inproc).
        host: The host - can be an IPv4 address, IPv6 address, or hostname.
        port: Optional port number, only used for TCP sockets.

    Returns:
        A properly formatted ZMQ path string.
    Nz://z://[rI   r@   rJ   )r   rE   rF   s      r   make_zmq_pathr      se     |##T###T"" -,,d,,d,,,&&&&&&&r   ctxsocket_typer.   identityr   c                    t          j                    }|                     |          }|j        dz  }|j        dz  }	|dk    r|	dk    rt          d          nd}
|%|t          j        t          j        t          j	        fv}|t          j
        t          j        t          j        fv r6 |j        t          j        d            |j        t          j        |
           |t          j        t          j        t          j        fv r6 |j        t          j        d            |j        t          j        |
           | |j        t          j        |           | |j        t          j        |           |t          j        k    r |j        t          j        d           t-          |          \  }}}|d	k    r*t/          |          r |j        t          j        d
           |r |j        |           n |j        |           |S )z9Make a ZMQ socket with the proper bind/connect semantics.i   @       g      Ar   Nr   Tr   r?   )rw   virtual_memoryr   total	availablerD   zmqPUSHSUBXSUBPULLDEALERROUTER
setsockoptRCVHWMRCVBUFSNDHWMSNDBUFIDENTITYLINGERXPUBXPUB_VERBOSEr   r:   IPV6r.   r"   )r   r   r   r.   r   r   memr   	total_memavailable_membuf_sizer   rE   _s                 r   make_zmq_socketr     s    

!
!CZZ$$F 	G#IMG+M
 &/^^8J8Js=!!!PRH|38SWch"??sxSZ888#*a(((#*h///sxSZ888#*a(((#*h///#,111#*f---ch#*D111 %T**OFD!066#(A&&& DtMr   c              #     K   t          j                    }	 t          || |||          V  n*# t          $ r t                              d           Y nw xY w|                    |           dS # |                    |           w xY w)z Context manager for a ZMQ socket)r.   r   zGot Keyboard Interrupt.r   N)r   Contextr   KeyboardInterruptr   debugdestroy)r   r   r.   r   r   r   s         r   zmq_socket_ctxr   <  s       +--C#c44(SSSSSSS 0 0 0./////0 	6"""""6""""s&   . A0 $AA0 AA0 0B)rd   rN   )NNN)Nr   N)6
contextlibr7   r   r   rt   r&   collections.abcr   r   typingr   uuidr   rw   r   zmq.asynciourllib3.utilr   	vllm.envsr   vllm.loggerr	   __name__r   Socketasyncior   r   r*   rD   boolr0   r5   r:   tuplerG   rK   rQ   rO   rW   rZ   rc   rj   rl   r_   r{   r   r   r   r   bytesr   contextmanagerr   rY   r   r   <module>r      s}           				  



                      



     " " " " " "       # # # # # #	X		!8CJ1C$CD ! ! ! !' ' ' ' 'T S T    
 
 
 
 
$3 4    	s 	uS#X 	 	 	 	   C  C        !C !s !s ! ! ! !$C $s $s $ $ $ $.s . . . .
!# ! ! ! !s    & s 49    & & & & &.# &.4*?    $ sC}!5    .' '# 'S 'd
 'c ' ' ' '. !5 5		s{	*5
5 5 +	5
 dl5 $J5 	Z#+$$5 5 5 5p  !# #
## +# 	#
 dl# cj# # # # # #r   