| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- import { v4 as uuidv4 } from "uuid";
- import { fetchEventSource } from "@microsoft/fetch-event-source";
- export const myMixin = {
- data() {
- return {
- userJson: {},
- new_url: 'https://appapi.cocorobo.cn',
- model: {}
- };
- },
- methods: {
- detectBrowser() {
- const ua = navigator.userAgent;
- // 按优先级顺序检测
- if (ua.includes("Edg/") || ua.includes("Edge/")) {
- return "Microsoft Edge";
- } else if (ua.includes("Firefox")) {
- return "Mozilla Firefox";
- } else if (ua.includes("Trident") || ua.includes("MSIE")) {
- return "Internet Explorer";
- } else if (ua.includes("360EE")) {
- return "360 Browser (极速模式)";
- } else if (ua.includes("360SE")) {
- return "360 Browser (安全模式)";
- } else if (ua.includes("SLBrowser")) {
- return "QQ Browser";
- } else if (ua.includes("UCBrowser")) {
- return "UC Browser";
- } else if (ua.includes("Opera") || ua.includes("OPR/")) {
- return "Opera";
- } else if (ua.includes("Chrome") && !ua.includes("Edg/")) {
- return "Google Chrome";
- } else if (ua.includes("Safari/") && !ua.includes("Chrome")) {
- return "Safari";
- } else {
- return "Other Browser";
- }
- },
- async addOp3(userTime, loadTime, object, status,api = 'selectUser') {
- if (!this.$route.query.userid) return
- try {
- if(!this.userJson || !this.userJson.accountNumber){
- let res = await this.ajax.get(this.$store.state.api + api, {
- userid: this.$route.query.userid
- });
- this.userJson = res.data[0][0]
- }
- } catch (e) {
- console.log(e);
- return this.addOp3(userTime, loadTime, object, status,'selectUser2');
- }
- let _time = new Date()
- .toLocaleString("zh-CN", { hour12: false, timeZone: "Asia/Shanghai" })
- .replace(/\//g, "-");
- let browser = this.detectBrowser();
- let params = {
- userid: this.$route.query.userid,
- username: this.userJson.username,
- accountNumber: this.userJson.accountNumber,
- org: this.userJson.orgName,
- school: this.userJson.schoolName,
- role: this.userJson.type =='1'?'老师':'学生',
- browser: browser,
- userTime: userTime == "1" ? _time : userTime, // 使用时间 1次的就1 其次传秒
- loadTime: loadTime, //load的时间没有就“”
- object: JSON.stringify(object), //执行信息传json
- status: status //成功返回success。失败返回error的信息
- };
- console.log('params',params);
-
- this.ajax
- .post(this.$store.state.apiM + "updateUserData2", [params])
- .then(res => {
- if (res.data.status == 1) {
- console.log("保存成功");
- } else {
- console.log("保存失败");
- }
- })
- .catch(e => {
- console.log("保存失败");
- console.log(e);
- });
- },
- async chat_no_stream(prompt=[], response_format = {
- "type": "text"
- }) {
- return await new Promise((resolve) => {
- let uid = uuidv4();
- let data = JSON.stringify({
- model: 'gpt-4o-2024-11-20',
- temperature: 0,
- max_tokens: 4096,
- top_p: 1,
- frequency_penalty: 0,
- presence_penalty: 0,
- messages: prompt,
- uid: uid,
- mind_map_question: '',
- stream: false,
- response_format: response_format
- });
- let config = {
- method: 'post',
- url: this.new_url + '/api/common/chat',
- headers: {
- 'Content-Type': 'application/json'
- },
- data: data,
- };
- this.ajax.post(config.url,data)
- .then((response) => {
- resolve(response.data.FunctionResponse.choices[0].message.content);
- })
- .catch( (error)=> {
- console.log(error);
- //this.$message.error('服务器繁忙');
- resolve(false);
- });
- });
- },
- async ai_generate_image(prompt) {
- return await new Promise((resolve) => {
- this.ajax
- .post(this.new_url + "/api/agents/generateImage", {
- prompt,
- size: "1024x1024"
- }).then(res => {
- resolve(res.data);
- }).catch(function (error) {
- console.log(error);
- resolve(false);
- });
- })
- },
- async getAgentModel(agentId) {
- if (this.model[agentId]) {
- return this.model[agentId]
- }
- const res = await this.ajax.get('https://appapi.cocorobo.cn/api/agents/agent/' + agentId)
- this.model[agentId] = res
- return this.model[agentId]
- },
- getTtsLanguage(language) {
- if (language === 'com') {
- return 'en-US'
- } else if (language === 'hk') {
- return 'zh-HK'
- } else {
- return 'zh-CN'
- }
- },
- chat_stream(msg, agentId, userId, language, onMessage, session_name, file_ids, modelName) {
- const self = this
- return new Promise(function(resolve) {
- self.getAgentModel(agentId).then(function(agentData) {
- var params = {
- id: agentId,
- file_ids: file_ids || [],
- message: 'Language: ' + (language === 'com' ? 'English' : (language === 'hk' ? 'Traditional Chinese' : 'Chinese')) + ' ' + msg + ' ' + (language === 'hk' ? '請用繁體中文回复' : (language === 'com' ? 'Please reply in English' : '请用中文回复')),
- uid: uuidv4(),
- stream: true,
- model: modelName || (agentData && agentData.modelType) || 'open-doubao',
- userId: userId,
- tts_language: self.getTtsLanguage(language),
- session_name: session_name || uuidv4()
- }
- var ctrl = new AbortController()
- var content = ''
-
- fetchEventSource('https://appapi.cocorobo.cn/api/agentchats/ai_agent_chat', {
- method: 'POST',
- body: JSON.stringify(params),
- signal: ctrl.signal,
- headers: {
- 'Content-Type': 'application/json',
- },
- onmessage: function(event) {
- var data = JSON.parse(event.data)
- if (data.content) {
- if (data.content != '[DONE]') {
- content += data.content
- onMessage({
- type: 'message',
- data: content
- })
- } else {
- onMessage({
- type: 'messageEnd',
- data: content
- })
- }
- }
- },
- onclose: function() {
- onMessage({
- type: 'close',
- data: 'SSE Connection closed'
- })
- },
- onerror: function(err) {
- onMessage({
- type: 'error',
- data: err.message || 'Unknown error'
- })
- throw err
- },
- }).catch(function(err) {
- onMessage({
- type: 'error',
- data: err || 'Unknown error'
- })
- console.log('err', err)
- })
-
- resolve({
- abort: function() { ctrl.abort() }
- })
- })
- })
- }
- }
- };
|