From 263b82c06e55e35d32f83605470a0ea61657f9fd Mon Sep 17 00:00:00 2001 From: alikia2x Date: Tue, 16 Jul 2024 21:29:17 +0800 Subject: [PATCH] feature: keyword2link suggestion - better optimization for NLU model loading - fix some bugs to ensure that the build passes --- bun.lockb | Bin 379278 -> 380855 bytes components/onesearch/handleEnter.ts | 4 +- components/onesearch/handleNLUResult.ts | 3 +- components/onesearch/onesearch.tsx | 47 +++++++++++++++++++----- lib/nlp/load.ts | 9 +++++ lib/normalizeURL.ts | 2 +- lib/onesearch/keywordSuggestion.ts | 39 ++++++++++++++++++++ lib/weather/getCurrentWeather.ts | 3 +- package.json | 3 +- pages/about/index.tsx | 2 +- vite.config.ts | 4 +- 11 files changed, 96 insertions(+), 20 deletions(-) create mode 100644 lib/onesearch/keywordSuggestion.ts diff --git a/bun.lockb b/bun.lockb index d17a0756ede0e2bd687f2654f0cc67ac1d8d9d7e..46246d8493f5cc9ec6c474ba7a1535e472121f81 100755 GIT binary patch delta 59905 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 delta 59126 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 D@Cx(W diff --git a/components/onesearch/handleEnter.ts b/components/onesearch/handleEnter.ts index f3d6fdd..92d602e 100644 --- a/components/onesearch/handleEnter.ts +++ b/components/onesearch/handleEnter.ts @@ -6,14 +6,14 @@ import search from "lib/search"; export default function ( index: number, suggestion: suggestionItem[], - query: string, + _query: string, settings: settingsType, searchBoxRef: React.RefObject ) { const selected = suggestion[index]; const engine = settings.searchEngines[settings.currentSearchEngine]; const newTab = settings.searchInNewTab; - let clipboard: any; + //let clipboard: any; if (selected.type === "QUERY" || selected.type === "default") { search(selected.suggestion, engine, newTab); } else if (selected.type === "NAVIGATION" || selected.type === "default-link") { diff --git a/components/onesearch/handleNLUResult.ts b/components/onesearch/handleNLUResult.ts index 6bddeaa..2ed9577 100644 --- a/components/onesearch/handleNLUResult.ts +++ b/components/onesearch/handleNLUResult.ts @@ -14,8 +14,7 @@ export function handleNLUResult(result: any, updateSuggestion: UpdateSuggestionF getWeather(data.latitude, data.longitude).then((weather) => { console.log(weather["hourly"]); let hourIndex = findClosestDateIndex( - weather["hourly"]["time"], - weather["utc_offset_seconds"] + weather["hourly"]["time"] ); let temp = weather["hourly"]["apparent_temperature"][hourIndex]; let weatherCode = weather["hourly"]["weather_code"][hourIndex]; diff --git a/components/onesearch/onesearch.tsx b/components/onesearch/onesearch.tsx index 1587ed8..0ca2576 100644 --- a/components/onesearch/onesearch.tsx +++ b/components/onesearch/onesearch.tsx @@ -11,15 +11,18 @@ import { selectedSuggestionAtom } from "lib/state/suggestionSelection"; import { settingsAtom } from "lib/state/settings"; import PlainText from "./plainText"; import { sendError } from "lib/telemetering/sendError"; -import { NLU } from "lib/nlp/load"; import { handleNLUResult } from "./handleNLUResult"; import { useAtom, useAtomValue } from "jotai"; import i18next from "i18next"; import { useTranslation } from "react-i18next"; +import { keywordSuggestion } from "lib/onesearch/keywordSuggestion"; +import { NLUType } from "lib/nlp/load"; export default function OneSearch() { const [suggestion, setFinalSuggetsion] = useAtom(suggestionAtom); const [manager, setManager] = useState(null); + const [NLUModel, setNLUModel] = useState(); + const [NLUModelLoaded, setNLUModelLoaded] = useState(false); const lastRequestTimeRef = useRef(0); const selected = useAtomValue(selectedSuggestionAtom); const settings = useAtomValue(settingsAtom); @@ -83,20 +86,32 @@ export default function OneSearch() { }); } - const NLUModel = new NLU(); + (async function () { + const NLU = await import("lib/nlp/load"); + const mainNLUModel = new NLU.NLU(); + setNLUModel(mainNLUModel); + setNLUModelLoaded(true); + })(); useEffect(() => { - NLUModel.init().then((nlu) => { + if (NLUModel === null || NLUModel === undefined) { + return; + } + NLUModel.init().then((nlu: typeof NLUModel) => { setManager(nlu.manager); - console.log(nlu.manager); }); - }, []); + }, [NLUModelLoaded]); useEffect(() => { - cleanSuggestion("default-link", "default", "text"); + cleanSuggestion("default-link", "default", "text", "link"); if (validLink(query)) { updateSuggestion([ - { type: "default-link", suggestion: query, relevance: 3000, prompt: Go to: }, + { + type: "default-link", + suggestion: query, + relevance: 3000, + prompt: Go to: + }, { type: "default", suggestion: query, relevance: 1600 } ]); } else { @@ -109,6 +124,10 @@ export default function OneSearch() { ]); } + if (keywordSuggestion(query) !== null) { + updateSuggestion([keywordSuggestion(query)!]); + } + if (manager != null) { // @ts-ignore manager.process(query).then((result) => { @@ -147,10 +166,16 @@ export default function OneSearch() { )} ); - } else if (s.type === "NAVIGATION" || s.type === "default-link") { + } else if ( + s.type === "NAVIGATION" || + s.type === "default-link" || + s.type === "link" + ) { return ( - {s.prompt && {s.prompt}} + {s.prompt && ( + {s.prompt} + )} {s.suggestion} {devMode && ( @@ -162,7 +187,9 @@ export default function OneSearch() { } else if (s.type === "text") { return (

- {s.prompt && <span className="text-zinc-700 dark:text-zinc-400">{s.prompt}</span>} + {s.prompt && ( + <span className="text-zinc-700 dark:text-zinc-400">{s.prompt}</span> + )} <p>{s.suggestion}</p> {devMode && ( <span className="bottom-0 absolute text-zinc-700 dark:text-zinc-400 text-sm leading-10 h-10 right-2"> diff --git a/lib/nlp/load.ts b/lib/nlp/load.ts index b8e5d4d..b99a72d 100644 --- a/lib/nlp/load.ts +++ b/lib/nlp/load.ts @@ -10,6 +10,15 @@ import { LangEn } from "@nlpjs/lang-en-min"; import { LangZh } from "@nlpjs/lang-zh"; import * as fflate from 'fflate'; +export interface NLUType { + manager: any; + inited: boolean; + loadIntentionModel(): Promise<void>; + init(): Promise<this>; + process(lang: string, text: string): Promise<any>; +} + + export class NLU { manager: any; inited: boolean = false; diff --git a/lib/normalizeURL.ts b/lib/normalizeURL.ts index e6aa831..91404c5 100644 --- a/lib/normalizeURL.ts +++ b/lib/normalizeURL.ts @@ -1,7 +1,7 @@ export function normalizeURL(input: string): string { try { // try to create a URL object - const url = new URL(input); + const url = new URL(input, window.location.href); // if the URL is valid, return it return url.href; } catch (error) { diff --git a/lib/onesearch/keywordSuggestion.ts b/lib/onesearch/keywordSuggestion.ts new file mode 100644 index 0000000..88fc9a0 --- /dev/null +++ b/lib/onesearch/keywordSuggestion.ts @@ -0,0 +1,39 @@ +import { suggestionItem } from "global"; + +interface keywordLinkDict { + [key: string]: string; +} + +const dict_en: keywordLinkDict = { + about: "/about" +}; + +const dict_cn: keywordLinkDict = { + 关于: "/about" +}; + +export function keywordSuggestion(query: string) { + for (const keyword in dict_cn) { + if (query.includes(keyword)) { + const result: suggestionItem = { + type: "link", + suggestion: dict_cn[keyword], + prompt: keyword, + relevance: 3000 + }; + return result + } + } + for (const keyword in dict_en) { + if (query.includes(keyword)) { + const result: suggestionItem = { + type: "link", + suggestion: dict_en[keyword], + prompt: keyword, + relevance: 3000 + }; + return result + } + } + return null; +} diff --git a/lib/weather/getCurrentWeather.ts b/lib/weather/getCurrentWeather.ts index b762862..a20a330 100644 --- a/lib/weather/getCurrentWeather.ts +++ b/lib/weather/getCurrentWeather.ts @@ -14,10 +14,9 @@ export function getClosestHourTimestamp(): string { return localHourTimestamp; } -export function findClosestDateIndex(dates: string[], utc_offset_seconds: number): number { +export function findClosestDateIndex(dates: string[]): number { const now = new Date(); const nowTimestamp = now.getTime(); - const offsetMilliseconds = utc_offset_seconds * 1000; let closestIndex = -1; let closestDiff = Infinity; diff --git a/package.json b/package.json index 61666df..9f2030a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "sparkhome", "private": false, - "version": "5.5.3", + "version": "5.6.0", "type": "module", "scripts": { "dev": "bun server.ts", @@ -52,6 +52,7 @@ "tailwindcss": "^3.4.4", "typescript": "^5.2.2", "vite": "^5.3.1", + "vite-plugin-chunk-split": "^0.5.0", "vite-plugin-pages": "^0.32.2", "vite-tsconfig-paths": "^4.3.2" } diff --git a/pages/about/index.tsx b/pages/about/index.tsx index 0d27763..4058bfb 100644 --- a/pages/about/index.tsx +++ b/pages/about/index.tsx @@ -44,7 +44,7 @@ export default function AboutPage() { </p> <p className="relative font-bold text-2xl mt-12">Presented By</p> - {!darkMode && <img src="/LuminaraStudio.png" className="relative md:h-56 mt-6" />} + {!darkMode && <img src="/LuminaraStudio.png" className="relative md:h-64 mt-6" />} {darkMode && <img src="/LuminaraStudioDark.png" className="relative md:h-56 mt-6" />} </AboutLayout> ); diff --git a/vite.config.ts b/vite.config.ts index 19acbc7..a5a447a 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,6 +2,7 @@ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react-swc"; import Pages from "vite-plugin-pages"; import tsconfigPaths from 'vite-tsconfig-paths'; +import { chunkSplitPlugin } from 'vite-plugin-chunk-split'; // https://vitejs.dev/config/ export default defineConfig({ @@ -10,6 +11,7 @@ export default defineConfig({ Pages({ dirs: "./pages/" }), - tsconfigPaths() + tsconfigPaths(), + chunkSplitPlugin() ] });