gnilets commited on
Commit
ed4a824
·
verified ·
1 Parent(s): cbf041c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -9
app.py CHANGED
@@ -1,7 +1,7 @@
1
  from contextlib import asynccontextmanager
2
  from datetime import datetime
3
  from json import dumps, loads
4
- from logging import Formatter, INFO, DEBUG, StreamHandler, WARNING, getLogger
5
  from os import environ
6
  from pathlib import Path
7
  from random import randint
@@ -11,7 +11,7 @@ from apscheduler.schedulers.asyncio import AsyncIOScheduler
11
  from fastapi import Depends, FastAPI, HTTPException, Header, Request
12
  from fastapi.responses import FileResponse, HTMLResponse, JSONResponse, StreamingResponse
13
  from httpx import AsyncClient
14
- from playwright.async_api import Page, async_playwright
15
  from starlette.responses import Response
16
 
17
  screenshot_path = Path(__file__).parent / 'screenshot.jpeg'
@@ -32,7 +32,7 @@ API_TOKEN = str(environ.get('API_TOKEN')).strip()
32
  REKA_API_URL = 'https://chat.reka.ai/api/chat'
33
 
34
  logger = getLogger('REKA_API')
35
- logger.setLevel(DEBUG)
36
  handler = StreamHandler()
37
  handler.setLevel(INFO)
38
  formatter = Formatter('%(asctime)s | %(levelname)s : %(message)s', datefmt='%d.%m.%Y %H:%M:%S')
@@ -51,10 +51,19 @@ async def make_screenshot(page: Page):
51
  async def refresh_token():
52
  max_timeout = BROWSER_TIMEOUT_SECONDS * 1000
53
  json_data = {'accessToken': None}
 
 
54
  async with async_playwright() as playwright:
55
  logger.info('запуск браузера')
56
  browser = await playwright.chromium.launch(headless=True, args=['--disable-blink-features=AutomationControlled'])
57
- context = await browser.new_context(color_scheme='dark', ignore_https_errors=True, locale='en-US', user_agent=UA)
 
 
 
 
 
 
 
58
  context.set_default_timeout(max_timeout)
59
  context.set_default_navigation_timeout(max_timeout)
60
  page = await context.new_page()
@@ -264,9 +273,8 @@ async def root():
264
  return HTMLResponse('ну пролапс, ну и что', status_code=200)
265
 
266
 
267
- @app.post('/v1/chat/completions')
268
  @app.post('/chat/completions')
269
- async def chat_completions(request: Request):
270
  logger.debug('запрос `completions`')
271
  data = await request.json()
272
  messages = data.get('messages', [])
@@ -284,7 +292,11 @@ async def chat_completions(request: Request):
284
  return StreamingResponse(fetch_reka_stream(reka_data), media_type='text/event-stream')
285
 
286
 
287
- @app.get('/v1/models')
 
 
 
 
288
  @app.get('/models')
289
  async def models():
290
  logger.debug('запрос `models`')
@@ -294,15 +306,20 @@ async def models():
294
  }, status_code=200, media_type='application/json')
295
 
296
 
 
 
 
 
 
297
  @app.get('/update_token')
298
- async def update_token():
299
  logger.info('запрос `update_token`')
300
  task = get_token()
301
  return JSONResponse({'status': 'обновление токена запущено'}, status_code=200, media_type='application/json')
302
 
303
 
304
  @app.get('/show_last_screen')
305
- async def show_last_screen():
306
  logger.info('запрос `show_last_screen`')
307
  return FileResponse(screenshot_path.resolve().as_posix(), media_type='image/jpeg', status_code=200)
308
 
 
1
  from contextlib import asynccontextmanager
2
  from datetime import datetime
3
  from json import dumps, loads
4
+ from logging import Formatter, INFO, StreamHandler, WARNING, getLogger
5
  from os import environ
6
  from pathlib import Path
7
  from random import randint
 
11
  from fastapi import Depends, FastAPI, HTTPException, Header, Request
12
  from fastapi.responses import FileResponse, HTMLResponse, JSONResponse, StreamingResponse
13
  from httpx import AsyncClient
14
+ from patchright.async_api import Page, async_playwright
15
  from starlette.responses import Response
16
 
17
  screenshot_path = Path(__file__).parent / 'screenshot.jpeg'
 
32
  REKA_API_URL = 'https://chat.reka.ai/api/chat'
33
 
34
  logger = getLogger('REKA_API')
35
+ logger.setLevel(INFO)
36
  handler = StreamHandler()
37
  handler.setLevel(INFO)
38
  formatter = Formatter('%(asctime)s | %(levelname)s : %(message)s', datefmt='%d.%m.%Y %H:%M:%S')
 
51
  async def refresh_token():
52
  max_timeout = BROWSER_TIMEOUT_SECONDS * 1000
53
  json_data = {'accessToken': None}
54
+ user_data_dir = Path(__file__).parent / 'user_data'
55
+ user_data_dir.mkdir(exist_ok=True, parents=True)
56
  async with async_playwright() as playwright:
57
  logger.info('запуск браузера')
58
  browser = await playwright.chromium.launch(headless=True, args=['--disable-blink-features=AutomationControlled'])
59
+ context = await browser.new_context(
60
+ color_scheme='dark',
61
+ ignore_https_errors=True,
62
+ locale='en-US',
63
+ user_agent=UA,
64
+ no_viewport=True,
65
+ user_data_dir=user_data_dir.resolve().as_posix()
66
+ )
67
  context.set_default_timeout(max_timeout)
68
  context.set_default_navigation_timeout(max_timeout)
69
  page = await context.new_page()
 
273
  return HTMLResponse('ну пролапс, ну и что', status_code=200)
274
 
275
 
 
276
  @app.post('/chat/completions')
277
+ async def chat_completions(request: Request, token: str = Depends(verify_token)):
278
  logger.debug('запрос `completions`')
279
  data = await request.json()
280
  messages = data.get('messages', [])
 
292
  return StreamingResponse(fetch_reka_stream(reka_data), media_type='text/event-stream')
293
 
294
 
295
+ @app.post('/v1/chat/completions')
296
+ async def chat_completions_v1(request: Request, token: str = Depends(verify_token)):
297
+ return await chat_completions(request)
298
+
299
+
300
  @app.get('/models')
301
  async def models():
302
  logger.debug('запрос `models`')
 
306
  }, status_code=200, media_type='application/json')
307
 
308
 
309
+ @app.get('/v1/models')
310
+ async def models_v1():
311
+ return await models()
312
+
313
+
314
  @app.get('/update_token')
315
+ async def update_token(token: str = Depends(verify_token)):
316
  logger.info('запрос `update_token`')
317
  task = get_token()
318
  return JSONResponse({'status': 'обновление токена запущено'}, status_code=200, media_type='application/json')
319
 
320
 
321
  @app.get('/show_last_screen')
322
+ async def show_last_screen(token: str = Depends(verify_token)):
323
  logger.info('запрос `show_last_screen`')
324
  return FileResponse(screenshot_path.resolve().as_posix(), media_type='image/jpeg', status_code=200)
325