mirror of
https://github.com/QuivrHQ/quivr.git
synced 2024-09-11 14:36:35 +03:00
feat: remove <BrainConfigProvider /> (#1154)
This commit is contained in:
parent
7cc90ef258
commit
7f9ea9d64c
@ -1,5 +1,3 @@
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||
/* eslint-disable max-lines */
|
||||
|
||||
import { UUID } from "crypto";
|
||||
@ -10,11 +8,8 @@ import Button from "@/lib/components/ui/Button";
|
||||
import { Divider } from "@/lib/components/ui/Divider";
|
||||
import Field from "@/lib/components/ui/Field";
|
||||
import { TextArea } from "@/lib/components/ui/TextArea";
|
||||
import {
|
||||
freeModels,
|
||||
paidModels,
|
||||
} from "@/lib/context/BrainConfigProvider/types";
|
||||
import { defineMaxTokens } from "@/lib/helpers/defineMaxTokens";
|
||||
import { freeModels, paidModels } from "@/lib/types/brainConfig";
|
||||
import { SaveButton } from "@/shared/SaveButton";
|
||||
|
||||
import { PublicPrompts } from "./components/PublicPrompts/PublicPrompts";
|
||||
|
@ -10,7 +10,7 @@ import { useTranslation } from "react-i18next";
|
||||
import { getBrainDataKey } from "@/lib/api/brain/config";
|
||||
import { useBrainApi } from "@/lib/api/brain/useBrainApi";
|
||||
import { usePromptApi } from "@/lib/api/prompt/usePromptApi";
|
||||
import { useBrainConfig } from "@/lib/context/BrainConfigProvider";
|
||||
import { defaultBrainConfig } from "@/lib/config/defaultBrainConfig";
|
||||
import { useBrainContext } from "@/lib/context/BrainProvider/hooks/useBrainContext";
|
||||
import { Brain } from "@/lib/context/BrainProvider/types";
|
||||
import { defineMaxTokens } from "@/lib/helpers/defineMaxTokens";
|
||||
@ -30,13 +30,12 @@ export const useSettingsTab = ({ brainId }: UseSettingsTabProps) => {
|
||||
const { publish } = useToast();
|
||||
const formRef = useRef<HTMLFormElement>(null);
|
||||
const { setAsDefaultBrain, getBrain, updateBrain } = useBrainApi();
|
||||
const { config } = useBrainConfig();
|
||||
const { fetchAllBrains, fetchDefaultBrain, defaultBrainId } =
|
||||
useBrainContext();
|
||||
const { getPrompt, updatePrompt, createPrompt } = usePromptApi();
|
||||
|
||||
const defaultValues = {
|
||||
...config,
|
||||
...defaultBrainConfig,
|
||||
name: "",
|
||||
description: "",
|
||||
setDefault: false,
|
||||
|
@ -1,10 +1,6 @@
|
||||
import { render } from "@testing-library/react";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
|
||||
import {
|
||||
BrainConfigContextMock,
|
||||
BrainConfigProviderMock,
|
||||
} from "@/lib/context/BrainConfigProvider/mocks/BrainConfigProviderMock";
|
||||
import {
|
||||
BrainContextMock,
|
||||
BrainProviderMock,
|
||||
@ -38,10 +34,6 @@ vi.mock("@/lib/context/BrainProvider/brain-provider", () => ({
|
||||
BrainContext: BrainContextMock,
|
||||
}));
|
||||
|
||||
vi.mock("@/lib/context/BrainConfigProvider/brain-config-provider", () => ({
|
||||
BrainConfigContext: BrainConfigContextMock,
|
||||
}));
|
||||
|
||||
vi.mock("@/lib/api/chat/useChatApi", () => ({
|
||||
useChatApi: () => ({
|
||||
getHistory: () => [],
|
||||
@ -53,11 +45,9 @@ describe("Chat page", () => {
|
||||
const { getByTestId } = render(
|
||||
<ChatProviderMock>
|
||||
<SupabaseProviderMock>
|
||||
<BrainConfigProviderMock>
|
||||
<BrainProviderMock>
|
||||
<SelectedChatPage />,
|
||||
</BrainProviderMock>
|
||||
</BrainConfigProviderMock>
|
||||
<BrainProviderMock>
|
||||
<SelectedChatPage />,
|
||||
</BrainProviderMock>
|
||||
</SupabaseProviderMock>
|
||||
</ChatProviderMock>
|
||||
);
|
||||
|
@ -3,8 +3,8 @@ import { MdCheck, MdSettings } from "react-icons/md";
|
||||
|
||||
import Button from "@/lib/components/ui/Button";
|
||||
import { Modal } from "@/lib/components/ui/Modal";
|
||||
import { freeModels } from "@/lib/context/BrainConfigProvider/types";
|
||||
import { defineMaxTokens } from "@/lib/helpers/defineMaxTokens";
|
||||
import { freeModels } from "@/lib/types/brainConfig";
|
||||
|
||||
import { useConfigModal } from "./hooks/useConfigModal";
|
||||
|
||||
|
@ -7,7 +7,7 @@ import {
|
||||
getChatConfigFromLocalStorage,
|
||||
saveChatConfigInLocalStorage,
|
||||
} from "@/lib/api/chat/chat.local";
|
||||
import { useBrainConfig } from "@/lib/context/BrainConfigProvider";
|
||||
import { defaultBrainConfig } from "@/lib/config/defaultBrainConfig";
|
||||
import { useBrainContext } from "@/lib/context/BrainProvider/hooks/useBrainContext";
|
||||
import { ChatConfig } from "@/lib/context/ChatProvider/types";
|
||||
import { defineMaxTokens } from "@/lib/helpers/defineMaxTokens";
|
||||
@ -17,7 +17,6 @@ import { useToast } from "@/lib/hooks";
|
||||
export const useConfigModal = (chatId?: string) => {
|
||||
const { publish } = useToast();
|
||||
const [isConfigModalOpen, setIsConfigModalOpen] = useState(false);
|
||||
const { config } = useBrainConfig();
|
||||
const { getBrain } = useBrainApi();
|
||||
const { currentBrain } = useBrainContext();
|
||||
|
||||
@ -51,14 +50,14 @@ export const useConfigModal = (chatId?: string) => {
|
||||
if (relatedBrainConfig === undefined) {
|
||||
return;
|
||||
}
|
||||
setValue("model", relatedBrainConfig.model ?? config.model);
|
||||
setValue("model", relatedBrainConfig.model ?? defaultBrainConfig.model);
|
||||
setValue(
|
||||
"temperature",
|
||||
relatedBrainConfig.temperature ?? config.temperature
|
||||
relatedBrainConfig.temperature ?? defaultBrainConfig.temperature
|
||||
);
|
||||
setValue(
|
||||
"maxTokens",
|
||||
relatedBrainConfig.max_tokens ?? config.maxTokens
|
||||
relatedBrainConfig.max_tokens ?? defaultBrainConfig.maxTokens
|
||||
);
|
||||
}
|
||||
};
|
||||
|
@ -1,8 +1,6 @@
|
||||
import { render } from "@testing-library/react";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
|
||||
import { BrainConfigProvider } from "@/lib/context/BrainConfigProvider";
|
||||
|
||||
import DocumentData from "../DocumentData";
|
||||
|
||||
const useSupabaseMock = vi.fn(() => ({
|
||||
@ -63,9 +61,7 @@ describe("DocumentData", () => {
|
||||
it.skip("should render document data", () => {
|
||||
const documentName = "Test document";
|
||||
const { getByTestId } = render(
|
||||
<BrainConfigProvider>
|
||||
<DocumentData documentName={documentName} />
|
||||
</BrainConfigProvider>
|
||||
<DocumentData documentName={documentName} />
|
||||
);
|
||||
|
||||
expect(getByTestId("document-name")).toBeDefined();
|
||||
|
@ -5,7 +5,6 @@ import { cookies, headers } from "next/headers";
|
||||
|
||||
import { ToastProvider } from "@/lib/components/ui/Toast";
|
||||
import { FeatureFlagsProvider } from "@/lib/context";
|
||||
import { BrainConfigProvider } from "@/lib/context/BrainConfigProvider";
|
||||
import { BrainProvider } from "@/lib/context/BrainProvider";
|
||||
import { SupabaseProvider } from "@/lib/context/SupabaseProvider";
|
||||
|
||||
@ -42,13 +41,11 @@ const RootLayout = async ({
|
||||
<FeatureFlagsProvider>
|
||||
<ToastProvider>
|
||||
<SupabaseProvider session={session}>
|
||||
<BrainConfigProvider>
|
||||
<BrainProvider>
|
||||
<App>
|
||||
<div className="flex-1">{children}</div>
|
||||
</App>
|
||||
</BrainProvider>
|
||||
</BrainConfigProvider>
|
||||
<BrainProvider>
|
||||
<App>
|
||||
<div className="flex-1">{children}</div>
|
||||
</App>
|
||||
</BrainProvider>
|
||||
</SupabaseProvider>
|
||||
</ToastProvider>
|
||||
<Analytics />
|
||||
|
@ -46,12 +46,6 @@ vi.mock("@/lib/hooks", async () => {
|
||||
};
|
||||
});
|
||||
|
||||
vi.mock("@/lib/context/BrainConfigProvider", () => ({
|
||||
useBrainConfig: () => ({
|
||||
config: {},
|
||||
}),
|
||||
}));
|
||||
|
||||
describe("useApiKeyConfig", () => {
|
||||
afterEach(() => {
|
||||
vi.restoreAllMocks();
|
||||
|
@ -7,12 +7,6 @@ vi.mock("@/lib/context/SupabaseProvider", () => ({
|
||||
useSupabase: () => ({}),
|
||||
}));
|
||||
|
||||
vi.mock("@/lib/context/BrainConfigProvider", () => ({
|
||||
useBrainConfig: () => ({
|
||||
config: {},
|
||||
}),
|
||||
}));
|
||||
|
||||
export const getNock = (url?: string): nock.Scope => {
|
||||
return nock(
|
||||
url ?? `${process.env.NEXT_PUBLIC_BACKEND_URL ?? DEFAULT_BACKEND_URL}`
|
||||
|
@ -7,11 +7,8 @@ import { PublicPrompts } from "@/app/brains-management/[brainId]/components/Brai
|
||||
import Button from "@/lib/components/ui/Button";
|
||||
import Field from "@/lib/components/ui/Field";
|
||||
import { Modal } from "@/lib/components/ui/Modal";
|
||||
import {
|
||||
freeModels,
|
||||
paidModels,
|
||||
} from "@/lib/context/BrainConfigProvider/types";
|
||||
import { defineMaxTokens } from "@/lib/helpers/defineMaxTokens";
|
||||
import { freeModels, paidModels } from "@/lib/types/brainConfig";
|
||||
|
||||
import { useAddBrainModal } from "./hooks/useAddBrainModal";
|
||||
import { Divider } from "../ui/Divider";
|
||||
|
@ -6,7 +6,7 @@ import { useTranslation } from "react-i18next";
|
||||
|
||||
import { useBrainApi } from "@/lib/api/brain/useBrainApi";
|
||||
import { usePromptApi } from "@/lib/api/prompt/usePromptApi";
|
||||
import { useBrainConfig } from "@/lib/context/BrainConfigProvider";
|
||||
import { defaultBrainConfig } from "@/lib/config/defaultBrainConfig";
|
||||
import { useBrainContext } from "@/lib/context/BrainProvider/hooks/useBrainContext";
|
||||
import { defineMaxTokens } from "@/lib/helpers/defineMaxTokens";
|
||||
import { useToast } from "@/lib/hooks";
|
||||
@ -20,9 +20,9 @@ export const useAddBrainModal = () => {
|
||||
const { setAsDefaultBrain } = useBrainApi();
|
||||
const { createPrompt } = usePromptApi();
|
||||
const [isShareModalOpen, setIsShareModalOpen] = useState(false);
|
||||
const { config } = useBrainConfig();
|
||||
|
||||
const defaultValues = {
|
||||
...config,
|
||||
...defaultBrainConfig,
|
||||
name: "",
|
||||
description: "",
|
||||
setDefault: false,
|
||||
|
@ -2,10 +2,6 @@
|
||||
import { fireEvent, render } from "@testing-library/react";
|
||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
import {
|
||||
BrainConfigContextMock,
|
||||
BrainConfigProviderMock,
|
||||
} from "@/lib/context/BrainConfigProvider/mocks/BrainConfigProviderMock";
|
||||
import {
|
||||
BrainContextMock,
|
||||
BrainProviderMock,
|
||||
@ -21,10 +17,6 @@ vi.mock("@/lib/context/SupabaseProvider/supabase-provider", () => ({
|
||||
SupabaseContext: SupabaseContextMock,
|
||||
}));
|
||||
|
||||
vi.mock("@/lib/context/BrainConfigProvider/brain-config-provider", () => ({
|
||||
BrainConfigContext: BrainConfigContextMock,
|
||||
}));
|
||||
|
||||
vi.mock("@/lib/context/BrainProvider/brain-provider", () => ({
|
||||
BrainContext: BrainContextMock,
|
||||
}));
|
||||
@ -74,11 +66,9 @@ describe("ShareBrain", () => {
|
||||
it("should render ShareBrain component properly", () => {
|
||||
const { getByTestId } = render(
|
||||
<SupabaseProviderMock>
|
||||
<BrainConfigProviderMock>
|
||||
<BrainProviderMock>
|
||||
<ShareBrain brainId="cf9bb422-b1b6-4fd7-abc1-01bd395d2318" />
|
||||
</BrainProviderMock>
|
||||
</BrainConfigProviderMock>
|
||||
<BrainProviderMock>
|
||||
<ShareBrain brainId="cf9bb422-b1b6-4fd7-abc1-01bd395d2318" />
|
||||
</BrainProviderMock>
|
||||
</SupabaseProviderMock>
|
||||
);
|
||||
const shareButton = getByTestId("share-brain-button");
|
||||
@ -90,9 +80,7 @@ describe("ShareBrain", () => {
|
||||
// Todo: add a custom render function that wraps the component with the providers
|
||||
<SupabaseProviderMock>
|
||||
<BrainProviderMock>
|
||||
<BrainConfigProviderMock>
|
||||
<ShareBrain brainId="cf9bb422-b1b6-4fd7-abc1-01bd395d2318" />
|
||||
</BrainConfigProviderMock>
|
||||
<ShareBrain brainId="cf9bb422-b1b6-4fd7-abc1-01bd395d2318" />
|
||||
</BrainProviderMock>
|
||||
</SupabaseProviderMock>
|
||||
);
|
||||
@ -104,11 +92,9 @@ describe("ShareBrain", () => {
|
||||
it('shoud add new user row when "Add new user" button is clicked and only where there is no empty field', async () => {
|
||||
const { getByTestId, findAllByTestId } = render(
|
||||
<SupabaseProviderMock>
|
||||
<BrainConfigProviderMock>
|
||||
<BrainProviderMock>
|
||||
<ShareBrain brainId="cf9bb422-b1b6-4fd7-abc1-01bd395d2318" />
|
||||
</BrainProviderMock>
|
||||
</BrainConfigProviderMock>
|
||||
<BrainProviderMock>
|
||||
<ShareBrain brainId="cf9bb422-b1b6-4fd7-abc1-01bd395d2318" />
|
||||
</BrainProviderMock>
|
||||
</SupabaseProviderMock>
|
||||
);
|
||||
const shareButton = getByTestId("share-brain-button");
|
||||
|
14
frontend/lib/config/defaultBrainConfig.ts
Normal file
14
frontend/lib/config/defaultBrainConfig.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { BrainConfig } from "../types/brainConfig";
|
||||
|
||||
export const defaultBrainConfig: BrainConfig = {
|
||||
model: "gpt-3.5-turbo",
|
||||
temperature: 0,
|
||||
maxTokens: 256,
|
||||
keepLocal: true,
|
||||
anthropicKey: undefined,
|
||||
backendUrl: undefined,
|
||||
openAiKey: undefined,
|
||||
supabaseKey: undefined,
|
||||
supabaseUrl: undefined,
|
||||
prompt_id: undefined,
|
||||
};
|
@ -1,65 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { createContext, useEffect, useState } from "react";
|
||||
|
||||
import { removeUndefined } from "@/lib/helpers/removeUndefined";
|
||||
|
||||
import {
|
||||
getBrainConfigFromLocalStorage,
|
||||
saveBrainConfigInLocalStorage,
|
||||
} from "./helpers/brainConfigLocalStorage";
|
||||
import { BrainConfig, BrainConfigContextType } from "./types";
|
||||
|
||||
export const BrainConfigContext = createContext<
|
||||
BrainConfigContextType | undefined
|
||||
>(undefined);
|
||||
|
||||
const defaultBrainConfig: BrainConfig = {
|
||||
model: "gpt-3.5-turbo",
|
||||
temperature: 0,
|
||||
maxTokens: 256,
|
||||
keepLocal: true,
|
||||
anthropicKey: undefined,
|
||||
backendUrl: undefined,
|
||||
openAiKey: undefined,
|
||||
supabaseKey: undefined,
|
||||
supabaseUrl: undefined,
|
||||
prompt_id: undefined,
|
||||
};
|
||||
|
||||
export const BrainConfigProvider = ({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}): JSX.Element => {
|
||||
const [brainConfig, setBrainConfig] =
|
||||
useState<BrainConfig>(defaultBrainConfig);
|
||||
|
||||
const updateConfig = (newConfig: Partial<BrainConfig>) => {
|
||||
setBrainConfig((config) => {
|
||||
const updatedConfig: BrainConfig = {
|
||||
...config,
|
||||
...removeUndefined(newConfig),
|
||||
};
|
||||
saveBrainConfigInLocalStorage(updatedConfig);
|
||||
|
||||
return updatedConfig;
|
||||
});
|
||||
};
|
||||
|
||||
const resetConfig = () => {
|
||||
updateConfig(defaultBrainConfig);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
setBrainConfig(getBrainConfigFromLocalStorage() ?? defaultBrainConfig);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<BrainConfigContext.Provider
|
||||
value={{ config: brainConfig, updateConfig, resetConfig }}
|
||||
>
|
||||
{children}
|
||||
</BrainConfigContext.Provider>
|
||||
);
|
||||
};
|
@ -1,21 +0,0 @@
|
||||
/* eslint-disable */
|
||||
import { BrainConfig } from "../types";
|
||||
|
||||
const BRAIN_CONFIG_LOCAL_STORAGE_KEY = "userBrainConfig";
|
||||
|
||||
export const saveBrainConfigInLocalStorage = (updatedConfig: BrainConfig) => {
|
||||
localStorage.setItem(
|
||||
BRAIN_CONFIG_LOCAL_STORAGE_KEY,
|
||||
JSON.stringify(updatedConfig)
|
||||
);
|
||||
};
|
||||
export const getBrainConfigFromLocalStorage = (): BrainConfig | undefined => {
|
||||
const persistedBrainConfig = localStorage.getItem(
|
||||
BRAIN_CONFIG_LOCAL_STORAGE_KEY
|
||||
);
|
||||
if (persistedBrainConfig === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
return JSON.parse(persistedBrainConfig);
|
||||
};
|
@ -1,14 +0,0 @@
|
||||
import { useContext } from "react";
|
||||
|
||||
import { BrainConfigContext } from "@/lib/context/BrainConfigProvider/brain-config-provider";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
export const useBrainConfig = () => {
|
||||
const context = useContext(BrainConfigContext);
|
||||
|
||||
if (context === undefined) {
|
||||
throw new Error("useBrainConfig must be used inside BrainConfigProvider");
|
||||
}
|
||||
|
||||
return context;
|
||||
};
|
@ -1,2 +0,0 @@
|
||||
export * from "./brain-config-provider";
|
||||
export * from "./hooks/useBrainConfig";
|
@ -1,28 +0,0 @@
|
||||
import { createContext, PropsWithChildren } from "react";
|
||||
|
||||
import { BrainConfigContextType } from "../types";
|
||||
|
||||
export const BrainConfigContextMock = createContext<
|
||||
BrainConfigContextType | undefined
|
||||
>(undefined);
|
||||
|
||||
export const BrainConfigProviderMock = ({
|
||||
children,
|
||||
}: PropsWithChildren): JSX.Element => {
|
||||
return (
|
||||
<BrainConfigContextMock.Provider
|
||||
value={{
|
||||
config: {
|
||||
model: "gpt-3.5-turbo",
|
||||
temperature: 0,
|
||||
maxTokens: 256,
|
||||
keepLocal: true,
|
||||
},
|
||||
updateConfig: () => void 0,
|
||||
resetConfig: () => void 0,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</BrainConfigContextMock.Provider>
|
||||
);
|
||||
};
|
@ -4,7 +4,7 @@ import { BrainRoleType } from "@/lib/components/BrainUsers/types";
|
||||
import { Document } from "@/lib/types/Document";
|
||||
|
||||
import { useBrainProvider } from "./hooks/useBrainProvider";
|
||||
import { Model } from "../BrainConfigProvider/types";
|
||||
import { Model } from "../../types/brainConfig";
|
||||
|
||||
export type Brain = {
|
||||
id: UUID;
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { ChatMessage, Notification } from "@/app/chat/[chatId]/types";
|
||||
|
||||
import { Model } from "../BrainConfigProvider/types";
|
||||
import { Model } from "../../types/brainConfig";
|
||||
|
||||
export type ChatConfig = {
|
||||
model?: Model;
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { Model, PaidModels } from "../context/BrainConfigProvider/types";
|
||||
import { Model, PaidModels } from "../types/brainConfig";
|
||||
|
||||
export const defineMaxTokens = (model: Model | PaidModels): number => {
|
||||
//At the moment is evaluating only models from OpenAI
|
||||
|
@ -1,9 +1,9 @@
|
||||
import axios, { AxiosError, AxiosInstance } from "axios";
|
||||
|
||||
import { useBrainConfig } from "@/lib/context/BrainConfigProvider";
|
||||
import { useSupabase } from "@/lib/context/SupabaseProvider";
|
||||
|
||||
import { DEFAULT_BACKEND_URL } from "../config/CONSTANTS";
|
||||
import { defaultBrainConfig } from "../config/defaultBrainConfig";
|
||||
|
||||
const axiosInstance = axios.create({
|
||||
baseURL: `${process.env.NEXT_PUBLIC_BACKEND_URL ?? DEFAULT_BACKEND_URL}`,
|
||||
@ -11,9 +11,7 @@ const axiosInstance = axios.create({
|
||||
|
||||
export const useAxios = (): { axiosInstance: AxiosInstance } => {
|
||||
const { session } = useSupabase();
|
||||
const {
|
||||
config: { backendUrl, openAiKey },
|
||||
} = useBrainConfig();
|
||||
const { backendUrl, openAiKey } = defaultBrainConfig;
|
||||
axiosInstance.interceptors.request.clear();
|
||||
axiosInstance.interceptors.request.use(
|
||||
(config) => {
|
||||
|
@ -2,7 +2,7 @@ import { useEffect, useState } from "react";
|
||||
|
||||
import { useSupabase } from "@/lib/context/SupabaseProvider";
|
||||
|
||||
import { useBrainConfig } from "../context/BrainConfigProvider/hooks/useBrainConfig";
|
||||
import { defaultBrainConfig } from "../config/defaultBrainConfig";
|
||||
|
||||
interface FetchInstance {
|
||||
get: (url: string, headers?: HeadersInit) => Promise<Response>;
|
||||
@ -30,9 +30,7 @@ const fetchInstance: FetchInstance = {
|
||||
|
||||
export const useFetch = (): { fetchInstance: FetchInstance } => {
|
||||
const { session } = useSupabase();
|
||||
const {
|
||||
config: { backendUrl: configBackendUrl, openAiKey },
|
||||
} = useBrainConfig();
|
||||
const { backendUrl: configBackendUrl, openAiKey } = defaultBrainConfig;
|
||||
|
||||
const [instance, setInstance] = useState(fetchInstance);
|
||||
|
||||
|
@ -13,12 +13,8 @@ export type BrainConfig = {
|
||||
prompt_id?: UUID;
|
||||
};
|
||||
|
||||
type OptionalConfig = { [K in keyof BrainConfig]?: BrainConfig[K] | undefined };
|
||||
|
||||
export type BrainConfigContextType = {
|
||||
config: BrainConfig;
|
||||
updateConfig: (config: OptionalConfig) => void;
|
||||
resetConfig: () => void;
|
||||
};
|
||||
|
||||
export const openAiFreeModels = ["gpt-3.5-turbo", "gpt-3.5-turbo-16k"] as const;
|
Loading…
Reference in New Issue
Block a user