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:
@@ -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
@@ -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';
|
||||
|
||||
@@ -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 +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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user