mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2025-04-23 13:08:11 +00:00
o3 model patch
This commit is contained in:
parent
121fbea284
commit
a4d5b2588f
4 changed files with 14 additions and 8 deletions
frontend/src/pages/WorkspaceSettings/AgentConfig/AgentModelSelection
server/utils
|
@ -24,6 +24,8 @@ function supportedModel(provider, model = "") {
|
||||||
"o1-preview-2024-09-12",
|
"o1-preview-2024-09-12",
|
||||||
"o1-mini",
|
"o1-mini",
|
||||||
"o1-mini-2024-09-12",
|
"o1-mini-2024-09-12",
|
||||||
|
"o3-mini",
|
||||||
|
"o3-mini-2025-01-31",
|
||||||
].includes(model) === false
|
].includes(model) === false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,10 +66,13 @@ const MODEL_MAP = {
|
||||||
"o1-preview-2024-09-12": 128_000,
|
"o1-preview-2024-09-12": 128_000,
|
||||||
"o1-mini": 128_000,
|
"o1-mini": 128_000,
|
||||||
"o1-mini-2024-09-12": 128_000,
|
"o1-mini-2024-09-12": 128_000,
|
||||||
|
"o3-mini": 200_000,
|
||||||
|
"o3-mini-2025-01-31": 200_000,
|
||||||
},
|
},
|
||||||
deepseek: {
|
deepseek: {
|
||||||
"deepseek-chat": 128_000,
|
"deepseek-chat": 128_000,
|
||||||
"deepseek-coder": 128_000,
|
"deepseek-coder": 128_000,
|
||||||
|
"deepseek-reasoner": 128_000,
|
||||||
},
|
},
|
||||||
xai: {
|
xai: {
|
||||||
"grok-beta": 131_072,
|
"grok-beta": 131_072,
|
||||||
|
|
|
@ -31,8 +31,8 @@ class OpenAiLLM {
|
||||||
* Check if the model is an o1 model.
|
* Check if the model is an o1 model.
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
get isO1Model() {
|
get isOTypeModel() {
|
||||||
return this.model.startsWith("o1");
|
return this.model.startsWith("o");
|
||||||
}
|
}
|
||||||
|
|
||||||
#appendContext(contextTexts = []) {
|
#appendContext(contextTexts = []) {
|
||||||
|
@ -48,7 +48,8 @@ class OpenAiLLM {
|
||||||
}
|
}
|
||||||
|
|
||||||
streamingEnabled() {
|
streamingEnabled() {
|
||||||
if (this.isO1Model) return false;
|
// o3-mini is the only o-type model that supports streaming
|
||||||
|
if (this.isOTypeModel && this.model !== "o3-mini") return false;
|
||||||
return "streamGetChatCompletion" in this;
|
return "streamGetChatCompletion" in this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +69,7 @@ class OpenAiLLM {
|
||||||
async isValidChatCompletionModel(modelName = "") {
|
async isValidChatCompletionModel(modelName = "") {
|
||||||
const isPreset =
|
const isPreset =
|
||||||
modelName.toLowerCase().includes("gpt") ||
|
modelName.toLowerCase().includes("gpt") ||
|
||||||
modelName.toLowerCase().includes("o1");
|
modelName.toLowerCase().startsWith("o");
|
||||||
if (isPreset) return true;
|
if (isPreset) return true;
|
||||||
|
|
||||||
const model = await this.openai.models
|
const model = await this.openai.models
|
||||||
|
@ -117,7 +118,7 @@ class OpenAiLLM {
|
||||||
// in order to combat this, we can use the "user" role as a replacement for now
|
// in order to combat this, we can use the "user" role as a replacement for now
|
||||||
// https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880
|
// https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880
|
||||||
const prompt = {
|
const prompt = {
|
||||||
role: this.isO1Model ? "user" : "system",
|
role: this.isOTypeModel ? "user" : "system",
|
||||||
content: `${systemPrompt}${this.#appendContext(contextTexts)}`,
|
content: `${systemPrompt}${this.#appendContext(contextTexts)}`,
|
||||||
};
|
};
|
||||||
return [
|
return [
|
||||||
|
@ -141,7 +142,7 @@ class OpenAiLLM {
|
||||||
.create({
|
.create({
|
||||||
model: this.model,
|
model: this.model,
|
||||||
messages,
|
messages,
|
||||||
temperature: this.isO1Model ? 1 : temperature, // o1 models only accept temperature 1
|
temperature: this.isOTypeModel ? 1 : temperature, // o1 models only accept temperature 1
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
throw new Error(e.message);
|
throw new Error(e.message);
|
||||||
|
@ -177,7 +178,7 @@ class OpenAiLLM {
|
||||||
model: this.model,
|
model: this.model,
|
||||||
stream: true,
|
stream: true,
|
||||||
messages,
|
messages,
|
||||||
temperature: this.isO1Model ? 1 : temperature, // o1 models only accept temperature 1
|
temperature: this.isOTypeModel ? 1 : temperature, // o1 models only accept temperature 1
|
||||||
}),
|
}),
|
||||||
messages
|
messages
|
||||||
// runPromptTokenCalculation: true - We manually count the tokens because OpenAI does not provide them in the stream
|
// runPromptTokenCalculation: true - We manually count the tokens because OpenAI does not provide them in the stream
|
||||||
|
|
|
@ -145,7 +145,7 @@ async function openAiModels(apiKey = null) {
|
||||||
.filter(
|
.filter(
|
||||||
(model) =>
|
(model) =>
|
||||||
(model.id.includes("gpt") && !model.id.startsWith("ft:")) ||
|
(model.id.includes("gpt") && !model.id.startsWith("ft:")) ||
|
||||||
model.id.includes("o1")
|
model.id.startsWith("o") // o1, o1-mini, o3, etc
|
||||||
)
|
)
|
||||||
.filter(
|
.filter(
|
||||||
(model) =>
|
(model) =>
|
||||||
|
|
Loading…
Add table
Reference in a new issue