CoolFace
Apppublic

q121/01

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
main.cpython-39.pyc58 linesDownload Raw Back to __pycache__
1a

2���gp'�@sHddlmZmZmZmZmZddlmZmZddl	m3Z4mZmZm
Z
ddlmZddlmZmZmZddlZddlZddlZddlZddlZddlmZddlZe�d	�Zej�d5d�� �dkZ!e�"e!r�ej!nej#�e�$e!s�d
nd�Z%e�&ej'�Z(e(�)e%�e�*e(�dD]Z+e�e+��"ej,��qe-e-d�dd�Z.dd�Z/e/e_0e�Z1ej�dd��2d�a3t3�sle4d��ej�dd�Z5e6ej�dd��Z7e6ej�dd��Z8ga9dd �Z:d!d"�Z;e1�<d#�d$d%��Z=e1jd&e
d'�d(d)��Z>ed*�d+d,�Z?e6eed-e@eAd.�d/d0�ZBe1jCd1ed'�ee?�fe7edd2�d3d4��ZDe1�EeF�eeFd5�d6d7��ZGdS)8�)�FastAPI�
HTTPException�Request�Depends�status)�JSONResponse�StreamingResponse�)�ChatCompletionRequest�ChatCompletionResponse�
ErrorResponse�	ModelList)�GeminiClient)�handle_gemini_error�protect_from_abuse�test_api_keyN)�LiteralZ8gemini_app�DEBUG�false�truezC[%(key)s]-%(request_type)s-[%(model)s]-%(status_code)s: %(message)szt%(asctime)s - %(levelname)s - [%(key)s]-%(request_type)s-[%(model)s]-%(status_code)s-%(message)s - %(error_message)s)�uvicornzuvicorn.accessz
uvicorn.error)�message�returncCsTd|��vrdSd|��vr dSd|��vr0dSd|��vr@dSd	|��vrPd9S|S)Nzquota exceededuAPI 密钥配额已用尽zinvalid argumentu无效参数zinternal server erroru服务器内部错误zservice unavailableu服务不可用Zblockedu请求被阻止)�lower)r�r�D:\gemini\app\main.py�translate_errorsrcCsft|t�rt�|||�dStt|��}ddddts8dn|d�}tjd|tsRdn|||f|d�dS)N�N/A���key�request_type�model�status_code�
error_messageu未捕获的异常: %s��exc_info�extra)	�10issubclass�KeyboardInterrupt�sys�__excepthook__r�strr�logger�error)�exc_type�	exc_value�
exc_tracebackr$�	log_extrarrr�handle_exception&s11r3ZGEMINI_API_KEYSz+111,AIzaSyCnmiWgVV5El2JAcWbny7HeSaWJg8PrsRk�,u&请设置 GEMINI_API_KEYS 环境变量�PASSWORDZ123�MAX_REQUESTS_PER_MINUTEZ30�MAX_REQUESTS_PER_DAY_PER_IPZ600cCstS)u获取 API 密钥)�api_key_stack_globalrrrr�get_api_key_stack<sr9c	�srg}tD]d}t|�IdH}|r"dnd}tjd|dd��d|�d�|dd�dddd	d12�d�|r|�|�q|S)Nu有效u无效zAPI Key �13z... �.�startuprrr�r')�API_KEYSrr-�info�append)�available_keysr Zis_validZ14status_msgrrr�15check_keys@s8rBr<c�s�tjddddddd�d�t�IdH}|sLtjddddddd�d�td��|d}t�|�}d	d16�|D�t_tjd|dd��d
�|dd�ddddd�d�|at�	�a17t�t18�tjdt
t���dddddd�d�dS)NzStarting Gemini API proxy...rr<rrr=u没有可用的 API 密钥!rcSsg|]}|dd��qS)�Nr��.0r"rrr�19<listcomp>Y�z!startup_event.<locals>.<listcomp>z#Available models loaded using key: r:z...u可用 API 密钥数量:)r-r?rBr.�20ValueErrorrZlist_available_models�AVAILABLE_MODELSr>�copyr8�random�shuffle�len)rAZfirst_valid_keyZ21all_modelsrrr�
startup_eventJs22223rNz24/v1/models)Zresponse_modelcCs0tjddddddd�d�tdd	�tjD�d25�S)NzReceived request to list modelsr�list_models��rrr=cSsg|]}|dddd��qS)r"i��dzorganization-owner)�id�object�createdZowned_byrrDrrrrFerGzlist_models.<locals>.<listcomp>)�data)r-r?r
rrIrrrrrObsrO)�requestc�sPtrL|j�d�}|r|�d�s*tddd��|�d�d}|tkrLtddd��dS)	N�
AuthorizationzBearer i�z&Unauthorized: Missing or invalid token�r#Zdetail� r	zUnauthorized: Invalid token)r5�headers�get�26startswithr�split)rUZauth_header�tokenrrr�verify_passwordgsr^)�stream�27non-stream)�chat_request�http_requestr!�
api_key_stack�	used_keysc
�s�t|tt��jtjvrNd}tj|d��jdtr4|ndd�d�t	t28j|d��|�rl|����|vrfqN|�
��t�������fdd	�}�jr�t|�d29d�SzX����}tdd
d�jdd|d�dd�gd�}tjd�dd���jddd�d�|WSt�yh}	zXt|	�}30d|31��}tj|t�s*dnd�dd���jdt�rH|32ndd�d�WYd}	~	qNd}	~	00qNd}tj|d��jdt�r�|ndd�d�t	t33j|d��dS)Nu无效的模型ri�rrr=rWcs*zZ����2zB3dHW}ddd�jd|d�ddd�gd�}d	t�|��d34�Vq6dVWn�tjy�tjd�dd
���jdtr�dndd�d�Yn�t	�y$}zrt35|�}d|��}tj|ts�dnd�dd
���jdtr�|ndd�d�d	t�d|dd�i��d36�VWYd}~n37d}~00dS)N�chatcmpl-someidzchat.completion.chunki���	assistant��role�contentr)�delta�index�
finish_reason�rQrRrSr"�choiceszdata: z38 39zdata: [DONE]40 41zClient disconnectedr:ru客户端已断开连接rrr=�API Key failed: T��r%r.Zgemini_error�r�type)Zstream_chatr"�json�dumps�asyncio�CancelledErrorr-r?r�	Exceptionrr.)�chunkZformatted_chunk�e�error_detail�log_message�Zapi_keyraZ
gemini_clientr!rr�stream_generator}s�420436z)process_request.<locals>.stream_generatorztext/event-stream)Z44media_typerezchat.completioni��Irrfrg�stop)rkrrlrmzRequest successfulr:rProTrpr%u'所有API密钥或重试次数均失败ZALL)rr6r7r"rrIr-r.rrrZHTTP_400_BAD_REQUEST�pop�addr_rZ
complete_chatrr?rwr�HTTP_500_INTERNAL_SERVER_ERROR)
rarbr!rcrdZ	error_msgr}Zresponse_content�responseryrzr{�msgrr|r�process_requestps8$4546�$47R&r�z/v1/chat/completions)rUrb�_c�s,t�}t�}t|||jrdnd||�IdHS)Nr_r`)r9�setr�r_)rUrbr�rcrdrrr�chat_completions�sr�)rU�excc�sbtt|��}dddd|d�}tjd|jj�d|��ts:dnd|d�ttj	t48t|�dd	���d49�S)NrrprzUnhandled exception (z): Tr%Zinternal_errorrq)r#ri)rr,r-r.�	__class__�__name__rrrr�r�dict)rUr�r$r2rrr�global_exception_handler�s(r�)HZfastapirrrrrZfastapi.responsesrrZmodelsr50rrr
�geminir�utilsrrr�osrs�loggingr*ru�typingrrK�	getLoggerr-�environrZrr�setLevel�INFO�	Formatter�	formatter�
StreamHandler�stdoutZstream_handler�setFormatter�51addHandlerZlogger_name�WARNINGr,rr3�52excepthook�appr\r>rHr5�intr6r7r8r9rBZon_eventrNrOr^�listr�r�Zpostr�Zexception_handlerrwr�rrrr�<module>sZ53�5455565758	/