From 1acb0a7f1183173b439e7369c9c920f4f21cf059 Mon Sep 17 00:00:00 2001 From: alikia2x Date: Sun, 13 Oct 2024 18:10:44 +0800 Subject: [PATCH] ref: re-enable backend api, remove deprecated code --- backend/route.ts | 28 ++-- bun.lockb | Bin 457982 -> 458371 bytes components/onesearch/onesearch.tsx | 2 +- lib/{telemetering => feedback}/sendError.ts | 0 lib/nlp/data/en.json | 141 -------------------- lib/nlp/data/zh.json | 121 ----------------- lib/nlp/load.ts | 55 -------- lib/nlp/train.ts | 71 ---------- package.json | 1 + 9 files changed, 16 insertions(+), 403 deletions(-) rename lib/{telemetering => feedback}/sendError.ts (100%) delete mode 100644 lib/nlp/data/en.json delete mode 100644 lib/nlp/data/zh.json delete mode 100644 lib/nlp/load.ts delete mode 100644 lib/nlp/train.ts diff --git a/backend/route.ts b/backend/route.ts index 744cb8f..b523b0b 100644 --- a/backend/route.ts +++ b/backend/route.ts @@ -1,21 +1,21 @@ import { Express } from "express"; -//import { completeGoogle } from "search-engine-autocomplete"; +import { completeGoogle } from "@alikia/search-complete"; export function configureBackendRoutes(app: Express) { - // app.get("/api/v1/suggestion", async (req, res) => { - // const query = req.query.q as string; - // const t = parseInt((req.query.t as string) || "0") || null; - // let language = (req.query.l as string) || "en-US"; + app.get("/api/v1/suggestion", async (req, res) => { + const query = req.query.q as string; + const t = parseInt((req.query.t as string) || "0") || null; + let language = (req.query.l as string) || "en-US"; - // try { - // const data = await completeGoogle(query, language); - // //logger.info({ type: "onesearch_search_autocomplete", query: query, data: data }); - // res.json({ ...data, time: t }); - // } catch (error) { - // //logger.error({ type: "onesearch_search_autocomplete_error", error: error.message }); - // res.status(500).json({ error: "Internal Server Error" }); - // } - // }); + try { + const data = await completeGoogle(query, language); + // logger.info({ type: "onesearch_search_autocomplete", query: query, data: data }); + res.json({ ...data, time: t }); + } catch (error) { + // logger.error({ type: "onesearch_search_autocomplete_error", error: error.message }); + res.status(500).json({ error: "Internal Server Error" }); + } + }); app.get("/api/v1/ping", async (_, res) => { res.status(200).json({ message: "pong" }); }); diff --git a/bun.lockb b/bun.lockb index 07100a01d6ab8d56a2b7392a8f7e5f43ef8c7548..823f6fbcac1bd5d03307f2b2fcfaf1fbd82a96b6 100755 GIT binary patch delta 71341 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

Y)#M&PVYhl;c+PAaV-r5T__M;l8szWyv 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

-#uNv_VnOhW7 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 delta 71425 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 O@@l(|o+!D;=l=k+)#u&- diff --git a/components/onesearch/onesearch.tsx b/components/onesearch/onesearch.tsx index daccf96..14b09be 100644 --- a/components/onesearch/onesearch.tsx +++ b/components/onesearch/onesearch.tsx @@ -10,7 +10,7 @@ import LinkSuggestion from "./link"; import { selectedSuggestionAtom } from "lib/state/suggestionSelection"; import { settingsAtom } from "lib/state/settings"; import PlainText from "./plainText"; -import { sendError } from "lib/telemetering/sendError"; +import { sendError } from "lib/feedback/sendError"; import { handleNLUResult } from "./handleNLUResult"; import * as ort from "onnxruntime-web"; import { useAtom, useAtomValue } from "jotai"; diff --git a/lib/telemetering/sendError.ts b/lib/feedback/sendError.ts similarity index 100% rename from lib/telemetering/sendError.ts rename to lib/feedback/sendError.ts diff --git a/lib/nlp/data/en.json b/lib/nlp/data/en.json deleted file mode 100644 index fe21e9c..0000000 --- a/lib/nlp/data/en.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "weather.summary": [ - "how's the weather", - "What's going on with the weather?", - "Can you give me an update on the weather?", - "How's the forecast looking today?", - "Give me a summary of the current weather.", - "Can you tell me the current weather?", - "What is the weather situation at the moment?", - "Could you provide a quick weather update?", - "Is it raining or sunny outside?", - "What's the weather like right now?", - "Tell me the current weather conditions.", - "How about the weather today?", - "Is it a good day to be outside?", - "What should I expect in terms of weather today?", - "Is there any severe weather to be aware of?", - "Can you summarize today's weather forecast?", - "What's the weather looking like for the next few hours?", - "Is it going to stay this way all day?", - "Could you give me a brief overview of the weather?", - "What's the general weather situation in our area?", - "Is it cloudy or clear outside?", - "Any weather alerts I should know about?", - "How's the weather looking for outdoor activities?", - "What's the forecast saying for today's weather?", - "Is it going to be a warm day?", - "Are we expecting any storms today?", - "What's the weather condition outside my window?", - "Is it a typical day for this season in terms of weather?", - "how's the weather now?" - ], - - "weather.temp": [ - "What's the temperature like right now?", - "Can you tell me the current temperature?", - "How hot is it outside?", - "What's the temperature supposed to be today?", - "What is the current temp outside?", - "Could you tell me the outdoor temperature?", - "Is it cold or warm outside?", - "What's the high temperature for today?", - "What's the low temperature expected tonight?", - "How does the temperature feel outside?", - "Is it going to get warmer or cooler today?", - "What's the temperature in the shade?", - "Can you provide the current temp in Celsius?", - "What's the temperature in Fahrenheit right now?", - "Is it too hot to be outside?", - "What's the temperature like in the morning?", - "How about the temperature in the evening?", - "Is it warm enough to go swimming?", - "What's the temperature in the city center?", - "Can you tell me the temp in the nearby area?", - "Is it below freezing outside?", - "What's the average temperature for today?", - "Is the temperature dropping or rising?", - "What should I wear considering the temperature?" - ], - - "base64.encode": [ - "Please encode this data with base64: %s", - "I need to encode the following data in base64: %s", - "Could you encode this string using base64? %s", - "Convert this data to b64 encoding: %s", - "I want to encode this information with base64: %s", - "Help me encode this in base64: %s", - "Can you encode this data to base64 format? %s", - "b64 encode", - "base64 encode", - "encode base64 %s" - ], - - "base64.decode": [ - "Please decode this base64 data: %s", - "I have a base64 encoded string that needs decoding: %s", - "Could you decode this base64 string for me? %s", - "Convert this base64 encoded data back to its original form: %s", - "I need to decode this base64 information: %s", - "Help me decode this base64 data: %s", - "Can you translate this base64 back to normal text? %s", - "b64 decode", - "base64 decode", - "decode base64 %s" - ], - - "url.encode": [ - "Please encode this URL: %s", - "I need to encode this URL component: %s", - "Could you encode this part of the URL? %s", - "Convert this URL to its encoded form: %s", - "I want to encode this URL for safe transmission: %s", - "Help me encode this URL segment: %s", - "Can you encode this URL data? %s" - ], - - "url.decode": [ - "Please decode this URL: %s", - "I have an encoded URL that needs decoding: %s", - "Could you decode this URL for me? %s", - "Convert this encoded URL back to its original form: %s", - "I need to decode this URL component: %s", - "Help me decode this URL segment: %s", - "Can you translate this encoded URL back to normal? %s" - ], - - "html.encode": [ - "Please encode this HTML entity: %s", - "I need to encode this text to HTML entity: %s", - "Could you encode this as an HTML entity? %s", - "Convert this text to HTML entity encoding: %s", - "I want to encode this to prevent HTML interpretation: %s", - "Help me encode this into HTML entity: %s", - "Can you encode this for HTML usage? %s" - ], - - "html.decode": [ - "Please decode this HTML entity: %s", - "I have an HTML entity that needs decoding: %s", - "Could you decode this HTML entity for me? %s", - "Convert this HTML entity back to its original text: %s", - "I need to decode this HTML entity to plain text: %s", - "Help me decode this HTML entity: %s", - "Can you translate this HTML entity back to normal text? %s" - ], - - "ai.command": [ - "write a typescript helloworld code", - "Check the following content for grammar and clarity", - "Help me study vocabulary: write a sentence for me to fill in the blank, and I'll try to pick the correct option.", - "Improve this markdown content in asepcts like grammar and expression, for a GitHub repo README.", - "can u think of a short name of my package", - "simplify this code" - ], - - "ai.answer": [ - "Which framework do you think is the most suitable for performance sensitive projects?" - ], - - "None": ["free weather api", "js get timezone", "how", "how's", "how's the"] -} diff --git a/lib/nlp/data/zh.json b/lib/nlp/data/zh.json deleted file mode 100644 index 5bb1c0c..0000000 --- a/lib/nlp/data/zh.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "weather.summary": [ - "天气如何", - "现在的天气", - "今天的天气预报", - "现在的天气状况", - "今天天气怎么样", - "目前是什么天气", - "今天的天气概述", - "当前天气状况如何", - "今天会下雨吗", - "今天会下雪吗", - "今天晴天吗", - "今天的天气状况如何", - "现在外面是什么天气", - "今天天气好么", - "今天适合外出吗", - "今天的天气适宜做什么", - "今天有没有雾霾", - "今天的空气质量如何", - "今天的紫外线指数是多少", - "今天有没有大风", - "今天会不会很冷", - "今天的天气会变化吗", - "今天晚上的天气如何", - "今天夜里会下雨吗", - "今天的天气对出行有影响吗", - "今天的天气对运动有影响吗", - "今天的天气对工作有影响吗", - "今天的天气对旅游有影响吗", - "今天的天气对健康有影响吗" - ], - "weather.temp": [ - "现在的温度", - "现在多少度", - "外面有多热", - "明天热不热?", - "现在的气温是多少", - "今天最高温度是多少", - "今天最低温度是多少", - "现在外面感觉冷吗", - "现在需要穿外套吗", - "现在适合穿短袖吗", - "现在的温度适合外出吗", - "现在的温度适合运动吗", - "现在的温度适合睡觉吗", - "明天会比今天热吗", - "明天会比今天冷吗", - "今天的温度变化大吗", - "现在的温度适合开空调吗", - "现在的温度适合开暖气吗", - "室外的温度是多少", - "室内的温度是多少", - "现在的温度适合种植吗", - "现在的温度适合养宠物吗", - "现在的温度对健康有影响吗", - "现在的温度是否舒适", - "现在的温度是否适合工作" - ], - "base64.encode": [ - "请将数据使用base64编码:%s", - "需要将以下数据base64编码:%s", - "请将此字符串转为base64:%s", - "将数据转为base64编码:%s", - "信息base64编码:%s", - "请帮忙编码base64:%s", - "将数据编码为base64:%s" - ], - - "base64.decode": [ - "请解码这个base64数据:%s", - "有base64编码字符串需要解码:%s", - "帮忙解码base64:%s", - "将base64编码转回原数据:%s", - "解码base64信息:%s", - "解码这个base64:%s", - "将base64转文本:%s" - ], - - "url.encode": [ - "请编码这个URL:%s", - "URL部分需要编码:%s", - "请将URL部分编码:%s", - "URL编码转换:%s", - "安全传输需编码URL:%s", - "编码URL段:%s", - "URL数据编码:%s" - ], - - "url.decode": [ - "请解码这个URL:%s", - "有URL编码需要解码:%s", - "解码这个URL:%s", - "URL编码转回原URL:%s", - "解码URL部分:%s", - "解码URL段:%s", - "URL编码转文本:%s" - ], - - "html.encode": [ - "请编码HTML实体:%s", - "文本转为HTML实体:%s", - "编码为HTML实体:%s", - "文本HTML实体编码:%s", - "预防HTML解析编码:%s", - "HTML实体编码:%s", - "文本HTML使用编码:%s" - ], - - "html.decode": [ - "请解码HTML实体:%s", - "HTML实体需要解码:%s", - "解码HTML实体:%s", - "HTML实体转回文本:%s", - "HTML实体解码:%s", - "解码HTML实体:%s", - "HTML实体转文本:%s" - ], - - "None": ["你好", "为什么计算机使用二进制", "什么是", "热", "怎么"] -} diff --git a/lib/nlp/load.ts b/lib/nlp/load.ts deleted file mode 100644 index c39670e..0000000 --- a/lib/nlp/load.ts +++ /dev/null @@ -1,55 +0,0 @@ -// @ts-ignore -import { containerBootstrap } from "@nlpjs/core"; -// @ts-ignore -import { Nlp } from "@nlpjs/nlp"; -// @ts-ignore -import { NluManager, NluNeural } from "@nlpjs/nlu"; -// @ts-ignore -import { LangEn } from "@nlpjs/lang-en-min"; -// @ts-ignore -import { LangZh } from "@nlpjs/lang-zh"; -import * as fflate from "fflate"; - -export interface NLUType { - manager: any; - inited: boolean; - loadIntentionModel(): Promise; - init(): Promise; - process(lang: string, text: string): Promise; -} - -export class NLU { - manager: any; - inited: boolean = false; - async loadIntentionModel() { - const container = await containerBootstrap(); - container.use(Nlp); - container.use(LangEn); - container.use(LangZh); - container.use(NluNeural); - const manager = new NluManager({ - container, - locales: ["en", "zh"], - nlu: { - useNoneFeature: true - } - }); - const response = await fetch("/model"); - - const responseBuf = await response.arrayBuffer(); - const compressed = new Uint8Array(responseBuf); - const decompressed = fflate.decompressSync(compressed); - const modelText = fflate.strFromU8(decompressed); - manager.fromJSON(JSON.parse(modelText)); - this.manager = manager; - } - async init() { - await this.loadIntentionModel(); - this.inited = true; - return this; - } - async process(lang: string, text: string): Promise { - const actual = await this.manager.process(lang, text); - return actual; - } -} diff --git a/lib/nlp/train.ts b/lib/nlp/train.ts deleted file mode 100644 index 1988b58..0000000 --- a/lib/nlp/train.ts +++ /dev/null @@ -1,71 +0,0 @@ -// @ts-ignore -import { containerBootstrap } from "@nlpjs/core"; -// @ts-ignore -import { Nlp } from "@nlpjs/nlp"; -// @ts-ignore -import { NluManager, NluNeural } from "@nlpjs/nlu"; -// @ts-ignore -import { LangEn } from "@nlpjs/lang-en-min"; -// @ts-ignore -import { LangZh } from "@nlpjs/lang-zh"; -import fs from "node:fs"; -import * as fflate from "fflate"; - -let zh: TrainData = {}; -let en: TrainData = {}; - -type TrainData = { - [key: string]: string[]; -}; - -export async function trainIntentionModel() { - try { - const dataZH = fs.readFileSync("./lib/nlp/data/zh.json", "utf8"); - const dataEN = fs.readFileSync("./lib/nlp/data/en.json", "utf8"); - zh = JSON.parse(dataZH); - en = JSON.parse(dataEN); - } catch (err) { - console.error(err); - } - - const container = await containerBootstrap(); - container.use(Nlp); - container.use(LangEn); - container.use(LangZh); - container.use(NluNeural); - const manager = new NluManager({ - container, - locales: ["en", "zh"], - nlu: { - useNoneFeature: true - } - }); - // Adds the utterances and intents for the NLP - - for (const key in zh) { - for (const value of zh[key]) { - manager.add("zh", value, key); - } - } - - for (const key in en) { - for (const value of en[key]) { - manager.add("en", value, key); - } - } - - await manager.train(); - - const resultModel = manager.toJSON(); - - const buf = fflate.strToU8(JSON.stringify(resultModel)); - - const gzipped = fflate.gzipSync(buf, { - filename: "model.json", - mtime: new Date().getTime() - }); - - fs.writeFileSync("./public/model", Buffer.from(gzipped)); -} - -trainIntentionModel(); diff --git a/package.json b/package.json index 138790d..194d1e8 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "format": "prettier --write ." }, "dependencies": { + "@alikia/search-complete": "^0.4.4", "@iconify/react": "^5.0.1", "@nextui-org/react": "^2.4.2", "@types/bun": "^1.1.6",