From 49db9bb6e513696f0358f727bb88f9943869d874 Mon Sep 17 00:00:00 2001 From: Chen Tao <70054568+eeee0717@users.noreply.github.com> Date: Tue, 25 Feb 2025 13:20:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BD=91=E7=BB=9C=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=B6=E9=97=B4=E4=BF=A1=E6=81=AF=20(#2255?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: add time when using web search * feat: add optional * chore * chore * chore * clean code --- src/renderer/src/i18n/locales/en-us.json | 5 ++-- src/renderer/src/i18n/locales/ja-jp.json | 5 ++-- src/renderer/src/i18n/locales/ru-ru.json | 5 ++-- src/renderer/src/i18n/locales/zh-cn.json | 22 +++++---------- src/renderer/src/i18n/locales/zh-tw.json | 5 ++-- .../src/pages/settings/WebSearchSettings.tsx | 27 ++++++++++++++++--- src/renderer/src/services/WebSearchService.ts | 10 ++++++- src/renderer/src/store/index.ts | 2 +- src/renderer/src/store/migrate.ts | 4 +++ src/renderer/src/store/websearch.ts | 10 +++++-- 10 files changed, 65 insertions(+), 30 deletions(-) diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 3150b8a721..1feec72e8f 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -807,7 +807,8 @@ "description": "Tavily is a web search tool that integrates multiple search engines. It supports multiple languages and search engines.", "api_key": "Tavily API Key", "api_key.placeholder": "Enter Tavily API Key" - } + }, + "search_with_time": "Search with dates included" } }, "translate": { @@ -845,4 +846,4 @@ "visualization": "Visualization" } } -} +} \ No newline at end of file diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 64be8e6d6c..dbc480b4db 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -807,7 +807,8 @@ "description": "Tavily は、複数の検索エンジンを統合したウェブ検索ツールです。多くの言語と検索エンジンをサポートしています。", "api_key": "Tavily API キー", "api_key.placeholder": "Tavily API キーを入力してください" - } + }, + "search_with_time": "日付を含む検索" } }, "translate": { @@ -845,4 +846,4 @@ "visualization": "可視化" } } -} +} \ No newline at end of file diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index cf6b64c53e..520e0ace94 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -807,7 +807,8 @@ "description": "Tavily — это инструмент поиска в Интернете, интегрирующий несколько поисковых систем. Он поддерживает несколько языков и поисковых систем.", "api_key": "Ключ API Tavily", "api_key.placeholder": "Введите ключ API Tavily" - } + }, + "search_with_time": "Поиск, содержащий дату" } }, "translate": { @@ -845,4 +846,4 @@ "visualization": "Визуализация" } } -} +} \ No newline at end of file diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index fceef46f03..ac85fcd898 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -600,11 +600,11 @@ "notion.api_key_placeholder": "请输入Notion 密钥", "notion.check": { "button": "检查", - "empty_api_key": "未配置Api_key", - "empty_database_id": "未配置Database_id", - "error": "连接异常,请检查网络及Api_key和Database_id是否正确", "fail": "连接失败,请检查网络及Api_key和Database_id是否正确", - "success": "连接成功" + "success": "连接成功", + "error": "连接异常,请检查网络及Api_key和Database_id是否正确", + "empty_api_key": "未配置Api_key", + "empty_database_id": "未配置Database_id" }, "notion.database_id": "Notion 数据库 ID", "notion.database_id_placeholder": "请输入Notion 数据库 ID", @@ -612,15 +612,6 @@ "notion.page_name_key": "页面标题字段名", "notion.page_name_key_placeholder": "请输入页面标题字段名,默认为 Name", "notion.title": "Notion 配置", - "notion.help": "Notion 配置文档", - "notion.check": { - "button": "检查", - "fail": "连接失败,请检查网络及Api_key和Database_id是否正确", - "success": "连接成功", - "error": "连接异常,请检查网络及Api_key和Database_id是否正确", - "empty_api_key": "未配置Api_key", - "empty_database_id": "未配置Database_id" - }, "notion.auto_split_tip": "当要导出的话题过长时自动分页导出到Notion", "notion.auto_split": "导出对话时自动分页", "notion.split_size": "自动分页大小", @@ -816,7 +807,8 @@ "description": "Tavily 是一个集成了多个搜索引擎的网络搜索工具,支持多种语言和多种搜索引擎。", "api_key": "Tavily API 密钥", "api_key.placeholder": "请输入 Tavily API 密钥" - } + }, + "search_with_time": "搜索包含日期" } }, "translate": { @@ -854,4 +846,4 @@ "visualization": "可视化" } } -} +} \ No newline at end of file diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 8ad6c70fb1..78c7234aec 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -807,7 +807,8 @@ "description": "Tavily 是一個集成了多個搜索引擎的網路搜索工具,支持多種語言和多種搜索引擎。", "api_key": "Tavily API 密鑰", "api_key.placeholder": "請輸入 Tavily API 密鑰" - } + }, + "search_with_time": "搜尋包含日期" } }, "translate": { @@ -845,4 +846,4 @@ "visualization": "可視化" } } -} +} \ No newline at end of file diff --git a/src/renderer/src/pages/settings/WebSearchSettings.tsx b/src/renderer/src/pages/settings/WebSearchSettings.tsx index 1357c61324..c01a5bcc07 100644 --- a/src/renderer/src/pages/settings/WebSearchSettings.tsx +++ b/src/renderer/src/pages/settings/WebSearchSettings.tsx @@ -3,12 +3,23 @@ import tavilyLogoDark from '@renderer/assets/images/search/tavily-dark.svg' import { HStack } from '@renderer/components/Layout' import { useTheme } from '@renderer/context/ThemeProvider' import { useWebSearchProvider } from '@renderer/hooks/useWebSearchProviders' -import { Input, Typography } from 'antd' +import { useAppDispatch, useAppSelector } from '@renderer/store' +import { setSearchWithTime } from '@renderer/store/websearch' +import { Input, Switch, Typography } from 'antd' import { FC, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' -import { SettingContainer, SettingDivider, SettingGroup, SettingHelpLink, SettingHelpTextRow } from '.' +import { + SettingContainer, + SettingDivider, + SettingGroup, + SettingHelpLink, + SettingHelpTextRow, + SettingRow, + SettingRowTitle, + SettingTitle +} from '.' const WebSearchSettings: FC = () => { const { t } = useTranslation() @@ -16,8 +27,9 @@ const WebSearchSettings: FC = () => { const { theme } = useTheme() const { provider, updateProvider } = useWebSearchProvider('tavily') const [apiKey, setApiKey] = useState(provider.apiKey) - const logo = theme === 'dark' ? tavilyLogoDark : tavilyLogo + const searchWithTime = useAppSelector((state) => state.websearch.searchWithTime) + const dispatch = useAppDispatch() useEffect(() => { return () => { @@ -51,6 +63,15 @@ const WebSearchSettings: FC = () => { + + {t('settings.general.title')} + + + + {t('settings.websearch.search_with_time')} + dispatch(setSearchWithTime(checked))} /> + + ) } diff --git a/src/renderer/src/services/WebSearchService.ts b/src/renderer/src/services/WebSearchService.ts index e9fda79c06..3ee8d32f60 100644 --- a/src/renderer/src/services/WebSearchService.ts +++ b/src/renderer/src/services/WebSearchService.ts @@ -1,6 +1,7 @@ import store from '@renderer/store' import { WebSearchProvider } from '@renderer/types' import { tavily } from '@tavily/core' +import dayjs from 'dayjs' class WebSearchService { public isWebSearchEnabled(): boolean { @@ -23,9 +24,16 @@ class WebSearchService { } public async search(query: string) { + const searchWithTime = store.getState().websearch.searchWithTime + console.log('searchWithTime', searchWithTime) + let formatted_query = query + if (searchWithTime) { + formatted_query = `today is ${dayjs().format('YYYY-MM-DD')} \r\n ${query}` + } + console.log('formatted_query', formatted_query) const provider = this.getWebSearchProvider() const tvly = tavily({ apiKey: provider.apiKey }) - return await tvly.search(query, { + return await tvly.search(formatted_query, { maxResults: 5 }) } diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index a8fb743691..d07366f1e1 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -32,7 +32,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 72, + version: 73, blacklist: ['runtime'], migrate }, diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 05dfefa464..2037e3d0a2 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -1120,6 +1120,10 @@ const migrateConfig = { state.llm.providers.splice(emptyLmStudioProviderIndex, 1) } + return state + }, + '73': (state: RootState) => { + state.websearch.searchWithTime = true return state } } diff --git a/src/renderer/src/store/websearch.ts b/src/renderer/src/store/websearch.ts index ffacfea5a1..a986e0d019 100644 --- a/src/renderer/src/store/websearch.ts +++ b/src/renderer/src/store/websearch.ts @@ -3,6 +3,7 @@ import type { WebSearchProvider } from '@renderer/types' export interface WebSearchState { defaultProvider: string providers: WebSearchProvider[] + searchWithTime: boolean } const initialState: WebSearchState = { @@ -13,7 +14,8 @@ const initialState: WebSearchState = { name: 'Tavily', apiKey: '' } - ] + ], + searchWithTime: true } const websearchSlice = createSlice({ @@ -31,10 +33,14 @@ const websearchSlice = createSlice({ if (index !== -1) { state.providers[index] = action.payload } + }, + setSearchWithTime: (state, action: PayloadAction) => { + state.searchWithTime = action.payload } } }) -export const { setWebSearchProviders, updateWebSearchProvider, setDefaultProvider } = websearchSlice.actions +export const { setWebSearchProviders, updateWebSearchProvider, setDefaultProvider, setSearchWithTime } = + websearchSlice.actions export default websearchSlice.reducer