|
@@ -236,7 +236,7 @@
|
|
|
<div class="textarea">
|
|
|
<div>
|
|
|
<span>现场勘验情况 :</span>
|
|
|
- <span @click="()=>{aiImgShow=true}" style="color:#26559B;cursor: pointer;float: right;font-weight: bold;">AI</span>
|
|
|
+ <span @click="handleShowAi" style="color:#26559B;cursor: pointer;float: right;font-weight: bold;">AI</span>
|
|
|
</div>
|
|
|
<el-input
|
|
|
type="textarea"
|
|
@@ -550,6 +550,7 @@ import saveAs from "@/util/file-serve";
|
|
|
import { CirclePlus, CircleClose, MagicStick } from "@element-plus/icons-vue";
|
|
|
import { recorderInfoType, ChangeReasonType } from "./formData.ts";
|
|
|
import { confirm } from "@/helper/message";
|
|
|
+import { chat, abort, listModels } from "@/util/ollama";
|
|
|
import { copyTextToClipboard } from "@/util/index";
|
|
|
const props = defineProps({ caseId: Number, title: String });
|
|
|
console.log("router.currentRoute", router.currentRoute.value?.params);
|
|
@@ -641,17 +642,65 @@ const handleCopy = () => {
|
|
|
copyTextToClipboard(aiImgData.value.result);
|
|
|
ElMessage.success("复制成功!");
|
|
|
}
|
|
|
+const handleShowAi = async () => {
|
|
|
+ const list = await getFloorList(caseId.value)
|
|
|
+ aiImgData.value.list = list.filter((i) => i.urls && i.urls.length);
|
|
|
+ aiImgData.value.src = list[0]?.urls[0];
|
|
|
+ aiImgShow.value = true;
|
|
|
+}
|
|
|
+//判断是否deepseek
|
|
|
+let isThink = ref(false);
|
|
|
+let testRegex = /deepseek/;
|
|
|
const handleAI = async () => {
|
|
|
aiImgData.value.loading = true;
|
|
|
let orgin = window.location.origin;
|
|
|
let imageUrl = orgin + aiImgData.value.src
|
|
|
try {
|
|
|
- const res = await getAiByImage({imageUrl: imageUrl})
|
|
|
- console.log("handleAI", res)
|
|
|
- aiImgData.value.result = res
|
|
|
- aiImgData.value.loading = false
|
|
|
+ // const res = await getAiByImage({imageUrl: imageUrl})
|
|
|
+ chat('', '人为什么要吃饭').then(async stream => {
|
|
|
+ for await (const part of stream) {
|
|
|
+ // chatHistory.value.at(idx).text += part.message.content;
|
|
|
+ let tep_mesg = part.message.content;
|
|
|
+ console.log("isThinktep", tep_mesg);
|
|
|
+ //判断是否是deepseek模型
|
|
|
+ // if (testRegex.test(agentInfo.value.model)) {
|
|
|
+ if (tep_mesg == "\u003c/think\u003e") {
|
|
|
+ // isThink.value = true;
|
|
|
+ aiImgData.value.loading = false;
|
|
|
+ }
|
|
|
+ if (!aiImgData.value.loading) {
|
|
|
+ //清除think
|
|
|
+ if (
|
|
|
+ tep_mesg == "\u003cthink\u003e" ||
|
|
|
+ tep_mesg == "\u003c/think\u003e"
|
|
|
+ ) {
|
|
|
+ // chatHistory.value.at(idx).think += "";
|
|
|
+ } else {
|
|
|
+ console.log("isThinktep_mesg", tep_mesg);
|
|
|
+ aiImgData.value.result += tep_mesg;
|
|
|
+ // chatHistory.value.at(idx).think += tep_mesg;
|
|
|
+ }
|
|
|
+ //如果结尾标签则停止拼接
|
|
|
+ if (tep_mesg == "\u003c/think\u003e") {
|
|
|
+ // isThink.value = false;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // aiImgData.value.result += tep_mesg;
|
|
|
+ // chatHistory.value.at(idx).text += tep_mesg;
|
|
|
+ }
|
|
|
+ // } else {
|
|
|
+ // // chatHistory.value.at(idx).text += tep_mesg;
|
|
|
+ // aiImgData.value.result += tep_mesg;
|
|
|
+ // }
|
|
|
+ // autoScrollSwitch.value && scrollToBottom(true);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // console.log("handleAI", res)
|
|
|
+ // aiImgData.value.result = res
|
|
|
+ // aiImgData.value.loading = false
|
|
|
} catch (error) {
|
|
|
- aiImgData.value.loading = false;
|
|
|
+ console.log("handleAI", error)
|
|
|
+ aiImgData.value.loading = false;
|
|
|
}
|
|
|
|
|
|
};
|
|
@@ -678,12 +727,10 @@ const initSignatureAndWitInfo = () => {
|
|
|
};
|
|
|
|
|
|
onMounted(() => {
|
|
|
+ listModels().then(res => {
|
|
|
+ console.log("listModels", res)
|
|
|
+ })
|
|
|
initInfo();
|
|
|
- getFloorList(caseId.value).then((res) => {
|
|
|
- aiImgData.value.list = res.filter((i) => i.urls && i.urls.length);
|
|
|
- aiImgData.value.src = res[0]?.urls[0];
|
|
|
- console.log("getFloorList", res);
|
|
|
- });
|
|
|
});
|
|
|
|
|
|
const addRecorderInfo = () => {
|