diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8cc95bc605b1..681d235a9d15 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,48 @@
# Changelog
+### [Version 1.12.16](https://github.com/lobehub/lobe-chat/compare/v1.12.15...v1.12.16)
+
+Released on **2024-08-24**
+
+#### 🐛 Bug Fixes
+
+- **misc**: Session not found error on mobile.
+
+
+
+
+Improvements and Fixes
+
+#### What's fixed
+
+- **misc**: Session not found error on mobile, closes [#3428](https://github.com/lobehub/lobe-chat/issues/3428) ([7e9c15e](https://github.com/lobehub/lobe-chat/commit/7e9c15e))
+
+
+
+
+
+[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
+
+
+
+### [Version 1.12.15](https://github.com/lobehub/lobe-chat/compare/v1.12.14...v1.12.15)
+
+Released on **2024-08-24**
+
+
+
+
+Improvements and Fixes
+
+
+
+
+
+[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
+
+
+
### [Version 1.12.14](https://github.com/lobehub/lobe-chat/compare/v1.12.13...v1.12.14)
Released on **2024-08-24**
diff --git a/docs/self-hosting/advanced/feature-flags.mdx b/docs/self-hosting/advanced/feature-flags.mdx
index 38391fb55e26..3f7830a2ef09 100644
--- a/docs/self-hosting/advanced/feature-flags.mdx
+++ b/docs/self-hosting/advanced/feature-flags.mdx
@@ -43,5 +43,8 @@ You can achieve various feature combinations using the above configuration synta
| `dalle` | Enables the DALL-E functionality. | Enabled |
| `check_updates` | Allows checking for updates. | Enabled |
| `welcome_suggest` | Displays welcome suggestions. | Enabled |
+| `market` | Enables the assistant market functionality. | Enabled |
+| `speech_to_text` | Enables speech-to-text functionality. | Enabled |
+| `knowledge_base` | Enables the knowledge base functionality. | Enabled |
You can always check the [featureFlags](https://github.com/lobehub/lobe-chat/blob/main/src/config/featureFlags/schema.ts) to get the latest list of feature flags.
diff --git a/docs/self-hosting/advanced/feature-flags.zh-CN.mdx b/docs/self-hosting/advanced/feature-flags.zh-CN.mdx
index 149654a92452..309a17c41dac 100644
--- a/docs/self-hosting/advanced/feature-flags.zh-CN.mdx
+++ b/docs/self-hosting/advanced/feature-flags.zh-CN.mdx
@@ -39,5 +39,8 @@ tags:
| `dalle` | 启用 DALL-E 功能。 | 开启 |
| `check_updates` | 允许检查更新。 | 开启 |
| `welcome_suggest` | 显示欢迎建议。 | 开启 |
+| `market` | 启用助手市场功能。 | 开启 |
+| `speech_to_text` | 启用语音转文本功能。 | 开启 |
+| `knowledge_base` | 启用知识库功能。 | 开启 |
你可以随时检查 [featureFlags](https://github.com/lobehub/lobe-chat/blob/main/src/config/featureFlags/schema.ts) 以获取最新的特性标志列表。
diff --git a/docs/self-hosting/advanced/upstream-sync.mdx b/docs/self-hosting/advanced/upstream-sync.mdx
index ad357e448659..4fb124dc70ae 100644
--- a/docs/self-hosting/advanced/upstream-sync.mdx
+++ b/docs/self-hosting/advanced/upstream-sync.mdx
@@ -151,7 +151,7 @@ echo "Update time: $(date)"
echo "Version: $(docker inspect lobehub/lobe-chat:latest | grep 'org.opencontainers.image.version' | awk -F'"' '{print $4}')"
# Clean up unused images
-docker images | grep 'lobehub/lobe-chat' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
+docker images | grep 'lobehub/lobe-chat' | grep -v 'lobehub/lobe-chat-database' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
echo "Removed old images."
```
diff --git a/docs/self-hosting/advanced/upstream-sync.zh-CN.mdx b/docs/self-hosting/advanced/upstream-sync.zh-CN.mdx
index 17395ba28943..41396dd63331 100644
--- a/docs/self-hosting/advanced/upstream-sync.zh-CN.mdx
+++ b/docs/self-hosting/advanced/upstream-sync.zh-CN.mdx
@@ -146,7 +146,7 @@ echo "Update time: $(date)"
echo "Version: $(docker inspect lobehub/lobe-chat:latest | grep 'org.opencontainers.image.version' | awk -F'"' '{print $4}')"
# 清理不再使用的镜像
-docker images | grep 'lobehub/lobe-chat' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
+docker images | grep 'lobehub/lobe-chat' | grep -v 'lobehub/lobe-chat-database' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
echo "Removed old images."
```
diff --git a/docs/self-hosting/platform/docker-compose.mdx b/docs/self-hosting/platform/docker-compose.mdx
index e101f3c0db12..66cc38cd2037 100644
--- a/docs/self-hosting/platform/docker-compose.mdx
+++ b/docs/self-hosting/platform/docker-compose.mdx
@@ -121,7 +121,7 @@ echo "Update time: $(date)"
echo "Version: $(docker inspect lobehub/lobe-chat:latest | grep 'org.opencontainers.image.version' | awk -F'"' '{print $4}')"
# Clean up unused images
-docker images | grep 'lobehub/lobe-chat' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
+docker images | grep 'lobehub/lobe-chat' | grep -v 'lobehub/lobe-chat-database' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
echo "Removed old images."
```
diff --git a/docs/self-hosting/platform/docker-compose.zh-CN.mdx b/docs/self-hosting/platform/docker-compose.zh-CN.mdx
index fe06700610d0..ac281712c24d 100644
--- a/docs/self-hosting/platform/docker-compose.zh-CN.mdx
+++ b/docs/self-hosting/platform/docker-compose.zh-CN.mdx
@@ -118,7 +118,7 @@ echo "Update time: $(date)"
echo "Version: $(docker inspect lobehub/lobe-chat:latest | grep 'org.opencontainers.image.version' | awk -F'"' '{print $4}')"
# Clean up unused images
-docker images | grep 'lobehub/lobe-chat' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
+docker images | grep 'lobehub/lobe-chat' | grep -v 'lobehub/lobe-chat-database' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
echo "Removed old images."
```
diff --git a/docs/self-hosting/platform/docker.mdx b/docs/self-hosting/platform/docker.mdx
index 4b58be2d12c6..3b8fc8fb6031 100644
--- a/docs/self-hosting/platform/docker.mdx
+++ b/docs/self-hosting/platform/docker.mdx
@@ -147,7 +147,7 @@ echo "Update time: $(date)"
echo "Version: $(docker inspect lobehub/lobe-chat:latest | grep 'org.opencontainers.image.version' | awk -F'"' '{print $4}')"
# Clean up unused images
-docker images | grep 'lobehub/lobe-chat' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
+docker images | grep 'lobehub/lobe-chat' | grep -v 'lobehub/lobe-chat-database' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
echo "Removed old images."
```
diff --git a/docs/self-hosting/platform/docker.zh-CN.mdx b/docs/self-hosting/platform/docker.zh-CN.mdx
index d200cb033b05..dc2f3e5c333a 100644
--- a/docs/self-hosting/platform/docker.zh-CN.mdx
+++ b/docs/self-hosting/platform/docker.zh-CN.mdx
@@ -147,7 +147,7 @@ echo "Update time: $(date)"
echo "Version: $(docker inspect lobehub/lobe-chat:latest | grep 'org.opencontainers.image.version' | awk -F'"' '{print $4}')"
# 清理不再使用的镜像
-docker images | grep 'lobehub/lobe-chat' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
+docker images | grep 'lobehub/lobe-chat' | grep -v 'lobehub/lobe-chat-database' | grep -v 'latest' | awk '{print $3}' | xargs -r docker rmi > /dev/null 2>&1
echo "Removed old images."
```
diff --git a/package.json b/package.json
index 1be2c307554c..f555cf175b14 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@lobehub/chat",
- "version": "1.12.14",
+ "version": "1.12.16",
"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",
diff --git a/src/app/(main)/chat/(workspace)/_layout/Mobile/ChatHeader/index.tsx b/src/app/(main)/chat/(workspace)/_layout/Mobile/ChatHeader/index.tsx
index 6ffa72924948..5337374b62ce 100644
--- a/src/app/(main)/chat/(workspace)/_layout/Mobile/ChatHeader/index.tsx
+++ b/src/app/(main)/chat/(workspace)/_layout/Mobile/ChatHeader/index.tsx
@@ -4,6 +4,7 @@ import { MobileNavBar } from '@lobehub/ui';
import { memo, useState } from 'react';
import { useInitAgentConfig } from '@/app/(main)/chat/(workspace)/_layout/useInitAgentConfig';
+import { INBOX_SESSION_ID } from '@/const/session';
import { useQueryRoute } from '@/hooks/useQueryRoute';
import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
@@ -21,7 +22,9 @@ const MobileHeader = memo(() => {
return (
}
- onBackClick={() => router.push('/chat', { query: { session: '' }, replace: true })}
+ onBackClick={() =>
+ router.push('/chat', { query: { session: INBOX_SESSION_ID }, replace: true })
+ }
right={
<>
diff --git a/src/libs/langchain/loaders/index.ts b/src/libs/langchain/loaders/index.ts
index d120afcab195..89b548be5771 100644
--- a/src/libs/langchain/loaders/index.ts
+++ b/src/libs/langchain/loaders/index.ts
@@ -8,6 +8,7 @@ import { LangChainLoaderType } from '@/libs/langchain/types';
import { CodeLoader } from './code';
import { DocxLoader } from './docx';
+import { LatexLoader } from './latex';
import { MarkdownLoader } from './markdown';
import { PdfLoader } from './pdf';
import { PPTXLoader } from './pptx';
@@ -38,6 +39,10 @@ export class ChunkingLoader {
return await PPTXLoader(fileBlob);
}
+ case 'latex': {
+ return await LatexLoader(txt);
+ }
+
case 'pdf': {
return await PdfLoader(fileBlob);
}
@@ -78,6 +83,10 @@ export class ChunkingLoader {
return 'pdf';
}
+ if (filename.endsWith('tex')) {
+ return 'latex';
+ }
+
if (filename.endsWith('md') || filename.endsWith('mdx')) {
return 'markdown';
}
diff --git a/src/libs/langchain/loaders/latex/__tests__/__snapshots__/index.test.ts.snap b/src/libs/langchain/loaders/latex/__tests__/__snapshots__/index.test.ts.snap
new file mode 100644
index 000000000000..9312fe1a6cfd
--- /dev/null
+++ b/src/libs/langchain/loaders/latex/__tests__/__snapshots__/index.test.ts.snap
@@ -0,0 +1,205 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`LatexLoader > should run 1`] = `
+[
+ Document {
+ "id": undefined,
+ "metadata": {
+ "loc": {
+ "lines": {
+ "from": 1,
+ "to": 41,
+ },
+ },
+ },
+ "pageContent": "\\documentclass{article}
+
+
+\\usepackage{graphicx} % Required for inserting images
+\\usepackage{amsmath} % Required for mathematical symbols
+\\usepackage{hyperref} % For hyperlinks
+
+
+\\title{Sample LaTeX Document}
+\\author{Generated by ChatGPT}
+\\date{\\today}
+
+
+\\begin{document}
+
+
+\\maketitle
+
+
+\\tableofcontents
+
+
+\\section{Introduction}
+This is a sample LaTeX document that includes various common elements such as sections, lists, tables, figures, and mathematical equations.
+
+
+\\section{Lists}
+\\subsection{Itemized List}
+\\begin{itemize}
+\\item First item
+\\item Second item
+\\item Third item
+\\end{itemize}
+
+
+\\subsection{Enumerated List}
+\\begin{enumerate}
+\\item First item
+\\item Second item
+\\item Third item
+\\end{enumerate}",
+ },
+ Document {
+ "id": undefined,
+ "metadata": {
+ "loc": {
+ "lines": {
+ "from": 27,
+ "to": 61,
+ },
+ },
+ },
+ "pageContent": "\\section{Lists}
+\\subsection{Itemized List}
+\\begin{itemize}
+\\item First item
+\\item Second item
+\\item Third item
+\\end{itemize}
+
+
+\\subsection{Enumerated List}
+\\begin{enumerate}
+\\item First item
+\\item Second item
+\\item Third item
+\\end{enumerate}
+
+
+\\section{Mathematical Equations}
+Here are some sample mathematical equations:
+
+
+\\subsection{Inline Equation}
+This is an inline equation: \\( E = mc^2 \\).
+
+
+\\subsection{Displayed Equations}
+\\begin{equation}
+a^2 + b^2 = c^2
+\\end{equation}
+
+
+\\begin{align}
+x &= y + z \\\\
+y &= mx + b
+\\end{align}",
+ },
+ Document {
+ "id": undefined,
+ "metadata": {
+ "loc": {
+ "lines": {
+ "from": 44,
+ "to": 93,
+ },
+ },
+ },
+ "pageContent": "\\section{Mathematical Equations}
+Here are some sample mathematical equations:
+
+
+\\subsection{Inline Equation}
+This is an inline equation: \\( E = mc^2 \\).
+
+
+\\subsection{Displayed Equations}
+\\begin{equation}
+a^2 + b^2 = c^2
+\\end{equation}
+
+
+\\begin{align}
+x &= y + z \\\\
+y &= mx + b
+\\end{align}
+
+
+\\section{Tables}
+Here is a sample table:
+
+
+\\begin{table}[h!]
+\\centering
+\\begin{tabular}{|c|c|c|}
+\\hline
+Header 1 & Header 2 & Header 3 \\\\
+\\hline
+Data 1 & Data 2 & Data 3 \\\\
+Data 4 & Data 5 & Data 6 \\\\
+Data 7 & Data 8 & Data 9 \\\\
+\\hline
+\\end{tabular}
+\\caption{Sample Table}
+\\label{table:1}
+\\end{table}
+
+
+\\section{Figures}
+Here is a sample figure:
+
+
+\\begin{figure}[h!]
+\\centering
+\\includegraphics[width=0.5\\textwidth]{example-image}
+\\caption{Sample Figure}
+\\label{fig:1}
+\\end{figure}",
+ },
+ Document {
+ "id": undefined,
+ "metadata": {
+ "loc": {
+ "lines": {
+ "from": 84,
+ "to": 112,
+ },
+ },
+ },
+ "pageContent": "\\section{Figures}
+Here is a sample figure:
+
+
+\\begin{figure}[h!]
+\\centering
+\\includegraphics[width=0.5\\textwidth]{example-image}
+\\caption{Sample Figure}
+\\label{fig:1}
+\\end{figure}
+
+
+\\section{Sections and Subsections}
+This is an example of a section with subsections.
+
+
+\\subsection{Subsection 1}
+Content of subsection 1.
+
+
+\\subsection{Subsection 2}
+Content of subsection 2.
+
+
+\\section{References}
+Here is a reference to the table \\ref{table:1} and the figure \\ref{fig:1}.
+
+
+\\end{document}",
+ },
+]
+`;
diff --git a/src/libs/langchain/loaders/latex/__tests__/demo.tex b/src/libs/langchain/loaders/latex/__tests__/demo.tex
new file mode 100644
index 000000000000..13dcaf0d7a4e
--- /dev/null
+++ b/src/libs/langchain/loaders/latex/__tests__/demo.tex
@@ -0,0 +1,112 @@
+\documentclass{article}
+
+
+\usepackage{graphicx} % Required for inserting images
+\usepackage{amsmath} % Required for mathematical symbols
+\usepackage{hyperref} % For hyperlinks
+
+
+\title{Sample LaTeX Document}
+\author{Generated by ChatGPT}
+\date{\today}
+
+
+\begin{document}
+
+
+\maketitle
+
+
+\tableofcontents
+
+
+\section{Introduction}
+This is a sample LaTeX document that includes various common elements such as sections, lists, tables, figures, and mathematical equations.
+
+
+\section{Lists}
+\subsection{Itemized List}
+\begin{itemize}
+\item First item
+\item Second item
+\item Third item
+\end{itemize}
+
+
+\subsection{Enumerated List}
+\begin{enumerate}
+\item First item
+\item Second item
+\item Third item
+\end{enumerate}
+
+
+\section{Mathematical Equations}
+Here are some sample mathematical equations:
+
+
+\subsection{Inline Equation}
+This is an inline equation: \( E = mc^2 \).
+
+
+\subsection{Displayed Equations}
+\begin{equation}
+a^2 + b^2 = c^2
+\end{equation}
+
+
+\begin{align}
+x &= y + z \\
+y &= mx + b
+\end{align}
+
+
+\section{Tables}
+Here is a sample table:
+
+
+\begin{table}[h!]
+\centering
+\begin{tabular}{|c|c|c|}
+\hline
+Header 1 & Header 2 & Header 3 \\
+\hline
+Data 1 & Data 2 & Data 3 \\
+Data 4 & Data 5 & Data 6 \\
+Data 7 & Data 8 & Data 9 \\
+\hline
+\end{tabular}
+\caption{Sample Table}
+\label{table:1}
+\end{table}
+
+
+\section{Figures}
+Here is a sample figure:
+
+
+\begin{figure}[h!]
+\centering
+\includegraphics[width=0.5\textwidth]{example-image}
+\caption{Sample Figure}
+\label{fig:1}
+\end{figure}
+
+
+\section{Sections and Subsections}
+This is an example of a section with subsections.
+
+
+\subsection{Subsection 1}
+Content of subsection 1.
+
+
+\subsection{Subsection 2}
+Content of subsection 2.
+
+
+\section{References}
+Here is a reference to the table \ref{table:1} and the figure \ref{fig:1}.
+
+
+\end{document}
diff --git a/src/libs/langchain/loaders/latex/__tests__/index.test.ts b/src/libs/langchain/loaders/latex/__tests__/index.test.ts
new file mode 100644
index 000000000000..facbd59635d2
--- /dev/null
+++ b/src/libs/langchain/loaders/latex/__tests__/index.test.ts
@@ -0,0 +1,16 @@
+// @vitest-environment node
+import * as fs from 'node:fs';
+import { join } from 'node:path';
+import { expect } from 'vitest';
+
+import { LatexLoader } from '../index';
+
+describe('LatexLoader', () => {
+ it('should run', async () => {
+ const content = fs.readFileSync(join(__dirname, `./demo.tex`), 'utf-8');
+
+ const data = await LatexLoader(content);
+
+ expect(data).toMatchSnapshot();
+ });
+});
diff --git a/src/libs/langchain/loaders/latex/index.ts b/src/libs/langchain/loaders/latex/index.ts
new file mode 100644
index 000000000000..a71a88d073ed
--- /dev/null
+++ b/src/libs/langchain/loaders/latex/index.ts
@@ -0,0 +1,9 @@
+import { LatexTextSplitter } from 'langchain/text_splitter';
+
+import { loaderConfig } from '../config';
+
+export const LatexLoader = async (text: string) => {
+ const splitter = new LatexTextSplitter(loaderConfig);
+
+ return await splitter.createDocuments([text]);
+};
diff --git a/src/libs/langchain/types.ts b/src/libs/langchain/types.ts
index 696300cf0313..399d569cd23c 100644
--- a/src/libs/langchain/types.ts
+++ b/src/libs/langchain/types.ts
@@ -1 +1 @@
-export type LangChainLoaderType = 'code' | 'ppt' | 'pdf' | 'markdown' | 'doc' | 'text';
+export type LangChainLoaderType = 'code' | 'ppt' | 'pdf' | 'markdown' | 'doc' | 'text' | 'latex';