File size: 1,434 Bytes
1e28d04
2a5e5fa
9a6620f
1e28d04
9a6620f
1e28d04
1a5c000
1e28d04
 
 
 
 
9a6620f
 
a3ccca5
 
 
 
 
 
6942628
05dc8f9
 
 
a3ccca5
 
a05f54e
a3ccca5
 
 
 
239df0b
9e7b790
a3ccca5
 
9e7b790
 
 
 
 
a3ccca5
 
 
9e7b790
 
 
 
a3ccca5
 
 
 
 
 
 
 
 
 
1e28d04
 
 
 
1df84d8
 
1e28d04
5f94267
1df84d8
 
 
d13ba14
e357d06
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
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!")
    
  input = await ws.receive_text()
  output = answerer(input, 32)

  print("output ready!")
    
  for el in output:
    print(f"sent: '{el}'")
    await ws.send_text(el) 

  await ws.close()

  print("ws closed!")