Skip to content

Commit 798f95e

Browse files
committed
llm: disable gpt 3.5 and 3.5 16k and fix+test getValidLanguageModelName
1 parent ee2d2a9 commit 798f95e

File tree

2 files changed

+85
-17
lines changed

2 files changed

+85
-17
lines changed

src/packages/util/db-schema/llm-utils.test.ts

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
import {
22
DEFAULT_LLM_PRIORITY,
3+
DEFAULT_MODEL,
4+
getValidLanguageModelName,
5+
isCoreLanguageModel,
36
isFreeModel,
47
LANGUAGE_MODEL_SERVICES,
58
LANGUAGE_MODELS,
9+
LanguageService,
610
LLM_COST,
11+
LLMServicesAvailable,
712
model2vendor,
813
OLLAMA_PREFIX,
914
SERVICES,
@@ -83,4 +88,64 @@ describe("llm", () => {
8388
expect(prio.includes(v)).toBe(true);
8489
}
8590
});
91+
92+
test("getting valid language model", () => {
93+
const selectable_llms = [...USER_SELECTABLE_LANGUAGE_MODELS];
94+
const notAvailable = selectable_llms.pop();
95+
96+
function getModel(model: LanguageService, disabled?: LanguageService) {
97+
const allEnabled = LANGUAGE_MODEL_SERVICES.reduce((acc, svc) => {
98+
acc[svc] = disabled !== svc;
99+
return acc;
100+
}, {}) as LLMServicesAvailable;
101+
return getValidLanguageModelName({
102+
model,
103+
filter: allEnabled,
104+
ollama: ["phi3"],
105+
custom_openai: ["bar"],
106+
selectable_llms,
107+
});
108+
}
109+
110+
// meaningless name
111+
expect(getModel("foobar")).toEqual(DEFAULT_MODEL);
112+
expect(getModel("baz-delta99")).toEqual(DEFAULT_MODEL);
113+
// gpt 3.5 is disabled
114+
expect(getModel("gpt-3.5-turbo")).toEqual(DEFAULT_MODEL);
115+
// not available
116+
expect(
117+
typeof notAvailable === "string" && isCoreLanguageModel(notAvailable),
118+
).toBe(true);
119+
if (typeof notAvailable === "string") {
120+
expect(getModel(notAvailable)).toEqual(DEFAULT_MODEL);
121+
}
122+
// not disabled
123+
expect(getModel("mistral-large-latest")).toEqual("mistral-large-latest");
124+
expect(getModel("gpt-4")).toEqual("gpt-4");
125+
expect(getModel(DEFAULT_MODEL)).toEqual(DEFAULT_MODEL);
126+
expect(getModel("mistral-medium-latest")).toEqual(DEFAULT_MODEL);
127+
expect(getModel("mistral-large-latest")).toEqual("mistral-large-latest");
128+
expect(getModel("claude-3-haiku-8k")).toEqual("claude-3-haiku-8k");
129+
// anthropic service disabled
130+
expect(getModel("claude-3-haiku-8k", "anthropic")).toEqual(DEFAULT_MODEL);
131+
// ollama
132+
expect(getModel("ollama-foo")).toEqual(DEFAULT_MODEL);
133+
expect(getModel("ollama-phi3")).toEqual("ollama-phi3");
134+
// openai api
135+
expect(getModel("custom_openai-foo")).toEqual(DEFAULT_MODEL);
136+
expect(getModel("custom_openai-bar")).toEqual("custom_openai-bar");
137+
// user models: there are no further checks
138+
expect(getModel("user-custom_openai-foo")).toEqual(
139+
"user-custom_openai-foo",
140+
);
141+
expect(getModel("user-openai-gpt-3.5-turbo")).toEqual(
142+
"user-openai-gpt-3.5-turbo",
143+
);
144+
// it's ok to use a model if disabled by the admin, since it's their key
145+
expect(getModel("user-anthropic-claude-3-haiku-8k", "anthropic")).toEqual(
146+
"user-anthropic-claude-3-haiku-8k",
147+
);
148+
// meaningless user service
149+
expect(getModel("user-baz-delta99")).toEqual(DEFAULT_MODEL);
150+
});
86151
});

src/packages/util/db-schema/llm-utils.ts

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -214,12 +214,7 @@ export const USER_SELECTABLE_LLMS_BY_VENDOR: {
214214
[vendor in LLMServiceName]: Readonly<LanguageModelCore[]>;
215215
} = {
216216
openai: MODELS_OPENAI.filter(
217-
(m) =>
218-
m === "gpt-3.5-turbo" ||
219-
m === "gpt-3.5-turbo-16k" ||
220-
m === "gpt-4" ||
221-
m === "gpt-4-turbo-preview-8k" ||
222-
m === "gpt-4o-8k",
217+
(m) => m === "gpt-4" || m === "gpt-4-turbo-preview-8k" || m === "gpt-4o-8k",
223218
),
224219
google: GOOGLE_MODELS.filter(
225220
(m) =>
@@ -367,20 +362,28 @@ export function getValidLanguageModelName({
367362
}: ValidLanguageModelNameProps): LanguageModel {
368363
if (typeof model === "string" && isValidModel(model)) {
369364
try {
370-
const v = model2vendor(model).name;
371-
if (filter[v]) {
365+
if (isCoreLanguageModel(model)) {
366+
const v = model2vendor(model).name;
367+
if (filter[v] && selectable_llms.includes(model)) {
368+
return model;
369+
}
370+
}
371+
372+
if (isOllamaLLM(model) && ollama.includes(fromOllamaModel(model))) {
373+
return model;
374+
}
375+
376+
if (
377+
isCustomOpenAI(model) &&
378+
custom_openai.includes(fromCustomOpenAIModel(model))
379+
) {
380+
return model;
381+
}
382+
383+
if (isUserDefinedModel(model)) {
372384
return model;
373385
}
374386
} catch {}
375-
if (isOllamaLLM(model) && ollama.includes(fromOllamaModel(model))) {
376-
return model;
377-
}
378-
if (
379-
isCustomOpenAI(model) &&
380-
custom_openai.includes(fromCustomOpenAIModel(model))
381-
) {
382-
return model;
383-
}
384387
}
385388

386389
for (const free of [true, false]) {

0 commit comments

Comments
 (0)