144 lines
3.4 KiB
JavaScript
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,
|
|
}),
|
|
})
|
|
}
|