Browse Source

Merge branch 'master' of gitee.com:godoos/godoos

master
秋田弘 6 months ago
parent
commit
4600a54232
  1. 14
      CONTRIBUTING.md
  2. 12
      README.en.md
  3. 1
      README.md
  4. 21
      cloud/README.md
  5. 457
      frontend/src/components/chat/Chat.vue
  6. 137
      frontend/src/components/chat/ChatMenu.vue
  7. 32
      frontend/src/stores/labels/chatglm.ts
  8. 6
      frontend/src/stores/labels/index.ts
  9. 33
      frontend/src/stores/labels/neuralchat.ts
  10. 33
      frontend/src/stores/labels/starlinglm.ts
  11. 2
      frontend/src/system/member.ts

14
CONTRIBUTING.md

@ -0,0 +1,14 @@
# Contributing
We are greating for all improvements, bug fixes and new features if it not break exists behaviour.
## Code style
Code style described in stylecop ruleset file, checks perform on compile time. All violations of rules breaks project build.
Principal moments:
* use tabs
* private fields named with prefix "_"
## PR
For PR need:
* Issue described what problem you solve
* Code passed travis build (starts automatically)
* Code is covered by tests

12
README.en.md

@ -188,3 +188,15 @@ wails build
- [vditor](https://github.com/Vanessa219/vditor) - [vditor](https://github.com/Vanessa219/vditor)
- [mind-map](https://github.com/wanglin2/mind-map) - [mind-map](https://github.com/wanglin2/mind-map)
- [canvas-editor](https://github.com/Hufe921/canvas-editor) - [canvas-editor](https://github.com/Hufe921/canvas-editor)
### Contributing
See [Contributing guide](CONTRIBUTING.md)
### Contributors
<a href="https://github.com/phpk/godoos/graphs/contributors">
<img src="https://contributors-img.web.app/image?repo=phpk/godoos" />
</a>
Made with [contributors-img](https://contributors-img.web.app).

1
README.md

@ -28,6 +28,7 @@
- 更改文档存储方式,支持选择文件夹 - 更改文档存储方式,支持选择文件夹
- 内网聊天新增ai对话,可保存对话历史,可更换模型和prompt - 内网聊天新增ai对话,可保存对话历史,可更换模型和prompt
- 新增可定义端口和访问路径,支持web端系统重启 - 新增可定义端口和访问路径,支持web端系统重启
- 新增企业端gitee登录和github登录
## 🏭 第三阶段目标(十二月底发布) ## 🏭 第三阶段目标(十二月底发布)
1. **文档处理与Markdown智能升级** 1. **文档处理与Markdown智能升级**

21
cloud/README.md

@ -1,4 +1,6 @@
## 安装帮助 ## godocloud客户端安装帮助
- cloud目录为企业版打包客户端而设定,可以自由定制客户端,根据以下步骤打包
### 第一步:安装nodejs ### 第一步:安装nodejs
@ -19,7 +21,7 @@ sudo chmod +x build.sh
``` ```
#### windows环境下打包 #### windows环境下打包
- 首先安装mingw-w64,进入命令行界面 - 首先安装mingw-w32,进入命令行界面
``` ```
./build.sh ./build.sh
@ -27,3 +29,18 @@ sudo chmod +x build.sh
- 打包成功后每个系统的版本在dist目录下 - 打包成功后每个系统的版本在dist目录下
### 第三步:部署
- 启动文件
```
sudo chmod +x ./godocloud_linux_amd64
./godocloud_linux_amd64
```
- 访问地址:http://localhost:56781
- 备注:如需更改端口地址,修改cloud/cmd/main.go中,改完之后要重新打包部署
```
const serverAddress = ":56781"
```

457
frontend/src/components/chat/Chat.vue

@ -1,46 +1,46 @@
<script setup lang="ts"> <script setup lang="ts">
import { useChatStore } from "@/stores/chat"; import { useChatStore } from "@/stores/chat";
import { getWorkflowUrl } from "@/system/config"; import { getWorkflowUrl } from "@/system/config";
import { Search } from "@element-plus/icons-vue"; import { Search } from "@element-plus/icons-vue";
const store = useChatStore(); const store = useChatStore();
const workUrl = getWorkflowUrl(); const workUrl = getWorkflowUrl();
onMounted(() => { onMounted(() => {
store.initChat(); store.initChat();
}); });
const generateData = () => { const generateData = () => {
return store.allUserList.map((user: any) => ({ return store.allUserList.map((user: any) => ({
key: user.id, key: user.id,
label: user.nickname, label: user.nickname,
avatar: user.avatar, // avatar: user.avatar, //
})); }));
}; };
const data = ref(generateData()); const data = ref(generateData());
// users any[] // users any[]
let users = ref<any[]>([]); let users = ref<any[]>([]);
const myTransfer = ref() const myTransfer = ref()
watchEffect(() => { watchEffect(() => {
if (store.allUserList.length > 0) { if (store.allUserList.length > 0) {
data.value = generateData(); data.value = generateData();
} }
}); });
// searchList // searchList
watch( watch(
() => store.searchInput, () => store.searchInput,
(newSearchInput) => { (newSearchInput) => {
if (newSearchInput === "") { if (newSearchInput === "") {
store.searchList = []; // store.searchList = []; //
} else { } else {
store.searchList = store.chatList.filter( store.searchList = store.chatList.filter(
(user: { displayName: string | string[] }) => (user: { displayName: string | string[] }) =>
user.displayName.includes(newSearchInput) user.displayName.includes(newSearchInput)
); );
}
} }
); }
);
</script> </script>
<template> <template>
<el-container class="container"> <el-container class="container">
@ -48,103 +48,62 @@
<el-aside class="menu"> <el-aside class="menu">
<chat-menu /> <chat-menu />
</el-aside> </el-aside>
<el-container <el-container class="side" v-if="store.currentNavId < 4">
class="side"
v-if="store.currentNavId < 3"
>
<!--搜索栏--> <!--搜索栏-->
<el-header <template v-if="store.currentNavId < 2">
class="search" <el-header class="search">
v-if="store.currentNavId < 2" <el-input placeholder="搜索" :prefix-icon="Search" class="search-input" v-model="store.searchInput" />
> <!-- 邀请群聊 -->
<el-input <button class="inviteGroupChats" @click="store.setGroupChatInvitedDialogVisible(true)">
placeholder="搜索" <el-icon>
:prefix-icon="Search" <Plus />
class="search-input" </el-icon>
v-model="store.searchInput" </button>
/> </el-header>
<!-- 邀请群聊 --> <!--好友列表-->
<button <el-main class="list">
class="inviteGroupChats" <el-scrollbar>
@click="store.setGroupChatInvitedDialogVisible(true)" <chat-msg-list v-if="store.currentNavId == 0" />
> <chat-user-list v-if="store.currentNavId == 1" />
<el-icon><Plus /></el-icon> </el-scrollbar>
</button> </el-main>
</el-header> </template>
<!--好友列表--> <ai-chat-left v-if="store.currentNavId == 3" />
<el-main class="list">
<el-scrollbar>
<chat-msg-list v-if="store.currentNavId == 0" />
<chat-user-list v-if="store.currentNavId == 1" />
</el-scrollbar>
</el-main>
</el-container> </el-container>
<el-container class="chat-box"> <el-container class="chat-box">
<chat-box v-if="store.currentNavId < 1" /> <chat-box v-if="store.currentNavId < 1" />
<chat-user-info v-if="store.currentNavId == 1"></chat-user-info> <chat-user-info v-if="store.currentNavId == 1"></chat-user-info>
<ai-chat-main v-if="store.currentNavId == 3" />
</el-container> </el-container>
<el-container <el-container class="chat-setting" v-if="store.currentNavId == 2">
class="chat-setting" <iframe class="workflow" :src="workUrl"></iframe>
v-if="store.currentNavId == 2"
>
<iframe
class="workflow"
:src="workUrl"
></iframe>
</el-container> </el-container>
<el-container <el-container class="chat-setting" v-if="store.currentNavId == 5">
class="chat-setting"
v-if="store.currentNavId == 5"
>
<ChatUserSetting /> <ChatUserSetting />
</el-container> </el-container>
</el-container> </el-container>
<!-- 邀请群聊弹窗 --> <!-- 邀请群聊弹窗 -->
<el-dialog <el-dialog v-model="store.groupChatInvitedDialogVisible" width="80%" title="创建群聊" style="height: 550px"
v-model="store.groupChatInvitedDialogVisible" align-center>
width="80%"
title="创建群聊"
style="height: 550px"
align-center
>
<div class="dialog-body"> <div class="dialog-body">
<!-- 添加输入部门名的输入框 --> <!-- 添加输入部门名的输入框 -->
<div> <div>
<el-form label-position="top"> <el-form label-position="top">
<el-form-item label="群聊名称:"> <el-form-item label="群聊名称:">
<el-input <el-input maxlength="8" show-word-limit style="width: 240px; height: 30px"
maxlength="8" class="department-name" v-model="store.departmentName" placeholder="请输入群聊名称"></el-input>
show-word-limit
style="width: 240px; height: 30px"
class="department-name"
v-model="store.departmentName"
placeholder="请输入群聊名称"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<!-- 使用 Element el-transfer 组件替换自定义穿梭框 --> <!-- 使用 Element el-transfer 组件替换自定义穿梭框 -->
<el-transfer <el-transfer v-model="users" :data="data" :titles="['可选项', '已选项']" filterable style="height: 250px"
v-model="users" filter-placeholder="搜索用户名" :props="{ key: 'key', label: 'label', avatar: 'avatar' }"
:data="data" :left-default-checked="[]" class="transfer-container" ref="myTransfer">
:titles="['可选项', '已选项']"
filterable
style="height: 250px"
filter-placeholder="搜索用户名"
:props="{ key: 'key', label: 'label', avatar: 'avatar' }"
:left-default-checked="[]"
class="transfer-container"
ref="myTransfer"
>
<!-- 自定义穿梭框列表项模板 --> <!-- 自定义穿梭框列表项模板 -->
<template #default="{ option }"> <template #default="{ option }">
<el-avatar <el-avatar :src="option.avatar" size="small" style="margin-right: 5px" />
:src="option.avatar"
size="small"
style="margin-right: 5px"
/>
<span>{{ option.label }}</span> <span>{{ option.label }}</span>
</template> </template>
</el-transfer> </el-transfer>
@ -152,167 +111,169 @@
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button <el-button style="background-color: #0078d4; color: #fff"
style="background-color: #0078d4; color: #fff" @click="store.groupChatInvitedDialogVisible = false">取消</el-button>
@click="store.groupChatInvitedDialogVisible = false" <el-button style="background-color: #0078d4; color: #fff"
>取消</el-button @click="store.createGroupChat(users)">确定</el-button>
>
<el-button
style="background-color: #0078d4; color: #fff"
@click="store.createGroupChat(users)"
>确定</el-button
>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<style scoped> <style scoped>
:deep(.el-transfer) { :deep(.el-transfer) {
display: flex;
flex-direction: row;
/* 将布局方向设置为横向 */
width: 550px;
/* 让穿梭框占满宽度 */
justify-content: center;
align-items: center;
.el-transfer__buttons {
display: flex; display: flex;
flex-direction: row; /* 将布局方向设置为横向 */ justify-content: space-evenly;
width: 550px; /* 让穿梭框占满宽度 */
justify-content: center;
align-items: center; align-items: center;
.el-transfer__buttons { width: 120px;
display: flex; padding: 0 0 !important;
justify-content: space-evenly;
align-items: center; .el-button {
width: 120px; width: 40px !important;
padding: 0 0 !important; height: 30px !important;
.el-button { background-color: #0078d4;
width: 40px !important; color: #fff;
height: 30px !important;
background-color: #0078d4;
color: #fff;
}
} }
} }
}
::v-deep .el-dialog .el-dialog__header { ::v-deep .el-dialog .el-dialog__header {
border: none !important; border: none !important;
} }
::v-deep .el-transfer-panel { ::v-deep .el-transfer-panel {
width: 270px !important; /* 设置每个穿梭框面板的宽度 */ width: 270px !important;
height: 250px !important; /* 设置每个穿梭框面板的宽度 */
} height: 250px !important;
}
::v-deep .el-transfer-panel__body { ::v-deep .el-transfer-panel__body {
height: 200px !important; height: 200px !important;
} }
::v-deep .el-checkbox__label { ::v-deep .el-checkbox__label {
margin-left: 10px !important; margin-left: 10px !important;
} }
.container { .container {
display: flex; display: flex;
height: 100%; height: 100%;
width: 100%; width: 100%;
overflow-y: hidden; overflow-y: hidden;
overflow-x: hidden; overflow-x: hidden;
border-top: 1px solid #e8e8e8; border-top: 1px solid #e8e8e8;
} }
.menu { .menu {
width: 55px; width: 55px;
background-color: #ffffff; background-color: #ffffff;
overflow-y: hidden; overflow-y: hidden;
overflow-x: hidden; overflow-x: hidden;
-webkit-app-region: drag; -webkit-app-region: drag;
} }
.side { .side {
flex: 1; flex: 1;
/* 占据剩余宽度 */ /* 占据剩余宽度 */
/* max-width: 200px; */ /* max-width: 200px; */
/* min-width: 200px; */ /* min-width: 200px; */
min-height: 650px; min-height: 650px;
max-height: max-content; max-height: max-content;
border-right: 1px solid #e8e8e8; border-right: 1px solid #e8e8e8;
overflow-y: hidden; overflow-y: hidden;
overflow-x: hidden; overflow-x: hidden;
} }
.search { .search {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-evenly; justify-content: space-evenly;
width: 100%; width: 100%;
height: 50px; height: 50px;
padding: 0; padding: 0;
padding-right: 10px; padding-right: 10px;
-webkit-app-region: drag; -webkit-app-region: drag;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8;
border-left: 1px solid #e8e8e8; border-left: 1px solid #e8e8e8;
} }
.inviteGroupChats {
width: 40px;
height: 30px;
border: none;
border-radius: 4px;
background-color: #f0f0f0;
}
.user-item { .inviteGroupChats {
width: 100%; width: 40px;
height: 30px; height: 30px;
display: flex; border: none;
align-items: center; border-radius: 4px;
} background-color: #f0f0f0;
}
.search-input { .user-item {
width: calc(100% - 20px); width: 100%;
margin: 10px; height: 30px;
height: 32px; display: flex;
-webkit-app-region: no-drag; align-items: center;
--el-input-placeholder-color: #bfbfbf !important; }
--el-input-icon-color: #bfbfbf !important;
}
.list { .search-input {
width: 100%; width: calc(100% - 20px);
height: 100%; margin: 10px;
padding: 0; height: 32px;
overflow-y: hidden; -webkit-app-region: no-drag;
overflow-x: hidden; --el-input-placeholder-color: #bfbfbf !important;
border-left: 1px solid #e8e8e8; --el-input-icon-color: #bfbfbf !important;
} }
.dialog-body {
width: 100%;
height: 350px;
}
.chat-box { .list {
flex: 3; width: 100%;
width: 100%; height: 100%;
height: 100%; padding: 0;
max-height: max-content; overflow-y: hidden;
background-color: #ffffff; overflow-x: hidden;
} border-left: 1px solid #e8e8e8;
}
.chat-setting { .dialog-body {
width: calc(100% - 65px); width: 100%;
height: 100%; height: 350px;
overflow: hidden; }
}
.workflow {
width: 100%;
height: 100%;
object-fit: contain;
border: none;
}
.no-message-container { .chat-box {
height: 100%; flex: 3;
margin: 120px auto; width: 100%;
text-align: center; height: 100%;
font-size: 14px; max-height: max-content;
justify-content: center; background-color: #ffffff;
} }
.department-name { .chat-setting {
margin: 10px 0; width: calc(100% - 65px);
} height: 100%;
overflow: hidden;
}
.workflow {
width: 100%;
height: 100%;
object-fit: contain;
border: none;
}
.no-message-container {
height: 100%;
margin: 120px auto;
text-align: center;
font-size: 14px;
justify-content: center;
}
.department-name {
margin: 10px 0;
}
</style> </style>

137
frontend/src/components/chat/ChatMenu.vue

@ -1,34 +1,23 @@
<script setup> <script setup>
import { useChatStore } from "@/stores/chat"; import { useChatStore } from "@/stores/chat";
import { Setting as SettingIcon } from "@element-plus/icons-vue"; import { Setting as SettingIcon } from "@element-plus/icons-vue";
const store = useChatStore(); const store = useChatStore();
</script> </script>
<template> <template>
<!-- 头像 --> <!-- 头像 -->
<el-row> <el-row>
<el-avatar <el-avatar shape="square" :size="40" class="userAvatar" :src="store.userInfo.avatar" />
shape="square"
:size="40"
class="userAvatar"
:src="store.userInfo.avatar"
/>
</el-row> </el-row>
<!-- 菜单按钮 --> <!-- 菜单按钮 -->
<el-row @click="store.setCurrentNavId(0)"> <el-row @click="store.setCurrentNavId(0)">
<div class="menu-icon-box"> <div class="menu-icon-box">
<el-icon <el-icon v-if="store.currentNavId === 0" class="menu-icon-on">
v-if="store.currentNavId === 0"
class="menu-icon-on"
>
<Comment /> <Comment />
</el-icon> </el-icon>
<el-icon <el-icon v-else class="menu-icon">
v-else
class="menu-icon"
>
<Comment /> <Comment />
</el-icon> </el-icon>
</div> </div>
@ -36,21 +25,24 @@
<el-row @click="store.setCurrentNavId(1)"> <el-row @click="store.setCurrentNavId(1)">
<div class="menu-icon-box"> <div class="menu-icon-box">
<el-icon <el-icon v-if="store.currentNavId === 1" class="menu-icon-on">
v-if="store.currentNavId === 1"
class="menu-icon-on"
>
<UserFilled /> <UserFilled />
</el-icon> </el-icon>
<el-icon <el-icon v-else class="menu-icon">
v-else
class="menu-icon"
>
<User /> <User />
</el-icon> </el-icon>
</div> </div>
</el-row> </el-row>
<el-row @click="store.setCurrentNavId(3)">
<div class="menu-icon-box">
<el-icon v-if="store.currentNavId === 3" class="menu-icon-on">
<Promotion />
</el-icon>
<el-icon v-else class="menu-icon">
<Position />
</el-icon>
</div>
</el-row>
<!-- <el-row @click="store.setCurrentNavId(2)"> <!-- <el-row @click="store.setCurrentNavId(2)">
<div class="menu-icon-box"> <div class="menu-icon-box">
<el-icon <el-icon
@ -69,69 +61,60 @@
</el-row> --> </el-row> -->
<!-- 设置按钮固定在底部 --> <!-- 设置按钮固定在底部 -->
<el-row <el-row class="settings-icon-row" @click="store.setCurrentNavId(5)">
class="settings-icon-row"
@click="store.setCurrentNavId(5)"
>
<div class="menu-icon-box"> <div class="menu-icon-box">
<el-icon <el-icon v-if="store.currentNavId === 5" class="menu-icon-on">
v-if="store.currentNavId === 5"
class="menu-icon-on"
>
<Tools /> <Tools />
</el-icon> </el-icon>
<el-icon <el-icon v-else class="menu-icon">
v-else <Tools />
class="menu-icon"
>
<Tools />
</el-icon> </el-icon>
</div> </div>
</el-row> </el-row>
</template> </template>
<style scoped> <style scoped>
.chat-user-info { .chat-user-info {
position: relative; position: relative;
height: 100%; height: 100%;
} }
.userAvatar { .userAvatar {
margin: 6px auto; margin: 6px auto;
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
} }
.menu-icon-box { .menu-icon-box {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
width: 40px; width: 40px;
height: 40px; height: 40px;
margin: 10px auto; margin: 10px auto;
transition: all 0.5s; transition: all 0.5s;
} }
.menu-icon { .menu-icon {
margin: 0 auto; margin: 0 auto;
font-size: 25px; font-size: 25px;
cursor: pointer; cursor: pointer;
color: #86909C; color: #86909C;
} }
.menu-icon-on { .menu-icon-on {
margin: 0 auto; margin: 0 auto;
font-size: 25px; font-size: 25px;
color: #0d42d2; color: #0d42d2;
cursor: pointer; cursor: pointer;
} }
/* 设置按钮独立在底部 */ /* 设置按钮独立在底部 */
.settings-icon-row { .settings-icon-row {
position: absolute; position: absolute;
bottom: 20px; bottom: 20px;
left: 0; left: 0;
right: 0; right: 0;
width: 55px; width: 55px;
height: 55px; height: 55px;
} }
</style> </style>

32
frontend/src/stores/labels/chatglm.ts

@ -0,0 +1,32 @@
export const chatglmLabels = {
name: "chatglm",
family: "llama",
action: "chat",
models: [
{
model: "EntropyYue/chatglm3:6b",
params: {
stream: true,
"stop": [
"<|system|>",
"<|user|>",
"<|assistant|>"
],
"temperature": 0.7,
"top_k": 5,
"top_p": 0.8
},
info: {
engine: "ollama",
from: "ollama",
size: "3.6GB",
desk: "4GB",
cpu: "16GB",
gpu: "8GB",
quant: "q4"
}
},
],
zhdesc: "ChatGLM是由清华技术成果转化的公司智谱AI发布的开源的、支持中英双语问答的对话语言模型系列,并针对中文进行了优化,该模型基于General Language Model(GLM)架构构建",
endesc: "ChatGLM is an open-source dialogue language model series released by Zhipu AI, a company that transforms technology achievements from Tsinghua University. It supports bilingual Q&A in both Chinese and English and has been optimized for Chinese. The model is built on the General Language Model (GLM) architecture"
}

6
frontend/src/stores/labels/index.ts

@ -1,5 +1,6 @@
import { qwenLabels } from './qwen.ts' import { qwenLabels } from './qwen.ts'
import { gemmaLabels } from './gemma.ts' import { gemmaLabels } from './gemma.ts'
import { chatglmLabels } from './chatglm.ts'
import { llamaLabels } from './llama.ts' import { llamaLabels } from './llama.ts'
import { internlmLabels } from './internlm.ts' import { internlmLabels } from './internlm.ts'
import { mingyiLabels } from './mingyi.ts' import { mingyiLabels } from './mingyi.ts'
@ -8,6 +9,8 @@ import { llavaLabels } from './llava.ts'
import { bakllavaLabels } from './bakllava.ts' import { bakllavaLabels } from './bakllava.ts'
import { minicpmLabels } from './minicpm.ts' import { minicpmLabels } from './minicpm.ts'
import { moondreamLabels } from './moondream.ts' import { moondreamLabels } from './moondream.ts'
import { starlinglmLabels } from './starlinglm.ts'
import { neuralchatLabels } from './neuralchat.ts'
import { phiLabels } from './phi.ts' import { phiLabels } from './phi.ts'
import { openchatLabels } from './openchat.ts' import { openchatLabels } from './openchat.ts'
import { ayaLabels } from './aya.ts' import { ayaLabels } from './aya.ts'
@ -41,6 +44,7 @@ import { vitsLabel } from './vits.ts'
export const aiLabels = [ export const aiLabels = [
qwenLabels, qwenLabels,
gemmaLabels, gemmaLabels,
chatglmLabels,
llamaLabels, llamaLabels,
internlmLabels, internlmLabels,
mingyiLabels, mingyiLabels,
@ -49,6 +53,8 @@ export const aiLabels = [
bakllavaLabels, bakllavaLabels,
minicpmLabels, minicpmLabels,
moondreamLabels, moondreamLabels,
starlinglmLabels,
neuralchatLabels,
phiLabels, phiLabels,
openchatLabels, openchatLabels,
ayaLabels, ayaLabels,

33
frontend/src/stores/labels/neuralchat.ts

@ -0,0 +1,33 @@
export const neuralchatLabels = {
name: "neural-chat",
family: "llama",
action: "chat",
models: [
{
model: "neural-chat:latest",
params: {
stream: true,
"num_ctx": 4096,
"stop": [
"</s>",
"<|im_start|>",
"<|im_end|>"
],
"temperature": 0.7,
"top_k": 5,
"top_p": 0.8
},
info: {
engine: "ollama",
from: "ollama",
size: "4.1GB",
desk: "5GB",
cpu: "16GB",
gpu: "8GB",
quant: "q4"
}
},
],
zhdesc: "基于Mistral的微调模型,具有良好的领域和语言覆盖率。",
endesc: "A fine-tuned model based on Mistral with good coverage of domain and language. "
}

33
frontend/src/stores/labels/starlinglm.ts

@ -0,0 +1,33 @@
export const starlinglmLabels = {
name: "starling-lm",
family: "llama",
action: "chat",
models: [
{
model: "starling-lm:latest",
params: {
stream: true,
"stop": [
"<|endoftext|>",
"<|end_of_turn|>",
"Human:",
"Assistant:"
],
"temperature": 0.7,
"top_k": 5,
"top_p": 0.8
},
info: {
engine: "ollama",
from: "ollama",
size: "4.1GB",
desk: "5GB",
cpu: "16GB",
gpu: "8GB",
quant: "q4"
}
},
],
zhdesc: "Starling是一个大型语言模型,通过人工智能反馈的强化学习进行训练,专注于提高聊天机器人的有用性。",
endesc: "Starling is a large language model trained by reinforcement learning from AI feedback focused on improving chatbot helpfulness. "
}

2
frontend/src/system/member.ts

@ -5,7 +5,7 @@ export const memberList = [
content:"Chat", content:"Chat",
frame: true, frame: true,
width: 800, width: 800,
height: 650, height: 600,
center: true, center: true,
resizable: true, resizable: true,
isDeskTop: true, isDeskTop: true,

Loading…
Cancel
Save