T1ckbase commited on
Commit
0d3b73e
·
0 Parent(s):

first commit

Browse files
Files changed (9) hide show
  1. .gitattributes +35 -0
  2. .gitignore +1 -0
  3. .vscode/settings.json +6 -0
  4. Dockerfile +18 -0
  5. README.md +11 -0
  6. deno.json +16 -0
  7. deno.lock +16 -0
  8. main.ts +54 -0
  9. serve.ts +3 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ *.exe
.vscode/settings.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "deno.enable": true,
3
+ "deno.lint": true,
4
+ "editor.formatOnSave": true,
5
+ "editor.defaultFormatter": "denoland.vscode-deno"
6
+ }
Dockerfile ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM denoland/deno:latest
2
+
3
+ EXPOSE 7860
4
+
5
+ WORKDIR /app
6
+
7
+ # Prefer not to run as root.
8
+ USER deno
9
+
10
+ RUN deno install --entrypoint main.ts
11
+
12
+ COPY . .
13
+
14
+ # Compile the main app so that it doesn't need to be compiled each startup/entry.
15
+ RUN deno cache main.ts
16
+
17
+ # CMD ["serve", "-A", "--port", "7860", "serve.ts"]
18
+ CMD ["run", "-A", "main.ts"]
README.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Stockfish Api
3
+ emoji: ♟️
4
+ colorFrom: purple
5
+ colorTo: pink
6
+ sdk: docker
7
+ pinned: false
8
+ short_description: ♟️
9
+ ---
10
+
11
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
deno.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "tasks": {
3
+ "dev": "deno --allow-net --allow-read --allow-env --allow-run --watch main.ts",
4
+ "serve": "deno serve --allow-net --allow-read --allow-env --watch --port 7860 serve.ts"
5
+ },
6
+ "imports": {
7
+ },
8
+ "fmt": {
9
+ "indentWidth": 2,
10
+ "lineWidth": 160,
11
+ "proseWrap": "preserve",
12
+ "semiColons": true,
13
+ "singleQuote": true,
14
+ "useTabs": false
15
+ }
16
+ }
deno.lock ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": "5",
3
+ "specifiers": {
4
+ "jsr:@hono/hono@^4.8.3": "4.8.3"
5
+ },
6
+ "jsr": {
7
+ "@hono/hono@4.8.3": {
8
+ "integrity": "f17509836610b97e9ec86bce5349387115c35ee72b7b29fd2b7944abe5f843ab"
9
+ }
10
+ },
11
+ "workspace": {
12
+ "dependencies": [
13
+ "jsr:@hono/hono@^4.8.3"
14
+ ]
15
+ }
16
+ }
main.ts ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const command = new Deno.Command(Deno.build.os === 'windows' ? './stockfish-windows-x86-64-avx2' : './stockfish-ubuntu-x86-64', {
2
+ stdin: 'piped',
3
+ stdout: 'piped',
4
+ });
5
+
6
+ Deno.serve({ port: 7860 }, (req) => {
7
+ if (req.headers.get('upgrade') != 'websocket') return new Response(Deno.env.get('SPACE_HOST'));
8
+
9
+ const { socket, response } = Deno.upgradeWebSocket(req);
10
+
11
+ const stockfish = command.spawn();
12
+
13
+ stockfish.status.then((status) => {
14
+ console.log(`Stockfish process exited with code: ${status.code}`);
15
+ if (socket.readyState === WebSocket.OPEN) {
16
+ socket.close(1011, `Stockfish process terminated with exit code ${status.code}`);
17
+ }
18
+ });
19
+
20
+ const stockfishWriter = stockfish.stdin.getWriter();
21
+ const stockfishReader = stockfish.stdout.pipeThrough(new TextDecoderStream()).getReader();
22
+
23
+ socket.addEventListener('open', async () => {
24
+ console.log('a client connected!');
25
+
26
+ try {
27
+ while (true) {
28
+ const { value, done } = await stockfishReader.read();
29
+ if (done) break;
30
+ socket.send(value);
31
+ console.log(value);
32
+ }
33
+ } catch (error) {
34
+ console.error('Error reading from stockfish stdout:', error);
35
+ if (socket.readyState === WebSocket.OPEN) socket.close();
36
+ }
37
+ });
38
+
39
+ socket.addEventListener('message', async (event) => {
40
+ const message = event.data;
41
+ await stockfishWriter.write(new TextEncoder().encode(message + '\n'));
42
+ });
43
+
44
+ socket.addEventListener('close', () => {
45
+ console.log('A client disconnected, cleaning up Stockfish process.');
46
+ try {
47
+ stockfish.kill();
48
+ } catch (_) {
49
+ console.log('Could not kill Stockfish, it likely already exited.');
50
+ }
51
+ });
52
+
53
+ return response;
54
+ });
serve.ts ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ import fetch from './main.ts';
2
+
3
+ export default { fetch };