Ë
    uPêjp}  ã                   ó  — U d Z ddlZddlmZmZmZ ddlmZmZm	Z	 ddl
Z
ddlZddlmZ ddlmZ ddlmZ ddlmZmZ dd	lmZmZmZmZmZ dd
lmZmZmZmZm Z  ddl!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z; erddl<Z<ddl=m>Z? e?Z@neZ@dZAe	eBd<   deCdeDfd„ZEdeeC   deeC   fd„ZFdeeC   deeC   fd„ZGdeHddfd„ZIdeHde3ddfd„ZJdeCde3fd„ZK G d„ d e«      ZL G d!„ d"e«      ZMg d#¢ZNy)$uº  
OCI Generative AI â€” chat transformation orchestrator.

This module wires together the Cohere-specific and Generic-model helpers to
implement the LiteLLM BaseConfig interface.  Heavy-lifting lives in:

  - :mod:`litellm.llms.oci.chat.cohere`  â€” Cohere message/tool/response logic
  - :mod:`litellm.llms.oci.chat.generic` â€” Generic message/tool/response logic
  - :mod:`litellm.llms.oci.common_utils` â€” auth, signing, schema utilities
é    N)ÚAsyncIteratorÚCallableÚIterator)ÚTYPE_CHECKINGÚAnyÚFinal)ÚDEFAULT_OCI_CHAT_MAX_TOKENS)Útrack_llm_api_timing)ÚCustomStreamWrapper)Ú
BaseConfigÚBaseLLMException)ÚAsyncHTTPHandlerÚHTTPHandlerÚ_get_httpx_clientÚget_async_httpx_clientÚversion)Ú_extract_text_contentÚ!adapt_messages_to_cohere_standardÚ)adapt_tool_definitions_to_cohere_standardÚhandle_cohere_responseÚhandle_cohere_stream_chunk)Ú&adapt_messages_to_generic_oci_standardÚ%adapt_tool_definition_to_oci_standardÚhandle_generic_responseÚhandle_generic_stream_chunk)ÚOCI_API_VERSIONÚOCIErrorÚOCIRequestWrapperÚget_oci_base_urlÚresolve_oci_credentialsÚsign_oci_requestÚvalidate_oci_environment)ÚCohereChatRequestÚOCIChatRequestPayloadÚOCICompletionPayloadÚOCIServingModeÚ
OCIVendors)ÚAllMessageValues)ÚLlmProvidersÚModelResponseÚModelResponseStream)Úsupports_reasoning)ÚLoggingi,  ÚSTREAMING_TIMEOUTÚmodelÚreturnc                 óÔ   — | sy| j                  «       j                  d«      r| dd n| }|j                  «       }|j                  d«      r|j                  d«       S t        |d¬«      S )	aD  Return True for OCI-hosted models that require ``maxCompletionTokens``.

    OpenAI commercial models proxied through OCI (``openai.*``) reject
    ``maxTokens`` with HTTP 400 on the reasoning families (gpt-5.x, o-series)
    and accept ``maxCompletionTokens`` everywhere, so route the whole vendor
    prefix to it rather than chasing each new release in
    ``model_prices_and_context_window.json``. The ``openai.gpt-oss-*`` open
    weights are served by OCI's own stack and keep ``maxTokens``. Any other
    vendor falls back to the catalog's ``supports_reasoning`` flag.
    Fúoci/é   Nzopenai.zopenai.gpt-ossÚoci)r/   Úcustom_llm_provider)ÚlowerÚ
startswithr,   )r/   ÚnameÚlowereds      úi/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/oci/chat/transformation.pyÚ!_model_uses_max_completion_tokensr;   Q   se   € ñ ØØ$Ÿ{™{›}×7Ñ7¸Ô?�%˜˜‘)ÀU€DØ—Z‘Z“\€GØ×Ñ˜)Ô$Ø×%Ñ%Ð&6Ó7Ð7Ð7Ü D¸eÔDÐDó    Ústreamc              #   óü   K  — d}| D ]K  }||z  }d|v sŒ|j                  dd«      \  }}|j                  «       }|j                  d«      r|–— d|v rŒ?ŒM |j                  «       }|j                  d«      r|–— yy­w)aÎ  Yield one ``data:`` SSE line at a time from a sync text stream.

    The OCI streaming endpoint does not align SSE event boundaries with HTTP
    read boundaries. A single read may carry multiple events, a single event
    may straddle two reads, and some events arrive separated by only ``\n``
    instead of ``\n\n``. This helper buffers across reads and yields each
    complete ``data:`` line so JSON parsing downstream never sees a partial
    payload.
    Ú ú
é   údata:N©ÚsplitÚstripr7   ©r=   ÚbufferÚitemÚlineÚstrippeds        r:   Ú_iter_sse_eventsrK   e   sŒ   è ø€ ð €FØò ˆØ�$‰ˆØ�fŠnØ!Ÿ<™<¨¨aÓ0‰LˆD�&Ø—z‘z“|ˆHØ×"Ñ" 7Ô+Ø’ð	 �f‹nðð �|‰|‹~€HØ×Ñ˜7Ô#Ø‹ð $ùs   ‚A<”>A<Á)A<c                ó  K  — d}| 2 3 d{  –—† }||z  }d|v sŒ|j                  dd«      \  }}|j                  «       }|j                  d«      r|­–— d|v rŒ@ŒT7 ŒO6 |j                  «       }|j                  d«      r|­–— yy­w)z'Async twin of :func:`_iter_sse_events`.r?   Nr@   rA   rB   rC   rF   s        r:   Ú_aiter_sse_eventsrM   |   s’   è ø€ à€FØ÷ ð ˆdØ�$‰ˆØ�fŠnØ!Ÿ<™<¨¨aÓ0‰LˆD�&Ø—z‘z“|ˆHØ×"Ñ" 7Ô+Ø“ð	 �f‹nðø�fð �|‰|‹~€HØ×Ñ˜7Ô#ØŒð $ùs0   ‚B‡A‹AŒA�
Bš?BÁBÁAÁ)BÚselected_paramsc                 ó¸  — | j                  d«      }|€y t        |t        «      r6ddiddiddiddidœ}|j                  |j                  «       d|dœ«      | d<   y t        |t        «      rÎ|j                  d«      }t        |t        «      st        d	d
|›�¬«      ‚|j                  «       }|dk(  rk|j                  d«      }t        |t        «      r|j                  d«      n|j                  d«      }t        |t        «      r|st        d	d¬«      ‚d|dœ| d<   y |dv rd|i| d<   y t        d	d|›d�¬«      ‚t        d	dt        |«      j                  › �¬«      ‚)NÚ
toolChoiceÚtypeÚAUTOÚNONEÚREQUIRED)ÚautoÚnoneÚrequiredÚanyÚFUNCTION)rQ   r8   é�  z=Invalid tool_choice for OCI: missing or non-string 'type' in ©Ústatus_codeÚmessageÚfunctionr8   zOInvalid tool_choice for OCI: 'FUNCTION' type requires a non-empty function name>   rR   rS   rT   z.Invalid tool_choice for OCI: unsupported type z8; expected one of 'FUNCTION', 'AUTO', 'NONE', 'REQUIRED'z7Invalid tool_choice for OCI: expected str or dict, got )	ÚgetÚ
isinstanceÚstrr6   Údictr   ÚupperrQ   Ú__name__)rN   ÚtcÚtc_mapÚraw_typerc   Úfnr8   s          r:   Ú_normalize_tool_choiceri   ‹   s”  € Ø×#Ñ# LÓ1€BØ	€zØÜ�"”cÔà˜VÐ$Ø˜VÐ$Ø Ð,Ø˜JÐ'ñ	
ˆð )/¯
©
°2·8±8³:È
Ð\^Ñ?_Ó(`ˆ˜Ñ%ØÜ�"”dÔØŸ&™& ›.ˆÜ˜(¤CÔ(ÜØØWÐXZÐW]Ð^ôð ð  —~‘~Ó'ˆØ�JÒØŸ™˜zÓ*ˆBÜ,6°r¼4Ô,@˜"Ÿ&™& œ.ÀbÇfÁfÈVÃnˆDÜ˜t¤SÔ)©dÜØ #Ømôð ð 6@ÈÑ,NˆO˜LÑ)ð 	ð Ð2Ñ2Ø-3°U¨OˆO˜LÑ)ð 	ô ØàDÀXÀLð QMð Môð ô ØØJÌ4ÐPRË8×K\ÑK\ÐJ]Ð^ôð r<   Úvendorc                 ó–  — | j                  d«      }t        |t        «      rd|vry t        |d   «      j	                  «       }|j                  d«      }t        |t        «      r|nd }|dk(  rddi| d<   y |t
        j                  k(  r%ddi}|�|j                  d«      �|d   |d<   || d<   y |dk(  rz|€t        dd	¬
«      ‚d|j                  d«      xs di}|j                  d«      �|d   |d<   |j                  d«      �|d   |d<   |j                  d«      �|d   |d<   d|dœ| d<   y |j                  «       }d|dk(  rdn|i| d<   y )NÚresponseFormatrQ   Újson_schemaÚtextÚTEXTÚJSON_OBJECTÚschemarZ   zBresponse_format type 'json_schema' requires a 'json_schema' objectr[   r8   ÚresponseÚdescriptionÚstrictÚisStrictÚJSON_SCHEMA)rQ   Ú
jsonSchemaÚJSON)	r_   r`   rb   ra   r6   r'   ÚCOHEREr   rc   )	rN   rj   ÚrfÚrf_typeÚ
raw_schemarm   ÚpayloadÚ
oci_schemaÚfmts	            r:   Ú_normalize_response_formatr€   º   s‘  € Ø×#Ñ#Ð$4Ó5€BÜ�bœ$Ô 6°Ñ#3Øä˜˜F™“_×*Ñ*Ó,€GØŸ™˜}Ó-€JÜ'1°*¼dÔ'C™È€Kà�&ÒØ-3°VÐ,<ˆÐ(Ñ)Øà”×"Ñ"Ò"à*0°-Ð)@ˆØÐ" {§¡°xÓ'@Ð'LØ +¨HÑ 5ˆG�HÑØ,3ˆÐ(Ñ)Øà�-ÒØÐÜØØ\ôð ð .4°[·_±_ÀVÓ5LÒ5ZÐPZÐ,[ˆ
Ø�?‰?˜=Ó)Ð5Ø(3°MÑ(BˆJ�}Ñ%Ø�?‰?˜8Ó$Ð0Ø#.¨xÑ#8ˆJ�xÑ Ø�?‰?˜8Ó$Ð0Ø%0°Ñ%:ˆJ�zÑ"à!Ø$ñ-
ˆÐ(Ñ)ð 	à—‘“€CØ)/À#ÈÂ-±ÐUXÐ(Y€OÐ$Ò%r<   c                 óÜ   — | j                  «       j                  d«      r| dd n| }|j                  d«      d   j                  «       }|dk(  rt        j                  S t        j
                  S )uâ   Return the OCI vendor enum for a model name.

    OCI GenAI uses two ``apiFormat`` values:

    - ``"COHERE"`` for Cohere models (``cohere.*``)
    - ``"GENERIC"`` for all others (Meta Llama, xAI Grok, Google Gemini, â€¦)
    r2   r3   Nú.r   Úcohere)r6   r7   rD   r'   ry   ÚGENERIC)r/   r8   rj   s      r:   Úget_vendor_from_modelr…   é   s_   € ð  %Ÿ{™{›}×7Ñ7¸Ô?�%˜˜‘)ÀU€DØ—J‘J˜s“O AÑ&×,Ñ,Ó.€FØ�ÒÜ× Ñ Ð Ü×ÑÐr<   c                   óØ  — e Zd ZdZedefd„«       Zd+d„Zdede	e   fd„Z
ded	eded
edef
d„Z	 	 	 	 d,ded	ededededz  dedz  dedz  dedz  deeef   fd„Z	 	 d-dedede	e   d	edededz  dedz  defd„Z	 d.dedz  dedz  ded	edededz  defd„Zd/ded	ededefd„Zdede	e   d	edededefd„Z	 	 d-dedej.                  dededede	e   d	ededddedz  dedz  defd „Z e«       	 	 	 d0ded!edededed"ede	d#eez  dz  dedz  d$edz  dd%fd&„«       Z e«       	 	 	 d0ded!edededed"ede	d#eez  dz  dedz  d$edz  dd%fd'„«       Zd(ed)e deejB                  z  de"fd*„Z#y)1ÚOCIChatConfigz=LiteLLM BaseConfig implementation for OCI Generative AI chat.r0   c                  ó   — y)NT© )Úselfs    r:   Úhas_custom_stream_wrapperz'OCIChatConfig.has_custom_stream_wrapperû   s   € àr<   Nc                 óÆ  — i dd“dd“dd“dd“dd“dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dddddddddddœ
¥| _         | j                   j                  «       D ��ci c]  \  }}||dk(  rdn|“Œ c}}| _        d| j                  d<   d| j                  d<   d | j                  d!<   d| j                  d<   d| j                  d
<   d| j                  d<   y c c}}w )"Nr=   ÚisStreamÚ
max_tokensÚ	maxTokensÚmax_completion_tokensÚtemperatureÚtoolsÚfrequency_penaltyÚfrequencyPenaltyÚlogprobsÚlogProbsÚ
logit_biasÚ	logitBiasÚnÚnumGenerationsÚpresence_penaltyÚpresencePenaltyÚreasoning_effortÚreasoningEffortÚseedÚstopÚtool_choicerP   Útop_pÚtopPÚmax_retriesFÚtop_logprobsrl   )
Ú
modalitiesÚ
predictionÚstream_optionsÚfunction_callÚ	functionsÚextra_headersÚparallel_tool_callsÚaudioÚweb_search_optionsÚresponse_formatÚstopSequencesÚtopKÚtop_k)Úopenai_to_oci_generic_param_mapÚitemsÚopenai_to_oci_cohere_param_map)rŠ   ÚkÚvs      r:   Ú__init__zOCIChatConfig.__init__ÿ   s¬  € ð0
Ø�jð0
à˜+ð0
ð $ [ð0
ð ˜=ð	0
ð
 �Wð0
ð  Ð!3ð0
ð ˜
ð0
ð ˜+ð0
ð Ð!ð0
ð Ð 1ð0
ð Ð 1ð0
ð �Fð0
ð �Fð0
ð ˜<ð0
ð �Vð0
ð  ˜5ð!0
ð" ˜Eð#0
ð$  ØØ#Ø"ØØ"Ø#(ØØ"'Ø/ò70
ˆÔ,ðL DH×CgÑCg×CmÑCmÓCo÷/
Ù;?¸1¸aˆA 1¨¢;‘°AÑ5ó/
ˆÔ+ð >Cˆ×+Ñ+¨MÑ:Ø38ˆ×+Ñ+¨CÑ0ð
 8>ˆ×+Ñ+¨GÑ4ð
 CHˆ×+Ñ+Ð,>Ñ?ð
 ;@ˆ×+Ñ+¨JÑ7Ø<Aˆ×+Ñ+¨LÒ9ùó)/
s   Á%Cr/   c                 óÂ   — t        |«      t        j                  k(  r| j                  n| j                  }|j                  «       D ��cg c]
  \  }}|sŒ	|‘Œ c}}S c c}}w ©N)r…   r'   ry   rµ   r³   r´   )rŠ   r/   Ú	param_mapÚkeyÚvalues        r:   Úget_supported_openai_paramsz)OCIChatConfig.get_supported_openai_params;  sS   € ô % UÓ+¬z×/@Ñ/@Ò@ð ×/Ò/à×5Ñ5ð 	ð '0§o¡oÓ&7×A™
˜˜Uº5’ÓAÐAùÓAs   Á
AÁAÚnon_default_paramsÚoptional_paramsÚdrop_paramsc                 óv  — i }t        |«      }|t        j                  k(  r| j                  n| j                  }i |¥|¥j                  «       D ]i  \  }}	|j                  |«      }
|
du r7|dk(  rŒ!|dk(  r|	�|	dk(  rŒ.|st        j                  rŒAt        dd|› d�¬«      ‚|
€|	||<   ŒZ|	||
<   |
d	k(  sŒe|	|d
<   Œk |S )NFr¤   r™   rA   rZ   zparam `z` is not supported on OCIr[   rl   r¯   )
r…   r'   ry   rµ   r³   r´   r_   ÚlitellmrÁ   r   )rŠ   r¿   rÀ   r/   rÁ   Úadapted_paramsrj   r»   r¼   r½   Úaliass              r:   Úmap_openai_paramszOCIChatConfig.map_openai_paramsH  s  € ð !#ˆÜ-¨eÓ4ˆà39¼Z×=NÑ=NÒ3NˆD×/Ò/ÐTX×TxÑTxð 	ð DÐ/ÐC°?ÐC×IÑIÓKò 	:‰JˆC�Ø—M‘M #Ó&ˆEØ˜‰~ð
 ˜-Ò'Øð ˜#’: 5 =°E¸Q²JØÙ¤'×"5Ò"5ØÜØ #Ø% c UÐ*CÐDôð ð ˆ}Ø&+�˜sÑ#ØØ$)ˆN˜5Ñ!ð
 Ð(Ó(Ø49�Ð0Ò1ð?	:ðB Ðr<   ÚheadersÚrequest_dataÚapi_baseÚapi_keyr=   Úfake_streamc	           
      ó(   — t        ||||||||¬«      S )N)rÇ   rÀ   rÈ   rÉ   rÊ   r/   r=   rË   )r!   )	rŠ   rÇ   rÀ   rÈ   rÉ   rÊ   r/   r=   rË   s	            r:   Úsign_requestzOCIChatConfig.sign_requestx  s)   € ô  ØØ+Ø%ØØØØØ#ô	
ð 		
r<   ÚmessagesÚlitellm_paramsc                 ó  — |st        dd¬«      ‚|j                  d«      €\t        |«      }dD �	cg c]  }	|j                  |	«      s|	‘Œ }
}	|
s"|j                  d«      s|j                  d«      st        dd	¬«      ‚t        |||«      S c c}	w )
NrZ   zRkwarg `messages` must be an array of messages that follow the openai chat standardr[   Ú
oci_signer)Úoci_userÚoci_fingerprintÚoci_tenancyÚoci_compartment_idÚoci_keyÚoci_key_filei‘  aS  Missing required parameters: oci_user, oci_fingerprint, oci_tenancy, oci_compartment_id and at least one of oci_key or oci_key_file. These can be supplied via optional_params or via OCI_USER, OCI_FINGERPRINT, OCI_TENANCY, OCI_COMPARTMENT_ID, OCI_KEY_FILE environment variables. Alternatively, provide an oci_signer object from the OCI SDK.)r   r_   r    r"   )rŠ   rÇ   r/   rÎ   rÀ   rÏ   rÊ   rÉ   Úcredsr¶   Úmissings              r:   Úvalidate_environmentz"OCIChatConfig.validate_environmentŽ  sª   € ñ ÜØØlôð ð ×Ñ˜|Ó,Ð4Ü2°?ÓCˆEðö	àð —y‘y ”|ò ð	ˆGð 	ñ ˜uŸy™y¨Ô3°u·y±yÀÔ7PÜØ #ðXô	ð 	ô (¨°À'ÓJÐJùò+	s   °B
c                 óV   — t        ||xs t        j                  «      }|› dt        › d�S )Nú/z/actions/chat)r   rÃ   rÉ   r   )rŠ   rÉ   rÊ   r/   rÀ   rÏ   r=   Úbases           r:   Úget_complete_urlzOCIChatConfig.get_complete_url¶  s/   € ô ' ¸Ò8TÄG×DTÑDTÓUˆØ��qœÐ)¨Ð7Ð7r<   rj   c                 óV  — |t         j                  k(  r| j                  n| j                  }i }|t         j                  k7  r|rt	        |«      rdnd}|j                  «       D ]0  \  }}|sŒ	|dk(  r|n|}	|	|v rŒ||v r	||   ||	<   Œ$||v sŒ)||   ||	<   Œ2 ||vr	t        ||<   d|v r1|d   }
t        |
t        «      r|
j                  «       }|dk(  rd}||d<   d|v r7|t         j                  k(  rt        |d   «      |d<   nt        |d   |«      |d<   t        |«       t        ||«       |S )NÚmaxCompletionTokensr�   rž   ÚDISABLErS   r’   )r'   ry   rµ   r³   r;   r´   r	   r`   ra   rc   r   r   ri   r€   )rŠ   rj   rÀ   r/   r»   rN   Úmax_tokens_keyÚ
openai_keyÚ	oci_aliasÚtargetÚeffortÚ
normalizeds               r:   Ú_get_optional_paramsz"OCIChatConfig._get_optional_paramsÂ  sw  € à39¼Z×=NÑ=NÒ3NˆD×/Ò/ÐTX×TxÑTxð 	ð (*ˆð œ×*Ñ*Ò*©uÔ9ZÐ[`Ô9añ "àð 	ð &/§_¡_Ó%6ò 		EÑ!ˆJ˜	ÙØØ'0°KÒ'?‘^ÀYˆFØ˜Ñ(ØØ˜_Ñ,Ø*9¸*Ñ*E� Ò'Ø˜oÒ-Ø*9¸)Ñ*D� Ò'ð		Eð  Ñ0Ü.IˆO˜NÑ+ð  Ñ/Ø+Ð,=Ñ>ˆFÜ˜&¤#Ô&Ø#Ÿ\™\›^�
Ø Ò*Ø!'�JØ5?�Ð 1Ñ2à�oÑ%Øœ×*Ñ*Ò*Ü+TÐUdÐelÑUmÓ+n� Ò(ä+PØ# GÑ,Øó,� Ñ(ô 	˜Ô/ä" ?°FÔ;àÐr<   c                 óÀ  — t        |«      }|d   }|st        dd¬«      ‚t        |«      }|j                  dd«      }	|	dvrt        dd¬«      ‚|	d	k(  rt	        d	|j                  d
|«      ¬«      }
nt	        d|¬«      }
|t
        j                  k(  rð|D �cg c]  }|j                  d«      dk(  sŒ|‘Œ }}|st        dd¬«      ‚|D �cg c]  }|j                  d«      dk(  sŒ|‘Œ }}d }|rdj                  d„ |D «       «      }|r|}t        ddt        |d   d   «      t        |D �cg c]  }|j                  d«      dk7  sŒ|‘Œ c}«      |dœ| j                  t
        j                  ||«      ¤Ž}t        ||
|¬«      }n>t        ||
t        d|j                  t        |«      dœ| j                  |||«      ¤Ž¬«      }|j!                  d¬«      S c c}w c c}w c c}w )NrÕ   rZ   zwoci_compartment_id is required for OCI chat requests. Pass it as optional_params or set the OCI_COMPARTMENT_ID env var.r[   Úoci_serving_modeÚ	ON_DEMAND)rë   Ú	DEDICATEDzBkwarg `oci_serving_mode` must be either 'ON_DEMAND' or 'DEDICATED'rì   Úoci_endpoint_id)ÚservingTypeÚ
endpointId)rî   ÚmodelIdÚroleÚuseruI   No user message found â€” Cohere models require at least one user messageÚsystemr@   c              3   ó8   K  — | ]  }t        |d    «      –— Œ y­w)ÚcontentN)r   )Ú.0Úms     r:   ú	<genexpr>z2OCIChatConfig.transform_request.<locals>.<genexpr>7  s   è ø€ Ò+iÐTUÔ,AÀ!ÀIÁ,×,OÑ+iùs   ‚ry   éÿÿÿÿrõ   )Ú	apiFormatr]   ÚchatHistoryÚpreambleOverride)ÚcompartmentIdÚservingModeÚchatRequest)rú   rÎ   T)Úexclude_noner‰   )r    r   r…   r_   r&   r'   ry   Újoinr#   r   r   rè   r%   r$   r½   r   Ú
model_dump)rŠ   r/   rÎ   rÀ   rÏ   rÇ   rØ   rÕ   rj   rê   Úserving_moder÷   Úuser_messagesÚsystem_messagesÚpreamble_overrideÚpreambleÚchat_requestÚdatas                     r:   Útransform_requestzOCIChatConfig.transform_request  s'  € ô /¨Ó?ˆØ$)Ð*>Ñ$?ÐÙ!ÜØðXôð ô .¨eÓ4ˆà"1×"5Ñ"5Ð6HÈ+Ó"VÐØÐ#=Ñ=ÜØØ\ôð ð
 ˜{Ò*Ü)Ø'Ø*×.Ñ.Ð/@À%ÓHô‰Lô
 *°kÈ5ÔQˆLà”Z×&Ñ&Ò&Ø/7Ö#S¨!¸1¿5¹5À»=ÈFÓ;R¢AÐ#SˆMÐ#SÙ ÜØ #Øgôð ð
 2:Ö%W¨A¸Q¿U¹UÀ6»]ÈhÓ=V¢aÐ%WˆOÐ%WØ $ÐÙØ"&§)¡)Ñ+iÐYhÔ+iÓ"i�ÙØ(0Ð%ä"3ð #Ø"Ü-¨m¸BÑ.?À	Ñ.JÓKÜ=È(Ö>pÀQÐVW×V[ÑV[Ð\bÓVcÐgoÓVoºqÒ>pÓqØ!2ñ	#ð
 ×+Ñ+¬J×,=Ñ,=¸ÐPUÓVñ#ˆLô (Ø0Ø(Ø(ô‰Dô (Ø0Ø(Ü1ð Ø$Ÿl™lÜCÀHÓMñð ×/Ñ/°¸ÈÓOñôˆDð �‰¨DˆÓ1Ð1ùòK $Tùò &Xùò ?qs$   ÂGÂ/GÃGÃ"GÄ(GÅGÚraw_responseÚmodel_responseÚlogging_objÚencodingztiktoken.Encoding | NoneÚ	json_modec                 ó„  — |j                  «       }t        |t        «      st        d|j                  ¬«      ‚|j                  d«      �#t        t        |d   «      |j                  ¬«      ‚t        |«      }|t        j                  k(  rt        ||||«      }nt        ||||«      }|j                  |j                  d<   |S )Nz Invalid response format from OCI)r]   r\   ÚerrorÚadditional_headers)Újsonr`   rb   r   r\   r_   ra   r…   r'   ry   r   r   rÇ   Ú_hidden_params)rŠ   r/   r  r  r  rÈ   rÎ   rÀ   rÏ   r  rÊ   r  Úresponse_jsonrj   s                 r:   Útransform_responsez OCIChatConfig.transform_responseT  sÄ   € ð  ,×0Ñ0Ó2ˆä˜-¬Ô.ÜØ:Ø(×4Ñ4ôð ð
 ×Ñ˜WÓ%Ð1ÜÜ˜M¨'Ñ2Ó3Ø(×4Ñ4ôð ô
 .¨eÓ4ˆØ”Z×&Ñ&Ò&Ü3°MÀ5È.ÐZfÓg‰Nä4°]ÀEÈ>Ð[gÓhˆNà>J×>RÑ>Rˆ×%Ñ%Ð&:Ñ;ØÐr<   r5   r	  ÚclientÚsigned_json_bodyÚOCIStreamWrapperc                 óð  — |�t        |t        «      rt        i ¬«      }	 |j                  |||
�|
nt	        j
                  |«      d|t        ¬«      }|j                  dk7  r!t        |j                  |j                  ¬«      ‚t        t        |j                  «       «      |||¬«      S # t        j                  $ r:}t        |j                  j                  |j                  j                  ¬«      ‚d }~ww xY w)N)ÚparamsT©rÇ   r	  r=   r  Útimeoutr[   éÈ   ©Úcompletion_streamr/   r5   r  )r`   r   r   Úpostr  Údumpsr.   ÚhttpxÚHTTPStatusErrorr   rr   r\   rn   r  rK   Ú	iter_text©rŠ   r/   r5   r  rÉ   rÇ   r	  rÎ   r  r  r  rr   Úes                r:   Úget_sync_custom_stream_wrapperz,OCIChatConfig.get_sync_custom_stream_wrappery  sá   € ð ˆ>œZ¨Ô0@ÔAÜ&¨bÔ1ˆFð
	XØ$Ÿk™kØØØ*:Ð*FÑ&ÌDÏJÉJÐW[ÓL\ØØ'Ü)ð *ó ˆHð ×Ñ 3Ò&Ü x×';Ñ';ÀXÇ]Á]ÔSÐSäÜ.¨x×/AÑ/AÓ/CÓDØØ 3Ø#ô	
ð 	
øô ×$Ñ$ò 	XÜ q§z¡z×'=Ñ'=ÀqÇzÁzÇÁÔWÐWûð	Xús    2B( Â(C5Â;5C0Ã0C5c              ƒ   ó*  K  — |�t        |t        «      rt        t        j                  i ¬«      }	 |j                  |||
�|
nt        j                  |«      d|t        ¬«      ƒ d {  –—† }|j                  dk7  r!t        |j                  |j                  ¬«      ‚t        t!        |j#                  «       «      |||¬«      S 7 ŒZ# t        j                  $ r:}t        |j                  j                  |j                  j                  ¬«      ‚d }~ww xY w­w)N)Úllm_providerr  Tr  r[   r  r  )r`   r   r   r)   ÚOCIr!  r  r"  r.   r#  r$  r   rr   r\   rn   r  rM   Ú
aiter_textr&  s                r:   Úget_async_custom_stream_wrapperz-OCIChatConfig.get_async_custom_stream_wrapper   sö   è ø€ ð ˆ>œZ¨´Ô<Ü+¼×9IÑ9IÐRTÔUˆFð
	XØ$*§K¡KØØØ*:Ð*FÑ&ÌDÏJÉJÐW[ÓL\ØØ'Ü)ð %0ó %÷ ˆHð ×Ñ 3Ò&Ü x×';Ñ';ÀXÇ]Á]ÔSÐSäÜ/°×0CÑ0CÓ0EÓFØØ 3Ø#ô	
ð 	
ðùô ×$Ñ$ò 	XÜ q§z¡z×'=Ñ'=ÀqÇzÁzÇÁÔWÐWûð	Xüs;   ‚.D±5C Á&CÁ'C Á+ADÃC ÃDÃ5DÄDÄDÚerror_messager\   c                 ó   — t        ||¬«      S )Nr[   )r   )rŠ   r.  r\   rÇ   s       r:   Úget_error_classzOCIChatConfig.get_error_classÇ  s   € Ü K¸ÔGÐGr<   )r0   N©NNNN)NNrº   )r?   )NNN)$rd   Ú
__module__Ú__qualname__Ú__doc__ÚpropertyÚboolr‹   r¸   ra   Úlistr¾   rb   rÆ   ÚtupleÚbytesrÍ   r(   rÚ   rÞ   r'   rè   r
  r#  ÚResponser*   ÚLiteLLMLoggingObjr  r
   r   r   r(  r-  ÚintÚHeadersr   r0  r‰   r<   r:   r‡   r‡   ø   sI  „ ÙGàð¨4ò ó ðó:BðxB°ð B¸¸c¹ó Bð.à ð.ð ð.ð ð	.ð
 ð.ð 
ó.ðl #Ø Ø"Ø#'ñ
àð
ð ð
ð ð	
ð
 ð
ð �t‘ð
ð �T‰zð
ð �t‘ð
ð ˜D‘[ð
ð 
ˆt�Uˆ{Ñ	ó
ð: #Ø#ñ&Kàð&Kð ð&Kð Ð'Ñ(ð	&Kð
 ð&Kð ð&Kð �t‘ð&Kð ˜‘*ð&Kð 
ó&Kð^ #ñ
8à˜‘*ð
8ð �t‘ð
8ð ð	
8ð
 ð
8ð ð
8ð �t‘ð
8ð 
ó
8ñD¨:ð DÈð DÐUXð DÐbfó DðLJ2àðJ2ð Ð'Ñ(ðJ2ð ð	J2ð
 ðJ2ð ðJ2ð 
óJ2ðn #Ø!%ñ#àð#ð —n‘nð#ð &ð	#ð
 'ð#ð ð#ð Ð'Ñ(ð#ð ð#ð ð#ð -ð#ð �t‘ð#ð ˜$‘;ð#ð 
ó#ñJ Óð 9=Ø!%Ø)-ñ$
àð$
ð !ð$
ð 'ð	$
ð
 ð$
ð ð$
ð ð$
ð ð$
ð Ð.Ñ.°Ñ5ð$
ð ˜$‘;ð$
ð   $™,ð$
ð 
ò$
ó ð$
ñL Óð 9=Ø!%Ø)-ñ$
àð$
ð !ð$
ð 'ð	$
ð
 ð$
ð ð$
ð ð$
ð ð$
ð Ð.Ñ.°Ñ5ð$
ð ˜$‘;ð$
ð   $™,ð$
ð 
ò$
ó ð$
ðLH¨Sð H¸sð HÈTÐTY×TaÑTaÑMað HÐfvô Hr<   r‡   c                   ó„   ‡ — e Zd ZdZ	 	 	 	 ddededededz  deded	ef   dz  d
eeef   dz  ddfˆ fd„Z	de
defd„Zˆ xZS )r  zLCustom stream wrapper that dispatches OCI SSE chunks to the correct handler.Nr   r/   r  r5   r¨   Ú	make_call.Ú_response_headersr0   c           	      óN   •— t         ‰| �  |||||||¬«       d| _        d| _        y )N)r   r/   r  r5   r¨   r?  r@  F)Úsuperr¸   Ú_cohere_tool_calls_emittedÚ_cohere_text_emitted)	rŠ   r   r/   r  r5   r¨   r?  r@  Ú	__class__s	           €r:   r¸   zOCIStreamWrapper.__init__Î  s@   ø€ ô 	‰ÑØ/ØØ#Ø 3Ø)ØØ/ð 	ô 	
ð +0ˆÔ'ð
 %*ˆÕ!r<   Úchunkc                 ó€  — t        |t        «      st        d|› �«      ‚|j                  d«      st        d|› �«      ‚	 t	        j
                  |dd  «      }|j                  d«      d	k(  rŸt        || j                  | j                  ¬
«      }| j                  s1|j                  D ]"  }t        |j                  dd «      €Œd| _
         n | j                  s2|j                  D ]#  }t        |j                  dd «      sŒd| _         |S  |S t        |«      S # t        j                  $ r}t        dd|› �¬«      ‚d }~ww xY w)NzChunk is not a string: rB   z#Chunk does not start with 'data:': é   iô  z Chunk cannot be parsed as JSON: r[   rú   ry   )Úprior_tool_calls_emittedÚprior_text_emittedÚ
tool_callsTrõ   )r`   ra   Ú
ValueErrorr7   r  ÚloadsÚJSONDecodeErrorr   r_   r   rC  rD  ÚchoicesÚgetattrÚdeltar   )rŠ   rF  Ú
dict_chunkr'  ÚresultÚchoices         r:   Úchunk_creatorzOCIStreamWrapper.chunk_creatorì  sI  € Ü˜%¤Ô%ÜÐ6°u°gÐ>Ó?Ð?Ø×Ñ Ô(ÜÐBÀ5À'ÐJÓKÐKð	Ü $§
¡
¨5°°¨9Ó 5ˆJð �>‰>˜+Ó&¨(Ò2Ü6ØØ)-×)HÑ)HØ#'×#<Ñ#<ôˆFð
 ×2Ò2Ø$Ÿn™nò �FÜ˜vŸ|™|¨\¸4Ó@ÑLØ:>˜Ô7Ùðð ×,Ò,Ø$Ÿn™nò �FÜ˜vŸ|™|¨Y¸Õ=Ø48˜Ô1ØØˆMð	ð ˆMÜ*¨:Ó6Ð6øô/ ×#Ñ#ò 	ÜØØ:¸1¸#Ð>ôð ûð	ús   ¿D ÄD=Ä(D8Ä8D=r1  )rd   r2  r3  r4  Úobjectra   r;  r   rb   r¸   r   r+   rU  Ú__classcell__)rE  s   @r:   r  r  Ë  s›   ø„ ÙVð +/Ø!%Ø26Ø6:ñ*à!ð*ð ð*ð 'ð	*ð
 ! 4™Zð*ð ð*ð ˜C ˜KÑ(¨4Ñ/ð*ð    V Ñ,¨tÑ3ð*ð 
õ*ð<7 3ð 7Ð+>÷ 7r<   r  )r   r.   r‡   r   r  r…   r   )Or4  r  Úcollections.abcr   r   r   Útypingr   r   r   r#  rÃ   Úlitellm.constantsr	   Ú(litellm.litellm_core_utils.logging_utilsr
   Ú,litellm.litellm_core_utils.streaming_handlerr   Ú)litellm.llms.base_llm.chat.transformationr   r   Ú&litellm.llms.custom_httpx.http_handlerr   r   r   r   r   Úlitellm.llms.oci.chat.coherer   r   r   r   r   Úlitellm.llms.oci.chat.genericr   r   r   r   Úlitellm.llms.oci.common_utilsr   r   r   r   r    r!   r"   Úlitellm.types.llms.ocir#   r$   r%   r&   r'   Úlitellm.types.llms.openair(   Úlitellm.types.utilsr)   r*   r+   Úlitellm.utilsr,   ÚtiktokenÚ*litellm.litellm_core_utils.litellm_loggingr-   Ú_LiteLLMLoggingObjr;  r.   Ú__annotations__ra   r6  r;   rK   rM   rb   ri   r€   r…   r‡   r  Ú__all__r‰   r<   r:   ú<module>rk     sT  ðò	ó ß =Ñ =ß ,Ñ ,ã ã Ý 9Ý IÝ Lß R÷õ ÷õ ÷ó ÷÷ ñ ÷õ õ 7÷ñ õ
 -áÛåXà*ÑàÐð "Ð �5Ó !ðE¨Sð E°Tó Eð(˜X c™]ð ¨x¸©}ó ð. M°#Ñ$6ð ¸=ÈÑ;Mó ð,¨Dð ,°Tó ,ð^,Z°ð ,Z¸jð ,ZÈTó ,Zð^ ð ¨ó ôPH�Jô PHôf?7Ð*ô ?7òD�r<   