Spaces:
Running
Running
File size: 4,708 Bytes
16b7924 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
import { createPubSub } from "create-pubsub";
import throttle from "throttleit";
import { addLogEntry } from "./logEntries";
import { defaultSettings } from "./settings";
import type {
ImageSearchResults,
SearchResults,
SearchState,
TextGenerationState,
TextSearchResults,
} from "./types";
function createLocalStoragePubSub<T>(localStorageKey: string, defaultValue: T) {
const localStorageValue = localStorage.getItem(localStorageKey);
const localStoragePubSub = createPubSub(
localStorageValue ? (JSON.parse(localStorageValue) as T) : defaultValue,
);
const [, onValueChange] = localStoragePubSub;
onValueChange((value) =>
localStorage.setItem(localStorageKey, JSON.stringify(value)),
);
return localStoragePubSub;
}
const querySuggestionsPubSub = createLocalStoragePubSub<string[]>(
"querySuggestions",
[],
);
const lastSearchTokenHashPubSub = createLocalStoragePubSub(
"lastSearchTokenHash",
"",
);
export const [updateLastSearchTokenHash, , getLastSearchTokenHash] =
lastSearchTokenHashPubSub;
export const [updateQuerySuggestions, , getQuerySuggestions] =
querySuggestionsPubSub;
export const queryPubSub = createPubSub(
new URLSearchParams(self.location.search).get("q") ?? "",
);
export const [, , getQuery] = queryPubSub;
export const responsePubSub = createPubSub("");
export const updateResponse = throttle(responsePubSub[0], 1000 / 12);
export const [, , getResponse] = responsePubSub;
export const [updateSearchPromise, , getSearchPromise] = createPubSub<
Promise<SearchResults>
>(Promise.resolve({ textResults: [], imageResults: [] }));
export const textGenerationStatePubSub =
createPubSub<TextGenerationState>("idle");
export const [updateTextGenerationState, , getTextGenerationState] =
textGenerationStatePubSub;
const [, listenToTextGenerationStateChanges] = textGenerationStatePubSub;
listenToTextGenerationStateChanges((textGenerationState) => {
addLogEntry(`Text generation state changed to '${textGenerationState}'`);
});
export const modelLoadingProgressPubSub = createPubSub(0);
export const [updateModelLoadingProgress] = modelLoadingProgressPubSub;
export const settingsPubSub = createLocalStoragePubSub(
"settings",
defaultSettings,
);
export const [, listenToSettingsChanges, getSettings] = settingsPubSub;
export const modelSizeInMegabytesPubSub = createPubSub(0);
export const [updateModelSizeInMegabytes] = modelSizeInMegabytesPubSub;
export const textSearchStatePubSub = createPubSub<SearchState>("idle");
export const imageSearchStatePubSub = createPubSub<SearchState>("idle");
export const [updateTextSearchState] = textSearchStatePubSub;
const [, subscribeToTextSearchState] = textSearchStatePubSub;
subscribeToTextSearchState((textSearchState) => {
addLogEntry(`Text search state changed to '${textSearchState}'`);
});
export const [updateImageSearchState] = imageSearchStatePubSub;
const [, subscribeToImageSearchState] = imageSearchStatePubSub;
subscribeToImageSearchState((imageSearchState) => {
addLogEntry(`Image search state changed to '${imageSearchState}'`);
});
export const textSearchResultsPubSub = createPubSub<TextSearchResults>([]);
const llmTextSearchResultsPubSub = createPubSub<TextSearchResults>([]);
export const imageSearchResultsPubSub = createPubSub<ImageSearchResults>([]);
export const [updateTextSearchResults] = textSearchResultsPubSub;
export const [updateLlmTextSearchResults, , getLlmTextSearchResults] =
llmTextSearchResultsPubSub;
export const [updateImageSearchResults] = imageSearchResultsPubSub;
export const menuExpandedAccordionsPubSub = createLocalStoragePubSub<string[]>(
"menuExpandedAccordions",
[],
);
export const chatInputPubSub = createPubSub("");
export const [updateChatInput] = chatInputPubSub;
export const chatGenerationStatePubSub = createPubSub({
isGeneratingResponse: false,
isGeneratingFollowUpQuestion: false,
});
export const followUpQuestionPubSub = createPubSub("");
export const [updateFollowUpQuestion] = followUpQuestionPubSub;
const conversationSummaryPubSub = createPubSub({
conversationId: "",
summary: "",
});
export const [updateConversationSummary, , getConversationSummary] =
conversationSummaryPubSub;
export const chatMessagesPubSub = createPubSub<
Array<{ role: "user" | "assistant"; content: string }>
>([]);
export const [updateChatMessages] = chatMessagesPubSub;
export const isRestoringFromHistoryPubSub = createPubSub(false);
export const [updateIsRestoringFromHistory] = isRestoringFromHistoryPubSub;
export const suppressNextFollowUpPubSub = createPubSub(false);
export const [updateSuppressNextFollowUp, , getSuppressNextFollowUp] =
suppressNextFollowUpPubSub;
|