mirror of
https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
synced 2025-11-16 14:03:43 +08:00
feat: 1) Present 'maxtokens' as properties tied to a single model. 2) Remove the original author's implementation of the send verification logic and replace it with a user input validator. Pre-verification 3) Provides the ability to pull the 'User Visible modellist' provided by 'provider' 4) Provider-related parameters are passed in the constructor of 'providerClient'. Not passed in the 'chat' method
This commit is contained in:
@@ -1,23 +1,28 @@
|
||||
import { ChatRequestPayload, Model, ModelConfig, ChatHandlers } from "./types";
|
||||
import { ProviderClient, ProviderTemplateName } from "./providerClient";
|
||||
import {
|
||||
ChatRequestPayload,
|
||||
Model,
|
||||
ModelSettings,
|
||||
InternalChatHandlers,
|
||||
} from "../common";
|
||||
import { Provider, ProviderClient } from "./providerClient";
|
||||
|
||||
export class ModelClient {
|
||||
static getAllProvidersDefaultModels = () => {
|
||||
return ProviderClient.getAllProvidersDefaultModels();
|
||||
};
|
||||
|
||||
constructor(
|
||||
private model: Model,
|
||||
private modelConfig: ModelConfig,
|
||||
private modelSettings: ModelSettings,
|
||||
private providerClient: ProviderClient,
|
||||
) {}
|
||||
|
||||
chat(payload: ChatRequestPayload, handlers: ChatHandlers) {
|
||||
chat(payload: ChatRequestPayload, handlers: InternalChatHandlers) {
|
||||
try {
|
||||
return this.providerClient.streamChat(
|
||||
{
|
||||
...payload,
|
||||
modelConfig: this.modelConfig,
|
||||
modelConfig: {
|
||||
...this.modelSettings,
|
||||
max_tokens:
|
||||
this.model.max_tokens ?? this.modelSettings.global_max_tokens,
|
||||
},
|
||||
model: this.model.name,
|
||||
},
|
||||
handlers,
|
||||
@@ -31,7 +36,11 @@ export class ModelClient {
|
||||
try {
|
||||
return this.providerClient.chat({
|
||||
...payload,
|
||||
modelConfig: this.modelConfig,
|
||||
modelConfig: {
|
||||
...this.modelSettings,
|
||||
max_tokens:
|
||||
this.model.max_tokens ?? this.modelSettings.global_max_tokens,
|
||||
},
|
||||
model: this.model.name,
|
||||
});
|
||||
} catch (e) {
|
||||
@@ -40,7 +49,50 @@ export class ModelClient {
|
||||
}
|
||||
}
|
||||
|
||||
export function ModelClientFactory(model: Model, modelConfig: ModelConfig) {
|
||||
const providerClient = new ProviderClient(model.providerTemplateName);
|
||||
return new ModelClient(model, modelConfig, providerClient);
|
||||
// must generate new ModelClient during every chat
|
||||
export function ModelClientFactory(
|
||||
model: Model,
|
||||
provider: Provider,
|
||||
modelSettings: ModelSettings,
|
||||
) {
|
||||
const providerClient = new ProviderClient(provider);
|
||||
return new ModelClient(model, modelSettings, providerClient);
|
||||
}
|
||||
|
||||
export function getFiltertModels(
|
||||
models: readonly Model[],
|
||||
customModels: string,
|
||||
) {
|
||||
const modelTable: Record<string, Model> = {};
|
||||
|
||||
// default models
|
||||
models.forEach((m) => {
|
||||
modelTable[m.name] = m;
|
||||
});
|
||||
|
||||
// server custom models
|
||||
customModels
|
||||
.split(",")
|
||||
.filter((v) => !!v && v.length > 0)
|
||||
.forEach((m) => {
|
||||
const available = !m.startsWith("-");
|
||||
const nameConfig =
|
||||
m.startsWith("+") || m.startsWith("-") ? m.slice(1) : m;
|
||||
const [name, displayName] = nameConfig.split("=");
|
||||
|
||||
// enable or disable all models
|
||||
if (name === "all") {
|
||||
Object.values(modelTable).forEach(
|
||||
(model) => (model.available = available),
|
||||
);
|
||||
} else {
|
||||
modelTable[name] = {
|
||||
...modelTable[name],
|
||||
displayName,
|
||||
available,
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
return modelTable;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user