44 lines
1.4 KiB
JavaScript
44 lines
1.4 KiB
JavaScript
const { getEnv, UTILITY } = require ('@nexusai/shared')
|
|
|
|
const UTILITY_URL = getEnv('UTILITY_URL', UTILITY.DEFAULT_URL);
|
|
const UTILITY_MODEL = getEnv('UTILITY_MODEL', UTILITY.DEFAULT_MODEL);
|
|
|
|
// Background task inference (extraction/summarization). Uses ollama's /api/chat
|
|
// so the model's own prompt template is server-side, no need for ChatML
|
|
async function utilityComplete({
|
|
system,
|
|
user,
|
|
json = false,
|
|
temperature,
|
|
maxTokens
|
|
}) {
|
|
const messages = [];
|
|
if(system) messages.push({ role: 'system', content: system});
|
|
messages.push ({role: 'user', content: user});
|
|
|
|
const res = await fetch (`${UTILITY_URL}/api/chat`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json'},
|
|
body: JSON.stringify({
|
|
model: UTILITY_MODEL,
|
|
messages,
|
|
stream: false,
|
|
...(json && {format: 'json' }),
|
|
options: {
|
|
temperature: temperature ?? UTILITY.TEMPERATURE,
|
|
num_predict: maxTokens ?? UTILITY.MAX_TOKENS,
|
|
},
|
|
}),
|
|
signal: AbortSignal.timeout(UTILITY.TIMEOUT_MS),
|
|
});
|
|
|
|
if (!res.ok) throw new Error(`Utility backend responded ${res.status}`);
|
|
const data = await res.json();
|
|
|
|
return {
|
|
text: (data.message?.content ?? '').trim(),
|
|
model: data.model,
|
|
}
|
|
}
|
|
|
|
module.exports = { utilityComplete}; |