Files
ai_mouse/static/js/api.js
Huang Qi 4d414fd180 chore: initialize git repo, add matplotlib dep, extend config
- Add .gitignore for Python/data/models
- Add matplotlib>=3.8.0 for eval plots
- Add PretrainConfig, FinetuneConfig, BalabitAdapterConfig, EvalConfig dataclasses
2026-05-10 12:24:07 +08:00

40 lines
1.1 KiB
JavaScript

/**
* API utilities: axios instance and SSE helper.
*/
export const API_BASE = ''
export const api = axios.create({ baseURL: '/api' })
/**
* Consume a Server-Sent Events stream from a POST endpoint.
* @param {string} url - The URL to POST to (e.g. '/api/train')
* @param {object} body - JSON body to send
* @param {function} onMessage - Callback invoked with each parsed SSE message object
* @returns {Promise<void>}
*/
export async function fetchSSE(url, body, onMessage) {
const resp = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body),
})
const reader = resp.body.getReader()
const dec = new TextDecoder()
let buf = ''
while (true) {
const { done, value } = await reader.read()
if (done) break
buf += dec.decode(value, { stream: true })
const parts = buf.split('\n\n')
buf = parts.pop()
for (const part of parts) {
const line = part.trim()
if (!line.startsWith('data:')) continue
const msg = JSON.parse(line.slice(5).trim())
onMessage(msg)
}
}
}