File size: 1,613 Bytes
3518fdf
 
1e28d04
2a5e5fa
9a6620f
1e28d04
9a6620f
1e28d04
1a5c000
1e28d04
 
 
 
 
9a6620f
 
a3ccca5
 
 
 
 
 
6942628
05dc8f9
 
 
a3ccca5
 
a05f54e
a3ccca5
 
 
 
239df0b
9e7b790
a3ccca5
 
9e7b790
 
 
 
 
a3ccca5
 
 
9e7b790
 
 
 
a3ccca5
 
 
 
 
 
 
 
 
 
1e28d04
 
 
 
1df84d8
3518fdf
 
 
 
 
1e28d04
3518fdf
 
 
 
 
 
 
1df84d8
 
9486abb
1df84d8
 
 
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
from threading import Thread

from fastapi import FastAPI, WebSocket
from fastapi.responses import HTMLResponse

from answerer import Answerer

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("/")
async def index():
    return HTMLResponse(HTML)

@app.websocket("/answer")
async def answer(ws: WebSocket):
  await ws.accept()

  print("ws connected!")

  async def callback(output: str):
    print(f"sent: '{output}'")
    await ws.send_text(output)
      
  input = await ws.receive_text()
  answerer_thread = Thread(
    target=answerer,
    args=(input, 32),
    kwargs={"callback": callback}
  )
  answerer_thread.start()
  answerer_thread.join()

  print("output ready!")

  await ws.close()

  print("ws closed!")