Ë
    uPêj  ã                   óÂ   — 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
  G d„ de j                  «      Zded	ee   fd
„Zde
d	efd„Zde	ded	e	fd„Zdedz  d	efd„Zy)é    N)ÚPathLike)ÚFinal)Úverbose_logger)Ú	FileTypesÚOpenAIFilesPurposec                   ó.   ‡ — e Zd Zddededefˆ fd„Zˆ xZS )ÚInMemoryFileÚcontentÚnameÚcontent_typec                 ó@   •— t         ‰| �  |«       || _        || _        y ©N)ÚsuperÚ__init__r   r   )Úselfr
   r   r   Ú	__class__s       €úe/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/router_utils/batch_utils.pyr   zInMemoryFile.__init__   s   ø€ Ü‰Ñ˜Ô!ØˆŒ	Ø(ˆÕó    )úapplication/jsonl)Ú__name__Ú
__module__Ú__qualname__ÚbytesÚstrr   Ú__classcell__)r   s   @r   r	   r	   
   s"   ø„ ñ) ð )¨Sð )À÷ )ñ )r   r	   r
   Úreturnc                 óÎ  — g }d}| D ]D  }||z  }|dk(  sŒ	 t        j                  |j                  «       «      }|j                  |«       d}ŒF |j                  «       r7	 t        j                  |j                  «       «      }|j                  |«       |S |S # t         j                  $ r Y Œ¥w xY w# t         j                  $ r!}t        j                  d|dd |«       |‚d}~ww xY w)ab  
    Parse JSONL content that may contain JSON objects with embedded newlines in string values.

    Unlike splitlines(), this function properly handles cases where JSON string values
    contain literal newline characters, which would otherwise break simple line-based parsing.

    Args:
        content: The JSONL file content as a string

    Returns:
        List of parsed JSON objects

    Example:
        >>> content = '{"id":1,"msg":"Line 1\nLine 2"}\n{"id":2,"msg":"test"}'
        >>> parse_jsonl_with_embedded_newlines(content)
        [{"id":1,"msg":"Line 1\nLine 2"}, {"id":2,"msg":"test"}]
    Ú ú
z,error parsing final buffer: %s..., error: %sNéd   )ÚjsonÚloadsÚstripÚappendÚJSONDecodeErrorr   Úerror)r
   Újson_objectsÚbufferÚcharÚjson_objectÚes         r   Ú"parse_jsonl_with_embedded_newlinesr,      sì   € ð$ €LØ€Fàò 
ˆØ�$‰ˆØ�4‹<ðÜ"Ÿj™j¨¯©«Ó8�Ø×#Ñ# KÔ0Ø‘ð
ð ‡|�|„~ð	ÜŸ*™* V§\¡\£^Ó4ˆKØ×Ñ Ô,ð
 Ðˆ<Ðøô ×'Ñ'ò áðûô ×#Ñ#ò 	Ü× Ñ Ð!OÐQWÐX\ÐY\ÐQ]Ð_`ÔaØˆGûð	ús)   –6BÁ4B0 ÂB-Â,B-Â0C$ÃCÃC$Úpurposec                 ó   — | dk(  ryy)zÇ
    Check if the model name should be replaced in the JSONL file for the deployment model name.

    Azure raises an error on create batch if the model name for deployment is not in the .jsonl.
    ÚbatchTF© )r-   s    r   Úshould_replace_model_in_jsonlr1   >   s   € ð �'ÒØØr   Úfile_contentÚnew_model_namec                 óÐ  — 	 t        | t        «      r| S t        | t        «      r| d   n| }t        |d«      r!t        |d«      r	 |j	                  d«       |}n]t        |t        t        f«      rt        j                  t        |«      «      }n(t        |t        «      rt        j                  |«      }n| S t        ddd¬«      }d	}d
}|D ]Î  }|t        |t        t        f«      r|j                  d«      n|z  }|j                  «       }|sd
}ŒD	 t!        j"                  |«      }	t        |	t&        «      r't        |	j)                  d«      t&        «      r||	d   d<   |j+                  |rdnd
t!        j,                  |	«      z   j/                  d«      «       d}d
}ŒÐ |j                  «       r;t1        j2                  d|d d «       t        |d«      r	 |j	                  d«       | S | S |s| S |j	                  d«       |S # t
        t        f$ r Y �Œ¹w xY w# t         j$                  $ r Y �Œ_w xY w# t
        t        f$ r Y | S w xY w# t         j$                  t4        t6        f$ r | cY S w xY w)Né   ÚreadÚseekr   r   zmodified_file.jsonlr   )r   r   Fr   zutf-8ÚbodyÚmodelr   Tz+error parsing trailing batch content: %s...r    )Ú
isinstancer   ÚtupleÚhasattrr7   ÚOSErrorÚ
ValueErrorr   Ú	bytearrayÚioÚBytesIOr   ÚStringIOr	   Údecoder#   r!   r"   r%   ÚdictÚgetÚwriteÚdumpsÚencoder   r&   ÚUnicodeDecodeErrorÚ	TypeError)
r2   r3   ÚsourceÚ	line_iterÚoutputÚ	wrote_anyr(   Úraw_lineÚstrippedr*   s
             r   Úreplace_model_in_jsonlrQ   K   sR  € ðIä�l¤HÔ-ØÐô
 ,6°lÄEÔ+J˜ QšÐP\ˆÜ�6˜6Ô"Ü�v˜vÔ&ðØ—K‘K ”Nð !'‰IÜ˜¤¬	Ð 2Ô3ÜŸ
™
¤5¨£=Ó1‰IÜ˜¤Ô$ÜŸ™ FÓ+‰IàÐô % SÐ/DÐSfÔgˆØˆ	ØˆØ!ò 	ˆHØ´*¸XÌÌyÐGYÔ2Z�h—o‘o gÔ.Ð`hÑhˆFØ—|‘|“~ˆHÙØ�ØðÜ"Ÿj™j¨Ó2�ô ˜+¤tÔ,´¸K¿O¹OÈFÓ<SÔUYÔ1ZØ/=�˜FÑ# GÑ,Ø�L‰L¡9™4°"¼¿
¹
À;Ó8OÑO×WÑWÐX_Ó`ÔaØˆIØ‰Fð	ð  �<‰<Œ>ô
 × Ñ Ð!NÐPVÐW[ÐX[ÐP\Ô]Ü�v˜vÔ&ðØ—K‘K ”Nð  Ð�<Ðñ ØÐà�‰�AŒØˆøôq  ¤Ð,ò Úðûô< ×'Ñ'ò Úðûô"  ¤Ð,ò ØØÐðûô × Ñ Ô"4´iÐ@ò àÒðús�   ‚I ”/I ÁG< ÁAI Â5AI ÄHÄ#B,I ÇH, Ç!I Ç#I Ç%I Ç)I Ç<HÈI ÈHÈI ÈH)È%I È(H)È)I È,H?È;I È>H?È?I É I%É$I%Úfunction_namec                 óN   ‡ — t        g d¢«      }‰ rt        ˆ fd„|D «       «      ryy)zâ
    Helper to return what the "metadata" field should be called in the request data

    For all /thread or /assistant endpoints we need to call this "litellm_metadata"

    For ALL other endpoints we call this "metadata
    )r/   Úgeneric_api_callÚ_acreate_batchÚfileÚ!_ageneric_api_call_with_fallbacksc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr   r0   )Ú.0ÚmethodrR   s     €r   ú	<genexpr>z5_get_router_metadata_variable_name.<locals>.<genexpr>©   s   øè ø€ Òi¸˜V }Ô4Ñiùs   ƒÚlitellm_metadataÚmetadata)ÚsetÚany)rR   Ú%ROUTER_METHODS_USING_LITELLM_METADATAs   ` r   Ú"_get_router_metadata_variable_namera   ˜   s.   ø€ ô 47ò	
ó4Ð)ñ œÓiÐChÔiÔiØ!àr   )r@   r!   Úosr   Útypingr   Úlitellm._loggingr   Úlitellm.types.llms.openair   r   rA   r	   r   ÚlistrD   r,   Úboolr1   rQ   ra   r0   r   r   ú<module>rh      sŠ   ðÛ 	Û Ý Ý å +ß Cô)�2—:‘:ô )ð*°ð *¸¸T¹
ó *ðZ
Øð
à	ó
ðJ¨ð JÀCð JÈIó JðZ°c¸D±jð ÀSô r   