Fix build issues: tsconfig, typo in app.js, version bump

#2
by bep40 - opened
This view is limited to 50 files because it contains too many changes. See the raw diff here.
Files changed (50) hide show
  1. .gitattributes +0 -6
  2. .gitignore +1 -1
  3. .rebuild-trigger +0 -1
  4. CLAUDE.md +1 -1
  5. Dockerfile +14 -19
  6. README.md +86 -4
  7. _appdbg.txt +0 -99
  8. _applog.txt +0 -1
  9. _applog2.txt +0 -46
  10. _applog3.txt +0 -56
  11. _avatarjs.txt +0 -16
  12. _avfiles.txt +0 -3
  13. _avlist.txt +0 -7
  14. _chk.txt +0 -9
  15. _chk2.txt +0 -22
  16. _cleanup.txt +0 -5
  17. _cre3.txt +0 -2
  18. _cre4.txt +0 -3
  19. _create2.txt +0 -2
  20. _dbg.txt +0 -40
  21. _del.txt +0 -10
  22. _diag.txt +0 -9
  23. _fb.txt +0 -24
  24. _final_test.txt +0 -5
  25. _glbchk.txt +0 -5
  26. _hw.txt +0 -4
  27. _hw2.txt +0 -4
  28. _hw3.txt +0 -3
  29. _idxchk.txt +0 -6
  30. _logs3.txt +0 -7
  31. _logs4.txt +0 -40
  32. _mintest.txt +0 -10
  33. _recreate.txt +0 -3
  34. _rtest.txt +0 -6
  35. _setup.txt +0 -3
  36. _step2.txt +0 -1
  37. _sum.txt +0 -11
  38. _sum2.txt +0 -10
  39. _test10.txt +0 -10
  40. _test11.txt +0 -10
  41. _test12.txt +0 -4
  42. _test13.txt +0 -10
  43. _test14.txt +0 -15
  44. _test3.txt +0 -11
  45. _test4.txt +0 -9
  46. _test5.txt +0 -10
  47. _test6.txt +0 -11
  48. _test7.txt +0 -11
  49. _test8.txt +0 -10
  50. _test9.txt +0 -11
.gitattributes CHANGED
@@ -51,9 +51,3 @@ public/avatars/ready_player_me_1.glb filter=lfs diff=lfs merge=lfs -text
51
  public/avatars/ready_player_me_2.glb filter=lfs diff=lfs merge=lfs -text
52
  public/avatars/vuong.glb filter=lfs diff=lfs merge=lfs -text
53
  public/avatars/lisamy.glb filter=lfs diff=lfs merge=lfs -text
54
- public/avatars/viverse_avatar_model_209370.vrm filter=lfs diff=lfs merge=lfs -text
55
- public/avatars/scene.glb filter=lfs diff=lfs merge=lfs -text
56
- public/avatars/scene[[:space:]](1).glb filter=lfs diff=lfs merge=lfs -text
57
- public/avatars/scene[[:space:]](3).glb filter=lfs diff=lfs merge=lfs -text
58
- public/avatars/vuong1.glb filter=lfs diff=lfs merge=lfs -text
59
- public/avatars/lisamy1.glb filter=lfs diff=lfs merge=lfs -text
 
51
  public/avatars/ready_player_me_2.glb filter=lfs diff=lfs merge=lfs -text
52
  public/avatars/vuong.glb filter=lfs diff=lfs merge=lfs -text
53
  public/avatars/lisamy.glb filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
.gitignore CHANGED
@@ -31,4 +31,4 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
31
  .idea
32
 
33
  # Finder (MacOS) folder config
34
- .DS_Store
 
31
  .idea
32
 
33
  # Finder (MacOS) folder config
34
+ .DS_Store
.rebuild-trigger DELETED
@@ -1 +0,0 @@
1
- Trigger rebuild - fix picker + thumbnails
 
 
CLAUDE.md CHANGED
@@ -108,4 +108,4 @@ Then, run index.ts
108
  bun --hot ./index.ts
109
  ```
110
 
111
- For more information, read the Bun API docs in `node_modules/bun-types/docs/**.mdx`.
 
108
  bun --hot ./index.ts
109
  ```
110
 
111
+ For more information, read the Bun API docs in `node_modules/bun-types/docs/**.mdx`.
Dockerfile CHANGED
@@ -1,32 +1,27 @@
1
- # Multi-service: Bun server + Python sidecar for dataset uploads
 
2
  FROM oven/bun:1-slim
3
 
4
  WORKDIR /app
5
 
6
- # Install Python and supervisor for sidecar
7
- RUN apt-get update && apt-get install -y python3 python3-pip python3-venv supervisor && rm -rf /var/lib/apt/lists/*
8
-
9
- # Create virtual environment for Python
10
- RUN python3 -m venv /app/venv
11
-
12
- # Copy package files for Bun
13
  COPY package.json bun.lock ./
 
14
  RUN bun install --frozen-lockfile --production || (sleep 3 && bun install --frozen-lockfile --production)
15
 
16
- # Copy Python requirements and install in venv
17
- COPY requirements.txt ./
18
- RUN /app/venv/bin/pip install --no-cache-dir -r requirements.txt
19
-
20
- # Copy application code
21
  COPY . .
22
 
23
- # Supervisor config
24
- RUN echo '[supervisord]\nnodaemon=true\n\n[program:sidecar]\ncommand=/app/venv/bin/python upload_service.py\nstdout_logfile=/dev/stdout\nstdout_logfile_maxbytes=0\nstderr_logfile=/dev/stderr\nstderr_logfile_maxbytes=0\nautostart=true\nautorestart=true\n\n[program:bun]\ncommand=bun index.ts\nstdout_logfile=/dev/stdout\nstdout_logfile_maxbytes=0\nstderr_logfile=/dev/stderr\nstderr_logfile_maxbytes=0\nautostart=true\nautorestart=true\n' > /etc/supervisor/conf.d/supervisord.conf
25
-
26
  ENV NODE_ENV=production
27
  ENV PORT=7860
28
- ENV SIDECAR_URL=http://localhost:7861
 
 
 
 
 
 
29
 
30
- EXPOSE 7860 7861
31
 
32
- CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
 
1
+ # Single container: Bun serves the bundled front-end AND the /api/session
2
+ # proxy. HF Spaces (sdk: docker) routes traffic to app_port, set to 7860.
3
  FROM oven/bun:1-slim
4
 
5
  WORKDIR /app
6
 
7
+ # Copy just the lockfile and package.json first for layer caching
 
 
 
 
 
 
8
  COPY package.json bun.lock ./
9
+ # Retry install once if it fails (network flakiness)
10
  RUN bun install --frozen-lockfile --production || (sleep 3 && bun install --frozen-lockfile --production)
11
 
12
+ # Copy the rest of the application
 
 
 
 
13
  COPY . .
14
 
 
 
 
15
  ENV NODE_ENV=production
16
  ENV PORT=7860
17
+ # Point at a speech-to-speech backend by setting ONE of these in the Space
18
+ # settings (index.ts prefers LOAD_BALANCER_URL):
19
+ # LOAD_BALANCER_URL a load balancer's base URL (a secret) — talks to the pool directly
20
+ # SESSION_PROXY_URL another deployment's /api to piggyback (e.g. a public demo Space)
21
+ # With neither set, the app runs in direct mode (paste a ws:// URL in Settings).
22
+
23
+ EXPOSE 7860
24
 
25
+ USER bun
26
 
27
+ CMD ["bun", "index.ts"]
README.md CHANGED
@@ -4,14 +4,96 @@ emoji: 🗣️
4
  colorFrom: indigo
5
  colorTo: purple
6
  sdk: docker
7
- pinned: false
8
  app_port: 7860
 
 
 
 
 
 
 
9
  tags:
10
  - ml-intern
11
  ---
12
 
13
- # Gemma Multi-Avatar
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
- 3D talking-head avatar with real-time voice/text chat.
16
 
17
- Users can switch between ~20 `.glb` avatar models, capture snapshots as thumbnails, and chat with a Gemma 4 speech-to-speech backend.
 
 
 
 
 
 
 
4
  colorFrom: indigo
5
  colorTo: purple
6
  sdk: docker
 
7
  app_port: 7860
8
+ pinned: false
9
+ thumbnail: https://huggingface.co/spaces/victor/gemma-avatar/resolve/main/thumbnail.webp
10
+ short_description: Talk to Gemma 4 face to face, with a 3D lip-synced avatar
11
+ models:
12
+ - google/gemma-4-31B-it
13
+ - nvidia/parakeet-tdt-1.1b
14
+ - Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
15
  tags:
16
  - ml-intern
17
  ---
18
 
19
+ # Gemma Avatar
20
+
21
+ Realtime voice chat with a 3D talking-head avatar. Same AI stack as the
22
+ [smolagents/hf-realtime-voice](https://huggingface.co/spaces/smolagents/hf-realtime-voice)
23
+ Space ([blog post](https://huggingface.co/blog/cerebras-gemma4-voice-ai)), but the
24
+ orb visualization is replaced by a [TalkingHead](https://github.com/met4citizen/TalkingHead)
25
+ 3D avatar with real-time audio-driven lip-sync.
26
+
27
+ ## The pipeline
28
+
29
+ ```
30
+ you speak → silero-VAD → parakeet-tdt-1.1b (STT) → gemma-4-31B-it on Cerebras → Qwen3-TTS → avatar speaks
31
+ ```
32
+
33
+ Transport is the OpenAI Realtime GA protocol over WebSocket against Hugging
34
+ Face's speech-to-speech backend: mic PCM16 @ 16 kHz goes up as
35
+ `input_audio_buffer.append`, TTS PCM16 @ 16 kHz comes back as
36
+ `response.output_audio.delta`, transcripts stream alongside.
37
+
38
+ ## How the avatar works
39
+
40
+ - **Rendering / body language** — [TalkingHead](https://github.com/met4citizen/TalkingHead)
41
+ (three.js). Blinking, breathing, idle sway, moods, hand gestures, and emoji
42
+ expressions are its built-in animation system.
43
+ - **Lip-sync** — the backend sends raw PCM only (no word timings, no visemes),
44
+ so the mouth is driven from the audio itself with
45
+ [HeadAudio](https://github.com/met4citizen/HeadAudio): an AudioWorklet that
46
+ classifies MFCC frames into Oculus visemes (~50 ms latency, fully in-browser).
47
+ The s2s playback worklet is routed into TalkingHead's audio graph
48
+ (`audioAnalyzerNode → audioSpeechGainNode → reverb → speakers`) and HeadAudio
49
+ taps the speech gain node.
50
+ - **The model plays the avatar** — three function tools are declared to the
51
+ backend: `set_mood`, `make_hand_gesture`, `make_facial_expression`. Gemma
52
+ calls them mid-conversation (smiles when greeting, shrugs when unsure,
53
+ thumbs-up when agreeing).
54
+ - **Choreography** — client statuses drive presence: the avatar makes eye
55
+ contact when you start talking, gestures with its hands on new utterances,
56
+ and barge-in clears the playback buffer so the mouth settles instantly.
57
+
58
+ ## Run it
59
+
60
+ ```bash
61
+ bun install
62
+
63
+ # Pick a backend (one of):
64
+ LOAD_BALANCER_URL=https://… bun run dev # a speech-to-speech load balancer
65
+ SESSION_PROXY_URL=https://…/api bun run dev # piggyback another deployment's /api (dev)
66
+ bun run dev # direct mode: paste a ws:// URL in Settings
67
+ ```
68
+
69
+ Open http://localhost:3000 and tap **Start talking**.
70
+
71
+ \`?fakemic=1\` starts a session with a silent synthetic mic (useful for testing
72
+ the full loop without a microphone — trigger a reply from the console with
73
+ \`getClient().requestResponse()\`).
74
+
75
+ ## Layout
76
+
77
+ ```
78
+ index.ts Bun server: HTML import + /api/session proxy + static assets
79
+ index.html App shell (avatar hero, caption, subtitles, settings)
80
+ src/app.js Session wiring, tool executor, UI state
81
+ src/avatar.js AvatarStage: TalkingHead + HeadAudio + choreography
82
+ src/s2s/s2s-ws-client.js Realtime WS client (vendored from the Space; orb removed,
83
+ injectable output node + worklet base URL + shared-ctx close)
84
+ src/s2s/codec.js PCM/base64 + transcript helpers (vendored, unchanged)
85
+ src/vendor/headaudio.min.mjs HeadAudio node class (bundled)
86
+ public/worklets/ mic-capture + audio-playback AudioWorklets (vendored, unchanged)
87
+ public/vendor/ HeadAudio worklet processor + viseme model (runtime-loaded)
88
+ public/avatars/brunette.glb Default avatar (Ready Player Me; CC BY-NC 4.0 — non-commercial)
89
+ ```
90
 
91
+ ## Notes
92
 
93
+ - The avatar GLB must have a Mixamo-compatible rig plus ARKit and Oculus-viseme
94
+ blend shapes. Ready Player Me avatars work with
95
+ \`?morphTargets=ARKit,Oculus%20Visemes\` on the GLB URL.
96
+ - TalkingHead owns the AudioContext; the s2s client is handed \`head.audioCtx\`
97
+ and never closes it.
98
+ - Everything animation-related runs on requestAnimationFrame — a backgrounded
99
+ tab freezes the avatar (audio keeps playing).
_appdbg.txt DELETED
@@ -1,99 +0,0 @@
1
- addChatMessage("user", q);
2
- void maybeSwitchTopic(q);
3
- if (!sendTextViaSession(q)) setCaption(
4
- ---
5
- addChatMessage(role, text, newsItem = null) {
6
- const msg = document.createElement("div");
7
- msg.cla
8
- ---
9
- addChatMessage("user", text);
10
- chatInput.value = "";
11
-
12
- // New topic? re-filter the news list and r
13
- ---
14
- addChatMessage("assistant", `✅ Đã đăng bài AI tổng hợp (${selected.length} tin nhắn) lên VNEWS:\n${s
15
- ---
16
- addChatMessage("assistant", `⚠️ VNEWS: ${data.error || "không đăng được bài"}.`);
17
- }
18
- } catch (e
19
- ---
20
- addChatMessage("assistant", "⚠️ Lỗi khi kết nối VNEWS để đăng bài.");
21
- }
22
- rewriteBtn.textContent =
23
- ---
24
- addChatMessage("assistant", normalized, newsItem);
25
- }
26
- });
27
-
28
- c.addEventListener("response-finis
29
- ---
30
- === _attachClientEvents ===
31
- _attachClientEvents(c) {
32
- c.addEventListener("status", (e) => {
33
- onStatus(e.detail.status);
34
- });
35
-
36
- c.addEventListener("queue", (e) => {
37
- const { position } = e.detail;
38
- setCaption(position > 0 ? `#${position} IN LINE…` : "ALMOST THERE…", "live");
39
- });
40
-
41
- c.addEventListener("transcript", (e) => {
42
- const { role, text } = e.detail;
43
- if (role === "assistant" && text) {
44
- const normalized = smartNormalize(text);
45
- showSubtitles(normalized);
46
- // Attach the next image of the CURRENT news item (loops through its images).
47
- const img = nextNewsImage();
48
- const newsItem = curNews ? { ...curNews, image: img || curNews.image } : null;
49
- addChatMessage("assistant", normalized, newsItem);
50
- }
51
- });
52
-
53
- c.addEventListener("response-finished", () => {
54
- autoGreetingSent = true;
55
- fadeSubtitles();
56
- if (preFetchedNews.length > 0) {
57
- showNewsPanel(preFetchedNews.slice(0, NEWS_PAGE_SIZE));
58
- }
59
- });
60
-
61
- c.addEventListener("toolcall", (e) => {
62
- const { name, arguments: args, callId } = e.detail;
63
- runTool(name, args, callId);
64
- });
65
-
66
- c.addEventListener("server-error", (e) => {
67
- console.warn("server error:", e.detail.error);
68
- });
69
-
70
- c.addEventListener("error", () => {
71
- void endSession();
72
- });
73
- }
74
-
75
- async function endSession(silent = false) {
76
- const c = client;
77
- client = null;
78
- sessionInProgress = false;
79
- autoGreetingSent = false;
80
-
81
- if (c) {
82
- if (c.options.micStream) {
83
- for (const track of c.options.micStream?.getTracks() ?? []) {
84
- track.stop();
85
- }
86
- }
87
- await c.close().catch(() => {});
88
- }
89
-
90
- stage.setConversationState("idle");
91
- subtitles.classList.remove("visible");
92
-
93
- if (newsPanel) {
94
- newsPanel.hidden = true;
95
- }
96
-
97
- if (!silent) {
98
- setCaption(CAPTIONS.idle);
99
- setMainButton("start",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_applog.txt DELETED
@@ -1 +0,0 @@
1
- HTTP 404 {"error":"Sorry, we can't find the page you are looking for."}
 
 
_applog2.txt DELETED
@@ -1,46 +0,0 @@
1
- app HTTP 404 {"error":"Sorry, we can't find the page you are looking for."}
2
- === build (last 2500) ===
3
- home/user/app","timestamp":"2026-07-19T05:26:49.606Z"}
4
-
5
- data: {"data":"CACHED\n","timestamp":"2026-07-19T05:26:49.606Z"}
6
-
7
- data: {"data":"--> RUN apt-get update && apt-get install -y fakeroot && mv /usr/bin/apt-get /usr/bin/.apt-get && echo '#!/usr/bin/env sh\\nfakeroot /usr/bin/.apt-get $@' > /usr/bin/apt-get && chmod +x /usr/bin/apt-get && \trm -rf /var/lib/apt/lists/* && \tuseradd -m -u 1000 user","timestamp":"2026-07-19T05:26:49.606Z"}
8
-
9
- data: {"data":"CACHED\n","timestamp":"2026-07-19T05:26:49.606Z"}
10
-
11
- data: {"data":"--> RUN pip freeze > /tmp/freeze.txt","timestamp":"2026-07-19T05:26:49.606Z"}
12
-
13
- data: {"data":"CACHED\n","timestamp":"2026-07-19T05:26:49.606Z"}
14
-
15
- data: {"data":"--> COPY --chown=1000:1000 --from=root / /","timestamp":"2026-07-19T05:26:49.606Z"}
16
-
17
- data: {"data":"CACHED\n","timestamp":"2026-07-19T05:26:49.606Z"}
18
-
19
- data: {"data":"--> RUN \tapt-get update && \tapt-get install -y curl && \tcurl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \tapt-get install -y nodejs && \trm -rf /var/lib/apt/lists/* && apt-get clean","timestamp":"2026-07-19T05:26:49.606Z"}
20
-
21
- data: {"data":"CACHED\n","timestamp":"2026-07-19T05:26:49.606Z"}
22
-
23
- data: {"data":"--> RUN apt-get update && apt-get install -y \tgit \tgit-lfs \tffmpeg \tlibsm6 \tlibxext6 \tcmake \trsync \tlibgl1 \t&& rm -rf /var/lib/apt/lists/* \t&& git lfs install","timestamp":"2026-07-19T05:26:49.606Z"}
24
-
25
- data: {"data":"CACHED\n","timestamp":"2026-07-19T05:26:49.606Z"}
26
-
27
- data: {"data":"--> RUN --mount=target=/tmp/requirements.txt,source=requirements.txt pip install --no-cache-dir -r /tmp/requirements.txt \"torch<=2.11.0\" gradio[oauth,mcp]==6.20.0 \"uvicorn>=0.14.0\" \"websockets>=10.4\" spaces==0.51.0","timestamp":"2026-07-19T05:26:49.606Z"}
28
-
29
- data: {"data":"CACHED\n","timestamp":"2026-07-19T05:26:49.606Z"}
30
-
31
- data: {"data":"--> COPY --link --chown=1000 ./ /home/user/app","timestamp":"2026-07-19T05:26:49.606Z"}
32
-
33
- data: {"data":"DONE 0.0s\n","timestamp":"2026-07-19T05:26:49.606Z"}
34
-
35
- data: {"data":"--> COPY --from=pipfreeze --link --chown=1000 /tmp/freeze.txt /tmp/freeze.txt","timestamp":"2026-07-19T05:26:49.606Z"}
36
-
37
- data: {"data":"DONE 0.0s\n","timestamp":"2026-07-19T05:26:49.606Z"}
38
-
39
- data: {"data":"--> Pushing image","timestamp":"2026-07-19T05:26:49.606Z"}
40
-
41
- data: {"data":"DONE 0.9s\n","timestamp":"2026-07-19T05:26:50.461Z"}
42
-
43
- data: {"data":"--> Exporting cache","timestamp":"2026-07-19T05:26:50.461Z"}
44
-
45
- data: {"data":"DONE 0.6s\n","timestamp":"2026-07-19T05:26:50.885Z"}
46
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_applog3.txt DELETED
@@ -1,56 +0,0 @@
1
- app HTTP 404 {"error":"Sorry, we can't find the page you are looking for."}
2
- === build (last 3000) ===
3
- 438Z"}
4
-
5
- data: {"data":"--> RUN chown -R 1000:1000 /var/","timestamp":"2026-07-19T08:50:16.651Z"}
6
-
7
- data: {"data":"CACHED\n","timestamp":"2026-07-19T08:50:16.651Z"}
8
-
9
- data: {"data":"--> RUN apt-get update && apt-get install -y \tgit \tgit-lfs \tffmpeg \tlibsm6 \tlibxext6 \tcmake \trsync \tlibgl1 \t&& rm -rf /var/lib/apt/lists/* \t&& git lfs install","timestamp":"2026-07-19T08:50:16.651Z"}
10
-
11
- data: {"data":"CACHED\n","timestamp":"2026-07-19T08:50:16.651Z"}
12
-
13
- data: {"data":"--> RUN \tapt-get update && \tapt-get install -y curl && \tcurl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \tapt-get install -y nodejs && \trm -rf /var/lib/apt/lists/* && apt-get clean","timestamp":"2026-07-19T08:50:16.651Z"}
14
-
15
- data: {"data":"CACHED\n","timestamp":"2026-07-19T08:50:16.651Z"}
16
-
17
- data: {"data":"--> RUN pip freeze > /tmp/freeze.txt","timestamp":"2026-07-19T08:50:16.651Z"}
18
-
19
- data: {"data":"CACHED\n","timestamp":"2026-07-19T08:50:16.651Z"}
20
-
21
- data: {"data":"--> WORKDIR /home/user/app","timestamp":"2026-07-19T08:50:16.651Z"}
22
-
23
- data: {"data":"CACHED\n","timestamp":"2026-07-19T08:50:16.651Z"}
24
-
25
- data: {"data":"--> RUN pip install --no-cache-dir pip -U && pip install --no-cache-dir datasets \"huggingface-hub>=0.30\" \"hf-transfer>=0.1.4\" \"protobuf<4\" \"click<8.1\" torch==2.11.0","timestamp":"2026-07-19T08:50:16.651Z"}
26
-
27
- data: {"data":"CACHED\n","timestamp":"2026-07-19T08:50:16.651Z"}
28
-
29
- data: {"data":"--> RUN apt-get update && apt-get install -y fakeroot && mv /usr/bin/apt-get /usr/bin/.apt-get && echo '#!/usr/bin/env sh\\nfakeroot /usr/bin/.apt-get $@' > /usr/bin/apt-get && chmod +x /usr/bin/apt-get && \trm -rf /var/lib/apt/lists/* && \tuseradd -m -u 1000 user","timestamp":"2026-07-19T08:50:16.651Z"}
30
-
31
- data: {"data":"CACHED\n","timestamp":"2026-07-19T08:50:16.651Z"}
32
-
33
- data: {"data":"--> COPY --chown=1000:1000 --from=root / /","timestamp":"2026-07-19T08:50:16.651Z"}
34
-
35
- data: {"data":"CACHED\n","timestamp":"2026-07-19T08:50:16.651Z"}
36
-
37
- data: {"data":"--> RUN --mount=target=/tmp/requirements.txt,source=requirements.txt pip install --no-cache-dir -r /tmp/requirements.txt \"torch<=2.11.0\" gradio[oauth,mcp]==6.20.0 \"uvicorn>=0.14.0\" \"websockets>=10.4\" spaces==0.51.0","timestamp":"2026-07-19T08:50:16.651Z"}
38
-
39
- data: {"data":"CACHED\n","timestamp":"2026-07-19T08:50:16.651Z"}
40
-
41
- data: {"data":"--> COPY --link --chown=1000 ./ /home/user/app","timestamp":"2026-07-19T08:50:16.651Z"}
42
-
43
- data: {"data":"DONE 0.0s\n","timestamp":"2026-07-19T08:50:16.651Z"}
44
-
45
- data: {"data":"--> COPY --from=pipfreeze --link --chown=1000 /tmp/freeze.txt /tmp/freeze.txt","timestamp":"2026-07-19T08:50:16.651Z"}
46
-
47
- data: {"data":"DONE 0.0s\n","timestamp":"2026-07-19T08:50:16.651Z"}
48
-
49
- data: {"data":"--> Pushing image","timestamp":"2026-07-19T08:50:16.651Z"}
50
-
51
- data: {"data":"DONE 0.8s\n","timestamp":"2026-07-19T08:50:17.469Z"}
52
-
53
- data: {"data":"--> Exporting cache","timestamp":"2026-07-19T08:50:17.469Z"}
54
-
55
- data: {"data":"DONE 0.6s\n","timestamp":"2026-07-19T08:50:17.948Z"}
56
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_avatarjs.txt DELETED
@@ -1,16 +0,0 @@
1
- LEN 13225
2
- --- .glb @ 6101 ---
3
- .head);
4
- await head.showAvatar(
5
- { url: opt.avatarUrl ?? "/avatars/vuong.glb", body: opt.body ?? "F", avatarMood: "neutral" },
6
- (ev) => {
7
- if (ev.lengthComputable) {
8
- const pct = Math.min(100, Math.round((ev.loaded / ev.total) * 100));
9
- if (t
10
- --- image @ -1 ---
11
- --- thumbnail @ -1 ---
12
- --- img @ -1 ---
13
- --- avatarName @ -1 ---
14
- --- avatar.name @ -1 ---
15
- --- src @ -1 ---
16
- --- public/avatars @ -1 ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_avfiles.txt DELETED
@@ -1,3 +0,0 @@
1
- avatar files: ['public/avatars/Ella.glb', 'public/avatars/Lisa.glb', 'public/avatars/avatarsdk.glb', 'public/avatars/avaturn.glb', 'public/avatars/bruce_avaturn.glb', 'public/avatars/brunette-t.glb', 'public/avatars/brunette.glb', 'public/avatars/david.glb', 'public/avatars/fabio_avaturn.glb', 'public/avatars/julia.glb', 'public/avatars/lisamy.glb', 'public/avatars/mpfb.glb', 'public/avatars/ready_player_me_1.glb', 'public/avatars/ready_player_me_2.glb', 'public/avatars/vuong.glb', 'src/avatar.js']
2
- top dirs: ['public', 'src']
3
- total: 85
 
 
 
 
_avlist.txt DELETED
@@ -1,7 +0,0 @@
1
- ===== src/app.js (len 59372) =====
2
- [avatarList @ 8893] = false; let config = { lb: false, allowDirect: true }; let avatarList = []; let sessionInProgress = false; let autoGreetingSent = false; let preFetchedNews = []; let latestNewsUrl = null; let latestNewsSource = null; // ── News box state
3
- [avatars @ 24432] chAvatarList() { try { const resp = await fetch("/api/avatars"); if (resp.ok) avatarList = (await resp.json()).avatars || []; } catch {} } function populateAvatarSelects(selectedName) { for (const sel of [chatAvatarSelect, se
4
- [/avatars/ @ 25480] await stage.init({ avatarUrl: settings.avatar ? `/avatars/${settings.avatar}` : undefined, onprogress: (ev) => { if (ev.lengthComputable) { loading.textContent = `Loading avatar ${Math.min(100, Math.round(
5
- [case " @ 42381] tatus === "closed" ? "" : "live"); switch (status) { case "idle": case "closed": setMainButton("start", "Start talking"); break; case "error": setMainButton("start", "Retry"); break; case "creating
6
- src/index.html ERR RemoteEntryNotFoundError('404 Client Error. (Request ID: Root=1-6a5cad35-4660b29256e6cd0345252f48;ce084157-0252-44b9-b0f
7
- ===== index.html (len 6890) =====
 
 
 
 
 
 
 
 
_chk.txt DELETED
@@ -1,9 +0,0 @@
1
- len 22595
2
- has gemma-2-2b-it: False
3
- has SUMMARY_ENDPOINT: False
4
- has router.huggingface: True
5
- has Step 1: True
6
- MODEL line: const MODEL = Bun.env.SUMMARY_MODEL || "Qwen/Qwen2.5-7B-Instruct";
7
- let out = "";
8
- try {
9
- c
 
 
 
 
 
 
 
 
 
 
_chk2.txt DELETED
@@ -1,22 +0,0 @@
1
- stage: RUNNING
2
- error: None
3
- hw: {"current": "zero-a10g", "requested": "zero-a10g"}
4
- / HTTP 404 <!DOCTYPE html>
5
- <html class="">
6
- <head>
7
- <meta charset="utf-8"/>
8
- <meta
9
- name="viewport"
10
- content="width=device-width, initial-scale=1.0, user-scalable=no"
11
- />
12
- <meta
13
-
14
- /api/summarize HTTP 404 <!DOCTYPE html>
15
- <html class="">
16
- <head>
17
- <meta charset="utf-8"/>
18
- <meta
19
- name="viewport"
20
- content="width=device-width, initial-scale=1.0, user-scalable=no"
21
- />
22
- <meta
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_cleanup.txt DELETED
@@ -1,5 +0,0 @@
1
- re-uploaded index.ts
2
- deleted summarizer
3
- deleted sumtest
4
- del sumtest2: RepositoryNotFoundError('404 Client Error. (Request ID: Root=1-6a5ca389-4db6171f
5
- del summarizer-api: RepositoryNotFoundError('404 Client Error. (Request ID: Root=1-6a5ca389-1b46a122
 
 
 
 
 
 
_cre3.txt DELETED
@@ -1,2 +0,0 @@
1
- deleted summarizer gradio
2
- create HTTP 400 {"error":"✖ ZeroGPU Spaces only work with Gradio SDK\n → at sdk"}
 
 
 
_cre4.txt DELETED
@@ -1,3 +0,0 @@
1
- deleted
2
- create: 200 {"url":"https://huggingface.co/spaces/bep40/summarizer","name":"bep40/summarizer","id":"6a5c6ba08216657ad2cb7ca3"}
3
- hw now: {"current": null, "requested": "zero-a10g"}
 
 
 
 
_create2.txt DELETED
@@ -1,2 +0,0 @@
1
- deleted summarizer
2
- create: 200 {"url":"https://huggingface.co/spaces/bep40/summarizer","name":"bep40/summarizer","id":"6a5c2a7627b2c876f2456a9e"}
 
 
 
_dbg.txt DELETED
@@ -1,40 +0,0 @@
1
- === startWithSelection tail ===
2
- 2009: async function startWithSelection() {
3
- 2010: hidePicker();
4
- 2011: setCaption("WAKING HER UP…");
5
- 2012: setMainButton("busy", "Loading…");
6
- 2013: loading.classList.remove("done");
7
- 2014: loading.classList.add("active");
8
- 2015: loading.textContent = "Loading avatar...";
9
- 2016: const newsPromise = (settings.avatar === "vuong.glb" || !settings.avatar) ? getHotNews().catch(() => []) : Promise.resolve([]);
10
- 2017: let ok = false;
11
- 2018: try {
12
- 2019: const initPromise = stage.init({
13
- 2020: avatarUrl: settings.avatar ? `/avatars/${settings.avatar}` : undefined,
14
- 2021: onprogress: (ev) => {
15
- 2022: if (ev.lengthComputable) {
16
- 2023: loading.textContent = `Loading avatar ${Math.min(100, Math.round((ev.loaded / ev.total) * 100))}%`;
17
- 2024: }
18
- 2025: }
19
- 2026: });
20
- 2027: const timeout = new Promise((_, rej) => setTimeout(() => rej(new Error("init timeout")), 25000));
21
- 2028: await Promise.race([initPromise, timeout]);
22
- 2029: stage.resume(); // start render loop so the avatar is actually visible (not a single black frame)
23
- 2030: ok = true;
24
- 2031: } catch (err) {
25
- 2032: console.error("[startWithSelection] init failed/timeout:", err);
26
- 2033: } finally {
27
- 2034: try { preFetchedNews = await newsPromise; } catch { preFetchedNews = []; }
28
- 2035: newsSeq = preFetchedNews.slice();
29
- 2036: newsSeqIdx = -1;
30
- 2037: newsTopicQuery = "";
31
- 2038: loading.classList.remove("active");
32
- 2039: if (ok) setCaption(CAPTIONS.idle);
33
- 2040: else setCaption("AVATAR KHÔNG HIỂN THỊ — THỬ CHỌN AVATAR KHÁC", "error");
34
- 2041: setMainButton("start", "Start talking");
35
- 2042: }
36
- 2043: }
37
- 2044: const pickerStartBtn = document.getElementById("picker-start");
38
- 2045: if (pickerStartBtn) pickerStartBtn.addEventListener("click", () => void startWithSelection());
39
- === index.html topic-tags line ===
40
- H50: <div id="topic-tags" class="topic-tags" hidden></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_del.txt DELETED
@@ -1,10 +0,0 @@
1
- delete HTTP 404 <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <title>Error</title>
6
- </head>
7
- <body>
8
- <pre>Cannot DELETE /api/repos/bep40/summarizer</pre>
9
- </body>
10
- </html>
 
 
 
 
 
 
 
 
 
 
 
_diag.txt DELETED
@@ -1,9 +0,0 @@
1
- === /api/summarize ===
2
- fallback: True
3
- title: Người dùng: Gemma 3 ra mắt hôm nay hỗ trợ 140 ngôn ngữ và chạy tốt trên điện tho
4
- body: • Người dùng: Gemma 3 ra mắt hôm nay hỗ trợ 140 ngôn ngữ và chạy tốt trên điện thoại.
5
- Avatar: Đúng, nó có các bản từ 1B đến 27B, rất nhẹ.
6
-
7
- === VNEWS /api/publish ===
8
- /api/publish -> HTTP 400 {"error":"Thieu noi dung bai viet"}
9
- /api/wall -> OK: {"post": {"id": "1784377022902", "title": "t", "text": "x", "source": "user", "video": null, "img": "https://vnexpress.net/image1.jpg", "images": [], "created": 1784377022, "created_str": "12:17 18/07/2026"}, "ok": true}
 
 
 
 
 
 
 
 
 
 
_fb.txt DELETED
@@ -1,24 +0,0 @@
1
- t = out.slice(mm.index + mm[0].length).trim(); }
2
- if (!title) title = bodyText.slice(0, 80);
3
- return Response.json({ title, body: bodyText || out });
4
- }
5
- // ── No-model fallback: light paraphrase (NEVER verbatim copy) ──
6
- // Re-flow the chat lines into a short prose summary with a title,
7
- // instead of echoing the raw transcript.
8
- const lines = cleanText.split(/\n+/).map((s) => s.trim()).filter(Boolean);
9
- const titleFb = lines[0] ? (lines[0].length > 80 ? lines[0].slice(0, 77) + "..." : lines[0]) : "Tóm tắt cuộc trò chuyện";
10
- const bodyFb = lines
11
- .map((l) => l.charAt(0).toUpperCase() + l.slice(1))
12
- .join(" ")
13
- .replace(/\s+/g, " ")
14
- .trim();
15
- return Response.json({ title: titleFb, body: bodyFb || cleanText, fallback: true });
16
- } catch (e) {
17
- console.warn(`[summarize] ${e}`);
18
- return Response.json({ error: "summarize failed" }, { status: 502 });
19
- }
20
- },
21
- },
22
- "/api/avatars": {
23
- GET: async () => {
24
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_final_test.txt DELETED
@@ -1,5 +0,0 @@
1
- OK in 0.1s
2
- fallback: True
3
- title: Người dùng: Gemma 3 ra mắt hôm nay hỗ trợ 140 ngôn ngữ và chạy tốt trên điện tho
4
- body: • Người dùng: Gemma 3 ra mắt hôm nay hỗ trợ 140 ngôn ngữ và chạy tốt trên điện thoại.
5
- Avatar: Đúng, nó có các bản từ 1B đến 27B, rất nhẹ.
 
 
 
 
 
 
_glbchk.txt DELETED
@@ -1,5 +0,0 @@
1
- Ella.glb downloaded: /root/.cache/huggingface/hub/spaces--bep40--gemma-multi-avatar/snapshots/93b62270a930420118377bd4fde3537c7016cdb5/public/avatars/Ella.glb size=2857KB
2
- trimesh loaded. geometry count: 9
3
- has SKIN: True
4
- has anim: True
5
- hasImages/texture: True
 
 
 
 
 
 
_hw.txt DELETED
@@ -1,4 +0,0 @@
1
- settings {'hardware': 'zero-a10g', 'zero_gpu': True}: 200 {}
2
- settings {'hardware': 'zero-a10g'}: 200 {}
3
- runtime: {"current": null, "requested": "cpu-basic"}
4
- stage: RUNTIME_ERROR
 
 
 
 
 
_hw2.txt DELETED
@@ -1,4 +0,0 @@
1
- /api/spaces/bep40/summarizer/hardware HTTP 401 {"error":"Invalid username or password."}
2
- /api/spaces/bep40/summarizer/settings PUT: 200 {}
3
- runtime hw: {"current": null, "requested": "cpu-basic"}
4
- stage: RUNTIME_ERROR
 
 
 
 
 
_hw3.txt DELETED
@@ -1,3 +0,0 @@
1
- hw: 200 {}
2
- create-hw HTTP 409 {"error":"You already created this space repo: bep40/summarizer","url":"https://huggingface.co/spaces/bep40/summarizer"}
3
- hw now: {"current": null, "requested": "cpu-basic"}
 
 
 
 
_idxchk.txt DELETED
@@ -1,6 +0,0 @@
1
- len 23470
2
- has 'fallback: true': True
3
- has 'No-model fallback': True
4
- has 're-flow': False
5
- has SUMMARY_ENDPOINT: True
6
- has 'bullet': True
 
 
 
 
 
 
 
_logs3.txt DELETED
@@ -1,7 +0,0 @@
1
- === build ===
2
- data: {"data":"===== Build Queued at 2026-07-18 15:51:06 / Commit SHA: e1a9445 =====\n","timestamp":"2026-07-18T15:51:06Z"}
3
-
4
- data: {"data":"\n--> ERROR: docker.io/huggingface/zero-gpu:latest: not found\n","timestamp":"2026-07-18T15:51:10.975Z"}
5
-
6
-
7
- app HTTP 404 {"error":"Sorry, we can't find the page you are looking for."}
 
 
 
 
 
 
 
 
_logs4.txt DELETED
@@ -1,40 +0,0 @@
1
- state ERR NameError("name 'json' is not defined")
2
- app HTTP 404 {"error":"Sorry, we can't find the page you are looking for."}
3
- === build ===
4
- data: {"data":"===== Build Queued at 2026-07-19 01:41:01 / Commit SHA: cb0f05e =====\n","timestamp":"2026-07-19T01:41:01Z"}
5
-
6
- data: {"data":"--> FROM docker.io/library/python:3.12.12@sha256:cb770de9f47e77715f13434d96f7ebaae7ad3a1f4fd9c8b338549bf99c9980ab","timestamp":"2026-07-19T01:41:06.284Z"}
7
-
8
- data: {"data":"DONE 0.0s\n","timestamp":"2026-07-19T01:41:06.284Z"}
9
-
10
- data: {"data":"--> WORKDIR /home/user/app","timestamp":"2026-07-19T01:41:06.386Z"}
11
-
12
- data: {"data":"CACHED\n","timestamp":"2026-07-19T01:41:06.386Z"}
13
-
14
- data: {"data":"--> RUN apt-get update && apt-get install -y \tgit \tgit-lfs \tffmpeg \tlibsm6 \tlibxext6 \tcmake \trsync \tlibgl1 \t&& rm -rf /var/lib/apt/lists/* \t&& git lfs install","timestamp":"2026-07-19T01:41:06.386Z"}
15
-
16
- data: {"data":"CACHED\n","timestamp":"2026-07-19T01:41:06.386Z"}
17
-
18
- data: {"data":"--> RUN pip install --no-cache-dir pip -U && pip install --no-cache-dir datasets \"huggingface-hub>=0.30\" \"hf-transfer>=0.1.4\" \"protobuf<4\" \"click<8.1\" torch==2.11.0","timestamp":"2026-07-19T01:41:06.386Z"}
19
-
20
- data: {"data":"CACHED\n","timestamp":"2026-07-19T01:41:06.386Z"}
21
-
22
- data: {"data":"--> RUN apt-get update && apt-get install -y fakeroot && mv /usr/bin/apt-get /usr/bin/.apt-get && echo '#!/usr/bin/env sh\\nfakeroot /usr/bin/.apt-get $@' > /usr/bin/apt-get && chmod +x /usr/bin/apt-get && \trm -rf /var/lib/apt/lists/* && \tuseradd -m -u 1000 user","timestamp":"2026-07-19T01:41:06.386Z"}
23
-
24
- data: {"data":"CACHED\n","timestamp":"2026-07-19T01:41:06.386Z"}
25
-
26
- data: {"data":"--> RUN \tapt-get update && \tapt-get install -y curl && \tcurl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \tapt-get install -y nodejs && \trm -rf /var/lib/apt/lists/* && apt-get clean","timestamp":"2026-07-19T01:41:06.386Z"}
27
-
28
- data: {"data":"CACHED\n","timestamp":"2026-07-19T01:41:06.386Z"}
29
-
30
- data: {"data":"--> COPY --chown=1000:1000 --from=root / /","timestamp":"2026-07-19T01:41:06.386Z"}
31
-
32
- data: {"data":"CACHED\n","timestamp":"2026-07-19T01:41:06.386Z"}
33
-
34
- data: {"data":"--> RUN chown -R 1000:1000 /var/","timestamp":"2026-07-19T01:41:06.386Z"}
35
-
36
- data: {"data":"CACHED\n\n--> Restoring cache","timestamp":"2026-07-19T01:41:06.386Z"}
37
-
38
- data: {"data":"DONE 24.0s\n\n--> RUN --mount=target=/tmp/requirements.txt,source=requirements.txt pip install --no-cache-dir -r /tmp/requirements.txt \"torch<=2.11.0\" gradio[oauth,mcp]==6.20.0 \"uvicorn>=0.14.0\" \"websockets>=10.4\" spaces==0.51.0","timestamp":"2026-07-19T01:41:30.478Z"}
39
-
40
- d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_mintest.txt DELETED
@@ -1,10 +0,0 @@
1
- stage: RUNTIME_ERROR
2
- HTTP 404 <!DOCTYPE html>
3
- <html class="">
4
- <head>
5
- <meta charset="utf-8"/>
6
- <meta
7
- name="viewport"
8
- content="width=device-width, initial-scale=1.0, user-scalable=no"
9
- />
10
- <meta
 
 
 
 
 
 
 
 
 
 
 
_recreate.txt DELETED
@@ -1,3 +0,0 @@
1
- deleted summarizer
2
- deleted summarizer-api
3
- create ERR TypeError("HfApi.create_repo() got an unexpected keyword argument 'hardware'")
 
 
 
 
_rtest.txt DELETED
@@ -1,6 +0,0 @@
1
- == featherless-ai ==
2
- -> HTTP 403 <!doctype html> <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en-US"> <![endif]--> <!--[if IE 8]> <html class="no-
3
- == legacy Qwen2.5-7B ==
4
- -> ERR URLError(gaierror(-5, 'No address associated with hostname'))
5
- == legacy Qwen2.5-3B ==
6
- -> ERR URLError(gaierror(-5, 'No address associated with hostname'))
 
 
 
 
 
 
 
_setup.txt DELETED
@@ -1,3 +0,0 @@
1
- hw settings: 200 {}
2
- runtime hw: {"current": null, "requested": "cpu-basic"}
3
- env var: 200 {"SUMMARY_ENDPOINT":{"value":"https://bep40-summarizer-api.hf.space/api/summarize","updatedAt":"2026-07-18T15:51:58.954Z"}}
 
 
 
 
_step2.txt DELETED
@@ -1 +0,0 @@
1
- NOT FOUND
 
 
_sum.txt DELETED
@@ -1,11 +0,0 @@
1
- HTTP 404 <!DOCTYPE html>
2
- <html class="">
3
- <head>
4
- <meta charset="utf-8"/>
5
- <meta
6
- name="viewport"
7
- content="width=device-width, initial-scale=1.0, user-scalable=no"
8
- />
9
- <meta
10
- name="description"
11
- content="We’re on a journey to advance and democratize ar
 
 
 
 
 
 
 
 
 
 
 
 
_sum2.txt DELETED
@@ -1,10 +0,0 @@
1
- state: None runtime: {'stage': 'RUNTIME_ERROR', 'hardware': {'current': None, 'requested': 'cpu-basic'}, 'gcTimeout': 172800, 'errorMessage': 'Exit code: 0. Reason: ', 'replicas': {'requested': 1}, 'devMode': False, 'domains': [{'domain': 'bep40-summarizer.hf.space', 'stage': 'READY'}]}
2
- API HTTP 404 <!DOCTYPE html>
3
- <html class="">
4
- <head>
5
- <meta charset="utf-8"/>
6
- <meta
7
- name="viewport"
8
- content="width=device-width, initial-scale=1.0, user-scalable=no"
9
- />
10
- <meta
 
 
 
 
 
 
 
 
 
 
 
_test10.txt DELETED
@@ -1,10 +0,0 @@
1
- stage: RUNTIME_ERROR
2
- API HTTP 404 <!DOCTYPE html>
3
- <html class="">
4
- <head>
5
- <meta charset="utf-8"/>
6
- <meta
7
- name="viewport"
8
- content="width=device-width, initial-scale=1.0, user-scalable=no"
9
- />
10
- <meta
 
 
 
 
 
 
 
 
 
 
 
_test11.txt DELETED
@@ -1,10 +0,0 @@
1
- stage: RUNNING
2
- API HTTP 404 <!DOCTYPE html>
3
- <html class="">
4
- <head>
5
- <meta charset="utf-8"/>
6
- <meta
7
- name="viewport"
8
- content="width=device-width, initial-scale=1.0, user-scalable=no"
9
- />
10
- <meta
 
 
 
 
 
 
 
 
 
 
 
_test12.txt DELETED
@@ -1,4 +0,0 @@
1
- stage: RUNNING
2
- /api/summarize HTTP 404
3
- /api/summarize/ HTTP 404
4
- /api/predict HTTP 404
 
 
 
 
 
_test13.txt DELETED
@@ -1,10 +0,0 @@
1
- stage: RUNTIME_ERROR
2
- API HTTP 404 <!DOCTYPE html>
3
- <html class="">
4
- <head>
5
- <meta charset="utf-8"/>
6
- <meta
7
- name="viewport"
8
- content="width=device-width, initial-scale=1.0, user-scalable=no"
9
- />
10
- <meta
 
 
 
 
 
 
 
 
 
 
 
_test14.txt DELETED
@@ -1,15 +0,0 @@
1
- stage: RUNTIME_ERROR
2
- /api/summarize HTTP 404 <!DOCTYPE html>
3
- <html class="">
4
- <head>
5
- <meta charset="utf-8"/>
6
- <meta
7
- name="viewport"
8
- content="width=device-width, init
9
- /api/predict HTTP 404 <!DOCTYPE html>
10
- <html class="">
11
- <head>
12
- <meta charset="utf-8"/>
13
- <meta
14
- name="viewport"
15
- content="width=device-width, init
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_test3.txt DELETED
@@ -1,11 +0,0 @@
1
- stage: RUNNING
2
- hw: {"current": "zero-a10g", "requested": "zero-a10g"}
3
- API HTTP 404 <!DOCTYPE html>
4
- <html class="">
5
- <head>
6
- <meta charset="utf-8"/>
7
- <meta
8
- name="viewport"
9
- content="width=device-width, initial-scale=1.0, user-scalable=no"
10
- />
11
- <meta
 
 
 
 
 
 
 
 
 
 
 
 
_test4.txt DELETED
@@ -1,9 +0,0 @@
1
- API HTTP 404 <!DOCTYPE html>
2
- <html class="">
3
- <head>
4
- <meta charset="utf-8"/>
5
- <meta
6
- name="viewport"
7
- content="width=device-width, initial-scale=1.0, user-scalable=no"
8
- />
9
- <meta
 
 
 
 
 
 
 
 
 
 
_test5.txt DELETED
@@ -1,10 +0,0 @@
1
- stage: RUNNING
2
- API HTTP 404 <!DOCTYPE html>
3
- <html class="">
4
- <head>
5
- <meta charset="utf-8"/>
6
- <meta
7
- name="viewport"
8
- content="width=device-width, initial-scale=1.0, user-scalable=no"
9
- />
10
- <meta
 
 
 
 
 
 
 
 
 
 
 
_test6.txt DELETED
@@ -1,11 +0,0 @@
1
- stage: RUNNING
2
- err: None
3
- API HTTP 404 <!DOCTYPE html>
4
- <html class="">
5
- <head>
6
- <meta charset="utf-8"/>
7
- <meta
8
- name="viewport"
9
- content="width=device-width, initial-scale=1.0, user-scalable=no"
10
- />
11
- <meta
 
 
 
 
 
 
 
 
 
 
 
 
_test7.txt DELETED
@@ -1,11 +0,0 @@
1
- stage: RUNNING
2
- err: None
3
- API HTTP 404 <!DOCTYPE html>
4
- <html class="">
5
- <head>
6
- <meta charset="utf-8"/>
7
- <meta
8
- name="viewport"
9
- content="width=device-width, initial-scale=1.0, user-scalable=no"
10
- />
11
- <meta
 
 
 
 
 
 
 
 
 
 
 
 
_test8.txt DELETED
@@ -1,10 +0,0 @@
1
- stage: RUNNING
2
- API HTTP 404 <!DOCTYPE html>
3
- <html class="">
4
- <head>
5
- <meta charset="utf-8"/>
6
- <meta
7
- name="viewport"
8
- content="width=device-width, initial-scale=1.0, user-scalable=no"
9
- />
10
- <meta
 
 
 
 
 
 
 
 
 
 
 
_test9.txt DELETED
@@ -1,11 +0,0 @@
1
- stage: RUNNING
2
- hw: {"current": "zero-a10g", "requested": "zero-a10g"}
3
- API HTTP 404 <!DOCTYPE html>
4
- <html class="">
5
- <head>
6
- <meta charset="utf-8"/>
7
- <meta
8
- name="viewport"
9
- content="width=device-width, initial-scale=1.0, user-scalable=no"
10
- />
11
- <meta