diff --git a/CHANGELOG.md b/CHANGELOG.md
index b2dfa36091280..1bd7f297f3817 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,64 @@
# Changelog
+### [Version 1.47.17](https://github.com/lobehub/lobe-chat/compare/v1.47.16...v1.47.17)
+
+Released on **2025-01-22**
+
+#### 🐛 Bug Fixes
+
+- **misc**: Upgrade `react-i18next` to ^15.
+
+
+
+
+Improvements and Fixes
+
+#### What's fixed
+
+- **misc**: Upgrade `react-i18next` to ^15, closes [#5553](https://github.com/lobehub/lobe-chat/issues/5553) ([d0275fd](https://github.com/lobehub/lobe-chat/commit/d0275fd))
+
+
+
+
+
+[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
+
+
+
+### [Version 1.47.16](https://github.com/lobehub/lobe-chat/compare/v1.47.15...v1.47.16)
+
+Released on **2025-01-22**
+
+#### ♻ Code Refactoring
+
+- **misc**: Move hooks and component.
+
+#### 💄 Styles
+
+- **misc**: Add gemini new model.
+
+
+
+
+Improvements and Fixes
+
+#### Code refactoring
+
+- **misc**: Move hooks and component, closes [#5551](https://github.com/lobehub/lobe-chat/issues/5551) ([c5db091](https://github.com/lobehub/lobe-chat/commit/c5db091))
+
+#### Styles
+
+- **misc**: Add gemini new model, closes [#5546](https://github.com/lobehub/lobe-chat/issues/5546) ([ebdd626](https://github.com/lobehub/lobe-chat/commit/ebdd626))
+
+
+
+
+
+[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
+
+
+
### [Version 1.47.15](https://github.com/lobehub/lobe-chat/compare/v1.47.14...v1.47.15)
Released on **2025-01-22**
diff --git a/changelog/v1.json b/changelog/v1.json
index 49775ce05df38..40b37fe95916e 100644
--- a/changelog/v1.json
+++ b/changelog/v1.json
@@ -1,4 +1,18 @@
[
+ {
+ "children": {
+ "fixes": ["Upgrade react-i18next to ^15."]
+ },
+ "date": "2025-01-22",
+ "version": "1.47.17"
+ },
+ {
+ "children": {
+ "improvements": ["Add gemini new model."]
+ },
+ "date": "2025-01-22",
+ "version": "1.47.16"
+ },
{
"children": {
"improvements": ["Improve discover model page."]
diff --git a/package.json b/package.json
index 4c643bd0a89ff..72f3ad8cbfb17 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@lobehub/chat",
- "version": "1.47.15",
+ "version": "1.47.17",
"description": "Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
"keywords": [
"framework",
@@ -202,7 +202,7 @@
"react-dom": "^19.0.0",
"react-fast-marquee": "^1.6.5",
"react-hotkeys-hook": "^4.6.1",
- "react-i18next": "14.0.2",
+ "react-i18next": "^15.4.0",
"react-layout-kit": "^1.9.1",
"react-lazy-load": "^4.0.1",
"react-pdf": "^9.2.1",
diff --git a/src/app/(main)/chat/(workspace)/_layout/Desktop/ChatHeader/Tags.tsx b/src/app/(main)/chat/(workspace)/_layout/Desktop/ChatHeader/Tags.tsx
index 0bbeb17fa72a5..05de7c062cee6 100644
--- a/src/app/(main)/chat/(workspace)/_layout/Desktop/ChatHeader/Tags.tsx
+++ b/src/app/(main)/chat/(workspace)/_layout/Desktop/ChatHeader/Tags.tsx
@@ -4,11 +4,11 @@ import { memo } from 'react';
import { Flexbox } from 'react-layout-kit';
import ModelSwitchPanel from '@/features/ModelSwitchPanel';
+import PluginTag from '@/features/PluginTag';
import { useModelSupportToolUse } from '@/hooks/useModelSupportToolUse';
import { useAgentStore } from '@/store/agent';
import { agentSelectors } from '@/store/agent/selectors';
-import PluginTag from '../../../features/PluginTag';
import KnowledgeTag from './KnowledgeTag';
const TitleTags = memo(() => {
diff --git a/src/app/(main)/chat/(workspace)/_layout/Mobile/TopicModal.tsx b/src/app/(main)/chat/(workspace)/_layout/Mobile/TopicModal.tsx
index 65fcf5a708f93..fcbd8a3f1a186 100644
--- a/src/app/(main)/chat/(workspace)/_layout/Mobile/TopicModal.tsx
+++ b/src/app/(main)/chat/(workspace)/_layout/Mobile/TopicModal.tsx
@@ -5,11 +5,10 @@ import { PropsWithChildren, memo } from 'react';
import { useTranslation } from 'react-i18next';
import { useFetchTopics } from '@/hooks/useFetchTopics';
+import { useWorkspaceModal } from '@/hooks/useWorkspaceModal';
import { useGlobalStore } from '@/store/global';
import { systemStatusSelectors } from '@/store/global/selectors';
-import { useWorkspaceModal } from '../../features/useWorkspaceModal';
-
const Topics = memo(({ children }: PropsWithChildren) => {
const [showAgentSettings, toggleConfig] = useGlobalStore((s) => [
systemStatusSelectors.mobileShowTopic(s),
diff --git a/src/app/(main)/chat/(workspace)/features/ShareButton/index.tsx b/src/app/(main)/chat/(workspace)/features/ShareButton/index.tsx
index 5ee4dedffc25c..65b1b3d056b8c 100644
--- a/src/app/(main)/chat/(workspace)/features/ShareButton/index.tsx
+++ b/src/app/(main)/chat/(workspace)/features/ShareButton/index.tsx
@@ -7,10 +7,9 @@ import { memo } from 'react';
import { useTranslation } from 'react-i18next';
import { DESKTOP_HEADER_ICON_SIZE, MOBILE_HEADER_ICON_SIZE } from '@/const/layoutTokens';
+import { useWorkspaceModal } from '@/hooks/useWorkspaceModal';
import { useChatStore } from '@/store/chat';
-import { useWorkspaceModal } from '../useWorkspaceModal';
-
const ShareModal = dynamic(() => import('@/features/ShareModal'));
interface ShareButtonProps {
diff --git a/src/config/aiModels/google.ts b/src/config/aiModels/google.ts
index bf8b79b69abb0..39fc95746d5a3 100644
--- a/src/config/aiModels/google.ts
+++ b/src/config/aiModels/google.ts
@@ -1,6 +1,26 @@
import { AIChatModelCard } from '@/types/aiModel';
const googleChatModels: AIChatModelCard[] = [
+ {
+ abilities: {
+ functionCall: true,
+ vision: true,
+ },
+ contextWindowTokens: 1_048_576 + 65_536,
+ description:
+ 'Gemini 2.0 Flash Exp 是 Google 最新的实验性多模态AI模型,拥有下一代特性,卓越的速度,原生工具调用以及多模态生成。',
+ displayName: 'Gemini 2.0 Flash Thinking Experimental 01-21',
+ enabled: true,
+ id: 'gemini-2.0-flash-thinking-exp-01-21',
+ maxOutput: 65_536,
+ pricing: {
+ cachedInput: 0,
+ input: 0,
+ output: 0,
+ },
+ releasedAt: '2025-01-21',
+ type: 'chat',
+ },
{
abilities: {
functionCall: true,
@@ -10,7 +30,6 @@ const googleChatModels: AIChatModelCard[] = [
description:
'Gemini 2.0 Flash Exp 是 Google 最新的实验性多模态AI模型,拥有下一代特性,卓越的速度,原生工具调用以及多模态生成。',
displayName: 'Gemini 2.0 Flash Thinking Experimental 1219',
- enabled: true,
id: 'gemini-2.0-flash-thinking-exp-1219',
maxOutput: 8192,
pricing: {
diff --git a/src/config/modelProviders/google.ts b/src/config/modelProviders/google.ts
index cc8673413a764..73452986b11fd 100644
--- a/src/config/modelProviders/google.ts
+++ b/src/config/modelProviders/google.ts
@@ -3,12 +3,28 @@ import { ModelProviderCard } from '@/types/llm';
// ref: https://ai.google.dev/gemini-api/docs/models/gemini
const Google: ModelProviderCard = {
chatModels: [
+ {
+ contextWindowTokens: 1_048_576 + 65_536,
+ description:
+ 'Gemini 2.0 Flash Exp 是 Google 最新的实验性多模态AI模型,拥有下一代特性,卓越的速度,原生工具调用以及多模态生成。',
+ displayName: 'Gemini 2.0 Flash Thinking Experimental 01-21',
+ enabled: true,
+ functionCall: true,
+ id: 'gemini-2.0-flash-thinking-exp-01-21',
+ maxOutput: 65_536,
+ pricing: {
+ cachedInput: 0,
+ input: 0,
+ output: 0,
+ },
+ releasedAt: '2025-01-21',
+ vision: true,
+ },
{
contextWindowTokens: 32_767 + 8192,
description:
'Gemini 2.0 Flash Exp 是 Google 最新的实验性多模态AI模型,拥有下一代特性,卓越的速度,原生工具调用以及多模态生成。',
displayName: 'Gemini 2.0 Flash Thinking Experimental 1219',
- enabled: true,
functionCall: true,
id: 'gemini-2.0-flash-thinking-exp-1219',
maxOutput: 8192,
diff --git a/src/features/ChatInput/ActionBar/Tools/Dropdown.tsx b/src/features/ChatInput/ActionBar/Tools/Dropdown.tsx
index a40335248dce8..31971ed914ad5 100644
--- a/src/features/ChatInput/ActionBar/Tools/Dropdown.tsx
+++ b/src/features/ChatInput/ActionBar/Tools/Dropdown.tsx
@@ -8,10 +8,10 @@ import { PropsWithChildren, memo } from 'react';
import { useTranslation } from 'react-i18next';
import { Flexbox } from 'react-layout-kit';
-import { useWorkspaceModal } from '@/app/(main)/chat/(workspace)/features/useWorkspaceModal';
import PluginStore from '@/features/PluginStore';
import { useCheckPluginsIsInstalled } from '@/hooks/useCheckPluginsIsInstalled';
import { useFetchInstalledPlugins } from '@/hooks/useFetchInstalledPlugins';
+import { useWorkspaceModal } from '@/hooks/useWorkspaceModal';
import { useAgentStore } from '@/store/agent';
import { agentSelectors } from '@/store/agent/selectors';
import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
diff --git a/src/app/(main)/chat/(workspace)/features/PluginTag/PluginStatus.tsx b/src/features/PluginTag/PluginStatus.tsx
similarity index 100%
rename from src/app/(main)/chat/(workspace)/features/PluginTag/PluginStatus.tsx
rename to src/features/PluginTag/PluginStatus.tsx
diff --git a/src/app/(main)/chat/(workspace)/features/PluginTag/index.tsx b/src/features/PluginTag/index.tsx
similarity index 100%
rename from src/app/(main)/chat/(workspace)/features/PluginTag/index.tsx
rename to src/features/PluginTag/index.tsx
diff --git a/src/features/ShareModal/ShareImage/Preview.tsx b/src/features/ShareModal/ShareImage/Preview.tsx
index 070b9f74af125..ac41c98d31ead 100644
--- a/src/features/ShareModal/ShareImage/Preview.tsx
+++ b/src/features/ShareModal/ShareImage/Preview.tsx
@@ -4,8 +4,8 @@ import { memo } from 'react';
import { useTranslation } from 'react-i18next';
import { Flexbox } from 'react-layout-kit';
-import PluginTag from '@/app/(main)/chat/(workspace)/features/PluginTag';
import { ProductLogo } from '@/components/Branding';
+import PluginTag from '@/features/PluginTag';
import { useAgentStore } from '@/store/agent';
import { agentSelectors } from '@/store/agent/selectors';
import { useSessionStore } from '@/store/session';
diff --git a/src/app/(main)/chat/(workspace)/features/useWorkspaceModal.tsx b/src/hooks/useWorkspaceModal.tsx
similarity index 100%
rename from src/app/(main)/chat/(workspace)/features/useWorkspaceModal.tsx
rename to src/hooks/useWorkspaceModal.tsx