Я настроил простой веб-интерфейс для связи с API Ollama и вывода ответов в окне чата. При запросе модели обычно так:
{
"model": "llama3",
"prompt": "Hello world"
}
Он возвращает стандартный поток ответов. Однако когда я делаю это вот так:
{
"model": "llama3",
"messages": [
{
"role": "user",
"content": "why is the sky blue?"
},
{
"role": "assistant",
"content": "due to rayleigh scattering."
},
{
"role": "user",
"content": "how is that different than mie scattering?"
}
]
}
(Это всего лишь пример из документации )
Он возвращает сообщение, как будто это просто запрос «загрузки», который представляет собой пустую строку. При использовании cURL все работает отлично. Что мне здесь не хватает?
Это код, который я использую для запроса:
let url = "http://localhost:11434/api/generate";
const data = {
"model": "llama3",
"messages": [
{
"role": "user",
"content": "why is the sky blue?"
},
{
"role": "assistant",
"content": "due to rayleigh scattering."
},
{
"role": "user",
"content": "how is that different than mie scattering?"
}
]
};
console.info(data);
const requestOptions = {
method: "POST",
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
};
fetch(url, requestOptions)
.then(res => res.body)
.then(rb => {
const reader = rb.getReader();
return new ReadableStream({
start(controller) {
function push() {
reader.read().then(async ({done, value}) => {
if (done) {
chatbox.innerHTML += "</p>";
console.info("done", done);
controller.close();
return;
}
// Fetch the individual words
await controller.enqueue(value);
let json = JSON.parse(new TextDecoder().decode(value));
chatbox.innerHTML += json.response;
push();
});
}
push();
}
});
})
.then(stream =>
new Response(stream, { headers: { "Content-Type": "text/html" } }).text()
)
.then(result => {
console.info("Result:" + result);
});
обязательно используйте /api/chat
для подсказок в виде сообщений. Похоже, вы используете /api/generate
в своем примере.