Adds a `modelProvider` field to `promptVariants`, currently just set to "openai/ChatCompletion" for all variants for now. Adds a `modelProviders/` directory where we can define and store pluggable model providers. Currently just OpenAI. Not everything is pluggable yet -- notably the code to actually generate completions hasn't been migrated to this setup yet. Does a lot of work to get the types working. Prompts are now defined with a function `definePrompt(modelProvider, config)` instead of `prompt = config`. Added a script to migrate old prompt definitions. This is still partial work, but the diff is large enough that I want to get it in. I don't think anything is broken but I haven't tested thoroughly.
46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
import { type StateCreator, create } from "zustand";
|
|
import { immer } from "zustand/middleware/immer";
|
|
import { createSelectors } from "./createSelectors";
|
|
import {
|
|
type SharedVariantEditorSlice,
|
|
createVariantEditorSlice,
|
|
} from "./sharedVariantEditor.slice";
|
|
import { type APIClient } from "~/utils/api";
|
|
|
|
export type State = {
|
|
drawerOpen: boolean;
|
|
openDrawer: () => void;
|
|
closeDrawer: () => void;
|
|
api: APIClient | null;
|
|
setApi: (api: APIClient) => void;
|
|
sharedVariantEditor: SharedVariantEditorSlice;
|
|
};
|
|
|
|
export type SliceCreator<T> = StateCreator<State, [["zustand/immer", never]], [], T>;
|
|
|
|
export type SetFn = Parameters<SliceCreator<unknown>>[0];
|
|
export type GetFn = Parameters<SliceCreator<unknown>>[1];
|
|
|
|
const useBaseStore = create<State, [["zustand/immer", never]]>(
|
|
immer((set, get, ...rest) => ({
|
|
api: null,
|
|
setApi: (api) =>
|
|
set((state) => {
|
|
state.api = api;
|
|
}),
|
|
|
|
drawerOpen: false,
|
|
openDrawer: () =>
|
|
set((state) => {
|
|
state.drawerOpen = true;
|
|
}),
|
|
closeDrawer: () =>
|
|
set((state) => {
|
|
state.drawerOpen = false;
|
|
}),
|
|
sharedVariantEditor: createVariantEditorSlice(set, get, ...rest),
|
|
})),
|
|
);
|
|
|
|
export const useAppStore = createSelectors(useBaseStore);
|