From edde4112c19283b0794ceed9b86ea34cf0176cfc Mon Sep 17 00:00:00 2001 From: Rafi Date: Sun, 12 Feb 2023 12:40:47 +0800 Subject: [PATCH] Change the model cache to local storage and support caching multiple models --- app.vue | 11 +-- components/ModelDialog.vue | 121 ++++++++++++++++++++++++++++++++ components/ModelNameEditor.vue | 48 ------------- composables/states.js | 3 + server/api/conversation.post.js | 3 +- utils/enums.js | 5 ++ utils/localStorage.js | 43 ++++++++++++ 7 files changed, 179 insertions(+), 55 deletions(-) create mode 100644 components/ModelDialog.vue delete mode 100644 components/ModelNameEditor.vue create mode 100644 composables/states.js create mode 100644 utils/enums.js create mode 100644 utils/localStorage.js diff --git a/app.vue b/app.vue index 4e0e080..211a946 100644 --- a/app.vue +++ b/app.vue @@ -1,8 +1,8 @@ \ No newline at end of file diff --git a/components/ModelNameEditor.vue b/components/ModelNameEditor.vue deleted file mode 100644 index 819b6a6..0000000 --- a/components/ModelNameEditor.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - - - \ No newline at end of file diff --git a/composables/states.js b/composables/states.js new file mode 100644 index 0000000..64c7050 --- /dev/null +++ b/composables/states.js @@ -0,0 +1,3 @@ + +export const useModels = () => useState('models', () => getStoredModels()) +export const useCurrentModel = () => useState('currentModel', () => getCurrentModel()) \ No newline at end of file diff --git a/server/api/conversation.post.js b/server/api/conversation.post.js index 631815a..9ffb549 100644 --- a/server/api/conversation.post.js +++ b/server/api/conversation.post.js @@ -38,7 +38,6 @@ export default defineEventHandler(async (event) => { 'Connection': 'keep-alive' }) - const modelName = await getSetting('modelName') const apiKey = await getSetting('apiKey') if (!apiKey) { @@ -57,7 +56,7 @@ export default defineEventHandler(async (event) => { modelOptions: { // The model is set to text-chat-davinci-002-20221122 by default, but you can override // it and any other parameters here - model: modelName, + model: body.model, }, // (Optional) Set custom instructions instead of "You are ChatGPT...". // promptPrefix: 'You are Bob, a cowboy in Western times...', diff --git a/utils/enums.js b/utils/enums.js new file mode 100644 index 0000000..ad89340 --- /dev/null +++ b/utils/enums.js @@ -0,0 +1,5 @@ + +export const STORAGE_KEY = { + OPENAI_MODELS: 'openai_models', + CURRENT_OPENAI_MODEL: 'current_openai_model', +} \ No newline at end of file diff --git a/utils/localStorage.js b/utils/localStorage.js new file mode 100644 index 0000000..3556082 --- /dev/null +++ b/utils/localStorage.js @@ -0,0 +1,43 @@ +import {useCurrentModel, useModels} from "~/composables/states"; + +const get = (key) => { + let val = localStorage.getItem(key) + if (val) { + val = JSON.parse(val) + } + return val +} + +const set = (key, val) => { + localStorage.setItem(key, JSON.stringify(val)) +} + +const DEFAULT_OPENAI_MODEL = 'text-davinci-003' + +export const setModels = (val) => { + const models = useModels() + set(STORAGE_KEY.OPENAI_MODELS, val) + models.value = val +} + +export const getStoredModels = () => { + let models = get(STORAGE_KEY.OPENAI_MODELS) + if (!models) { + models = [DEFAULT_OPENAI_MODEL] + } + return models +} + +export const setCurrentModel = (val) => { + const model = useCurrentModel() + set(STORAGE_KEY.CURRENT_OPENAI_MODEL, val) + model.value = val +} + +export const getCurrentModel = () => { + let model = get(STORAGE_KEY.CURRENT_OPENAI_MODEL) + if (!model) { + model = DEFAULT_OPENAI_MODEL + } + return model +} \ No newline at end of file