Spaces:
Paused
Paused
File size: 1,849 Bytes
eb6c6fa 64e57d0 80d5fe0 9a6620f 1e28d04 26790f6 9a6620f 26790f6 1e28d04 1a5c000 1e28d04 9a6620f a3ccca5 6942628 05dc8f9 a3ccca5 a05f54e a3ccca5 7cab91c 9e7b790 a3ccca5 9e7b790 a3ccca5 9e7b790 a3ccca5 26790f6 eb6c6fa 80d5fe0 a3ccca5 1e28d04 eb6c6fa 1e28d04 26790f6 3518fdf 64e57d0 26790f6 185b88a 26790f6 185b88a 26790f6 1df84d8 185b88a |
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 |
from typing import Union
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.responses import HTMLResponse, JSONResponse
from answerer import Answerer
from mapper import Mapper
mapper = Mapper(
repo="sentence-transformers",
model="multi-qa-distilbert-cos-v1",
)
answerer = Answerer(
model="RWKV-5-World-3B-v2-20231118-ctx16k.pth",
vocab="rwkv_vocab_v20230424",
strategy="cpu bf16",
ctx_limit=16*1024,
)
app = FastAPI()
HTML = """
<!DOCTYPE HTML>
<html>
<body>
<form action="" onsubmit="ask(event)">
<input id="prompt" type="text" autocomplete="off" />
<br>
<input type="submit" value="SEND" />
</form>
<p id="output"></p>
<script>
const prompt = document.getElementById("prompt");
const output = document.getElementById("output");
const ws = new WebSocket("wss://daniilalpha-answerer-api.hf.space/answer");
ws.onmessage = (e) => answer(e.data);
function ask(event) {
if(ws.readyState != 1) {
answer("websocket is not connected!");
return;
}
ws.send(prompt.value);
event.preventDefault();
}
function answer(value) {
output.innerHTML = value;
}
</script>
</body>
</html>
"""
@app.get("/")
def index():
return HTMLResponse(HTML)
@app.get("/map")
def map(query: Union[str, None], items: Union[list[str], None]):
indices = mapper(query, items)
return JSONResponse(indices)
@app.websocket("/answer")
async def answer(ws: WebSocket):
print("ws started!")
await ws.accept()
print("ws accepted!")
try: input = await ws.receive_text()
except WebSocketDisconnect: return
print("input received!")
await ws.send_text("OK!")
output = answerer(input, 32)
print("output created!")
for el in output:
print(f"sent: '{el}'")
await ws.send_text(el)
await ws.close() |