Files
Heimgeist/src/chatApi.js

144 lines
3.4 KiB
JavaScript

import { expectBackendJson } from './backendApi'
export async function fetchModelCapabilities(apiBase, modelName, signal) {
const response = await fetch(
`${apiBase}/models/capabilities?name=${encodeURIComponent(modelName)}`,
{ signal }
)
return expectBackendJson(response)
}
export async function fetchStartupOllamaStatus(apiBase) {
const response = await fetch(`${apiBase}/ollama/startup-status`)
return expectBackendJson(response)
}
export async function prepareStartupModels(apiBase) {
const response = await fetch(`${apiBase}/startup/prepare-models`, { method: 'POST' })
return expectBackendJson(response)
}
export async function fetchLocalLibraryContext(apiBase, slug, prompt, signal) {
if (!slug) return { contextBlock: null, sources: [] }
const response = await fetch(`${apiBase}/libraries/${slug}/context`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
signal,
body: JSON.stringify({
prompt,
top_k: 5,
}),
})
const data = await response.json()
return {
contextBlock: typeof data?.context_block === 'string' && data.context_block.trim()
? data.context_block.trim()
: null,
sources: Array.isArray(data?.sources) ? data.sources : [],
}
}
export async function fetchWebSearchContext({
apiBase,
engines,
historyLimit = 8,
messages,
model,
prompt,
searxUrl,
signal,
}) {
const response = await fetch(`${apiBase}/websearch`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
signal,
body: JSON.stringify({
prompt,
model,
messages,
history_limit: historyLimit,
searx_url: searxUrl || null,
engines: Array.isArray(engines) ? engines : null,
}),
})
const data = await response.json()
return {
contextBlock: typeof data?.context_block === 'string' && data.context_block.trim()
? data.context_block.trim()
: null,
sources: Array.isArray(data?.sources) ? data.sources : [],
}
}
export function postChatMessage({
apiBase,
attachments,
enrichedMessage,
message,
model,
sessionId,
signal,
sources,
stream,
transcriptionModel,
visionModel,
}) {
return fetch(`${apiBase}/chat`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
signal,
body: JSON.stringify({
session_id: sessionId,
model,
message,
enriched_message: enrichedMessage,
stream,
sources: sources || [],
attachments,
vision_model: visionModel || null,
transcription_model: transcriptionModel || null,
}),
})
}
export function postRegenerateMessage({
apiBase,
enrichedMessage,
index,
model,
sessionId,
signal,
sources,
stream,
transcriptionModel,
visionModel,
}) {
return fetch(`${apiBase}/sessions/${sessionId}/regenerate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
signal,
body: JSON.stringify({
index,
model,
stream,
enriched_message: enrichedMessage,
sources: sources || [],
vision_model: visionModel || null,
transcription_model: transcriptionModel || null,
}),
})
}
export function requestGeneratedTitle({ apiBase, message, model, sessionId }) {
return fetch(`${apiBase}/generate-title`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
session_id: sessionId,
message,
model,
}),
})
}