Spaces:
Running
Running
File size: 3,927 Bytes
aa01edd |
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 |
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 [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, , getTextSearchResults] =
textSearchResultsPubSub;
export const [updateLlmTextSearchResults, , getLlmTextSearchResults] =
llmTextSearchResultsPubSub;
export const [updateImageSearchResults, , getImageSearchResults] =
imageSearchResultsPubSub;
export const menuExpandedAccordionsPubSub = createLocalStoragePubSub<string[]>(
"menuExpandedAccordions",
[],
);
export const chatInputPubSub = createPubSub("");
export const chatGenerationStatePubSub = createPubSub({
isGeneratingResponse: false,
isGeneratingFollowUpQuestion: false,
});
export const followUpQuestionPubSub = createPubSub("");
|