Compare commits

...

30 Commits
v1.9.0 ... main

Author SHA1 Message Date
liuweiqing
03c2ee2dd5 feat: vocechat客服聊天 2024-07-18 17:07:44 +08:00
liuweiqing
f3faf31925 chore: 去掉coze,由于收费 2024-07-16 12:12:30 +08:00
liuweiqing
c90d8ea7ac chore: 补上gpt-4选项 2024-07-04 09:37:49 +08:00
liuweiqing
9a19a8924d chore: gpt4因为coze收费不能用了 2024-07-03 22:17:42 +08:00
14790897
a8c5392616 fix: 如果api是旧域名就改为新域名 2024-05-11 08:39:02 +08:00
liuweiqing
8ad486d2f7 Merge branch 'main' of https://github.com/14790897/paper-ai 2024-04-24 07:48:26 +08:00
liuweiqing
cd4181c897 fix: 图片源替换 2024-04-24 07:48:25 +08:00
Shi Sheng
3868ad4acf
docs: 更新了中英文的README文件 (#39)
* Update README.md

* Update README.md

* Update README_en.md

* Update README.md

* Update README.md

* Update README.md

* Update README_en.md

* Update README.md

* Update README_en.md
2024-04-20 09:33:12 +08:00
Shi Sheng
ef7c85448e
docs: 更新了英文的README (#38)
* Update README_en.md

* Update README_en.md

* Update README_en.md

* Update README_en.md

* Update README_en.md
2024-04-20 08:14:28 +08:00
Shi Sheng
a3a5274ca5
chore: 把clone-and-run-locally换成了”克隆并在本地运行“(#37) 2024-04-19 12:41:47 +08:00
dependabot[bot]
f788b2222f
chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates (#34)
Bumps the npm_and_yarn group with 2 updates in the / directory: [sweetalert2](https://github.com/sweetalert2/sweetalert2) and [follow-redirects](https://github.com/follow-redirects/follow-redirects).


Updates `sweetalert2` from 11.10.5 to 11.10.6
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v11.10.5...v11.10.6)

Updates `follow-redirects` from 1.15.4 to 1.15.6
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6)

---
updated-dependencies:
- dependency-name: sweetalert2
  dependency-type: direct:production
  dependency-group: npm_and_yarn-security-group
- dependency-name: follow-redirects
  dependency-type: indirect
  dependency-group: npm_and_yarn-security-group
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-19 08:30:11 +08:00
Shi Sheng
1be61f7a9a
docs: 更新了英文翻译 (#36)
* Update README_en.md

* Update README_en.md

* Update README_en.md

* Update README_en.md

* Update README_en.md

* Update README_en.md

* Update README_en.md

* Update README_en.md

* Update README_en.md

* Update README_en.md
2024-04-19 08:27:24 +08:00
Shi Sheng
f2f9448f28
更新了README (#35)
docs: 更新readme的英文链接和证书描述
2024-04-18 21:39:20 +08:00
liuweiqing
dba8ec332a chore: remove强制设置 2024-04-16 14:34:59 +08:00
liuweiqing
b3c8dc1d4a feat: 增加commandr模型 2024-04-13 18:02:38 +08:00
liuweiqing
8b8702e04d chore: 强制更新我设置的api 2024-04-13 15:47:23 +08:00
liuweiqing
fe43130b4f chore: 更新api(因为原域名过期) 2024-04-13 15:33:17 +08:00
liuweiqing
a5ec62320d fix: 去除google sigin 2024-04-02 11:05:54 +08:00
liuweiqing
9b31268cda fix: linuxdo登录环境变量 2024-04-02 10:41:55 +08:00
14790897
29e2579b1d Merge branch 'main' of github.com:14790897/paper-ai 2024-04-01 15:40:00 +08:00
14790897
9ff111edaf fix: 本地开发需要环境变量 2024-04-01 15:39:51 +08:00
liuweiqing
01b26d9115 Merge branch 'main' of https://github.com/14790897/paper-ai 2024-03-30 09:46:04 +08:00
liuweiqing
4ce386e372 chore: 完善错误提示 2024-03-30 09:45:52 +08:00
14790897
9022969ac6 Revert "chore: 更新密钥"
This reverts commit d8cdb70333.
2024-03-29 08:54:39 +08:00
14790897
d227c78b5b Merge branch 'main' of github.com:14790897/paper-ai 2024-03-28 23:02:22 +08:00
14790897
d8cdb70333 chore: 更新密钥 2024-03-28 23:01:52 +08:00
liuweiqing
9e2510d748 chore: docs 2024-03-27 12:08:07 +08:00
liuweiqing
0a232f495a chore: 尝试修复Google登录 2024-03-15 16:17:45 +08:00
liuweiqing
5ccdc5270a chore: 尝试修复Google登录 2024-03-15 16:05:18 +08:00
liuweiqing
6bf8061f0f feat: 优化未找到文献的提示 2024-03-15 15:47:56 +08:00
38 changed files with 138 additions and 24467 deletions

18
.env.local Normal file
View File

@ -0,0 +1,18 @@
# Update these with your Supabase details from your project settings > API
# https://app.supabase.com/project/_/settings/api
NEXT_PUBLIC_SUPABASE_URL=https://yidfukfbrluizjvfrrsj.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlpZGZ1a2Zicmx1aXpqdmZycnNqIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MDQ4NjMyNjEsImV4cCI6MjAyMDQzOTI2MX0.EXIXAdNIGLFo5wHmwmY2-9bqLO9vyFYDvMMtCtkxgig
# NEXT_PUBLIC_TINYMCE_API_KEY=e983nu390inks6be1wwlsrdxjebot3yc4pld7d44zs6vcrxr
NEXT_PUBLIC_OPENAI_API_KEY=sk-ffe19ebe9fa44d00884330ff1c18cf82
#sess-wZKsUKS8IhPH3jI44krQL41vhl68qH6hwE66hOnL
NEXT_PUBLIC_SEMANTIC_API_KEY=hEQvK6ARe84dzDPcMnpzX4n9jfoqztkMfaftPWnb
NEXT_PUBLIC_PUBMED_API_KEY=057616e7ce6c722f2ae8679e38a8be9b1a09
NEXT_PUBLIC_AI_URL=https://api.deepseek.com # /api/v1/chat/completions
NEXT_PUBLIC_PAPER_URL=/api/paper
#"https://api.openai.com/v1/chat/completions" "https://api.liuweiqing.top" "https://api.liuweiqing.top/v1/chat/completions"
#node转发设置为 /api/v1/chat/completions https://one.caifree.com sk-aiHrrRLYUUelHstX69E9484509254dBf92061d6744FfFaD1
VERCEL_URL=https://www.paperai.life
NODE_ENV=development
# NEXT_PUBLIC_CLIENT_ID=UrgIEI0n03tveTmaOV0IU8qRY4DttGY4
# CLIENT_SECRET=ljShbIlIrfULu4BTUVTT4azeR90PtAif
# REDIRECT_URI=http://localhost:3000/api/oauth/callback

2
.gitignore vendored
View File

@ -37,7 +37,7 @@ next-env.d.ts
pass pass
.env .env
.env.local # .env.local
.vercel .vercel
post.md post.md

View File

@ -1,5 +1,3 @@
[English Documentation](./README_en.md)
<a href="https://paperai.life"> <a href="https://paperai.life">
<div align="center"> <div align="center">
<img src="./public/android-chrome-192x192.png" alt="the fastest way to create a paper with real references"> <img src="./public/android-chrome-192x192.png" alt="the fastest way to create a paper with real references">
@ -7,19 +5,22 @@
<h1 align="center">paper-ai</h1> <h1 align="center">paper-ai</h1>
</a> </a>
<p align="center"> <a href="./README_en.md"><b>English Documentation </b></a> </p>
<p align="center"> <p align="center">
使用真实文献最快速完成论文的方法 使用真实文献最快速完成论文的方法
</p> </p>
<p align="center"> <p align="center">
<a href='https://docs.paperai.life/' style='font-size: 20px;'><strong>文档网站(教程比较详细,推荐在这里观看)</strong></a> <a href='https://docs.paperai.life/' style='font-size: 20px;'><strong>文档网站(教程比较详细,推荐阅读这里)</strong></a> ·
<a href='https://www.bilibili.com/video/BV1Ya4y1k75V'><strong>bilibili视频教程</strong></a>
</p> </p>
<p align="center"> <p align="center">
<a href="#功能"><strong>功能</strong></a> · <a href="#功能"><strong>功能</strong></a> ·
<a href="#演示"><strong>演示</strong></a> · <a href="#演示"><strong>演示</strong></a> ·
<a href="#部署到Vercel"><strong>部署到 Vercel</strong></a> · <a href="#部署到Vercel"><strong>部署到 Vercel</strong></a> ·
<a href="#克隆并在本地运行"><strong>克隆并在本地运行</strong></a> · <a href="#克隆并在本地运行"><strong>克隆并在本地运行</strong></a>
</p> </p>
<br/> <br/>
@ -45,7 +46,7 @@
上述操作还会将 repo 克隆到 GitHub。 上述操作还会将 repo 克隆到 GitHub。
如果只想在本地开发,而不想部署到 Vercel[请按以下步骤操作](#clone-and-run-locally)。 如果只想在本地开发,而不想部署到 Vercel[请按以下步骤操作](#克隆并在本地运行)。
## 镜像运行 ## 镜像运行
@ -92,7 +93,8 @@ npm run dev
1. semantic scholar api: https://api.semanticscholar.org/api-docs/#tag/Paper-Data/operation/get_graph_paper_relevance_search 1. semantic scholar api: https://api.semanticscholar.org/api-docs/#tag/Paper-Data/operation/get_graph_paper_relevance_search
2. pubmed api: https://www.ncbi.nlm.nih.gov/books/NBK25500/ 2. pubmed api: https://www.ncbi.nlm.nih.gov/books/NBK25500/
3. i18n: https://locize.com/blog/next-app-dir-i18n/
## 许可证 ## 许可证
MIT 该项目已获得[MIT License](LICENSE)的许可

View File

@ -1,17 +1,24 @@
<a href="https://paperai.life"> <a href="https://paperai.life">
<img alt="Next.js and Supabase Starter Kit - the fastest way to build apps with Next.js and Supabase" src="https://paperai.life/opengraph-image.png"> <div align="center">
<h1 align="center">paper-ai</h1> <img src="./public/android-chrome-192x192.png" alt="the fastest way to create a paper with real references">
</div>
<h1 align="center">paper-ai</h1>
</a> </a>
<p align="center"> <p align="center">
The fastest way to write a paper with true references The fastest way to write a paper with true references
</p> </p>
<p align="center">
<a href='https://docs.paperai.life/' style='font-size: 20px;'><strong> Website Documentation (detailed tutorials, highly recommended)</strong></a> ·
<a href='https://www.bilibili.com/video/BV1Ya4y1k75V'><strong>bilibili Video Tutorial</strong></a>
</p>
<p align="center"> <p align="center">
<a href="#features"><strong>Features</strong></a> · <a href="#features"><strong>Features</strong></a> ·
<a href="#demo"><strong>Demo</strong></a> · <a href="#demo"><strong>Demo</strong></a> ·
<a href="#deploy-to-vercel"><strong>Deploy to Vercel</strong></a> · <a href="#deploy-to-vercel"><strong>Deploy to Vercel</strong></a> ·
<a href="#clone-and-run-locally"><strong>Clone and run locally</strong></a> · <a href="#clone-and-run-locally"><strong>Clone and run locally</strong></a>
<!-- <a href="#feedback-and-issues"><strong>Feedback and issues</strong></a> <!-- <a href="#feedback-and-issues"><strong>Feedback and issues</strong></a>
<a href="#more-supabase-examples"><strong>More Examples</strong></a> --> <a href="#more-supabase-examples"><strong>More Examples</strong></a> -->
</p> </p>
@ -40,6 +47,31 @@ The above will also clone the repo to your GitHub, you can clone that locally an
If you wish to just develop locally and not deploy to Vercel, [follow the steps below](#clone-and-run-locally). If you wish to just develop locally and not deploy to Vercel, [follow the steps below](#clone-and-run-locally).
## Using Docker
1. Using `docker pull` command
```sh
docker pull 14790897/paperai:latest
```
2. Run Docker
```sh
docker run -d -p 3000:3000 \
-e NEXT_PUBLIC_AI_URL=CUSTOM_AI_URL \
-e NEXT_PUBLIC_OPENAI_API_KEY=CUSTOM_API_KEY \
14790897/paperai:latest
```
Replace `CUSTOM_AI_URL` and `CUSTOM_API_KEY` to your own AI URL and API key
## Environment variable description
1. NEXT_PUBLIC_OPENAI_API_KEY sets the key. Simply leave the corresponding position in the settings interface (the gear in the upper right corner) blank, the predetermined variable will be used.
2. NEXT_PUBLIC_AI_URL sets the upstream url. Simply leave the corresponding position in the settings interface (the gear in the upper right corner) blank, the predetermined variable will be used.
3. NEXT_PUBLIC_SEMANTIC_API_KEY sets the `semantic scholar` key to increase the number of requests
4. NEXT_PUBLIC_PUBMED_API_KEY sets the `pubmed` key to increase the number of requests
## Clone and run locally ## Clone and run locally
```bash ```bash
@ -57,5 +89,13 @@ npm run dev
``` ```
## Reference
1. semantic scholar api: https://api.semanticscholar.org/api-docs/#tag/Paper-Data/operation/get_graph_paper_relevance_search
2. pubmed api: https://www.ncbi.nlm.nih.gov/books/NBK25500/
3. i18n: https://locize.com/blog/next-app-dir-i18n/
## LICENSE ## LICENSE
MIT This repository is licensed under the MIT License
See the [LICENSE](LICENSE) file for details.

View File

@ -33,7 +33,7 @@ export const metadata = {
}, },
openGraph: { openGraph: {
images: images:
"https://file.liuweiqing.life/2024/02/540f3476ef43c831934ce0359c367acd.png", "https://file.paperai.life/2024/02/540f3476ef43c831934ce0359c367acd.png",
}, },
twitter: { twitter: {
card: "page", card: "page",
@ -41,7 +41,7 @@ export const metadata = {
description: "The fastest way to write paper", description: "The fastest way to write paper",
creator: "@hahfrank", creator: "@hahfrank",
images: [ images: [
"https://file.liuweiqing.life/2024/02/540f3476ef43c831934ce0359c367acd.png", "https://file.paperai.life/2024/02/540f3476ef43c831934ce0359c367acd.png",
], ],
}, },
}; };
@ -88,7 +88,22 @@ export default function RootLayout({
{children} {children}
</main> </main>
</body> </body>
{/* 谷歌分析 */}
<GoogleAnalytics gaId="G-05DHTG9XQ5" /> <GoogleAnalytics gaId="G-05DHTG9XQ5" />
{/* vocechat聊天 */}
<Script
data-host-id="1"
data-auto-reg="true"
data-login-token=""
data-theme-color="#3EB489"
data-close-width="48"
data-close-height="48"
data-open-width="380"
data-open-height="480"
data-welcome="欢迎提问"
src="https://voce.paperai.life/widget.js"
async
></Script>
</html> </html>
); );
} }

View File

@ -13,7 +13,7 @@ const initialState: APIState = {
apiKey: "sk-GHuPUV6ERD8wVmmr36FeB8D809D34d93Bb857c009f6aF9Fe", //sk-ffe19ebe9fa44d00884330ff1c18cf82 apiKey: "sk-GHuPUV6ERD8wVmmr36FeB8D809D34d93Bb857c009f6aF9Fe", //sk-ffe19ebe9fa44d00884330ff1c18cf82
referencesRedux: [], referencesRedux: [],
editorContent: "", editorContent: "",
upsreamUrl: "https://one.liuweiqing.top", //https://api.openai.com https://one.caifree.com https://chatserver.3211000.xyz https://api.deepseek.com upsreamUrl: "https://one.paperai.life", //https://api.openai.com https://one.caifree.com https://chatserver.3211000.xyz https://api.deepseek.com
systemPrompt: `作为论文写作助手,您的主要任务是根据用户提供的研究主题和上下文,以及相关的研究论文,来撰写和完善学术论文。在撰写过程中,请注意以下要点: systemPrompt: `作为论文写作助手,您的主要任务是根据用户提供的研究主题和上下文,以及相关的研究论文,来撰写和完善学术论文。在撰写过程中,请注意以下要点:
1.使 1.使
2.使 [1]***[1]* 2.使 [1]***[1]*

View File

@ -2,7 +2,7 @@ export default function DeployButton() {
return ( return (
<a <a
className="py-2 px-3 flex rounded-md no-underline hover:bg-btn-background-hover border" className="py-2 px-3 flex rounded-md no-underline hover:bg-btn-background-hover border"
href="https://vercel.com/new/clone?repository-url=https://github.com/14790897/paper-ai&project-name=paper-ai&repository-name=paper-ai&demo-title=paper-ai&demo-description=This%20starter%20configures%20Supabase%20Auth%20to%20use%20cookies%2C%20making%20the%20user's%20session%20available%20throughout%20the%20entire%20Next.js%20app%20-%20Client%20Components%2C%20Server%20Components%2C%20Route%20Handlers%2C%20Server%20Actions%20and%20Middleware.&demo-url=https%3A%2F%2Fdemo-nextjs-with-supabase.vercel.app%2F&external-id=https%3A%2F%2Fgithub.com%2Fvercel%2Fnext.js%2Ftree%2Fcanary%2Fexamples%2Fwith-supabase&demo-image=https://file.liuweiqing.life/2024/02/540f3476ef43c831934ce0359c367acd.png" href="https://vercel.com/new/clone?repository-url=https://github.com/14790897/paper-ai&project-name=paper-ai&repository-name=paper-ai&demo-title=paper-ai&demo-description=This%20starter%20configures%20Supabase%20Auth%20to%20use%20cookies%2C%20making%20the%20user's%20session%20available%20throughout%20the%20entire%20Next.js%20app%20-%20Client%20Components%2C%20Server%20Components%2C%20Route%20Handlers%2C%20Server%20Actions%20and%20Middleware.&demo-url=https%3A%2F%2Fdemo-nextjs-with-supabase.vercel.app%2F&external-id=https%3A%2F%2Fgithub.com%2Fvercel%2Fnext.js%2Ftree%2Fcanary%2Fexamples%2Fwith-supabase&demo-image=https://file.paperai.life/2024/02/540f3476ef43c831934ce0359c367acd.png"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >

View File

@ -57,7 +57,7 @@ async function getArxivPapers(
return result; return result;
} catch (error: any) { } catch (error: any) {
throw new Error( throw new Error(
`Error fetching data from Arxiv API:${JSON.stringify( `Arxiv失败请使用英文并缩短关键词:${JSON.stringify(
error.response, error.response,
null, null,
2 2

View File

@ -37,7 +37,7 @@ async function getPubMedPapers(
// 这里只返回了ID列表你可能需要根据实际需要进行调整 // 这里只返回了ID列表你可能需要根据实际需要进行调整
return idList; return idList;
} catch (error) { } catch (error) {
console.error("Error fetching data from PubMed API:", error); console.error(" PubMed API失败(请使用英文并缩短关键词):", error);
return null; // 或根据需要处理错误 return null; // 或根据需要处理错误
} }
} }

View File

@ -52,7 +52,7 @@ async function getSemanticPapers(
} catch (error: any) { } catch (error: any) {
// console.error("Error fetching data from Semantic Scholar API:", error); // console.error("Error fetching data from Semantic Scholar API:", error);
throw new Error( throw new Error(
`Error fetching data from Semantic Scholar API:${JSON.stringify( `Semantic Scholar fail请使用英文并缩短关键词:${JSON.stringify(
error.response, error.response,
null, null,
2 2

View File

@ -66,16 +66,16 @@ const GoogleSignIn = () => {
return ( return (
<div> <div>
<div {/* <div
id="g_id_onload" id="g_id_onload"
data-client_id="646783243018-m2n9qfo12k70debpmkesevt5j2hi2itb.apps.googleusercontent.com" data-client_id="646783243018-m2n9qfo12k70debpmkesevt5j2hi2itb.apps.googleusercontent.com"
data-context="signin" data-context="signin"
data-ux_mode="popup" data-ux_mode="popup"
data-callback="handleSignInWithGoogle" // data-callback="handleSignInWithGoogleccounts.id.ini"
data-nonce="" data-nonce=""
data-auto_select="false" data-auto_select="false"
data-itp_support="true" data-itp_support="true"
></div> ></div> */}
<div <div
id="g_id_signin" id="g_id_signin"
className="g_id_signin" className="g_id_signin"

View File

@ -1,6 +1,6 @@
"use client"; "use client";
import React, { useState, useEffect, useRef } from "react"; import React, { useState, useEffect, useRef, use } from "react";
import Quill from "quill"; import Quill from "quill";
import "quill/dist/quill.snow.css"; import "quill/dist/quill.snow.css";
import { useLocalStorage } from "react-use"; import { useLocalStorage } from "react-use";
@ -29,6 +29,8 @@ import { useAppDispatch, useAppSelector } from "@/app/store";
import { import {
addReferencesRedux, addReferencesRedux,
setEditorContent, setEditorContent,
setApiKey,
setUpsreamUrl,
} from "@/app/store/slices/authSlice"; } from "@/app/store/slices/authSlice";
import { setContentUpdatedFromNetwork } from "@/app/store/slices/stateSlice"; import { setContentUpdatedFromNetwork } from "@/app/store/slices/stateSlice";
//类型声明 //类型声明
@ -108,7 +110,7 @@ const QEditor = ({ lng }) => {
//选择语言模型 //选择语言模型
const [selectedModel, setSelectedModel] = useLocalStorage( const [selectedModel, setSelectedModel] = useLocalStorage(
"gpt语言模型", "gpt语言模型",
"gpt-4" "deepseek-chat"
); // 默认选项 ); // 默认选项
const [generatedPaperNumber, setGeneratedPaperNumber] = useLocalStorage( const [generatedPaperNumber, setGeneratedPaperNumber] = useLocalStorage(
"生成次数", "生成次数",
@ -246,6 +248,19 @@ const QEditor = ({ lng }) => {
); );
} }
}, []); }, []);
// 强制更新为我设置的API
// useEffect(() => {
// dispatch(setApiKey("sk-GHuPUV6ERD8wVmmr36FeB8D809D34d93Bb857c009f6aF9Fe"));
// dispatch(setUpsreamUrl("https://one.paperai.life"));
// });
useEffect(() => {
if (upsreamUrl === "https://one.liuweiqing.top") {
dispatch(
setApiKey("sk-GHuPUV6ERD8wVmmr36FeB8D809D34d93Bb857c009f6aF9Fe")
);
dispatch(setUpsreamUrl("https://one.paperai.life"));
}
}, [upsreamUrl]);
const handleTextChange = debounce(async function (delta, oldDelta, source) { const handleTextChange = debounce(async function (delta, oldDelta, source) {
if (source === "user") { if (source === "user") {
// 获取编辑器内容 // 获取编辑器内容
@ -504,7 +519,7 @@ const QEditor = ({ lng }) => {
} }
); );
} catch (error) { } catch (error) {
toast.error(`AI写作出现错误: ${error}`, { toast.error(`AI写作出现错误(持续无法使用请切换deepseek模型): ${error}`, {
position: "top-center", position: "top-center",
autoClose: 3000, autoClose: 3000,
pauseOnHover: true, pauseOnHover: true,
@ -578,6 +593,7 @@ const QEditor = ({ lng }) => {
<option value="gpt-3.5-turbo">gpt-3.5-turbo</option> <option value="gpt-3.5-turbo">gpt-3.5-turbo</option>
<option value="gpt-4">gpt-4</option> <option value="gpt-4">gpt-4</option>
<option value="deepseek-chat">deepseek-chat</option> <option value="deepseek-chat">deepseek-chat</option>
<option value="commandr">commandr</option>
<option value="gemini-pro">gemini-pro</option> <option value="gemini-pro">gemini-pro</option>
<option value="mixtral-8x7b-32768">mixtral-8x7b-32768</option> <option value="mixtral-8x7b-32768">mixtral-8x7b-32768</option>
<option value="llama2-70b-4096">llama2-70b-4096</option> <option value="llama2-70b-4096">llama2-70b-4096</option>

View File

@ -30,11 +30,11 @@ const Settings = ({ lng }: { lng: string }) => {
// apiKey: "sk-jokVJ90l5Swxr5dt2f3b0988C8A442A69f97Ee4eAf7aDcF4", // apiKey: "sk-jokVJ90l5Swxr5dt2f3b0988C8A442A69f97Ee4eAf7aDcF4",
// upstreamUrl: "https://freeapi.iil.im", // upstreamUrl: "https://freeapi.iil.im",
// }, // },
{ // {
name: t("configurations.coze"), // name: t("configurations.coze"),
apiKey: "MTIwMjE2ODMyODA1NTk1MTM2MA", // apiKey: "MTIwMjE2ODMyODA1NTk1MTM2MA",
upstreamUrl: "https://coze.liuweiqing.top", // upstreamUrl: "https://coze.paperai.life",
}, // },
{ {
name: t("configurations.deepseek-chat"), name: t("configurations.deepseek-chat"),
apiKey: "sk-ffe19ebe9fa44d00884330ff1c18cf82", apiKey: "sk-ffe19ebe9fa44d00884330ff1c18cf82",
@ -63,7 +63,7 @@ const Settings = ({ lng }: { lng: string }) => {
{ {
name: t("configurations.oneapi"), name: t("configurations.oneapi"),
apiKey: "sk-GHuPUV6ERD8wVmmr36FeB8D809D34d93Bb857c009f6aF9Fe", apiKey: "sk-GHuPUV6ERD8wVmmr36FeB8D809D34d93Bb857c009f6aF9Fe",
upstreamUrl: "https://one.liuweiqing.top", upstreamUrl: "https://one.paperai.life",
}, },
{ {
name: t("configurations.custom"), name: t("configurations.custom"),

View File

@ -1,268 +0,0 @@
import {
useMediaQuery
} from "./chunk-DN3Q4TEW.js";
import {
computed,
ref,
shallowRef,
watch
} from "./chunk-456JUNPJ.js";
// node_modules/vitepress/dist/client/theme-default/index.js
import "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/styles/fonts.css";
// node_modules/vitepress/dist/client/theme-default/without-fonts.js
import "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/styles/vars.css";
import "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/styles/base.css";
import "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/styles/utils.css";
import "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css";
import "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css";
import "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css";
import "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css";
import "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css";
import VPBadge from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue";
import Layout from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/Layout.vue";
import { default as default2 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue";
import { default as default3 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue";
import { default as default4 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue";
import { default as default5 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue";
import { default as default6 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue";
import { default as default7 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue";
import { default as default8 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue";
import { default as default9 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue";
import { default as default10 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue";
import { default as default11 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue";
import { default as default12 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue";
import { default as default13 } from "C:/git-program/paper-ai/paperai-docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue";
// node_modules/vitepress/dist/client/shared.js
var inBrowser = typeof document !== "undefined";
// node_modules/vitepress/dist/client/theme-default/support/utils.js
import { withBase } from "vitepress";
// node_modules/vitepress/dist/client/theme-default/composables/data.js
import { useData as useData$ } from "vitepress";
var useData = useData$;
// node_modules/vitepress/dist/client/theme-default/support/utils.js
function ensureStartingSlash(path) {
return /^\//.test(path) ? path : `/${path}`;
}
// node_modules/vitepress/dist/client/theme-default/support/sidebar.js
function getSidebar(_sidebar, path) {
if (Array.isArray(_sidebar))
return addBase(_sidebar);
if (_sidebar == null)
return [];
path = ensureStartingSlash(path);
const dir = Object.keys(_sidebar).sort((a, b) => {
return b.split("/").length - a.split("/").length;
}).find((dir2) => {
return path.startsWith(ensureStartingSlash(dir2));
});
const sidebar = dir ? _sidebar[dir] : [];
return Array.isArray(sidebar) ? addBase(sidebar) : addBase(sidebar.items, sidebar.base);
}
function getSidebarGroups(sidebar) {
const groups = [];
let lastGroupIndex = 0;
for (const index in sidebar) {
const item = sidebar[index];
if (item.items) {
lastGroupIndex = groups.push(item);
continue;
}
if (!groups[lastGroupIndex]) {
groups.push({ items: [] });
}
groups[lastGroupIndex].items.push(item);
}
return groups;
}
function addBase(items, _base) {
return [...items].map((_item) => {
const item = { ..._item };
const base = item.base || _base;
if (base && item.link)
item.link = base + item.link;
if (item.items)
item.items = addBase(item.items, base);
return item;
});
}
// node_modules/vitepress/dist/client/theme-default/composables/hash.js
var hashRef = ref(inBrowser ? location.hash : "");
if (inBrowser) {
window.addEventListener("hashchange", () => {
hashRef.value = location.hash;
});
}
// node_modules/vitepress/dist/client/theme-default/composables/sidebar.js
function useSidebar() {
const { frontmatter, page, theme: theme2 } = useData();
const is960 = useMediaQuery("(min-width: 960px)");
const isOpen = ref(false);
const _sidebar = computed(() => {
const sidebarConfig = theme2.value.sidebar;
const relativePath = page.value.relativePath;
return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : [];
});
const sidebar = ref(_sidebar.value);
watch(_sidebar, (next, prev) => {
if (JSON.stringify(next) !== JSON.stringify(prev))
sidebar.value = _sidebar.value;
});
const hasSidebar = computed(() => {
return frontmatter.value.sidebar !== false && sidebar.value.length > 0 && frontmatter.value.layout !== "home";
});
const leftAside = computed(() => {
if (hasAside)
return frontmatter.value.aside == null ? theme2.value.aside === "left" : frontmatter.value.aside === "left";
return false;
});
const hasAside = computed(() => {
if (frontmatter.value.layout === "home")
return false;
if (frontmatter.value.aside != null)
return !!frontmatter.value.aside;
return theme2.value.aside !== false;
});
const isSidebarEnabled = computed(() => hasSidebar.value && is960.value);
const sidebarGroups = computed(() => {
return hasSidebar.value ? getSidebarGroups(sidebar.value) : [];
});
function open() {
isOpen.value = true;
}
function close() {
isOpen.value = false;
}
function toggle() {
isOpen.value ? close() : open();
}
return {
isOpen,
sidebar,
sidebarGroups,
hasSidebar,
hasAside,
leftAside,
isSidebarEnabled,
open,
close,
toggle
};
}
// node_modules/vitepress/dist/client/theme-default/composables/local-nav.js
import { onContentUpdated } from "vitepress";
// node_modules/vitepress/dist/client/theme-default/composables/outline.js
import { getScrollOffset } from "vitepress";
var resolvedHeaders = [];
function getHeaders(range) {
const headers = [
...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")
].filter((el) => el.id && el.hasChildNodes()).map((el) => {
const level = Number(el.tagName[1]);
return {
element: el,
title: serializeHeader(el),
link: "#" + el.id,
level
};
});
return resolveHeaders(headers, range);
}
function serializeHeader(h) {
let ret = "";
for (const node of h.childNodes) {
if (node.nodeType === 1) {
if (node.classList.contains("VPBadge") || node.classList.contains("header-anchor") || node.classList.contains("ignore-header")) {
continue;
}
ret += node.textContent;
} else if (node.nodeType === 3) {
ret += node.textContent;
}
}
return ret.trim();
}
function resolveHeaders(headers, range) {
if (range === false) {
return [];
}
const levelsRange = (typeof range === "object" && !Array.isArray(range) ? range.level : range) || 2;
const [high, low] = typeof levelsRange === "number" ? [levelsRange, levelsRange] : levelsRange === "deep" ? [2, 6] : levelsRange;
headers = headers.filter((h) => h.level >= high && h.level <= low);
resolvedHeaders.length = 0;
for (const { element, link } of headers) {
resolvedHeaders.push({ element, link });
}
const ret = [];
outer:
for (let i = 0; i < headers.length; i++) {
const cur = headers[i];
if (i === 0) {
ret.push(cur);
} else {
for (let j = i - 1; j >= 0; j--) {
const prev = headers[j];
if (prev.level < cur.level) {
;
(prev.children || (prev.children = [])).push(cur);
continue outer;
}
}
ret.push(cur);
}
}
return ret;
}
// node_modules/vitepress/dist/client/theme-default/composables/local-nav.js
function useLocalNav() {
const { theme: theme2, frontmatter } = useData();
const headers = shallowRef([]);
const hasLocalNav = computed(() => {
return headers.value.length > 0;
});
onContentUpdated(() => {
headers.value = getHeaders(frontmatter.value.outline ?? theme2.value.outline);
});
return {
headers,
hasLocalNav
};
}
// node_modules/vitepress/dist/client/theme-default/without-fonts.js
var theme = {
Layout,
enhanceApp: ({ app }) => {
app.component("Badge", VPBadge);
}
};
var without_fonts_default = theme;
export {
default2 as VPBadge,
default4 as VPButton,
default8 as VPDocAsideSponsors,
default6 as VPHomeFeatures,
default5 as VPHomeHero,
default7 as VPHomeSponsors,
default3 as VPImage,
default9 as VPSponsors,
default13 as VPTeamMembers,
default10 as VPTeamPage,
default12 as VPTeamPageSection,
default11 as VPTeamPageTitle,
without_fonts_default as default,
useLocalNav,
useSidebar
};
//# sourceMappingURL=@theme_index.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,40 +0,0 @@
{
"hash": "8c371e85",
"configHash": "441e0395",
"lockfileHash": "9cf9febc",
"browserHash": "c76444d4",
"optimized": {
"vue": {
"src": "../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "263297c9",
"needsInterop": false
},
"vitepress > @vue/devtools-api": {
"src": "../../../node_modules/@vue/devtools-api/dist/index.js",
"file": "vitepress___@vue_devtools-api.js",
"fileHash": "483a8161",
"needsInterop": false
},
"vitepress > @vueuse/core": {
"src": "../../../node_modules/@vueuse/core/index.mjs",
"file": "vitepress___@vueuse_core.js",
"fileHash": "5dcb9da3",
"needsInterop": false
},
"@theme/index": {
"src": "../../../node_modules/vitepress/dist/client/theme-default/index.js",
"file": "@theme_index.js",
"fileHash": "9a4b4951",
"needsInterop": false
}
},
"chunks": {
"chunk-DN3Q4TEW": {
"file": "chunk-DN3Q4TEW.js"
},
"chunk-456JUNPJ": {
"file": "chunk-456JUNPJ.js"
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,3 +0,0 @@
{
"type": "module"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,563 +0,0 @@
import {
DefaultMagicKeysAliasMap,
StorageSerializers,
TransitionPresets,
assert,
breakpointsAntDesign,
breakpointsBootstrapV5,
breakpointsMasterCss,
breakpointsPrimeFlex,
breakpointsQuasar,
breakpointsSematic,
breakpointsTailwind,
breakpointsVuetify,
bypassFilter,
camelize,
clamp,
cloneFnJSON,
computedAsync,
computedEager,
computedInject,
computedWithControl,
containsProp,
controlledRef,
createEventHook,
createFetch,
createFilterWrapper,
createGlobalState,
createInjectionState,
createReusableTemplate,
createSharedComposable,
createSingletonPromise,
createTemplatePromise,
createUnrefFn,
customStorageEventName,
debounceFilter,
defaultDocument,
defaultLocation,
defaultNavigator,
defaultWindow,
directiveHooks,
executeTransition,
extendRef,
formatDate,
formatTimeAgo,
get,
getLifeCycleTarget,
getSSRHandler,
hasOwn,
hyphenate,
identity,
increaseWithUnit,
injectLocal,
invoke,
isClient,
isDef,
isDefined,
isIOS,
isObject,
isWorker,
makeDestructurable,
mapGamepadToXbox360Controller,
noop,
normalizeDate,
notNullish,
now,
objectEntries,
objectOmit,
objectPick,
onClickOutside,
onKeyDown,
onKeyPressed,
onKeyStroke,
onKeyUp,
onLongPress,
onStartTyping,
pausableFilter,
promiseTimeout,
provideLocal,
rand,
reactify,
reactifyObject,
reactiveComputed,
reactiveOmit,
reactivePick,
refAutoReset,
refDebounced,
refDefault,
refThrottled,
refWithControl,
resolveRef,
resolveUnref,
set,
setSSRHandler,
syncRef,
syncRefs,
templateRef,
throttleFilter,
timestamp,
toReactive,
toRef,
toRefs,
toValue,
tryOnBeforeMount,
tryOnBeforeUnmount,
tryOnMounted,
tryOnScopeDispose,
tryOnUnmounted,
unrefElement,
until,
useActiveElement,
useAnimate,
useArrayDifference,
useArrayEvery,
useArrayFilter,
useArrayFind,
useArrayFindIndex,
useArrayFindLast,
useArrayIncludes,
useArrayJoin,
useArrayMap,
useArrayReduce,
useArraySome,
useArrayUnique,
useAsyncQueue,
useAsyncState,
useBase64,
useBattery,
useBluetooth,
useBreakpoints,
useBroadcastChannel,
useBrowserLocation,
useCached,
useClipboard,
useClipboardItems,
useCloned,
useColorMode,
useConfirmDialog,
useCounter,
useCssVar,
useCurrentElement,
useCycleList,
useDark,
useDateFormat,
useDebounceFn,
useDebouncedRefHistory,
useDeviceMotion,
useDeviceOrientation,
useDevicePixelRatio,
useDevicesList,
useDisplayMedia,
useDocumentVisibility,
useDraggable,
useDropZone,
useElementBounding,
useElementByPoint,
useElementHover,
useElementSize,
useElementVisibility,
useEventBus,
useEventListener,
useEventSource,
useEyeDropper,
useFavicon,
useFetch,
useFileDialog,
useFileSystemAccess,
useFocus,
useFocusWithin,
useFps,
useFullscreen,
useGamepad,
useGeolocation,
useIdle,
useImage,
useInfiniteScroll,
useIntersectionObserver,
useInterval,
useIntervalFn,
useKeyModifier,
useLastChanged,
useLocalStorage,
useMagicKeys,
useManualRefHistory,
useMediaControls,
useMediaQuery,
useMemoize,
useMemory,
useMounted,
useMouse,
useMouseInElement,
useMousePressed,
useMutationObserver,
useNavigatorLanguage,
useNetwork,
useNow,
useObjectUrl,
useOffsetPagination,
useOnline,
usePageLeave,
useParallax,
useParentElement,
usePerformanceObserver,
usePermission,
usePointer,
usePointerLock,
usePointerSwipe,
usePreferredColorScheme,
usePreferredContrast,
usePreferredDark,
usePreferredLanguages,
usePreferredReducedMotion,
usePrevious,
useRafFn,
useRefHistory,
useResizeObserver,
useScreenOrientation,
useScreenSafeArea,
useScriptTag,
useScroll,
useScrollLock,
useSessionStorage,
useShare,
useSorted,
useSpeechRecognition,
useSpeechSynthesis,
useStepper,
useStorage,
useStorageAsync,
useStyleTag,
useSupported,
useSwipe,
useTemplateRefsList,
useTextDirection,
useTextSelection,
useTextareaAutosize,
useThrottleFn,
useThrottledRefHistory,
useTimeAgo,
useTimeout,
useTimeoutFn,
useTimeoutPoll,
useTimestamp,
useTitle,
useToNumber,
useToString,
useToggle,
useTransition,
useUrlSearchParams,
useUserMedia,
useVModel,
useVModels,
useVibrate,
useVirtualList,
useWakeLock,
useWebNotification,
useWebSocket,
useWebWorker,
useWebWorkerFn,
useWindowFocus,
useWindowScroll,
useWindowSize,
watchArray,
watchAtMost,
watchDebounced,
watchDeep,
watchIgnorable,
watchImmediate,
watchOnce,
watchPausable,
watchThrottled,
watchTriggerable,
watchWithFilter,
whenever
} from "./chunk-DN3Q4TEW.js";
import "./chunk-456JUNPJ.js";
export {
DefaultMagicKeysAliasMap,
StorageSerializers,
TransitionPresets,
assert,
computedAsync as asyncComputed,
refAutoReset as autoResetRef,
breakpointsAntDesign,
breakpointsBootstrapV5,
breakpointsMasterCss,
breakpointsPrimeFlex,
breakpointsQuasar,
breakpointsSematic,
breakpointsTailwind,
breakpointsVuetify,
bypassFilter,
camelize,
clamp,
cloneFnJSON,
computedAsync,
computedEager,
computedInject,
computedWithControl,
containsProp,
computedWithControl as controlledComputed,
controlledRef,
createEventHook,
createFetch,
createFilterWrapper,
createGlobalState,
createInjectionState,
reactify as createReactiveFn,
createReusableTemplate,
createSharedComposable,
createSingletonPromise,
createTemplatePromise,
createUnrefFn,
customStorageEventName,
debounceFilter,
refDebounced as debouncedRef,
watchDebounced as debouncedWatch,
defaultDocument,
defaultLocation,
defaultNavigator,
defaultWindow,
directiveHooks,
computedEager as eagerComputed,
executeTransition,
extendRef,
formatDate,
formatTimeAgo,
get,
getLifeCycleTarget,
getSSRHandler,
hasOwn,
hyphenate,
identity,
watchIgnorable as ignorableWatch,
increaseWithUnit,
injectLocal,
invoke,
isClient,
isDef,
isDefined,
isIOS,
isObject,
isWorker,
makeDestructurable,
mapGamepadToXbox360Controller,
noop,
normalizeDate,
notNullish,
now,
objectEntries,
objectOmit,
objectPick,
onClickOutside,
onKeyDown,
onKeyPressed,
onKeyStroke,
onKeyUp,
onLongPress,
onStartTyping,
pausableFilter,
watchPausable as pausableWatch,
promiseTimeout,
provideLocal,
rand,
reactify,
reactifyObject,
reactiveComputed,
reactiveOmit,
reactivePick,
refAutoReset,
refDebounced,
refDefault,
refThrottled,
refWithControl,
resolveRef,
resolveUnref,
set,
setSSRHandler,
syncRef,
syncRefs,
templateRef,
throttleFilter,
refThrottled as throttledRef,
watchThrottled as throttledWatch,
timestamp,
toReactive,
toRef,
toRefs,
toValue,
tryOnBeforeMount,
tryOnBeforeUnmount,
tryOnMounted,
tryOnScopeDispose,
tryOnUnmounted,
unrefElement,
until,
useActiveElement,
useAnimate,
useArrayDifference,
useArrayEvery,
useArrayFilter,
useArrayFind,
useArrayFindIndex,
useArrayFindLast,
useArrayIncludes,
useArrayJoin,
useArrayMap,
useArrayReduce,
useArraySome,
useArrayUnique,
useAsyncQueue,
useAsyncState,
useBase64,
useBattery,
useBluetooth,
useBreakpoints,
useBroadcastChannel,
useBrowserLocation,
useCached,
useClipboard,
useClipboardItems,
useCloned,
useColorMode,
useConfirmDialog,
useCounter,
useCssVar,
useCurrentElement,
useCycleList,
useDark,
useDateFormat,
refDebounced as useDebounce,
useDebounceFn,
useDebouncedRefHistory,
useDeviceMotion,
useDeviceOrientation,
useDevicePixelRatio,
useDevicesList,
useDisplayMedia,
useDocumentVisibility,
useDraggable,
useDropZone,
useElementBounding,
useElementByPoint,
useElementHover,
useElementSize,
useElementVisibility,
useEventBus,
useEventListener,
useEventSource,
useEyeDropper,
useFavicon,
useFetch,
useFileDialog,
useFileSystemAccess,
useFocus,
useFocusWithin,
useFps,
useFullscreen,
useGamepad,
useGeolocation,
useIdle,
useImage,
useInfiniteScroll,
useIntersectionObserver,
useInterval,
useIntervalFn,
useKeyModifier,
useLastChanged,
useLocalStorage,
useMagicKeys,
useManualRefHistory,
useMediaControls,
useMediaQuery,
useMemoize,
useMemory,
useMounted,
useMouse,
useMouseInElement,
useMousePressed,
useMutationObserver,
useNavigatorLanguage,
useNetwork,
useNow,
useObjectUrl,
useOffsetPagination,
useOnline,
usePageLeave,
useParallax,
useParentElement,
usePerformanceObserver,
usePermission,
usePointer,
usePointerLock,
usePointerSwipe,
usePreferredColorScheme,
usePreferredContrast,
usePreferredDark,
usePreferredLanguages,
usePreferredReducedMotion,
usePrevious,
useRafFn,
useRefHistory,
useResizeObserver,
useScreenOrientation,
useScreenSafeArea,
useScriptTag,
useScroll,
useScrollLock,
useSessionStorage,
useShare,
useSorted,
useSpeechRecognition,
useSpeechSynthesis,
useStepper,
useStorage,
useStorageAsync,
useStyleTag,
useSupported,
useSwipe,
useTemplateRefsList,
useTextDirection,
useTextSelection,
useTextareaAutosize,
refThrottled as useThrottle,
useThrottleFn,
useThrottledRefHistory,
useTimeAgo,
useTimeout,
useTimeoutFn,
useTimeoutPoll,
useTimestamp,
useTitle,
useToNumber,
useToString,
useToggle,
useTransition,
useUrlSearchParams,
useUserMedia,
useVModel,
useVModels,
useVibrate,
useVirtualList,
useWakeLock,
useWebNotification,
useWebSocket,
useWebWorker,
useWebWorkerFn,
useWindowFocus,
useWindowScroll,
useWindowSize,
watchArray,
watchAtMost,
watchDebounced,
watchDeep,
watchIgnorable,
watchImmediate,
watchOnce,
watchPausable,
watchThrottled,
watchTriggerable,
watchWithFilter,
whenever
};
//# sourceMappingURL=vitepress___@vueuse_core.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": [],
"sourcesContent": [],
"mappings": "",
"names": []
}

View File

@ -1,323 +0,0 @@
import {
BaseTransition,
BaseTransitionPropsValidators,
Comment,
DeprecationTypes,
EffectScope,
ErrorCodes,
ErrorTypeStrings,
Fragment,
KeepAlive,
ReactiveEffect,
Static,
Suspense,
Teleport,
Text,
TrackOpTypes,
Transition,
TransitionGroup,
TriggerOpTypes,
VueElement,
assertNumber,
callWithAsyncErrorHandling,
callWithErrorHandling,
camelize,
capitalize,
cloneVNode,
compatUtils,
compile,
computed,
createApp,
createBaseVNode,
createBlock,
createCommentVNode,
createElementBlock,
createHydrationRenderer,
createPropsRestProxy,
createRenderer,
createSSRApp,
createSlots,
createStaticVNode,
createTextVNode,
createVNode,
customRef,
defineAsyncComponent,
defineComponent,
defineCustomElement,
defineEmits,
defineExpose,
defineModel,
defineOptions,
defineProps,
defineSSRCustomElement,
defineSlots,
devtools,
effect,
effectScope,
getCurrentInstance,
getCurrentScope,
getTransitionRawChildren,
guardReactiveProps,
h,
handleError,
hasInjectionContext,
hydrate,
initCustomFormatter,
initDirectivesForSSR,
inject,
isMemoSame,
isProxy,
isReactive,
isReadonly,
isRef,
isRuntimeOnly,
isShallow,
isVNode,
markRaw,
mergeDefaults,
mergeModels,
mergeProps,
nextTick,
normalizeClass,
normalizeProps,
normalizeStyle,
onActivated,
onBeforeMount,
onBeforeUnmount,
onBeforeUpdate,
onDeactivated,
onErrorCaptured,
onMounted,
onRenderTracked,
onRenderTriggered,
onScopeDispose,
onServerPrefetch,
onUnmounted,
onUpdated,
openBlock,
popScopeId,
provide,
proxyRefs,
pushScopeId,
queuePostFlushCb,
reactive,
readonly,
ref,
registerRuntimeCompiler,
render,
renderList,
renderSlot,
resolveComponent,
resolveDirective,
resolveDynamicComponent,
resolveFilter,
resolveTransitionHooks,
setBlockTracking,
setDevtoolsHook,
setTransitionHooks,
shallowReactive,
shallowReadonly,
shallowRef,
ssrContextKey,
ssrUtils,
stop,
toDisplayString,
toHandlerKey,
toHandlers,
toRaw,
toRef,
toRefs,
toValue,
transformVNodeArgs,
triggerRef,
unref,
useAttrs,
useCssModule,
useCssVars,
useModel,
useSSRContext,
useSlots,
useTransitionState,
vModelCheckbox,
vModelDynamic,
vModelRadio,
vModelSelect,
vModelText,
vShow,
version,
warn,
watch,
watchEffect,
watchPostEffect,
watchSyncEffect,
withAsyncContext,
withCtx,
withDefaults,
withDirectives,
withKeys,
withMemo,
withModifiers,
withScopeId
} from "./chunk-456JUNPJ.js";
export {
BaseTransition,
BaseTransitionPropsValidators,
Comment,
DeprecationTypes,
EffectScope,
ErrorCodes,
ErrorTypeStrings,
Fragment,
KeepAlive,
ReactiveEffect,
Static,
Suspense,
Teleport,
Text,
TrackOpTypes,
Transition,
TransitionGroup,
TriggerOpTypes,
VueElement,
assertNumber,
callWithAsyncErrorHandling,
callWithErrorHandling,
camelize,
capitalize,
cloneVNode,
compatUtils,
compile,
computed,
createApp,
createBlock,
createCommentVNode,
createElementBlock,
createBaseVNode as createElementVNode,
createHydrationRenderer,
createPropsRestProxy,
createRenderer,
createSSRApp,
createSlots,
createStaticVNode,
createTextVNode,
createVNode,
customRef,
defineAsyncComponent,
defineComponent,
defineCustomElement,
defineEmits,
defineExpose,
defineModel,
defineOptions,
defineProps,
defineSSRCustomElement,
defineSlots,
devtools,
effect,
effectScope,
getCurrentInstance,
getCurrentScope,
getTransitionRawChildren,
guardReactiveProps,
h,
handleError,
hasInjectionContext,
hydrate,
initCustomFormatter,
initDirectivesForSSR,
inject,
isMemoSame,
isProxy,
isReactive,
isReadonly,
isRef,
isRuntimeOnly,
isShallow,
isVNode,
markRaw,
mergeDefaults,
mergeModels,
mergeProps,
nextTick,
normalizeClass,
normalizeProps,
normalizeStyle,
onActivated,
onBeforeMount,
onBeforeUnmount,
onBeforeUpdate,
onDeactivated,
onErrorCaptured,
onMounted,
onRenderTracked,
onRenderTriggered,
onScopeDispose,
onServerPrefetch,
onUnmounted,
onUpdated,
openBlock,
popScopeId,
provide,
proxyRefs,
pushScopeId,
queuePostFlushCb,
reactive,
readonly,
ref,
registerRuntimeCompiler,
render,
renderList,
renderSlot,
resolveComponent,
resolveDirective,
resolveDynamicComponent,
resolveFilter,
resolveTransitionHooks,
setBlockTracking,
setDevtoolsHook,
setTransitionHooks,
shallowReactive,
shallowReadonly,
shallowRef,
ssrContextKey,
ssrUtils,
stop,
toDisplayString,
toHandlerKey,
toHandlers,
toRaw,
toRef,
toRefs,
toValue,
transformVNodeArgs,
triggerRef,
unref,
useAttrs,
useCssModule,
useCssVars,
useModel,
useSSRContext,
useSlots,
useTransitionState,
vModelCheckbox,
vModelDynamic,
vModelRadio,
vModelSelect,
vModelText,
vShow,
version,
warn,
watch,
watchEffect,
watchPostEffect,
watchSyncEffect,
withAsyncContext,
withCtx,
withDefaults,
withDirectives,
withKeys,
withMemo,
withModifiers,
withScopeId
};
//# sourceMappingURL=vue.js.map

View File

@ -1,7 +0,0 @@
{
"version": 3,
"sources": [],
"sourcesContent": [],
"mappings": "",
"names": []
}

View File

@ -1,36 +0,0 @@
import { defineConfig } from "vitepress";
// https://vitepress.dev/reference/site-config
export default defineConfig({
title: "paperai-docs",
description: "paperai docs",
base: "/paper-ai/",
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: "Home", link: "/" },
{
text: "GitHub",
link: "https://github.com/14790897/paper-ai",
},
],
sidebar: [
{
text: "Examples",
items: [
// { text: "Markdown Examples", link: "/markdown-examples" },
// { text: "Runtime API Examples", link: "/api-examples" },
{ text: "功能介绍 function", link: "/paperai-function" },
{ text: "部署方法 deploy", link: "/paperai-deploy" },
{ text: "环境变量 env", link: "/paperai-env" },
{ text: "界面展示 show", link: "/paperai-interface" },
],
},
],
socialLinks: [
{ icon: "github", link: "https://github.com/vuejs/vitepress" },
],
},
});

View File

@ -1,49 +0,0 @@
---
outline: deep
---
# Runtime API Examples
This page demonstrates usage of some of the runtime APIs provided by VitePress.
The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files:
```md
<script setup>
import { useData } from 'vitepress'
const { theme, page, frontmatter } = useData()
</script>
## Results
### Theme Data
<pre>{{ theme }}</pre>
### Page Data
<pre>{{ page }}</pre>
### Page Frontmatter
<pre>{{ frontmatter }}</pre>
```
<script setup>
import { useData } from 'vitepress'
const { site, theme, page, frontmatter } = useData()
</script>
## Results
### Theme Data
<pre>{{ theme }}</pre>
### Page Data
<pre>{{ page }}</pre>
### Page Frontmatter
<pre>{{ frontmatter }}</pre>
## More
Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata).

View File

@ -1,30 +0,0 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: "paperai-docs"
text: "paperai docs"
tagline: My great project tagline
actions:
- theme: brand
text: paperai-function
link: /paperai-function
- theme: brand
text: paperai-deploy
link: /paperai-deploy
- theme: brand
text: paperai-env
link: /paperai-env
- theme: alt
text: API Examples
link: /api-examples
features:
- title: Feature 1 使用真实文献
details: 从各种文献网站获取真实文献
- title: Feature 2 AI写作
details: 内置免费AI模型
- title: Feature 3 文献管理
details: 将文献有序地排列
---

View File

@ -1,85 +0,0 @@
# Markdown Extension Examples
This page demonstrates some of the built-in markdown extensions provided by VitePress.
## Syntax Highlighting
VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting:
**Input**
````md
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
````
**Output**
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
## Custom Containers
**Input**
```md
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a dangerous warning.
:::
::: details
This is a details block.
:::
```
**Output**
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a dangerous warning.
:::
::: details
This is a details block.
:::
## More
Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown).

View File

@ -1,10 +0,0 @@
{
"devDependencies": {
"vitepress": "^1.0.0-rc.42"
},
"scripts": {
"docs:dev": "vitepress dev",
"docs:build": "vitepress build",
"docs:preview": "vitepress preview"
}
}

View File

@ -1,36 +0,0 @@
## 镜像运行
1. 拉取镜像
```sh
docker pull 14790897/paperai:latest
```
2. 运行镜像
```sh
docker run -d -p 3000:3000 \
-e NEXT_PUBLIC_AI_URL=自定义AI模型地址\
-e NEXT_PUBLIC_OPENAI_API_KEY=自定义API KEY \
14790897/paperai:latest
```
## vercel 部署
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/14790897/paper-ai&project-name=paper-ai&repository-name=paper-ai&demo-title=paper-ai&demo-description=This%20starter%20configures%20Supabase%20Auth%20to%20use%20cookies%2C%20making%20the%20user's%20session%20available%20throughout%20the%20entire%20Next.js%20app%20-%20Client%20Components%2C%20Server%20Components%2C%20Route%20Handlers%2C%20Server%20Actions%20and%20Middleware.&demo-url=https%3A%2F%2Fdemo-nextjs-with-supabase.vercel.app%2F&external-id=https%3A%2F%2Fgithub.com%2Fvercel%2Fnext.js%2Ftree%2Fcanary%2Fexamples%2Fwith-supabase&demo-image=https%3A%2F%2Fpaperai.life%2Fopengraph-image.png)
## 克隆在本地运行
```bash
# 克隆版本库
git clone https://github.com/14790897/paper-ai.git
# 进入项目目录
cd paper-ai
# 安装依赖项
npm install
# 运行项目
npm run dev
```

View File

@ -1,7 +0,0 @@
## 环境变量说明
1. NEXT_PUBLIC_OPENAI_API_KEY 设置key只要在设置界面右上角齿轮对应的位置留空就会使用预定的变量
2. NEXT_PUBLIC_AI_URL 设置上游url只要在设置界面右上角齿轮对应的位置留空就会使用预定的变量
3. NEXT_PUBLIC_SEMANTIC_API_KEY 设置semantic scholar的key可以增加请求量
4. NEXT_PUBLIC_PUBMED_API_KEY 设置pubmed的key可以增加请求量

View File

@ -1,29 +0,0 @@
---
title: 介绍
sidebar: auto
---
## 功能介绍
- **人工智能书写功能** 点击 "AI 写作 "进行正常对话互动。人工智能将根据您的输入提供写作建议或回答问题。
- **寻找文献功能** 点击 "寻找文献",根据输入的关键词在 Semantic Scholar 或 arxiv 或 PubMed通过下拉框选择 中搜索论文。系统将把信息整合到您的论文中。一次搜索两篇,无搜索结果时会显示错误提示。
- **文献整理功能** 每次获得的文献都会被整理到页面下方
- **导出到 word** 页面最下方的导出 word 按钮可以将论文和文献引用直接导出到 word十分方便
- **内置多个免费 AI 模型**:请在右上角设置界面查看
- **云同步及多篇论文编辑功能**:此功能暂定收费二十元人民币永久开通,请点击左上角列表按钮进行购买,购买前需要注册账号
![](https://file.liuweiqing.life/2024/02/558e11d675d6a07dedbcfdc5ab8d072f.png)
## 具体使用方法
- 左边第一个输入框有两种用法
1. 点击 AI 写作时会读取输入框的内容进行正常的对话交流
2. 点击寻找文献会根据输入的主题词去寻找对应论文(如果输入的是英文关键词就会出现英文文献,中文关键词就是中文文献)
- 寻找文献按钮旁边是一个选择框,用于选择从哪个网站获取论文,目前可以选择 arxivsemantic scholar推荐pubmed比较推荐
- 之后是一个选择模型的选择框,用于选择对话的 AI 模型,支持哪些模型由你的 api 决定
- 往下看是一个大的输入框这里用户可以修改内容AI 生成内容
- 最下面是文献管理区域,用于整理搜索到的文献,符合中文引用格式

View File

@ -1,20 +0,0 @@
## 主界面
![](https://file.liuweiqing.life/2024/02/8efc91ee5f0eff0238b96c8f7c564c05.png)
![](https://file.liuweiqing.life/2024/02/56c022ad42fffc76dcf4215f1948cbb6.png)
## 设置界面
![](https://file.liuweiqing.life/2024/02/0955a53c01c412bdfd447b74c64585e3.png)
## 登录/注册界面
![](https://file.liuweiqing.life/2024/02/2f692952aca0263846e933a8ad9ad22a.png)
## 商店购买界面
![](https://file.liuweiqing.life/2024/02/b87d0022933462957ccf52d83c9b77ab.png)
## VIP 功能(云端同步,多篇文章编辑)
![](https://file.liuweiqing.life/2024/02/fd3b4fd44450a2276466b01b57b11c95.png)

32
package-lock.json generated
View File

@ -15,8 +15,8 @@
"@next/third-parties": "^14.1.0", "@next/third-parties": "^14.1.0",
"@reduxjs/toolkit": "^2.0.1", "@reduxjs/toolkit": "^2.0.1",
"@sentry/nextjs": "^7.101.1", "@sentry/nextjs": "^7.101.1",
"@supabase/ssr": "latest", "@supabase/ssr": "*",
"@supabase/supabase-js": "latest", "@supabase/supabase-js": "*",
"@types/react-toastify": "^4.1.0", "@types/react-toastify": "^4.1.0",
"add": "^2.0.6", "add": "^2.0.6",
"autoprefixer": "10.4.15", "autoprefixer": "10.4.15",
@ -30,7 +30,7 @@
"i18next-resources-to-backend": "^1.2.0", "i18next-resources-to-backend": "^1.2.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"negotiator": "^0.6.3", "negotiator": "^0.6.3",
"next": "latest", "next": "*",
"next-redux-wrapper": "^8.1.0", "next-redux-wrapper": "^8.1.0",
"openai": "^4.24.3", "openai": "^4.24.3",
"postcss": "8.4.35", "postcss": "8.4.35",
@ -50,7 +50,7 @@
"redux": "^5.0.1", "redux": "^5.0.1",
"redux-logger": "^3.0.6", "redux-logger": "^3.0.6",
"redux-persist": "^6.0.0", "redux-persist": "^6.0.0",
"sweetalert2": "^11.10.5", "sweetalert2": "^11.10.6",
"tailwindcss": "3.3.3", "tailwindcss": "3.3.3",
"typescript": "5.1.3", "typescript": "5.1.3",
"xml2js": "^0.6.2" "xml2js": "^0.6.2"
@ -2017,9 +2017,9 @@
} }
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.4", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
@ -4152,9 +4152,9 @@
} }
}, },
"node_modules/sweetalert2": { "node_modules/sweetalert2": {
"version": "11.10.5", "version": "11.10.6",
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.10.5.tgz", "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.10.6.tgz",
"integrity": "sha512-q9eE3EKhMcpIDU/Xcz7z5lk8axCGkgxwK47gXGrrfncnBJWxHPPHnBVAjfsVXcTt8Yi8U6HNEcBRSu+qGeyFdA==", "integrity": "sha512-CINZPLZXZRSZqSOE7H7j1F7X8e8O1kLOiXPmtJn1DYxvXsKBr3d16d90+IcwTTs7dJww20h8r8QIxIwsLGX+6A==",
"funding": { "funding": {
"type": "individual", "type": "individual",
"url": "https://github.com/sponsors/limonte" "url": "https://github.com/sponsors/limonte"
@ -6075,9 +6075,9 @@
} }
}, },
"follow-redirects": { "follow-redirects": {
"version": "1.15.4", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
}, },
"foreground-child": { "foreground-child": {
"version": "3.1.1", "version": "3.1.1",
@ -7547,9 +7547,9 @@
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
}, },
"sweetalert2": { "sweetalert2": {
"version": "11.10.5", "version": "11.10.6",
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.10.5.tgz", "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.10.6.tgz",
"integrity": "sha512-q9eE3EKhMcpIDU/Xcz7z5lk8axCGkgxwK47gXGrrfncnBJWxHPPHnBVAjfsVXcTt8Yi8U6HNEcBRSu+qGeyFdA==" "integrity": "sha512-CINZPLZXZRSZqSOE7H7j1F7X8e8O1kLOiXPmtJn1DYxvXsKBr3d16d90+IcwTTs7dJww20h8r8QIxIwsLGX+6A=="
}, },
"sync-fetch": { "sync-fetch": {
"version": "0.4.5", "version": "0.4.5",

View File

@ -49,7 +49,7 @@
"redux": "^5.0.1", "redux": "^5.0.1",
"redux-logger": "^3.0.6", "redux-logger": "^3.0.6",
"redux-persist": "^6.0.0", "redux-persist": "^6.0.0",
"sweetalert2": "^11.10.5", "sweetalert2": "^11.10.6",
"tailwindcss": "3.3.3", "tailwindcss": "3.3.3",
"typescript": "5.1.3", "typescript": "5.1.3",
"xml2js": "^0.6.2" "xml2js": "^0.6.2"