Compare commits

...

13 Commits
v1.7 ... v1.7.1

Author SHA1 Message Date
Yifei Zhang
dab69c7507 Merge pull request #215 from hibobmaster/multi-arch-docker-build
CI: Multi Arch docker builds
2023-03-30 16:06:22 +08:00
hibobmaster
852f8b8aa5 Merge branch 'main' of https://github.com/Yidadaa/ChatGPT-Next-Web into multi-arch-docker-build 2023-03-30 15:53:44 +08:00
Yifei Zhang
fe858621f2 Merge pull request #213 from leedom92/copy-content-in-mobile
feat: setUserInput with onDoubleClickCapture in mobile phone
2023-03-30 15:38:54 +08:00
Leedom
6e4e804af8 Update home.tsx 2023-03-30 15:32:03 +08:00
leedom
e68aaf24f1 feat: setUserInput with onDoubleClickCapture in mobile phone 2023-03-30 15:22:10 +08:00
Yifei Zhang
29c20a3d5c Merge pull request #202 from RugerMcCarthy/feat/display_line_break
feat: import remark-breaks plugin
2023-03-30 14:56:21 +08:00
hibobmaster
6ed61f533a Merge branch 'main' of https://github.com/Yidadaa/ChatGPT-Next-Web into multi-arch-docker-build 2023-03-30 13:48:06 +08:00
hibobmaster
ad7a365f32 Support multi-arch docker build 2023-03-30 13:19:32 +08:00
RugerMc
2c5420ab9e feat: import ramarkBreaks plugin 2023-03-30 12:48:38 +08:00
Yifei Zhang
8d6d6bbf5d Update README.md 2023-03-30 11:22:27 +08:00
Yifei Zhang
d5235c81d0 Update README.md 2023-03-30 11:21:44 +08:00
Yifei Zhang
9e5b119e92 Merge pull request #197 from angular-moon/patch-1
onUserSubmit hide promptHints
2023-03-30 10:53:54 +08:00
angular-moon
d9fc9cd198 onUserSubmit hide promptHints 2023-03-30 10:16:00 +08:00
6 changed files with 46 additions and 26 deletions

View File

@@ -1,6 +1,7 @@
name: Publish Docker image name: Publish Docker image
on: on:
workflow_dispatch:
release: release:
types: [published] types: [published]
@@ -9,25 +10,43 @@ jobs:
name: Push Docker image to Docker Hub name: Push Docker image to Docker Hub
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Check out the repo -
name: Check out the repo
uses: actions/checkout@v3 uses: actions/checkout@v3
-
- name: Log in to Docker Hub name: Log in to Docker Hub
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 uses: docker/login-action@v2
with: with:
username: ${{ secrets.DOCKER_USERNAME }} username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }} password: ${{ secrets.DOCKER_PASSWORD }}
- name: Extract metadata (tags, labels) for Docker -
name: Extract metadata (tags, labels) for Docker
id: meta id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 uses: docker/metadata-action@v4
with: with:
images: yidadaa/chatgpt-next-web images: yidadaa/chatgpt-next-web
tags: |
type=raw,value=latest
type=semver,pattern={{version}}
- name: Build and push Docker image -
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc name: Set up QEMU
uses: docker/setup-qemu-action@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
-
name: Build and push Docker image
uses: docker/build-push-action@v4
with: with:
context: . context: .
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8
push: true push: true
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max

View File

@@ -9,7 +9,7 @@ WORKDIR /app
COPY package.json yarn.lock* package-lock.json* ./ COPY package.json yarn.lock* package-lock.json* ./
RUN \ RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ if [ -f yarn.lock ]; then yarn install --frozen-lockfile --network-timeout 100000; \
elif [ -f package-lock.json ]; then npm ci; \ elif [ -f package-lock.json ]; then npm ci; \
else echo "Lockfile not found." && exit 1; \ else echo "Lockfile not found." && exit 1; \
fi fi

View File

@@ -7,7 +7,7 @@
One-Click to deploy your own ChatGPT web UI. One-Click to deploy your own ChatGPT web UI.
[演示 Demo](https://chat-gpt-next-web.vercel.app/) / [反馈 Issues](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [加入 Discord](https://discord.gg/zrhvHCr79N) / [QQ 群](https://user-images.githubusercontent.com/16968934/228190818-7dd00845-e9b9-4363-97e5-44c507ac76da.jpeg) / [打赏开发者](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg) [演示 Demo](https://chat-gpt-next-web.vercel.app/) / [反馈 Issues](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [加入 Discord](https://discord.gg/zrhvHCr79N) / [QQ 群](https://user-images.githubusercontent.com/16968934/228190818-7dd00845-e9b9-4363-97e5-44c507ac76da.jpeg) / [打赏开发者](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg) / [Donate](#捐赠-donate-usdt)
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web)
@@ -169,15 +169,12 @@ docker run -d -p 3000:3000 -e OPENAI_API_KEY="" -e CODE="" yidadaa/chatgpt-next-
![更多展示 More](./static/more.png) ![更多展示 More](./static/more.png)
## 说明 Attention
本项目的演示地址所用的 OpenAI 账户的免费额度将于 2023-04-01 过期,届时将无法通过演示地址在线体验。 ## 捐赠 Donate USDT
> BNB Smart Chain (BEP 20)
如果你想贡献出自己的 API Key可以通过作者主页的邮箱发送给作者并标注过期时间。 ```
0x67cD02c7EB62641De576a1fA3EdB32eA0c3ffD89
The free trial of the OpenAI account used by the demo will expire on April 1, 2023, and the demo will not be available at that time. ```
If you would like to contribute your API key, you can email it to the author and indicate the expiration date of the API key.
## 鸣谢 Special Thanks ## 鸣谢 Special Thanks

View File

@@ -102,7 +102,7 @@ export function ChatList() {
state.currentSessionIndex, state.currentSessionIndex,
state.selectSession, state.selectSession,
state.removeSession, state.removeSession,
], ]
); );
return ( return (
@@ -196,7 +196,7 @@ export function Chat(props: {
setPromptHints(promptStore.search(text)); setPromptHints(promptStore.search(text));
}, },
100, 100,
{ leading: true, trailing: true }, { leading: true, trailing: true }
); );
const onPromptSelect = (prompt: Prompt) => { const onPromptSelect = (prompt: Prompt) => {
@@ -210,7 +210,7 @@ export function Chat(props: {
if (!dom) return; if (!dom) return;
const paddingBottomNum: number = parseInt( const paddingBottomNum: number = parseInt(
window.getComputedStyle(dom).paddingBottom, window.getComputedStyle(dom).paddingBottom,
10, 10
); );
dom.scrollTop = dom.scrollHeight - dom.offsetHeight + paddingBottomNum; dom.scrollTop = dom.scrollHeight - dom.offsetHeight + paddingBottomNum;
}; };
@@ -239,6 +239,7 @@ export function Chat(props: {
setIsLoading(true); setIsLoading(true);
chatStore.onUserInput(userInput).then(() => setIsLoading(false)); chatStore.onUserInput(userInput).then(() => setIsLoading(false));
setUserInput(""); setUserInput("");
setPromptHints([]);
inputRef.current?.focus(); inputRef.current?.focus();
}; };
@@ -299,7 +300,7 @@ export function Chat(props: {
preview: true, preview: true,
}, },
] ]
: [], : []
) )
.concat( .concat(
userInput.length > 0 userInput.length > 0
@@ -311,7 +312,7 @@ export function Chat(props: {
preview: true, preview: true,
}, },
] ]
: [], : []
); );
// auto scroll // auto scroll
@@ -339,7 +340,7 @@ export function Chat(props: {
const newTopic = prompt(Locale.Chat.Rename, session.topic); const newTopic = prompt(Locale.Chat.Rename, session.topic);
if (newTopic && newTopic !== session.topic) { if (newTopic && newTopic !== session.topic) {
chatStore.updateCurrentSession( chatStore.updateCurrentSession(
(session) => (session.topic = newTopic!), (session) => (session.topic = newTopic!)
); );
} }
}} }}
@@ -438,6 +439,7 @@ export function Chat(props: {
className="markdown-body" className="markdown-body"
style={{ fontSize: `${fontSize}px` }} style={{ fontSize: `${fontSize}px` }}
onContextMenu={(e) => onRightClick(e, message)} onContextMenu={(e) => onRightClick(e, message)}
onDoubleClickCapture={() => setUserInput(message.content)}
> >
<Markdown content={message.content} /> <Markdown content={message.content} />
</div> </div>
@@ -584,7 +586,7 @@ export function Home() {
state.newSession, state.newSession,
state.currentSessionIndex, state.currentSessionIndex,
state.removeSession, state.removeSession,
], ]
); );
const loading = !useHasHydrated(); const loading = !useHasHydrated();
const [showSideBar, setShowSideBar] = useState(true); const [showSideBar, setShowSideBar] = useState(true);

View File

@@ -1,6 +1,7 @@
import ReactMarkdown from "react-markdown"; import ReactMarkdown from "react-markdown";
import "katex/dist/katex.min.css"; import "katex/dist/katex.min.css";
import RemarkMath from "remark-math"; import RemarkMath from "remark-math";
import RemarkBreaks from "remark-breaks";
import RehypeKatex from "rehype-katex"; import RehypeKatex from "rehype-katex";
import RemarkGfm from "remark-gfm"; import RemarkGfm from "remark-gfm";
import RehypePrsim from "rehype-prism-plus"; import RehypePrsim from "rehype-prism-plus";
@@ -29,7 +30,7 @@ export function PreCode(props: { children: any }) {
export function Markdown(props: { content: string }) { export function Markdown(props: { content: string }) {
return ( return (
<ReactMarkdown <ReactMarkdown
remarkPlugins={[RemarkMath, RemarkGfm]} remarkPlugins={[RemarkMath, RemarkGfm, RemarkBreaks]}
rehypePlugins={[RehypeKatex, [RehypePrsim, { ignoreMissing: true }]]} rehypePlugins={[RehypeKatex, [RehypePrsim, { ignoreMissing: true }]]}
components={{ components={{
pre: PreCode, pre: PreCode,

View File

@@ -23,6 +23,7 @@
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-markdown": "^8.0.5", "react-markdown": "^8.0.5",
"remark-breaks": "^3.0.2",
"rehype-katex": "^6.0.2", "rehype-katex": "^6.0.2",
"rehype-prism-plus": "^1.5.1", "rehype-prism-plus": "^1.5.1",
"remark-gfm": "^3.0.1", "remark-gfm": "^3.0.1",