|
Create server.py: |
|
|
|
from starlette.applications import Starlette |
|
from starlette.responses import JSONResponse |
|
from starlette.routing import Route |
|
from transformers import pipeline |
|
import asyncio |
|
async def homepage(request): |
|
payload = await request.body() |
|
string = payload.decode("utf-8") |
|
response_q = asyncio.Queue() |
|
await request.app.model_queue.put((string, response_q)) |
|
output = await response_q.get() |
|
return JSONResponse(output) |
|
async def server_loop(q): |
|
pipe = pipeline(model="google-bert/bert-base-uncased") |
|
while True: |
|
(string, response_q) = await q.get() |
|
out = pipe(string) |
|
await response_q.put(out) |
|
app = Starlette( |
|
routes=[ |
|
Route("/", homepage, methods=["POST"]), |
|
], |
|
) |
|
@app.on_event("startup") |
|
async def startup_event(): |
|
q = asyncio.Queue() |
|
app.model_queue = q |
|
asyncio.create_task(server_loop(q)) |
|
|
|
Now you can start it with: |
|
|
|
uvicorn server:app |
|
And you can query it: |
|
```bash |
|
curl -X POST -d "test [MASK]" http://localhost:8000/ |
|
[{"score":0.7742936015129089,"token":1012,"token_str":".","sequence":"test. |