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';