MAJOR REFACTOR (#494)

* move index to home folder, create state and context files and barrell folder

* Sanity Check Commit:  reducer added to home.tsx manual QA all working

* WIP: promptBar

* fix missing json parse on folders and prompts

* split context and add promptbar context

* add context to nested prompt componets and componetize Folder componet

* remove log

* Create buttons folder and componetize sidebar action button

* tidy up prompt handlers

* componetized sidebar

* added back chatbar componet to left side sidebar

* monster commit: Componetized the common code between chatbar and promptbar into new componet Sidebar and added context to both bars

* add useFetch service

* added prettier import sort to keep imports ordered and easier to indentify

* added react query and useFetch to work with RQ

* added apiService, errorService and reactQuery

* add callback and tidy up error service

* refactor chat and child componets to useContext

* fix extra calls and bad calls to mel endpoint

* minor import cleanup

---------

Co-authored-by: jc.durbin <jc.durbin@ardanis.com>
This commit is contained in:
Mckay Wrigley
2023-04-10 21:10:18 -06:00
committed by GitHub
parent 68c9cd4bd8
commit 6500db9c1c
128 changed files with 3666 additions and 3053 deletions
+1
View File
@@ -1,5 +1,6 @@
import { Conversation } from '@/types/chat';
import { OpenAIModelID, OpenAIModels } from '@/types/openai';
import { DEFAULT_SYSTEM_PROMPT } from './const';
export const cleanSelectedConversation = (conversation: Conversation) => {
+2 -1
View File
@@ -1,5 +1,6 @@
export const DEFAULT_SYSTEM_PROMPT =
process.env.DEFAULT_SYSTEM_PROMPT || "You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.";
process.env.DEFAULT_SYSTEM_PROMPT ||
"You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.";
export const OPENAI_API_HOST =
process.env.OPENAI_API_HOST || 'https://api.openai.com';
+2 -2
View File
@@ -1,5 +1,5 @@
import { Folder } from '@/types/folder';
import { FolderInterface } from '@/types/folder';
export const saveFolders = (folders: Folder[]) => {
export const saveFolders = (folders: FolderInterface[]) => {
localStorage.setItem('folders', JSON.stringify(folders));
};
+6 -6
View File
@@ -6,6 +6,7 @@ import {
LatestExportFormat,
SupportedExportFormats,
} from '@/types/export';
import { cleanConversationHistory } from './clean';
export function isExportFormatV1(obj: any): obj is ExportFormatV1 {
@@ -49,15 +50,14 @@ export function cleanData(data: SupportedExportFormats): LatestExportFormat {
};
}
if (isExportFormatV3(data)) {
return {...data, version: 4, prompts: []};
if (isExportFormatV3(data)) {
return { ...data, version: 4, prompts: [] };
}
if(isExportFormatV4(data)){
if (isExportFormatV4(data)) {
return data;
}
throw new Error('Unsupported data format');
}
@@ -81,7 +81,7 @@ export const exportData = () => {
folders = JSON.parse(folders);
}
if(prompts){
if (prompts) {
prompts = JSON.parse(prompts);
}
@@ -110,7 +110,7 @@ export const importData = (
data: SupportedExportFormats,
): LatestExportFormat => {
const cleanedData = cleanData(data);
const { history,folders, prompts } = cleanedData;
const { history, folders, prompts } = cleanedData;
const conversations = history;
localStorage.setItem('conversationHistory', JSON.stringify(conversations));
+22
View File
@@ -0,0 +1,22 @@
export function throttle<T extends (...args: any[]) => any>(
func: T,
limit: number,
): T {
let lastFunc: ReturnType<typeof setTimeout>;
let lastRan: number;
return ((...args) => {
if (!lastRan) {
func(...args);
lastRan = Date.now();
} else {
clearTimeout(lastFunc);
lastFunc = setTimeout(() => {
if (Date.now() - lastRan >= limit) {
func(...args);
lastRan = Date.now();
}
}, limit - (Date.now() - lastRan));
}
}) as T;
}
-19
View File
@@ -1,19 +0,0 @@
export function throttle<T extends (...args: any[]) => any>(func: T, limit: number): T {
let lastFunc: ReturnType<typeof setTimeout>;
let lastRan: number;
return ((...args) => {
if (!lastRan) {
func(...args);
lastRan = Date.now();
} else {
clearTimeout(lastFunc);
lastFunc = setTimeout(() => {
if (Date.now() - lastRan >= limit) {
func(...args);
lastRan = Date.now();
}
}, limit - (Date.now() - lastRan));
}
}) as T;
}
+4 -2
View File
@@ -1,11 +1,13 @@
import { Message } from '@/types/chat';
import { OpenAIModel } from '@/types/openai';
import { OPENAI_API_HOST } from '../app/const';
import {
createParser,
ParsedEvent,
ReconnectInterval,
createParser,
} from 'eventsource-parser';
import { OPENAI_API_HOST } from '../app/const';
export class OpenAIError extends Error {
type: string;