112 lines
2.8 KiB
TypeScript
112 lines
2.8 KiB
TypeScript
import {
|
|
ProviderClient,
|
|
NextChatProvider,
|
|
createProvider,
|
|
Provider,
|
|
Model,
|
|
} from "@/app/client";
|
|
// import { getClientConfig } from "../config/client";
|
|
import { StoreKey } from "../constant";
|
|
import { createPersistStore } from "../utils/store";
|
|
|
|
export const DEFAULT_CONFIG = {
|
|
lastUpdate: Date.now(), // timestamp, to merge state
|
|
|
|
providers: ProviderClient.getProviderTemplateList()
|
|
.filter((p) => p !== NextChatProvider)
|
|
.map((p) => createProvider(p)),
|
|
};
|
|
|
|
export type ProvidersConfig = typeof DEFAULT_CONFIG;
|
|
|
|
export const useProviders = createPersistStore(
|
|
{ ...DEFAULT_CONFIG },
|
|
(set, get) => {
|
|
const methods = {
|
|
reset() {
|
|
set(() => ({ ...DEFAULT_CONFIG }));
|
|
},
|
|
|
|
addProvider(provider: Provider) {
|
|
set(() => ({
|
|
providers: [...get().providers, provider],
|
|
}));
|
|
},
|
|
|
|
deleteProvider(provider: Provider) {
|
|
set(() => ({
|
|
providers: [
|
|
...get().providers.filter((p) => p.name !== provider.name),
|
|
],
|
|
}));
|
|
},
|
|
|
|
updateProvider(provider: Provider) {
|
|
set(() => ({
|
|
providers: get().providers.map((p) =>
|
|
p.name === provider.name ? provider : p,
|
|
),
|
|
}));
|
|
},
|
|
|
|
getProvider(providerName: string) {
|
|
return get().providers.find((p) => p.name === providerName);
|
|
},
|
|
|
|
addModel(model: Omit<Model, "providerTemplateName">, provider: Provider) {
|
|
const newModel: Model = {
|
|
providerTemplateName: provider.providerTemplateName,
|
|
...model,
|
|
};
|
|
return methods.updateProvider({
|
|
...provider,
|
|
models: [...provider.models, newModel],
|
|
});
|
|
},
|
|
|
|
deleteModel(model: Model, provider: Provider) {
|
|
return methods.updateProvider({
|
|
...provider,
|
|
models: provider.models.filter((m) => m.name !== model.name),
|
|
});
|
|
},
|
|
|
|
updateModel(model: Model, provider: Provider) {
|
|
return methods.updateProvider({
|
|
...provider,
|
|
models: provider.models.map((m) =>
|
|
m.name === model.name ? model : m,
|
|
),
|
|
});
|
|
},
|
|
|
|
getModel(
|
|
modelName: string,
|
|
providerName: string,
|
|
): (Model & { providerName: string }) | undefined {
|
|
const provider = methods.getProvider(providerName);
|
|
const model = provider?.models.find((m) => m.name === modelName);
|
|
return model
|
|
? {
|
|
...model,
|
|
providerName: provider!.name,
|
|
}
|
|
: undefined;
|
|
},
|
|
|
|
allModels() {},
|
|
};
|
|
|
|
return methods;
|
|
},
|
|
{
|
|
name: StoreKey.Provider,
|
|
version: 1.0,
|
|
migrate(persistedState, version) {
|
|
const state = persistedState as ProvidersConfig;
|
|
|
|
return state as any;
|
|
},
|
|
},
|
|
);
|