
    j                     |    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 dZdZ	d Z
d Zd Zd	 Zd
 Zedk(  r e        yy)    N)AsyncOpenAI)Timeoutzqwen/qwen3.7-flash)zgoogle/gemma-4-31b-it:freez&nvidia/nemotron-3-super-120b-a12b:freec                 T    t        | dd       }t        |dd       xs t        | dd       S )Nresponsestatus_code)getattr)excr   s     1/opt/struktur/graphiti/service/llm_call_worker.py_status_coder      s.    sJ-H8]D1VWS-QU5VV    c                     t        |       }t        |       j                         }t        | dd       }|dv xs |dv xs d|v xs
 d|v xs d|v S )Ncode)i  i  i  i  i  i  )provider_rate_limitrate_limit_exceededr   z
rate limitztemporarily unavailable)r   strlowerr   )r	   statustextr   s       r
   
_retryabler      so    #Fs8>>D3%D44 .BB.!T).-9T-A. &-/r   c                 L    t        |       d d }t        j                  dd|      S )Ni  z'(?i)(bearer\s+|sk-or-v1-[A-Za-z0-9_-]+)z
[REDACTED])r   resub)r	   values     r
   _safe_errorr       s%    HUdOE66<lERRr   c                   K   t        | d         }| d   g}| j                  d      t        k(  r|j                  t               g }d }t        |d      D ]  \  }}t        | d   | d   t        |t        d|      |t        d|      t        d|            d	      }	 |j                  j                  j                  || d
   ddddiddiddid       d {   }t        |di       xs i }	|	j                  d      xs$ |	j                  d      xs |	j                  d      }
|
rt        |
      d d }
t        |dd       }t        |t              r|r|d   nd }|t        |dd       nd }|t        |dd       nd }t        |dd       }|r|j!                         ni }|j#                  ||d|
d       d||j                  d      |j                  d       t        |dd       xs |t        |d!d       |
|rt        |d"d       nd |rt        |d#d       nd |d$
|j%                          d {    c S  d(|rt-        |      j.                  nd+|rt1        |      |d,S d+|d,S 7 7 9# t&        $ r}t)        |      }t+        |      }|}|j#                  ||d%|t-        |      j.                  |t1        |      d&       |r|t3        |      k\  rqt        t        |d'd       di       xs i }	d(t-        |      j.                  t1        |      ||	j                  d)      ||d*cY d }~|j%                          d {  7   c S Y d }~nd }~ww xY w	 |j%                          d {  7   # |j%                          d {  7   w xY ww)-Neffective_timeoutmodel   api_keybase_urlg      4@)connectreadwritepoolr   )r   r    timeoutmax_retriesmessagesi   typejson_objecteffortnoneallow_fallbacksT)	reasoningprovider)r   r'   temperature
max_tokensresponse_format
extra_bodyheaderszx-openrouter-providerz
x-providerzx-model-providerx   choicesmessagecontentusagesuccess)attemptr   resultr.   prompt_tokenscompletion_tokens_request_idfinish_reasonnative_finish_reason)
okrawinput_tokensoutput_tokensr   provider_request_idr.   r?   r@   fallback_attemptsfailure)r:   r   r;   r   
error_type	retryableerrorr   Fzx-request-id)rA   rH   rJ   r   rE   r   rF   unknown)rA   rH   rJ   rF   )floatgetPRIMARY_MODELextendFALLBACK_MODELS	enumerater   r   minchatcompletionscreater   r   
isinstancelist
model_dumpappendclose	Exceptionr   r   r(   __name__r   len)payloadr%   modelsattempts
last_errorattempt_numberr   clientr   r3   r.   r5   choicer6   rB   	usage_objr8   r	   r   rI   s                       r
   callrf   &   s    G/01GgF{{7},o&HJ!*61!5 :!I&Z(GSw-?g"%dG"43tW;MO
2	! $[[44;; ,!' 7*2F);):D(AC <  H h	26<"G$;< UL1U5<[[AS5T x=#.h	48G#-gt#<WQZdF:@:Lgfi6RVG7>7J''9d3PTC'48I.7I((*REOO'0hH IsEIIo<V%*YY/B%C$Xw=F+28]D+Q (OUWV_d%K[_]cGF<RTX,Yim)130 ,,.  u:!x JtJ'7'@'@T]0:[,!)+ +@I!)+ +a\ !!  	G!#&F"3IJOO'0F+/9+=+=*3&1#&6	8 9
 #f+ =!'#z4"@)RPVTV#493E3E!,S!1V/6{{>/J!&XG G
 ,,.   !>	G !> ,,.  &,,.  s   BN:I$ID=I$N(I")6NI$"N$	M-B-M MM$N2L53N;M$ MM$	NMN$M?8M;
9M??Nc                      t        j                  t        j                        } t	        j
                  t        |             }t        dt        j                  |d      z   d       y )NzLLM_CHILD_RESULT=F)ensure_asciiT)flush)	jsonloadsysstdinasynciorunrf   printdumps)r^   r;   s     r
   mainrr   o   sA    ii		"G[[g'F	


6 F
FdSr   __main__)rn   rj   r   rl   openair   httpxr   rN   rP   r   r   r   rf   rr   r\    r   r
   <module>rw      sW      	 
   %W
/SF+RT zF r   