File size: 1,639 Bytes
1e28d04
2a5e5fa
9a6620f
1e28d04
9a6620f
1e28d04
1a5c000
1e28d04
 
 
 
 
9a6620f
 
a3ccca5
 
 
 
 
 
6942628
05dc8f9
 
 
a3ccca5
 
a05f54e
a3ccca5
 
 
 
9486abb
239df0b
9e7b790
a3ccca5
 
9e7b790
 
 
 
 
a3ccca5
 
 
9e7b790
 
 
 
a3ccca5
 
 
 
 
 
 
 
 
 
1e28d04
 
 
 
 
5f94267
 
 
 
9486abb
 
 
 
8a7631f
9486abb
 
 
 
 
 
 
d13ba14
 
9486abb
 
5f94267
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
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");

    // TODO!
    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()

  input = await ws.receive_text()
  output = answerer(input, 32)
  async for el in output:
    await ws.send_text(el) 

  await ws.close()

async def answerer_test():
  for i in range(10000):
    yield f"i"

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

  input = await ws.receive_text()
  output = answerer_test()
  for el in output:
    print(el)
    await ws.send_text(el) 

  await ws.close()