File size: 4,235 Bytes
80b54df 0c40d71 a77552d 0c40d71 e9796a8 4aff4d5 643386a 57fa412 80b54df 0c40d71 4cacd20 0c40d71 80b54df 729a987 0c40d71 4aff4d5 a77552d 56786d6 a77552d 56786d6 a77552d 56786d6 a77552d 56786d6 a77552d e9796a8 4aff4d5 a77552d 56786d6 a77552d e9796a8 56786d6 a77552d 56786d6 a77552d 56786d6 a77552d e9796a8 80b54df e9796a8 729a987 e9796a8 80b54df e9796a8 729a987 e9796a8 643386a 70b3d72 80b54df 70b3d72 643386a 863a898 80b54df 74ad48b 643386a eb813a5 80b54df eb813a5 729a987 eb813a5 80b54df eb813a5 729a987 0cd2d2f 80b54df 199738e 57fa412 80b54df 57fa412 fddcae6 80b54df 1335971 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
from fastapi import FastAPI, Request
from security import auth
from util import find, rank, save, get_authorized_thoughts, remove
from sentence_transformers import SentenceTransformer
from fastapi.datastructures import UploadFile
from fastapi import FastAPI, File, Form
from fastapi.responses import FileResponse, ORJSONResponse
from pathlib import Path
from microverses import create_microverse, remove_microverse, list_microverses
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.util import get_remote_address
from slowapi.middleware import SlowAPIMiddleware
from slowapi.errors import RateLimitExceeded
limiter = Limiter(key_func=get_remote_address, default_limits=['30/minute'])
app = FastAPI()
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
app.add_middleware(SlowAPIMiddleware)
text_image_encoder = SentenceTransformer('clip-ViT-B-32')
text_encoder = SentenceTransformer(
'sentence-transformers/multi-qa-mpnet-base-cos-v1')
@app.get('/find', response_class=ORJSONResponse)
async def find_text_handler(
query: str,
token: str,
relatedness: float = 0.8,
activation: float = 0.,
noise: float = 0.1,
return_embeddings: bool = False,
silent: bool = False,
request: Request = None
):
return find(
'text',
query,
relatedness,
activation,
noise,
return_embeddings,
auth(token),
text_encoder,
text_image_encoder,
silent
)
@app.post('/find', response_class=ORJSONResponse)
async def find_image_handler(
query: UploadFile = File(...),
token: str = Form(...),
relatedness: float = Form(0.8),
activation: float = Form(0.),
noise: float = Form(0.1),
return_embeddings: bool = Form(False),
silent: bool = Form(False),
request: Request = None
):
query = await query.read()
return find(
'image',
query,
relatedness,
activation,
noise,
return_embeddings,
auth(token),
text_encoder,
text_image_encoder,
silent
)
@app.get('/save')
async def save_text_handler(query: str, token: str, request: Request):
auth_result = auth(token)
results = save('text', query, auth_result,
text_encoder, text_image_encoder)
return results
@app.post('/save')
async def save_image_handler(query: UploadFile = File(...), token: str = Form(...), request: Request = None):
query = await query.read()
auth_result = auth(token)
results = save('image', query, auth_result,
text_encoder, text_image_encoder)
return results
@app.get('/remove')
async def remove_handler(filename: str, token: str, request: Request):
auth_result = auth(token)
return remove(auth_result, filename)
@app.get('/static')
@limiter.limit("200/minute")
async def static_handler(filename: str, token: str, request: Request):
knowledge_base_path = Path('..') / 'knowledge'
auth_result = auth(token)
thoughts = get_authorized_thoughts(auth_result)
if filename in [e['filename'] for e in thoughts]:
return FileResponse(knowledge_base_path / filename)
@app.get('/microverse/create')
async def microverse_create_handler(query: str, token: str, request: Request):
auth_result = auth(token)
return create_microverse('text', query, auth_result, text_encoder, text_image_encoder)
@app.post('/microverse/create')
async def microverse_create_handler(query: UploadFile = File(...), token: str = Form(...), request: Request = None):
query = await query.read()
auth_result = auth(token)
return create_microverse('image', query, auth_result, text_encoder, text_image_encoder)
@app.get('/microverse/remove')
async def microverse_remove_handler(token: str, microverse: str, request: Request):
auth_result = auth(token)
return remove_microverse(auth_result, microverse)
@app.get('/microverse/list')
async def microverse_list_handler(token: str, request: Request):
auth_result = auth(token)
return list_microverses(auth_result)
@app.get('/custodian/check')
async def check_custodian(token: str, request: Request):
return auth(token)
|