改进 助理共享部分
This commit is contained in:
parent
46ba7a641d
commit
49975c600a
2
src/components.d.ts
vendored
2
src/components.d.ts
vendored
@ -9,10 +9,12 @@ declare module 'vue' {
|
|||||||
export interface GlobalComponents {
|
export interface GlobalComponents {
|
||||||
AccountSettings: typeof import('./components/settings/AccountSettings.vue')['default']
|
AccountSettings: typeof import('./components/settings/AccountSettings.vue')['default']
|
||||||
AssistantMenu: typeof import('./components/AssistantMenu.vue')['default']
|
AssistantMenu: typeof import('./components/AssistantMenu.vue')['default']
|
||||||
|
AssistantPublistSettings: typeof import('./components/settings/AssistantPublistSettings.vue')['default']
|
||||||
AssistantSettings: typeof import('./components/settings/AssistantSettings.vue')['default']
|
AssistantSettings: typeof import('./components/settings/AssistantSettings.vue')['default']
|
||||||
Chat: typeof import('./components/chat/Chat.vue')['default']
|
Chat: typeof import('./components/chat/Chat.vue')['default']
|
||||||
ChatMenu: typeof import('./components/ChatMenu.vue')['default']
|
ChatMenu: typeof import('./components/ChatMenu.vue')['default']
|
||||||
ChatSettings: typeof import('./components/settings/ChatSettings.vue')['default']
|
ChatSettings: typeof import('./components/settings/ChatSettings.vue')['default']
|
||||||
|
copy: typeof import('./components/settings/AssistantSettings copy.vue')['default']
|
||||||
LeftSettings: typeof import('./components/settings/LeftSettings.vue')['default']
|
LeftSettings: typeof import('./components/settings/LeftSettings.vue')['default']
|
||||||
LibrarySettings: typeof import('./components/settings/LibrarySettings.vue')['default']
|
LibrarySettings: typeof import('./components/settings/LibrarySettings.vue')['default']
|
||||||
Lottie: typeof import('./components/Lottie.vue')['default']
|
Lottie: typeof import('./components/Lottie.vue')['default']
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="relative flex flex-col items-center">
|
<div
|
||||||
<div class="w-4/5">
|
class="flex flex-col items-center justify-between pl-20 pr-20"
|
||||||
<div>
|
>
|
||||||
|
<div class=" min-w-full w-4/5">
|
||||||
|
<n-scrollbar style="max-height: calc(100vh - (var(--header-height) *3.5))">
|
||||||
<div
|
<div
|
||||||
class="flex-grow mt-3 mb-1 text-5xl select-none"
|
class="flex-grow mt-3 mb-1 text-5xl select-none"
|
||||||
v-if="!chatMessages?.length"
|
v-if="!chatMessages?.length"
|
||||||
@ -18,131 +20,119 @@
|
|||||||
<div v-else @click="assistantStore.selectMenu = false">
|
<div v-else @click="assistantStore.selectMenu = false">
|
||||||
<MessageList :chat_messages="chatMessages" />
|
<MessageList :chat_messages="chatMessages" />
|
||||||
</div>
|
</div>
|
||||||
|
</n-scrollbar>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="w-full pr-2 pl-2 pt-2">
|
||||||
|
<div
|
||||||
|
class="mx-auto w-2xl max-w-2xl text-center mb-3 animate__animated animate__pulse text-lg"
|
||||||
|
v-if="isMobile && chatStore.toolName != ''"
|
||||||
|
>
|
||||||
|
<n-gradient-text type="info">
|
||||||
|
正在执行 {{ chatStore.toolName }}
|
||||||
|
</n-gradient-text>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
<div class="fixed bottom-0 left-0 right-0">
|
ref="inputContainer"
|
||||||
<!-- <div
|
class="mx-auto w-2xl max-w-md lg:max-w-2xl outline-none input-color input-bg rounded-full flex pl-5 pr-5 bg-white shadow-lg items-center p-4 pb-4 transition-all"
|
||||||
class="mx-auto w-2xl max-w-2xl text-center mb-3 animate__animated animate__pulse text-lg"
|
>
|
||||||
v-if="toolCalling"
|
<div class="overflow-x-hidden h-full w-full flex items-center">
|
||||||
>
|
<n-scrollbar class="max-h-96">
|
||||||
<n-gradient-text type="info">
|
<n-dropdown
|
||||||
{{ toolName }}
|
:show="assistantStore.selectMenu"
|
||||||
</n-gradient-text>
|
:options="assistantMenuOptions"
|
||||||
</div> -->
|
placement="top-start"
|
||||||
|
@select="handleSelect"
|
||||||
<div
|
|
||||||
class="mx-auto w-2xl max-w-2xl text-center mb-3 animate__animated animate__pulse text-lg"
|
|
||||||
v-if="isMobile && chatStore.toolName != ''"
|
|
||||||
>
|
|
||||||
<n-gradient-text type="info">
|
|
||||||
正在执行 {{ chatStore.toolName }}
|
|
||||||
</n-gradient-text>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
ref="inputContainer"
|
|
||||||
class="mx-auto w-2xl max-w-xs lg:max-w-2xl outline-none input-color input-bg rounded-full flex pl-5 pr-5 bg-white shadow-lg items-center p-4 pb-4 transition-all"
|
|
||||||
>
|
|
||||||
<div class="overflow-x-hidden h-full w-full flex items-center">
|
|
||||||
<n-scrollbar class="max-h-96">
|
|
||||||
<n-dropdown
|
|
||||||
:show="assistantStore.selectMenu"
|
|
||||||
:options="assistantMenuOptions"
|
|
||||||
placement="top-start"
|
|
||||||
@select="handleSelect"
|
|
||||||
>
|
|
||||||
<div class="absolute left-0"></div>
|
|
||||||
</n-dropdown>
|
|
||||||
<div
|
|
||||||
ref="inputText"
|
|
||||||
:class="{ 'has-placeholder': isPlaceholderVisible }"
|
|
||||||
contenteditable="true"
|
|
||||||
placeholder="请输入文本..."
|
|
||||||
class="input-text max-w-full outline-none text-lg text-pretty pl-2 min-h-6"
|
|
||||||
@keydown="onKeydown"
|
|
||||||
@input="updateInputHeight"
|
|
||||||
@compositionstart="handleCompositionStart"
|
|
||||||
@compositionend="handleCompositionEnd"
|
|
||||||
></div>
|
|
||||||
</n-scrollbar>
|
|
||||||
</div>
|
|
||||||
<n-spin :show="processing">
|
|
||||||
<div
|
|
||||||
ref="actionContainer"
|
|
||||||
class="flex [&>button]:ml-2 pr-4 justify-end"
|
|
||||||
>
|
>
|
||||||
<n-tooltip
|
<div class="absolute left-0"></div>
|
||||||
trigger="hover"
|
</n-dropdown>
|
||||||
v-if="chatId !== null && chatData.assistant_id !== null"
|
<div
|
||||||
>
|
ref="inputText"
|
||||||
<template #trigger>
|
:class="{ 'has-placeholder': isPlaceholderVisible }"
|
||||||
<n-button
|
contenteditable="true"
|
||||||
tertiary
|
placeholder="请输入文本..."
|
||||||
circle
|
class="input-text max-w-full outline-none text-lg text-pretty pl-2 min-h-6"
|
||||||
size="large"
|
@keydown="onKeydown"
|
||||||
@click="showUploadModal = true"
|
@input="updateInputHeight"
|
||||||
>
|
@compositionstart="handleCompositionStart"
|
||||||
<template #icon>
|
@compositionend="handleCompositionEnd"
|
||||||
<n-icon><DocumentAttachOutline /></n-icon>
|
></div>
|
||||||
</template>
|
</n-scrollbar>
|
||||||
</n-button>
|
|
||||||
</template>
|
|
||||||
<span> 在做了在做了 </span>
|
|
||||||
</n-tooltip>
|
|
||||||
|
|
||||||
<n-tooltip trigger="hover">
|
|
||||||
<template #trigger>
|
|
||||||
<n-button tertiary circle size="large">
|
|
||||||
<template #icon>
|
|
||||||
<n-icon><MicOutline /></n-icon>
|
|
||||||
</template>
|
|
||||||
</n-button>
|
|
||||||
</template>
|
|
||||||
<span> 在做了在做了 </span>
|
|
||||||
</n-tooltip>
|
|
||||||
|
|
||||||
<n-tooltip trigger="hover">
|
|
||||||
<template #trigger>
|
|
||||||
<n-button
|
|
||||||
tertiary
|
|
||||||
circle
|
|
||||||
size="large"
|
|
||||||
v-show="chatMessages?.length"
|
|
||||||
@click="clearChatHistory"
|
|
||||||
>
|
|
||||||
<template #icon>
|
|
||||||
<n-icon><TrashBinOutline /></n-icon>
|
|
||||||
</template>
|
|
||||||
</n-button>
|
|
||||||
</template>
|
|
||||||
<span> 清空历史 </span>
|
|
||||||
</n-tooltip>
|
|
||||||
|
|
||||||
<n-tooltip trigger="hover">
|
|
||||||
<template #trigger>
|
|
||||||
<n-button
|
|
||||||
tertiary
|
|
||||||
circle
|
|
||||||
size="large"
|
|
||||||
v-show="showSendBtn"
|
|
||||||
@click="sendText"
|
|
||||||
>
|
|
||||||
<template #icon>
|
|
||||||
<n-icon><SendOutline /></n-icon>
|
|
||||||
</template>
|
|
||||||
</n-button>
|
|
||||||
</template>
|
|
||||||
<span> 发送 </span>
|
|
||||||
</n-tooltip>
|
|
||||||
</div>
|
|
||||||
</n-spin>
|
|
||||||
</div>
|
</div>
|
||||||
<n-text
|
<n-spin :show="processing">
|
||||||
depth="3"
|
<div
|
||||||
class="text-center block mt-2 mb-2 text-sm select-none"
|
ref="actionContainer"
|
||||||
>
|
class="flex [&>button]:ml-2 pr-4 justify-end"
|
||||||
AI 也有可能犯错误,请在使用之前核查信息。
|
>
|
||||||
</n-text>
|
<n-tooltip
|
||||||
|
trigger="hover"
|
||||||
|
v-if="chatId !== null && chatData.assistant_id !== null"
|
||||||
|
>
|
||||||
|
<template #trigger>
|
||||||
|
<n-button
|
||||||
|
tertiary
|
||||||
|
circle
|
||||||
|
size="large"
|
||||||
|
@click="showUploadModal = true"
|
||||||
|
>
|
||||||
|
<template #icon>
|
||||||
|
<n-icon><DocumentAttachOutline /></n-icon>
|
||||||
|
</template>
|
||||||
|
</n-button>
|
||||||
|
</template>
|
||||||
|
<span> 在做了在做了 </span>
|
||||||
|
</n-tooltip>
|
||||||
|
|
||||||
|
<n-tooltip trigger="hover">
|
||||||
|
<template #trigger>
|
||||||
|
<n-button tertiary circle size="large">
|
||||||
|
<template #icon>
|
||||||
|
<n-icon><MicOutline /></n-icon>
|
||||||
|
</template>
|
||||||
|
</n-button>
|
||||||
|
</template>
|
||||||
|
<span> 在做了在做了 </span>
|
||||||
|
</n-tooltip>
|
||||||
|
|
||||||
|
<n-tooltip trigger="hover">
|
||||||
|
<template #trigger>
|
||||||
|
<n-button
|
||||||
|
tertiary
|
||||||
|
circle
|
||||||
|
size="large"
|
||||||
|
v-show="chatMessages?.length"
|
||||||
|
@click="clearChatHistory"
|
||||||
|
>
|
||||||
|
<template #icon>
|
||||||
|
<n-icon><TrashBinOutline /></n-icon>
|
||||||
|
</template>
|
||||||
|
</n-button>
|
||||||
|
</template>
|
||||||
|
<span> 清空历史 </span>
|
||||||
|
</n-tooltip>
|
||||||
|
|
||||||
|
<n-tooltip trigger="hover">
|
||||||
|
<template #trigger>
|
||||||
|
<n-button
|
||||||
|
tertiary
|
||||||
|
circle
|
||||||
|
size="large"
|
||||||
|
v-show="showSendBtn"
|
||||||
|
@click="sendText"
|
||||||
|
>
|
||||||
|
<template #icon>
|
||||||
|
<n-icon><SendOutline /></n-icon>
|
||||||
|
</template>
|
||||||
|
</n-button>
|
||||||
|
</template>
|
||||||
|
<span> 发送 </span>
|
||||||
|
</n-tooltip>
|
||||||
|
</div>
|
||||||
|
</n-spin>
|
||||||
</div>
|
</div>
|
||||||
|
<n-text depth="3" class="text-center block mt-2 mb-2 text-sm select-none">
|
||||||
|
AI 也有可能犯错误,请在使用之前核查信息。
|
||||||
|
</n-text>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
104
src/components/settings/AssistantPublistSettings.vue
Normal file
104
src/components/settings/AssistantPublistSettings.vue
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<template>
|
||||||
|
<p>在做了在做了</p>
|
||||||
|
<div v-if="assistants.length">
|
||||||
|
<n-list hoverable clickable>
|
||||||
|
<n-list-item v-for="c in assistants" :key="c.id">
|
||||||
|
<n-thing>
|
||||||
|
<div class="flex justify-between items-center">
|
||||||
|
<div>
|
||||||
|
{{ c.name }}
|
||||||
|
<br />
|
||||||
|
{{ c.description }}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<n-button
|
||||||
|
quaternary
|
||||||
|
circle
|
||||||
|
type="info"
|
||||||
|
>
|
||||||
|
<template #icon>
|
||||||
|
<n-icon size="16" class="cursor-pointer">
|
||||||
|
<SettingsOutline />
|
||||||
|
</n-icon>
|
||||||
|
</template>
|
||||||
|
</n-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</n-thing>
|
||||||
|
</n-list-item>
|
||||||
|
</n-list>
|
||||||
|
</div>
|
||||||
|
<div v-else class="text-center">
|
||||||
|
<n-result
|
||||||
|
status="404"
|
||||||
|
title="目前没有共享的助理"
|
||||||
|
description="你可以在这里收藏别人发布的助理,并使用它。"
|
||||||
|
>
|
||||||
|
<n-button type="primary"> 在做了在做了 </n-button>
|
||||||
|
</n-result>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { useDialog } from "naive-ui";
|
||||||
|
import {
|
||||||
|
TrashBinOutline,
|
||||||
|
SettingsOutline,
|
||||||
|
HelpCircleOutline,
|
||||||
|
} from "@vicons/ionicons5";
|
||||||
|
import getApi from "@/plugins/api";
|
||||||
|
import { useChatStore } from "@/stores/chat";
|
||||||
|
import { ref } from "vue";
|
||||||
|
import {
|
||||||
|
EntityAssistant,
|
||||||
|
EntityAssistantKey,
|
||||||
|
EntityAssistantTool,
|
||||||
|
EntityLibrary,
|
||||||
|
EntityTool,
|
||||||
|
SchemaAssistantPublic,
|
||||||
|
} from "@/api";
|
||||||
|
import { useIsMobile } from "@/utils/composables";
|
||||||
|
const currentAssistantTools: Ref<EntityAssistantTool[]> = ref([]);
|
||||||
|
|
||||||
|
const currentAssistantId = ref();
|
||||||
|
|
||||||
|
const assistants: Ref<SchemaAssistantPublic[]> = ref([]);
|
||||||
|
const assistantApiKeys: Ref<EntityAssistantKey[]> = ref([]);
|
||||||
|
|
||||||
|
const isMobile = useIsMobile();
|
||||||
|
const drawerWidth = computed(() => {
|
||||||
|
if (isMobile.value) {
|
||||||
|
return window.innerWidth;
|
||||||
|
} else {
|
||||||
|
return window.innerWidth * 0.6;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const getAssistants = async () => {
|
||||||
|
getApi()
|
||||||
|
.Assistant.apiV1AssistantsPublicGet(1)
|
||||||
|
.then((r) => {
|
||||||
|
assistants.value = r.data.data?.data ?? [];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// const bindOrUnbind = async (id: number) => {
|
||||||
|
// let binded = findTool(id);
|
||||||
|
|
||||||
|
// if (binded) {
|
||||||
|
// await getApi().Assistant.apiV1AssistantsIdToolsToolIdDelete(
|
||||||
|
// currentAssistantId.value,
|
||||||
|
// id
|
||||||
|
// );
|
||||||
|
// } else {
|
||||||
|
// await getApi().Assistant.apiV1AssistantsIdToolsToolIdPost(
|
||||||
|
// currentAssistantId.value,
|
||||||
|
// id
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
|
// };
|
||||||
|
|
||||||
|
getAssistants();
|
||||||
|
</script>
|
@ -1,3 +1,7 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import AssistantPublistSettings from './AssistantPublistSettings.vue';
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<n-tabs type="segment" animated class="select-none">
|
<n-tabs type="segment" animated class="select-none">
|
||||||
<n-tab-pane name="chat" tab="对话">
|
<n-tab-pane name="chat" tab="对话">
|
||||||
@ -6,6 +10,9 @@
|
|||||||
<n-tab-pane name="assistant" tab="助理">
|
<n-tab-pane name="assistant" tab="助理">
|
||||||
<AssistantSettings />
|
<AssistantSettings />
|
||||||
</n-tab-pane>
|
</n-tab-pane>
|
||||||
|
<n-tab-pane name="assistant_public" tab="发布">
|
||||||
|
<AssistantPublistSettings />
|
||||||
|
</n-tab-pane>
|
||||||
<n-tab-pane name="tool" tab="工具">
|
<n-tab-pane name="tool" tab="工具">
|
||||||
<ToolSettings />
|
<ToolSettings />
|
||||||
</n-tab-pane>
|
</n-tab-pane>
|
||||||
|
Loading…
Reference in New Issue
Block a user