Team Ai
Apppublic

Yash030/claude-code-proxy

sourceHugging Faceupdated 5mo agoView on Hugging Face
2likes
services.cpython-314.pyc98 linesDownload Raw Back to __pycache__
1+
2nj�>���Rt^RIHt^RIt^RIt^RIHtHt^RIH	t	^RI3HtHt^RI
Ht^RIHt^RIHt^R	IHtHt^R4IHtHt^RIHt^RIHt^R
IHtHtH t H!t!^RI"H#t#H$t$^RI%H&t&H't'^RI(H)t)^RI*H+t+^RI,H-t-^RI.H/t/H0t0]]1]	,]2]1]	,,R,]1]	,R,.]33,t4]]2.]3,t5]6!0R!m4t7RRlt8RRlt9RR/RRllt:RRlt;RRlt<!RR 4t=R#)"z3Application services for the Claude-compatible API.)�annotationsN)�
AsyncIterator�Callable)�Any)�
HTTPException�Request)�StreamingResponse)�logger)�Settings)�get_token_count�get_user_facing_error_message)�ANTHROPIC_SSE_RESPONSE_HEADERS�format_sse_event)�SessionTracker)�BaseProvider)�InvalidRequestError�OverloadedError�
ProviderError�RateLimitError)�ModelRouter�
ResolvedModel)�MessagesRequest�TokenCountRequest)�TokenCountResponse)�try_optimizations)�WebFetchEgressPolicy)�is_web_server_tool_request�&openai_chat_upstream_server_tool_errorc� �V^8�dQhRRRR/#)��body�AsyncIterator[str]�returnr�)�formats"�7C:\Users\yashw\.claude\claude-code-free\api\services.py�__annotate__r&,s����5����c�&�\VR\R7#)zDReturn a :class:`StreamingResponse` for Anthropic-style SSE streams.ztext/event-stream)�6media_type�headers)rr
)r s&r%� anthropic_sse_streaming_responser+,s����&�.��r'c� �V^8�dQhRRRR/#)r�_exc�
BaseExceptionr"�intr#)r$s"r%r&r&7s����
��#�r'c��R#)zHHTTP status for uncaught non-provider failures (stable client contract).i�r#)r-s&r%�-_http_status_for_unexpected_service_exceptionr17s��r'�7request_idc8�,�V^8�dQhRRRRRRRRR	R9/#)r�settingsr10�excr.�context�strr2�11str | Noner"�Noner#)r$s"r%r&r&<sA��D�D��D�	�D��	D�12�D�13�
Dr'c��VP'd`Ve\P!RW#V4M\P!RW!4\P!\P!44R#Ve/\P!RVV\V4P4R#\P!RV\V4P4R#)zJLog service-layer failures without echoing exception text unless opted in.Nz{} request_id={}: {}z{}: {}z{} request_id={} exc_type={}z{} exc_type={})�log_api_error_tracebacksr	�error�	traceback�14format_exc�type�__name__)r4r5r6r2s&&$$r%�!_log_unexpected_service_exceptionrA<s����(�(�(��!��L�L�/��c�J��L�L��7�0����Y�)�)�+�,�������*�����I���		15�	���%�w��S�	�0B�0B�Cr'c� �V^8�dQhRRRR/#)r�messagesz	list[Any]r"r9r#)r$s"r%r&r&Vs��>�>�)�>��>r'c�,�V'g\R4hR#)zmessages cannot be emptyN)r)rCs&r%�_require_non_empty_messagesrEVs���!�"<�=�=�r'c� �V^8�dQhRRRR/#)r�requestrr"r8r#)r$s"r%r&r&[s����G��16�r'c��VPPR4pV'd'VPR4^,P4#VPPR4pV'dV#VPPR4pV'dV#VPPR4pV'dVPP17#R#)zMExtract client IP from gateway headers or return None for direct connections.zX-Forwarded-For�,z	X-Real-IPzX-Client-IP�ViaN)r*�get�split�strip�client�host)rG�	forwarded�real_ip�	client_ip�vias&    r%�_get_client_iprT[s������#�#�$5�6�I�����s�#�A�&�,�,�.�.��o�o�!�!�+�.�G�������#�#�M�2�I����18�/�/�19�20�e�21$�C�22��~�~�"�"�"�r'c�j�]tRt^mtRtR]3RRlltRRltRRltR	R23lt	RRlt24R
RltRtR#)�ClaudeProxyServicez>Coordinate request optimization, model routing, and providers.Nc�(�V^8�dQhRRRRRRRR/#)	rr4r25�provider_getter�ProviderGetter�model_routerzModelRouter | None�
token_counter�TokenCounterr#)r$s"r%r&�ClaudeProxyService.__annotate__ps2��>�>��>�(�>�)�	>�26$�>r'c	��WnW nT;'g\V4VnW@n\27P!4VnR#�N)�	_settings�_provider_getterr�
_model_router�_token_counterr�get_instance�_session_tracker)�selfr4rXrZr[s&&&&&r%�__init__�ClaudeProxyService.__init__ps;��"�� /��)�B�B�[��-B���+�� .� ;� ;� =��r'c�$�V^8�dQhRRRRRR/#)rrGr�request_datarr"r7r#)r$s"r%r&r]}s"����w��o��RU�r'c
�.�\V4pVfR#RV2#)z:Extract or generate a session ID for gateway clients only.�direct�gateway_)rT)rfrGrj�ips&&& r%�_get_session_id�"ClaudeProxyService._get_session_id}s$���G�
$��
�:���"���r'c�$�V^8�dQhRRRRRR/#)rrGrrjrr"�objectr#)r$s"r%r&r]�s"����g��_��QW�r'c
���\VP4VPPVP4pV'g\RVPR24h\
V4^8�d\VPWV44#VPW^,V4# \dh\d>p\TPTRR7\\T4\!T4R7ThRp?ii;i)zGCreate a message response or streaming response with optional failover.z$No configured models available for '�'�CREATE_MESSAGE_ERROR)r6��status_code�detailN)rErCrb�resolve_candidates�modelr�lenr+�_stream_with_fallbacks�_create_single_messager�	ExceptionrAr`rr1r)rfrGrj�28candidates�es&&&  r%�create_message�!ClaudeProxyService.create_message�s���	�'��(=�(=�>��+�+�>�>�|�?Q�?Q�R�J��)�:�<�;M�;M�:N�a�P���29�:���"�7��/�/��\�R���30�.�.�w�1�
�|�T�T���	���	�-�����+A�
� �I�!�L�4�Q�7���
��		�s$�BB!�B!�!C4�6C4�78C/�/C4c�(�V^8�dQhRRRRRRRR/#)	rrGr�resolvedrrjrr"rrr#)r$s"r%r&r]�s2��D31�D32��D33�*7�D34�GV�D35�	�D36r'c	
��VPRR7pVPVnVP\9d1\VVPPR7pVe\V4hVPP'd�\V4'd�^RI37HpVPVPVPVP4p\ P"!R4\%VPP&VPP)4R7p\+V!VVVVPP,R74#\/W@P4p	V	eV	#VP1VP4p38V39P3VVP4R7VP7W4pVP8P;W�P4R	\<P>!4P@R40,2p\ P"!RVVP\CVP44VPVPVPVP4p\+V41PEVVVVP4R74#)
z7Create a single message response from a resolved model.T��deep)�web_tools_enabled)�stream_web_server_tool_responsez0Optimization: Handling Anthropic web server tool)�allow_private_network_targets�allowed_schemes)�input_tokens�web_fetch_egress�verbose_client_errors��thinking_enabled�req_�N�Nz/API_REQUEST: request_id={} model={} messages={}�r�r2r�)#�42model_copy�provider_modelrz�provider_id�_OPENAI_CHAT_UPSTREAM_IDSrr`�enable_web_server_toolsrr�web_tools.streamingr�rcrC�system�toolsr	�infor� web_fetch_allow_private_networks�web_fetch_allowed_scheme_setr+r;rra�preflight_streamr�rore�track_request_sync�uuid�uuid4�hexr{�stream_response)
rfrGr�rj�routed_request�tool_errr�r��egress�	optimized�provider�43session_idr2s
&&&&         r%r}�)ClaudeProxyService._create_single_message�s6��&�0�0�d�0�;��'�6�6������#<�<�=��"&�.�.�"H�"H��H��#�)�(�3�3��>�>�1�1�1�6P��744�745�
M��.�.��'�'��)>�)>��@T�@T��L�
�K�K�J�K�)�.2�n�n�.]�.]� $��� K� K� M��F�4�/�"�!-�%+�*.�.�.�*Q�*Q�	��
�&�n�n�n�E�	�� ����(�(��)=�)=�>���!�!��%�6�6�	"�	46�47�)�)�'�@�48����0�0��=Q�=Q�R��D�J�J�L�,�,�S�1�2�3�49����=��� � ���'�'�(�		50��*�*��#�#�^�%:�%:�N�<P�<P�51��0��$�$��)�%�!)�!:�!:�	
%�
�52�	53r'c�(�V^8�dQhRRRRRRRR/#)	rrGrrzlist[ResolvedModel]rjrr"r!r#)r$s"r%r&r]�s8��I=�I=��I=�(�I=�&�	I=�5455�I=r'c
�a"�Rp\V4EF#wrV^RIHpVPVP4pVP4'd@VPR8wd/\P!RVP4\R4pK}VPVP4'g/\P!RVP4\R4pK�VPVP4p	VPRR	7p56VPV57nV	PV58VP R597VP#W4pVP$P'W�P4R\(P*!4P,R,2p\P.!R
V^,\1V4VVPVP4VP3V60P4V61P6V62P84p
V	P;V63V
VVP R7Rjx�L64pV5x�K	V'd\KV4MRp\SRRRRRRRRV2//45x�V'dVh\UR4hLRDSR# \<\>3dVp\P!RTPTP@4XPCTP4TpRp?EK�Rp?i\Dd_p\P!RTP\GT4PH4XPCTP4TpRp?EK:Rp?i\d�p\KT4PM4o\N;QJdT3RlR4F'gKRM	RM!T3RlR44pT'd[\P!RTP\GT4PHT4XPCTP4TpRp?EK�\PP!RTPT4TpRp?EK(Rp?ii;i5i)z:Iterate through candidates until one succeeds or all fail.N)�GlobalRateLimiter�zenzFProvider '{}' is currently rate limited, skipping to next candidate...zRate limitedz@Provider '{}' has recent failures, skipping to next candidate...zRecent failuresTr�r�r�r�zEAPI_REQUEST (auto fallback {}/{}): request_id={} provider={} model={}r�zJProvider '{}' is rate limited or overloaded ({}). Trying next candidate...z6Provider '{}' timed out ({}). Trying next candidate...c3�.<"�TF65pVS9x�K	R#5ir_r#)�.0�kw�	error_strs& �r%�	<genexpr>�<ClaudeProxyService._stream_with_fallbacks.<locals>.<genexpr>Js ����66#����)�O��s�FzLProvider '{}' failed with transient error ({}): {}. Trying next candidate...zHProvider '{}' failed with unexpected error: {}. Trying next candidate...zNo candidates succeededr<r?�	api_error�messagez All fallback candidates failed: )�timeout�67connection�refused�reset�unavailable�service)+�	enumerate�providers.rate_limitr��get_scoped_instancer��68is_blockedr	�warningr~�69is_healthy�provider_model_refrar�r�rzr�r�rorer�r�r�r�r�r{rcrCr�r�r�rrrw�record_failure�TimeoutErrorr?r@r7�lower�anyr<rr)rfrGrrj�last_exc�ir�r��limiterr�r�r�r2r��eventr��is_transient�err_msgr�s&&&&              @r%r|�)ClaudeProxyService._stream_with_fallbacks�s�����&*��$�Z�0�K�A�p
�B�+�?�?��@T�@T�U���%�%�'�'�H�,@�,@�E�,I��N�N�`� �,�,�� )��8�H���)�)�(�*E�*E�F�F��N�N�Z� �3�3�� )�):�;�H���0�0��1E�1E�F��!-�!8�!8�d�!8�!C��'/�'>�'>��$��)�)�"�%-�%>�%>�*��70"�1�1�'�H�71��%�%�8�8�� 4� 4�� $�D�J�J�L�$4�$4�S�$9�#:�;�72����[���E��73�O���(�(��+�+�
� $�2�2�"�+�+�^�-B�-B�N�DX�DX� ��74$,�#;�#;�"�!-�)�%-�%>�%>�	$<�$� � �%� �K�u1�f$,�#�h�-�1J��������K��!A�'��K��
�	75�		76���N�!�";�<�<�Y �$���"�O�4�
����`��(�(��M�M��77�&�&�x�'B�'B�C������	
����L��(�(���G�$�$��78�&�&�x�'B�'B�C������
���F�L�L�N�	�"�s�79#��80#�s�s�s�81#��82#�83 �� ��N�N�f� �,�,��Q��(�(��	��*�*�8�+F�+F�G� �H�����^��(�(���84����?
�s��Q�A4J�Q� J�/,J�Q�E	J�&I?�*I=�+I?�.	J�7	Q�<Q�=I?�?J�Q�P>�A	K$�Q�$P>�1P>�2AM�Q�P>�P>�8P9�P9�4AP9�Q�$P9�2Q�9P>�>Qc� �V^8�dQhRRRR/#)rrjrr"rr#)r$s"r%r&r]ws����):��?Q�r'c85
�,�R\P!4PR,2p\P!VR7;_uu_4\VP4VPPV4pVPVPPVPPVPP4p\P!RVVPP\VPP4V4\!VR7uuRRR4# \"dh\$d?p\'TP(TRTR7\+\-T4\/T4R	7ThRp?ii;i +'giR#;i)86zCCount tokens for a request after applying configured model routing.r�r�)r2z@COUNT_TOKENS: request_id={} model={} messages={} input_tokens={})r�N�COUNT_TOKENS_ERROR)r6r2rv)r�r�r�r	�
contextualizerErCrb�resolve_token_count_requestrcrGr�r�r�rzr{rrr~rAr`rr1r)rfrjr2�routed�tokensr�s&&    r%�count_tokens�ClaudeProxyService.count_tokensws<���D�J�J�L�,�,�S�1�2�3�87�
�
!�
!�Z�
8�
8�
�+�L�,A�,A�B��+�+�G�G��U���,�,��N�N�+�+�V�^�^�-B�-B�F�N�N�DX�DX������V���N�N�(�(�����/�/�0���*�v�>�9�
8��!�
���88
�1��N�N��0�)�	�$� M�a� P�8��;�����89
��#9�
8�
8�s1�	F�CD+�+E?�E?�9E:�:E?�?F�F	)rbrarer`rc)
r@�90__module__�__qualname__�__firstlineno__�__doc__rrgror�r}r|r��__static_attributes__r#r'r%rVrVms4��H�,0�&5�>���>D91�LI=�V�r'rV>�groq�cerebras�92nvidia_nim)>r��93__future__rr=r��collections.abcrr�typingr�fastapirr�fastapi.responsesr�logurur	�config.settingsr94�core.anthropicrr�core.anthropic.sser
r�core.session_trackerr�providers.baser�providers.exceptionsrrrrrZrr�models.anthropicrr�models.responsesr�optimization_handlersr�web_tools.egressr�web_tools.requestrr�listr7r/r\rY�	frozensetr�r+r1rArErTrVr#r'r%�<module>r�s���9�"���3��*�/��$�I�O�/�'���5�@�0�4�2��95��c��C�$�s�)�O�d�$:�D��I��<L�M�s�R�S���3�%��-�.��&�&H�I����96D�97"�D�4>�98�$h�hr'