|
@@ -5,6 +5,9 @@ import { ApiHandlerOptions, ModelInfo, openAiModelInfoSaneDefaults } from "../..
|
|
|
import { convertToOpenAiMessages } from "../transform/openai-format"
|
|
import { convertToOpenAiMessages } from "../transform/openai-format"
|
|
|
import { convertToR1Format } from "../transform/r1-format"
|
|
import { convertToR1Format } from "../transform/r1-format"
|
|
|
import { ApiStream } from "../transform/stream"
|
|
import { ApiStream } from "../transform/stream"
|
|
|
|
|
+import { DEEP_SEEK_DEFAULT_TEMPERATURE } from "./openai"
|
|
|
|
|
+
|
|
|
|
|
+const OLLAMA_DEFAULT_TEMPERATURE = 0
|
|
|
|
|
|
|
|
export class OllamaHandler implements ApiHandler, SingleCompletionHandler {
|
|
export class OllamaHandler implements ApiHandler, SingleCompletionHandler {
|
|
|
private options: ApiHandlerOptions
|
|
private options: ApiHandlerOptions
|
|
@@ -20,7 +23,7 @@ export class OllamaHandler implements ApiHandler, SingleCompletionHandler {
|
|
|
|
|
|
|
|
async *createMessage(systemPrompt: string, messages: Anthropic.Messages.MessageParam[]): ApiStream {
|
|
async *createMessage(systemPrompt: string, messages: Anthropic.Messages.MessageParam[]): ApiStream {
|
|
|
const modelId = this.getModel().id
|
|
const modelId = this.getModel().id
|
|
|
- const useR1Format = modelId.toLowerCase().includes('deepseek-r1')
|
|
|
|
|
|
|
+ const useR1Format = modelId.toLowerCase().includes("deepseek-r1")
|
|
|
const openAiMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [
|
|
const openAiMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [
|
|
|
{ role: "system", content: systemPrompt },
|
|
{ role: "system", content: systemPrompt },
|
|
|
...(useR1Format ? convertToR1Format(messages) : convertToOpenAiMessages(messages)),
|
|
...(useR1Format ? convertToR1Format(messages) : convertToOpenAiMessages(messages)),
|
|
@@ -29,7 +32,7 @@ export class OllamaHandler implements ApiHandler, SingleCompletionHandler {
|
|
|
const stream = await this.client.chat.completions.create({
|
|
const stream = await this.client.chat.completions.create({
|
|
|
model: this.getModel().id,
|
|
model: this.getModel().id,
|
|
|
messages: openAiMessages,
|
|
messages: openAiMessages,
|
|
|
- temperature: 0,
|
|
|
|
|
|
|
+ temperature: this.options.modelTemperature ?? OLLAMA_DEFAULT_TEMPERATURE,
|
|
|
stream: true,
|
|
stream: true,
|
|
|
})
|
|
})
|
|
|
for await (const chunk of stream) {
|
|
for await (const chunk of stream) {
|
|
@@ -53,11 +56,15 @@ export class OllamaHandler implements ApiHandler, SingleCompletionHandler {
|
|
|
async completePrompt(prompt: string): Promise<string> {
|
|
async completePrompt(prompt: string): Promise<string> {
|
|
|
try {
|
|
try {
|
|
|
const modelId = this.getModel().id
|
|
const modelId = this.getModel().id
|
|
|
- const useR1Format = modelId.toLowerCase().includes('deepseek-r1')
|
|
|
|
|
|
|
+ const useR1Format = modelId.toLowerCase().includes("deepseek-r1")
|
|
|
const response = await this.client.chat.completions.create({
|
|
const response = await this.client.chat.completions.create({
|
|
|
model: this.getModel().id,
|
|
model: this.getModel().id,
|
|
|
- messages: useR1Format ? convertToR1Format([{ role: "user", content: prompt }]) : [{ role: "user", content: prompt }],
|
|
|
|
|
- temperature: 0,
|
|
|
|
|
|
|
+ messages: useR1Format
|
|
|
|
|
+ ? convertToR1Format([{ role: "user", content: prompt }])
|
|
|
|
|
+ : [{ role: "user", content: prompt }],
|
|
|
|
|
+ temperature:
|
|
|
|
|
+ this.options.modelTemperature ??
|
|
|
|
|
+ (useR1Format ? DEEP_SEEK_DEFAULT_TEMPERATURE : OLLAMA_DEFAULT_TEMPERATURE),
|
|
|
stream: false,
|
|
stream: false,
|
|
|
})
|
|
})
|
|
|
return response.choices[0]?.message.content || ""
|
|
return response.choices[0]?.message.content || ""
|