gnilets commited on
Commit
c4a90a3
·
verified ·
1 Parent(s): 298332d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -6
app.py CHANGED
@@ -101,6 +101,19 @@ class OverrideStreamResponse(StreamingResponse):
101
  await self.background()
102
 
103
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  async def proxy_openai_api(request: Request):
105
  headers = {k: v for k, v in request.headers.items() if k not in {'host', 'content-length', 'x-forwarded-for', 'x-real-ip', 'connection'}}
106
 
@@ -118,7 +131,7 @@ async def proxy_openai_api(request: Request):
118
  streaming = client.stream(request.method, COMPLETIONS_URL, headers=headers, params=request.query_params, json=request_body)
119
  async with streaming as stream_response:
120
  if stream_response.status_code in {401, 402, 429}:
121
- raise AuthError(f'ключ API {api_key} недействителен или превышен лимит отправки запросов\n всего ключей: {len(API_KEYS)}')
122
  if stream_response.status_code == 403:
123
  raise CensoredError('отклонено по цензуре') # это специфичная ошибка именно для опенроутера!
124
  response.init_headers({k: v for k, v in stream_response.headers.items() if k not in {'content-length', 'content-encoding', 'alt-svc'}})
@@ -133,13 +146,14 @@ async def proxy_openai_api(request: Request):
133
  raise HTTPException(status_code=500, detail=f'произошла ошибка при запросе: {exc}')
134
 
135
  for api_key in API_KEYS:
136
- try:
137
- response_generator = stream_api_response(api_key)
138
- response = OverrideStreamResponse(response_generator)
139
- return response
140
- except AuthError:
141
  print(f'ключ API {api_key} недействителен или превышен лимит отправки запросов')
142
  continue
 
 
143
  raise HTTPException(status_code=401, detail='все ключи API использованы, доступ запрещен.')
144
 
145
 
 
101
  await self.background()
102
 
103
 
104
+
105
+ async def get_response_with_valid_api_key(request: Request):
106
+ for api_key in API_KEYS:
107
+ try:
108
+ response_generator = stream_api_response(api_key, request)
109
+ response = OverrideStreamResponse(response_generator)
110
+ return response
111
+ except AuthError:
112
+ print(f'ключ API {api_key} недействителен или превышен лимит отправки запросов\n всего ключей: {len(API_KEYS)}')
113
+ continue
114
+ raise HTTPException(status_code=401, detail='все ключи API использованы, доступ запрещен.')
115
+
116
+
117
  async def proxy_openai_api(request: Request):
118
  headers = {k: v for k, v in request.headers.items() if k not in {'host', 'content-length', 'x-forwarded-for', 'x-real-ip', 'connection'}}
119
 
 
131
  streaming = client.stream(request.method, COMPLETIONS_URL, headers=headers, params=request.query_params, json=request_body)
132
  async with streaming as stream_response:
133
  if stream_response.status_code in {401, 402, 429}:
134
+ return 'auth_error'
135
  if stream_response.status_code == 403:
136
  raise CensoredError('отклонено по цензуре') # это специфичная ошибка именно для опенроутера!
137
  response.init_headers({k: v for k, v in stream_response.headers.items() if k not in {'content-length', 'content-encoding', 'alt-svc'}})
 
146
  raise HTTPException(status_code=500, detail=f'произошла ошибка при запросе: {exc}')
147
 
148
  for api_key in API_KEYS:
149
+ response_generator = stream_api_response(api_key)
150
+ response = OverrideStreamResponse(response_generator)
151
+ response_body = await response.body_iterator.__anext__()
152
+ if response_body == 'auth_error':
 
153
  print(f'ключ API {api_key} недействителен или превышен лимит отправки запросов')
154
  continue
155
+ else:
156
+ return OverrideStreamResponse(itertools.chain([response_body], response.body_iterator))
157
  raise HTTPException(status_code=401, detail='все ключи API использованы, доступ запрещен.')
158
 
159