Team Ai
Apppublic

Yash030/claude-code-proxy

sourceHugging Faceupdated 5mo agoView on Hugging Face
2likes
openai_compat.cpython-314.pyc178 linesDownload Raw Back to __pycache__
1+
2��jT����Rt^RIt^RIt^RIt^RIHt^RIHtHt^RI	H3t4^RIt^RIH
t
^RIHt^RIHtHtHtHtHtHt^RIHtHt^R	IHtHt^R5IHtHtH t ^RI!H"t"RR
lt#!RR]4t$R#)u�OpenAI-style chat base for :class:`OpenAIChatTransport` (NIM, etc.).6 7``AnthropicMessagesTransport``-based providers (OpenRouter, LM Studio, DeepSeek, …) live8in separate modules; do not list them as subclasses of this class.9N)�abstractmethod)�
AsyncIterator�Iterator)�Any)�logger)�AsyncOpenAI)�ContentType�HeuristicToolParser�10SSEBuilder�ThinkTagParser�append_request_id�map_stop_reason)�BaseProvider�ProviderConfig)�	map_error�.user_visible_message_for_mapped_provider_error)�ProviderModelInfo�extract_openai_model_ids�model_infos_from_ids)�GlobalRateLimiterc�t�V^8�dQhR\R\\\3,R\\,/#)��sse�tool_use�return)r11�dict�strrr)�formats"�BC:\Users\yashw\.claude\claude-code-free\providers\openai_compat.py�__annotate__r's0��,�,�	�,�#�C��H�~�,�
�c�]�,�c#�"�VPR4R8XdI\VPR4\4'd$VR,pVPR4RJdRVR&VP4Rjx�L12VPP4pVP
VRVR,VR,R	7x�VPVR13\P!VR,44x�VPV4x�R#L�5i)zLEmit SSE for one heuristic tool_use block (closes open text/thinking first).�name�Task�input�run_in_backgroundFNr�id)r&r"�input_json_delta)�get�14isinstancer�close_content_blocks�blocks�allocate_index�content_block_start�content_block_delta�json�dumps�content_block_stop)rr�15task_input�	block_idxs&&  r�_iter_heuristic_tool_use_sser4's�����|�|�F��v�%�*�X�\�\�'�5J�D�*Q�*Q��g�&�16��>�>�-�.�e�;�.3�J�*�+��'�'�)�)�)��17�18�)�)�+�I�19
�20!�21!����D�>�
�f�
�	"����22!�23!����24�25�8�G�$�%���26�27 �28 ��29+�+�*�s�A2C?�4C=�5B	C?c�Vaa�]tRt^?toRtR^dR^(/V3RlV3RllltV3RlRltV3RlR	ltV3R30lRltV3RlR
lt	]31R$V3RlRll4tV3RlRltV3RlRlt
V3RlRltV3RlRltV3RlRltV3RlRltR%RRRR/V3RlR llltV3R!lR"ltR#tVtV;t#)&�OpenAIChatTransportuEBase for OpenAI-compatible ``/chat/completions`` adapters (NIM, …).�nim_rate_limit�nim_max_concurrencyc�><�V^8�dQhRS[RS[RS[RS[RS[RS[/#)r�config�
provider_name�base_url�api_keyr7r8)rr�int)r�
__classdict__s"�rr� OpenAIChatTransport.__annotate__BsO���F9�F9��F9��	F9�32�F9��
F9��F9�!�F9r c
��<�\SV`V4W nW@nVP	R4VnRVn/VnVP4R8XdRpVP^,pRp	M Tp\WaP^,4pTp	\P!VP4VVPVV	^33R7VnR\P !VP"VP$VP"VP&R7RRR	R34R\P(!^dRR
R7/p35VP*'dVP*V36R&\P,!R/V37BVn\/VPVP38^\P !VP"VP$VP"VP&R7VPR7VnVP0VPVP&R#)�/N�zeni')�39rate_limit�rate_window�max_concurrency�
adaptive_rate�adaptive_min_rate�timeout��connect�read�write�	trust_envF�http2T�limitsi�g@)�max_keepalive_connections�max_connections�keepalive_expiry�proxy�r=r<�max_retriesrI�http_client�)�super�__init__�_provider_name�_api_key�rstrip�	_base_url�_http_client�
_client_cache�lowerrF�maxr�get_scoped_instancerE�_global_rate_limiter�httpx�Timeout�http_read_timeout�http_connect_timeout�http_write_timeout�LimitsrT�AsyncClientr�_client)�selfr:r;r<r=r7r8�effective_rate_limit�effective_max_concurrency�use_adaptive�http_client_args�	__class__s&&$$$$$    �rrZ�OpenAIChatTransport.__init__Bs����	���� �+���
�!����-��� ���57������ �E�)�#'� �(.�(>�(>��(B�%��L�#1� �(+�#�%;�%;�a�%?�)�%�*�L�$5�$I�$I����!�+��*�*�5�&� �
%40��!�
�u�}�}��(�(��3�3��-�-��/�/�	�
���T��e�l�l�*-� #�!$��41���<�<�<�(.����W�%�!�-�-�A�0@�A���"��M�M��^�^���M�M��(�(��3�3��-�-��/�/�	��)�)�42���-1�L�L����4�=�=�)r c�&<�V^8�dQhRS[RS[/#)rr=r)rr)rr?s"�rrr@�s�����3��;�r c��WP8Xd
VP#VPPV4pVeV#\	VVP43^\P!VPPVPPVPPVPPR7VPR7pW PV&V#)z4Return a cached OpenAI client for the given API key.rJrU)
r\rlr`r(rr^rerf�_configrgrhrir_)rmr=�clients&& r�_client_for_api_key�'OpenAIChatTransport._client_for_api_key�s����m�m�#��<�<���#�#�'�'��0�����M����^�^���M�M����.�.����9�9��\�\�3�3��l�l�5�5�	��)�)�44��'-���7�#��
r c�<�V^8�dQhRR/#)rrNrX)rr?s"�rrr@�s���"�"�t�"r c���"�\4p\VPP44F?p\	V4pW19dKVPV4VP
4GRjx�L45KA	R#L465i)zRelease HTTP client resources.N)�set�listr`�valuesr&�add�aclose)rm�seenrw�	client_ids&   r�cleanup�OpenAIChatTransport.cleanup�s\�������4�-�-�4�4�6�7�F��6�47�I�� ���H�H�Y���-�-�/�!�!�8�48
"�s�A(A7�*A5�+A7c�0<�V^8�dQhRS[S[,/#�rr)�	frozensetr)rr?s"�rrr@�s���G�G�	�2C�(D�Gr c��X"�VP4GRjx�L49p\VRR7#L5i)zLReturn model metadata from the provider's OpenAI-compatible models endpoint.N)�supports_thinking)�list_model_idsr)rm�	model_idss& r�list_model_infos�$OpenAIChatTransport.list_model_infos�s(����-�-�/�/�	�#�I��F�F�0�s�*�(�*c�0<�V^8�dQhRS[S[,/#r�)r�r)rr?s"�rrr@�s���T�T�i��n�Tr c��"�VPPP4GRjx�L50p\WPR7#L5i)zGReturn model ids from the provider's OpenAI-compatible models endpoint.N)r;)rl�modelsr}rr[)rm�payloads& rr��"OpenAIChatTransport.list_model_ids�s6������+�+�0�0�2�2��'��?R�?R�S�S�3�s�(A�A�ANc�:<�V^8�dQhRS[RS[R,RS[/#)r�request�thinking_enabledNr)r�boolr)rr?s"�rrr@�s.���E�E��E�.2�T�k�E�	
�Er c��R#)z6Build request body. Must be implemented by subclasses.NrX)rmr�r�s&&&r�_build_request_body�'OpenAIChatTransport._build_request_body�s�r c	�B<�V^8�dQhRS[RS[RS[RS[S[,/#)r�deltarr�r)rr51r�rr)rr?s"�rrr@�s1�������)��@D��	�#��r c��\R4#)zIHook for provider-specific reasoning (e.g. OpenRouter reasoning_details).rX)�iter)rmr�rr�s&&&$r�_handle_extra_reasoning�+OpenAIChatTransport._handle_extra_reasoning�s
���B�x�r c�:<�V^8�dQhRS[RS[RS[R,/#)r�error�bodyrN)�	Exceptionr)rr?s"�rrr@�s&�����Y��d��t�d�{�r c��R#)z6Return a modified request body for one retry, or None.NrX)rmr�r�s&&&r�_get_retry_request_body�+OpenAIChatTransport._get_retry_request_body�s��r c�<<�V^8�dQhRS[RS[S[S[3,/#)rr�r)r�tupler)rr?s"�rrr@�s$���&�&��&�%��T�	�2B�&r c	���"�VPP!VPPPP523/VBRRR^/BGRjx�L53pW!3#L \dxpTPY14pTfhTPP!TPPPP543/TBRRR^/BGRjx�L55pY$3uRp?#Rp?ii;i5i)z=Create a streaming chat completion, optionally retrying once.�streamTrVN)rd�execute_with_retryrl�chat�completions�creater�r�)rmr�r�r��56retry_bodys&&   r�_create_stream�"OpenAIChatTransport._create_stream�s����	&��4�4�G�G����!�!�-�-�4�4�������	��F��<��
���	&��5�5�e�B�J��!���4�4�G�G����!�!�-�-�4�4�������	���F��%�%��	&�sT�C!�AA�A�A�C!�A�C�'A$C�C�C�C�C!�C�C!c	�B<�V^8�dQhRS[RS[RS[RS[S[,/#)rr�tc_index�argsr)r57r>rr)rr?s"�rrr@�s1���2�2��2�),�2�47�2�	�#��2r c#�R"�V'gR#VPPPV4pVfR#VPR8XdJVPP	W#4pVe)VPV\P!V44x�R#VPW#4x�R#5i)zNEmit one argument fragment for a started tool block (Task buffer or raw JSON).Nr#)r+�tool_statesr(r"�buffer_task_args�emit_tool_deltar/r0)rmrr�r��state�parseds&&&&  r�_emit_tool_arg_delta�(OpenAIChatTransport._emit_tool_arg_delta�s�������58�59�&�&�*�*�8�4���=���:�:����Z�Z�0�0��@�F��!��)�)�(�D�J�J�v�4F�G�G���!�!�(�1�1�s�B%B'c�<<�V^8�dQhRS[RS[RS[S[,/#)r�tcrr)rr60rr)rr?s"�rrr@�s+���+G�+G�T�+G�61�+G�x��}�+Gr c#�:"�VPR^4pV^8d \VPP4pVPR/4pVPR4pVPRR4;'gRpVPR4e+VPP	W1PR44VeVPPW54VPPPV4pV'dVP'd
VPMR;'gVPR4pV'd
VPMR;'gRp	V'dVP'g�\T	;'gRP44p62V63'd�V'd\V4MR\P!42pT	;'gRP4;'gR	pVPW;V4x�VPPV,pVP'd.VPp
RVnVP!W#V
4Rjx�L64VPPPV4pV'gR#VeVP'gWVPP#V4pT	;'gRP4'gV;PV,
unR#VP!W#V4Rjx�L65R#L�L5i)66z6Process a single tool call delta and yield SSE events.�index�functionr"�	arguments�r&N�tool_�	tool_call)r(�lenr+r��set_stream_tool_id�register_tool_name�tool_idr"�startedr��stripr�uuid�uuid4�start_tool_block�pre_start_argsr��ensure_tool_state)rmr�rr��fn_delta�
incoming_namer�r��resolved_id�
resolved_name�name_okr��display_name�pres&&&           r�_process_tool_call�&OpenAIChatTransport._process_tool_call�sQ����6�6�'�1�%���a�<��3�:�:�1�1�2�H��6�6�*�b�)�� ���V�,�
��L�L��b�1�7�7�R�	�
�6�6�$�<�#��J�J�)�)�(�F�F�4�L�A��$��J�J�)�)�(�B��67�68�&�&�*�*�8�4��(-�%�-�-�-�u�}�}�T�69�70�b�f�f��O71��(-����"�;�;��
��E�M�M�M��M�/�/�R�6�6�8�9�G��.9�#�k�*��t�z�z�|�n�?U�� -� 3� 3��:�:�<�K�K����*�*�8�l�K�K��72�73�.�.�x�8���'�'�'��.�.�C�+-�E�(�#�8�8���L�L�L��74�75�&�&�*�*�8�4�����=��
�
�
��J�J�0�0��:�E�!�'�'�R�.�.�0�0��$�$�	�1�$���,�,�S�I�F�F�F�M�	G�s��A4L�7BL�L�L�*L�L�76L�$L�6
L�L�!L�)+L�L�-A.L�L�0L�
L�%#L�	L� 0L�L�L�Lc�6<�V^8�dQhRS[RS[S[,/#)rrr)r77rr)rr?s"�rrr@s���7�7�:�7�(�3�-�7r c#�z"�VPP4Fwr#VPW#4x�K	R#5i)z=Emit buffered Task args as a single JSON delta (best-effort).N)r+�flush_task_arg_buffersr�)rmr�78tool_index�outs&&  r�_flush_task_arg_buffers�+OpenAIChatTransport._flush_task_arg_bufferss0���"�z�z�@�@�B�O�J��%�%�j�6�6� C�s�9;�79request_idr�c�d<�V^8�dQhRS[RS[RS[R,RS[R,RS[S[,/#�rr��input_tokensr�Nr�r�rr>rr�r)rr?s"�rrr@sJ���
�
��
��
�80�$�J�
���+�

�81�s�	�
r c	��"�\P!VR7;_uu_4VPWW4R7Rjx�L82pV5x�KLD
RRR4R# +'giR#;i5i)z(Stream response in Anthropic SSE format.)r��r�N)r�
contextualize�_stream_response_impl)rmr�r�r�r��events&&&$$ r�stream_response�#OpenAIChatTransport.stream_responses[����
!�
!�Z�
8�
8�#�9�9��z� :� �
�
�e���
� �9�
8�
8�
8�s<� A)�A�A	�A83�A	�	A�A	�	A�84A)�A&	� 	A)c�d<�V^8�dQhRS[RS[RS[R,RS[R,RS[S[,/#r�r�)rr?s"�rrr@-sQ���o!�o!��o!��o!��$�J�	o!���+�
o!�85�s�	�o!r c
��"�VPpR\P!42p\VVPVVP86PR7pVPWR7pVPW4pV'dRV2MRp	\P!RVV	VPR4\VPR.44\VPR	.444\4p87\4pR88pR89p
VPP!4;_uu_4GR90jx�L91VP#45x�VP%V4GR92jx�L93wr�VR94jx�L95p\'VRR964'd
VP(p
VP*'gK=VP*^,pVP,pVfKbVP.'d$VP.p\P0!RW\4\'VR
R974pV'd9V'd1VP34FpV5x�K98	VP5V45x�VP7VVVR7FpV5x�K99	VP8'd�V100P;VP84F�pVP<\>P@8XdGV'gK,VP34FpV5x�K101	VP5VP845x�KhVP;VP84wppV'd1VPC4FpV5x�K102	VPEV45x�VFp\GVV4FpV5x�K103	K	K�	VPH'gEK)VPK4FpV5x�K104	VPHFipRVPLRVPNRRVPPPRRVPPPT//pVPWVV4FpV5x�K105	Kk	EK�EL�EL�EL�ED�EM, \XPZdh\\Ed	pTP_YYT4\aTTPR7p\b;QJd>RTPdPfPi44F'gKRM3	RM/!RTPdPfPi444pTPdPjR!8g;'gdTPdPlR!8g;'gCT;'g9\TPn4^8�;'g\TPp4^8�pT'd�\sT\tPv\tPx\XPz\tP|34'd�\P~!RTT4TP�4FpT5x�K106	TP�RTP�445x�TP�45x�R107p?R108R109R1104GR111jx�L112R113#\�TTTP114P�R7p\�TT4p\P!RT\=T4P�T	4TP�4FpT5x�K115	TPdP�4'dTP�T45x�MTP�T4FpT5x�K116	TP�R^45x�TP�45x�R117p?R118R119R1204GR121jx�L122R123#R124p?ii;iR125R126R1274GR128jx�L129M +GR130jx�L131'giM;iT132P�4p T 'd�T P<\>P@8XdFT'gR133p M:TP34FpT5x�K134	TP5T P845x�T 'dZT P<\>P�8Xd;TPC4FpT5x�K135	TPET P845x�TP�4Fp\GTT4FpT5x�K136	K	\b;QJd>RTPdPfPi44F'gKRM3	RM/!RTPdPfPi444pTPdPjR!8g;'g$TPdPlR!8g;'gTpT'g2TPC4FpT5x�K137	TPER45x�MxT'gqTP�P�4'gQTP�P�4'd1TPC4FpT5x�K138	TPER45x�TP�T4FpT5x�K139	TP�4FpT5x�K140	T
e\'T
RR1414MR142p!\sT!\�4'dT!p"MTP�4p"T
'dU\�T
R4'dCT
P�p#\sT#\�4'd!\P0!R TT#T#T,1434TP�\�T4T"45x�TP�45x�R144#5i)"z Shared streaming implementation.�msg_)�log_raw_eventsr�z request_id=r�z&{}_STREAM:{} model={} msgs={} tools={}�model�messages�toolsN�usagez{} finish_reason: {}�reasoning_contentr�r&r�r"r�)�rate_limiterc3�8"�TFqPx�K	R#5i�N�r���.0�ss& r�	<genexpr>�<OpenAIChatTransport._stream_response_impl.<locals>.<genexpr>�s���'�'F�!�I�I�'F���TFzF{}_STREAM: Transient error mid-stream. Faking max_tokens to resume. {}�145max_tokens)r;�read_timeout_sz,{}_STREAM: Emitting SSE error event for {}{}�end_turnc3�8"�TFqPx�K	R#5ir�r�r�s& rr�r��s���R�2Q�Q�y�y�2Q�r�� �completion_tokens�
prompt_tokensz-TOKEN_ESTIMATE: our={} provider={} diff={:+d}�����)Ur[r�r�r146r�rv�log_raw_sse_eventsr��_is_thinking_enabledr�infor(r�rr	rd�concurrency_slot�
message_startr��getattrr��choicesr��
finish_reason�debug�ensure_thinking_block�emit_thinking_deltar��content�feed�typer�THINKING�ensure_text_block�emit_text_deltar4�147tool_callsr*r�r&r�r"r�r��asyncio�CancelledErrorr��_log_stream_transport_errorr�anyr+r�r~�148text_index�thinking_index�_accumulated_text_parts�_accumulated_reasoning_partsr)re�RemoteProtocolError�ReadTimeout�TimeoutError�ConnectError�warning�close_all_blocks�
message_delta�estimate_output_tokens�message_stoprrgr�__name__�has_emitted_tool_block�emit_top_level_error�149emit_error�flush�TEXT�accumulated_textr��accumulated_reasoningr�r>�hasattrrr
)$rmr�r�r�r��tag�150message_idrr��req_tag�think_parser�heuristic_parserr�151usage_infor��chunk�choicer��	reasoningr��part�
filtered_text�detected_toolsrr��tc_info�e�mapped_e�has_started_tool�has_content_blocks�base_message�
error_message�	remaining�152completion�
output_tokens�provider_inputs$&&&&$                               rr��)OpenAIChatTransport._stream_response_impl-s	����!�!���D�J�J�L�>�*�153����M�M���<�<�:�:�	154���'�'��'�S���4�4�W�O��1;�L���-������4����H�H�W�������R�(�)������"�%�&�
	155�&�'��.�0���
��156��,�,�=�=�?�?�?�G
��'�'�)�)�%)�%8�%8��%>�>���#)�F,�F,�%��u�g�t�4�4�%*�[�[�157� �=�=�=� �"�]�]�1�-�F�"�L�L�E��}� ��+�+�+�(.�(<�(<�
����%;�S�P�!(��/B�D� I�I�'�I�%(�%>�%>�%@�E�"'�K�&A�!�5�5�i�@�@�"&�!=�!=���)9�">�"��158$��"��}�}�}�$0�$5�$5�e�m�m�$D�D�#�y�y�K�,@�,@�@�'7�$,�-0�-F�-F�-H�E�*/�K�.I�&)�&=�&=�d�l�l�&K� K�@P�@U�@U�$(�L�L�A"� =�
�~�$1�14�1F�1F�1H��.3��2I�*-�*=�*=�m�*L�$L�0>�H�1M�(+�X�2&��/4��2&�1?�#%E�0�'�'�'�%(�%=�%=�%?�E�"'�K�&@�"'�"2�"2�B� '���� $�b�e�e� *�$*�B�K�K�,<�,<�$/����1F�1F�-"�'�G�*.�)@�)@��#�)N��&+��*O�#3�A@� ?�F,�6��P�)�)�
���:
��0�0��q�A�$�Q�T�5N�5N�O��#&�3�'�'*�z�z�'=�'=�'D�'D�'F�'�3�3�3�'�'*�z�z�'=�'=�'D�'D�'F�'�$� ��J�J�)�)�R�/�A�A��z�z�0�0�B�6�A�A�'�A�A��3�6�6�7�!�;�A�A��3�;�;�<�q�@�#�&�*���1�1��)�)��,�,��*�*�	�+�+��N�N�`����159"%�!5�!5�!7��#��"8��+�+�L�#�:T�:T�:V�W�W��*�*�,�,��_@�?�?�b N��"%�#'�<�<�#A�#A� ��160!2�,�161� K�
����B����G�$�$��	�!�1�1�3�E��K�4��:�:�4�4�6�6��2�2�=�A�A�!$���
�!>��#��"?��'�'�162�A�6�6��&�&�(�(��Q@�?�?��\:
��]@�?�?�?�?�?��V!�&�&�(�	���~�~��!5�!5�5�'� $�I�!$�!:�!:�!<��#��"=��1�1�)�2C�2C�D�D��Y�^�^�{�/?�/?�?� �2�2�4�E��K�5��)�)�)�*;�*;�<�<�(�.�.�0�H�5�c�8�D����E�1��3�R�#�*�*�2H�2H�2O�2O�2Q�R�3�3�3�R�#�*�*�2H�2H�2O�2O�2Q�R�R���J�J�!�!�R�'�
 �
 ��z�z�(�(�B�.�
 �
 ��	�163"��.�.�0����1��%�%�c�*�*� ��(�(�.�.�0�0��)�)�/�/�1�1�164�.�.�0����1��%�%�c�*�*��1�1�#�6�E��K�7��)�)�+�E��K�,�165�%�
�J� 3�T�:��	�166�j�#�&�&�&�M��6�6�8�M��'�*�o�>�>�'�5�5�N��.�#�.�.����C� �"�"�\�1�	�����
� >�
�N�N���� � �s��Dk;� P�!k;�$]"�&'P$�
P�P$�P �P167�P �2P$�8P$�168?P$�169A!P$�,AP$�1A#P$�A$P$�?BP$�k;�P$�P � P$�"]"�$]
�]
�A']�/A]� ]�'	]�1]� ]�2B8]�*]"�.k;�9X<�:k;�B]�A]�1]"�5k;�]�k;�]
�
]"�k;�]�k;�"];	�(]+�)170];	�4];	�6k;�&k;�=Ak;�Bk;�3k;�Ak;�" k;�171k;�8k;�k;�'k;�B,k;�4Bk;)r\r^rlr`rdr_r[r�)�)r+�172__module__�__qualname__�__firstlineno__�__doc__rZrxr�r�r�rr�r�r�r�r�r�r�r�r��__static_attributes__�__classdictcell__�
__classcell__)rrr?s@@rr6r6?s�����O�F9�"�F9�$&�F9�F9�P��,"�"�G�G�T�T�173�E�E��E�174����&�&�.2�2� +G�+G�Z7�7�175
�176"&�
�)-�

�
�o!�o!�o!r r6)%rPrr/r��abcr�collections.abcrr�typingrre�logurur�openair�core.anthropicrr	r177rrr
�providers.baserr�providers.error_mappingrr�providers.model_listingrrr�providers.rate_limitrr4r6rXr r�<module>r^s]�������3�������8����1783�,�0]!�,�]!r