Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
C
CharIP-Electron
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ali
CharIP-Electron
Commits
7db30264
You need to sign in or sign up before continuing.
Commit
7db30264
authored
Dec 29, 2023
by
ali
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 优化代码,修复bug
parent
71728fa5
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
121 additions
and
100 deletions
+121
-100
IPCs.ts
src/main/IPCs.ts
+4
-3
ShowPhoto.vue
src/renderer/screens/ShowPhoto.vue
+55
-45
ShowVideo.vue
src/renderer/screens/ShowVideo.vue
+62
-52
No files found.
src/main/IPCs.ts
View file @
7db30264
...
@@ -118,7 +118,6 @@ export default class IPCs {
...
@@ -118,7 +118,6 @@ export default class IPCs {
static
initializeChildWindow
(
window
:
BrowserWindow
)
{
static
initializeChildWindow
(
window
:
BrowserWindow
)
{
ipcMain
.
on
(
'fileUpload'
,
async
(
event
,
path
:
string
)
=>
{
ipcMain
.
on
(
'fileUpload'
,
async
(
event
,
path
:
string
)
=>
{
try
{
try
{
const
content
=
IPCs
.
readFile
(
path
)
const
content
=
IPCs
.
readFile
(
path
)
const
formData
=
new
FormData
()
const
formData
=
new
FormData
()
...
@@ -131,9 +130,11 @@ export default class IPCs {
...
@@ -131,9 +130,11 @@ export default class IPCs {
})
})
window
.
webContents
.
send
(
'msgReceivedFileUploadResponse'
,
response
)
window
.
webContents
.
send
(
'msgReceivedFileUploadResponse'
,
response
)
}
catch
(
error
)
{
}
catch
(
error
)
{
window
.
webContents
.
send
(
'msgReceivedFileUploadResponse'
,
{
code
:
500
,
message
:
JSON
.
stringify
(
error
)
})
window
.
webContents
.
send
(
'msgReceivedFileUploadResponse'
,
{
code
:
500
,
message
:
JSON
.
stringify
(
error
)
})
}
}
})
})
}
}
}
}
src/renderer/screens/ShowPhoto.vue
View file @
7db30264
...
@@ -232,16 +232,18 @@ function initVoskWS() {
...
@@ -232,16 +232,18 @@ function initVoskWS() {
}
}
async function llmEnd() {
async function llmEnd() {
const resp = (await (await fetch(`
$
{
settings
.
llmUrl
}
/api/
v1
/
interrupt
`, {
const resp = await (
method: 'POST',
await fetch(`
$
{
settings
.
llmUrl
}
/api/
v1
/
interrupt
`, {
headers: {
method: 'POST',
'Content-Type': 'application/json',
headers: {
},
'Content-Type': 'application/json'
body: JSON.stringify({ end: 1 }),
},
mode: 'cors'
body: JSON.stringify({ end: 1 }),
})).json() );
mode: 'cors'
})
).json()
console.log('---------------->', resp)
;
console.log('---------------->', resp)
}
}
async function endAudioInput() {
async function endAudioInput() {
...
@@ -279,7 +281,7 @@ const checkSteps = async () => {
...
@@ -279,7 +281,7 @@ const checkSteps = async () => {
}
}
count++
count++
if (count >=
2
) {
if (count >=
1
) {
return true
return true
}
}
}
}
...
@@ -306,33 +308,37 @@ async function onQ(question: string) {
...
@@ -306,33 +308,37 @@ async function onQ(question: string) {
inputContext.steps.push(pose)
inputContext.steps.push(pose)
try {
try {
await llmLoop(question)
;
await llmLoop(question)
stepResolve('llm')
stepResolve('llm')
} catch (error) {
} catch (error) {
microphoneState.value = 'input'
microphoneState.value = 'input'
showError(`
llm
:
$
{
error
}
`)
showError(`
llm
:
$
{
error
}
`)
stepReject(error)
}
}
}
}
async function llmLoop(question: string) {
async function llmLoop(question: string) {
microphoneState.value = 'loading'
microphoneState.value = 'loading'
const resp = (await (await fetch(`
$
{
settings
.
llmUrl
}
/api/
v1
/
generate
`, {
const resp = await (
method: 'POST',
await fetch(`
$
{
settings
.
llmUrl
}
/api/
v1
/
generate
`, {
headers: {
method: 'POST',
'Content-Type': 'application/json',
headers: {
},
'Content-Type': 'application/json'
body: JSON.stringify({ question }),
},
mode: 'cors'
body: JSON.stringify({ question }),
})).json() );
mode: 'cors'
})
).json()
if (resp.results[0].status_code !== 100) {
if (resp.results[0].status_code !== 100) {
throw new Error(`
status_code
:
$
{
resp
.
results
[
0
].
status_code
}
;
${
JSON
.
stringify
(
resp
.
results
)
}
`
);
throw new Error(`
status_code
:
$
{
resp
.
results
[
0
].
status_code
}
;
${
JSON
.
stringify
(
resp
.
results
)}
`
)
}
}
inputContext
.
steps
.
length
=
0
photoRole
!
.
answerArgs
=
new
PhotoAnswer
()
photoRole
!
.
answerArgs
=
new
PhotoAnswer
()
// @ts-ignore
photoRole
!
.
off
(
'asyncAnswer'
,
onAsyncAnswer
)
photoRole
!
.
on
(
'asyncAnswer'
,
onAsyncAnswer
)
photoRole
!
.
on
(
'asyncAnswer'
,
onAsyncAnswer
)
let
index
=
0
;
let
index
=
0
while
(
true
)
{
while
(
true
)
{
// @ts-ignore
// @ts-ignore
...
@@ -340,45 +346,49 @@ async function llmLoop(question: string) {
...
@@ -340,45 +346,49 @@ async function llmLoop(question: string) {
break
break
}
}
await
new
Promise
(
resolve
=>
setTimeout
(
resolve
,
100
))
await
new
Promise
(
(
resolve
)
=>
setTimeout
(
resolve
,
100
))
const
{
results
}
=
(
await
(
await
fetch
(
`
${
settings
.
llmUrl
}
/api/v1/audio`
,
{
const
{
results
}
=
await
(
method
:
'POST'
,
await
fetch
(
`
${
settings
.
llmUrl
}
/api/v1/audio`
,
{
headers
:
{
method
:
'POST'
,
'Content-Type'
:
'application/json'
,
headers
:
{
},
'Content-Type'
:
'application/json'
mode
:
'cors'
,
},
body
:
JSON
.
stringify
({
question
})
mode
:
'cors'
,
})).
json
()
);
body
:
JSON
.
stringify
({
question
})
})
).
json
()
const
audioList
=
results
[
0
].
audio_list
as
string
[]
;
const
audioList
=
results
[
0
].
audio_list
as
string
[]
if
(
audioList
.
length
===
0
)
continue
;
if
(
audioList
.
length
===
0
)
continue
const
isEnd
=
audioList
.
at
(
-
1
)
===
'stream_end'
;
const
isEnd
=
audioList
.
at
(
-
1
)
===
'stream_end'
if
(
isEnd
)
audioList
.
pop
();
if
(
isEnd
)
audioList
.
pop
()
const
newList
=
audioList
.
slice
(
index
)
;
const
newList
=
audioList
.
slice
(
index
)
if
(
newList
.
length
===
0
&&
isEnd
)
break
;
if
(
newList
.
length
===
0
&&
isEnd
)
break
if
(
newList
.
length
===
0
)
continue
;
if
(
newList
.
length
===
0
)
continue
for
(
let
i
=
index
;
i
<
audioList
.
length
;
i
++
)
{
for
(
let
i
=
index
;
i
<
audioList
.
length
;
i
++
)
{
console
.
log
(
results
[
0
].
text
[
i
]
+
':'
+
audioList
[
i
]);
console
.
log
(
results
[
0
].
text
[
i
]
+
':'
+
audioList
[
i
])
photoRole
!
.
answerArgs
!
.
answer
+=
results
[
0
].
text
[
i
]
photoRole
!
.
answerArgs
!
.
answer
+=
results
[
0
].
text
[
i
]
photoRole
!
.
answerArgs
!
.
_typingAnswer
.
push
(...
results
[
0
].
text
[
i
].
split
(
''
))
photoRole
!
.
answerArgs
!
.
_typingAnswer
.
push
(...
results
[
0
].
text
[
i
].
split
(
''
))
}
}
index
+=
newList
.
length
;
index
+=
newList
.
length
const
audioPaths
=
await
Promise
.
all
(
newList
.
map
(
path
=>
{
const
audioPaths
=
await
Promise
.
all
(
return
uploadFile
({
filePath
:
path
})
newList
.
map
((
path
)
=>
{
}))
return
uploadFile
({
filePath
:
path
})
})
)
// @ts-ignore
// @ts-ignore
if
(
microphoneState
.
value
===
'input'
||
microphoneState
.
value
===
'waitInput'
)
{
if
(
microphoneState
.
value
===
'input'
||
microphoneState
.
value
===
'waitInput'
)
{
break
break
}
}
audioPaths
.
forEach
(
audioPath
=>
{
audioPaths
.
forEach
(
(
audioPath
)
=>
{
photoRole
?.
enQueue
({
photoRole
?.
enQueue
({
taskId
:
photoRole
.
sessionId
,
taskId
:
photoRole
.
sessionId
,
audioUrl
:
`https://resources.laihua.com/
${
audioPath
}
`
,
audioUrl
:
`https://resources.laihua.com/
${
audioPath
}
`
,
...
@@ -386,7 +396,7 @@ async function llmLoop(question: string) {
...
@@ -386,7 +396,7 @@ async function llmLoop(question: string) {
})
})
})
})
if
(
isEnd
)
break
;
if
(
isEnd
)
break
}
}
}
}
...
...
src/renderer/screens/ShowVideo.vue
View file @
7db30264
...
@@ -176,16 +176,18 @@ function initVoskWS() {
...
@@ -176,16 +176,18 @@ function initVoskWS() {
}
}
async
function
llmEnd
()
{
async
function
llmEnd
()
{
const
resp
=
(
await
(
await
fetch
(
`
${
settings
.
llmUrl
}
/api/v1/interrupt`
,
{
const
resp
=
await
(
method
:
'POST'
,
await
fetch
(
`
${
settings
.
llmUrl
}
/api/v1/interrupt`
,
{
headers
:
{
method
:
'POST'
,
'Content-Type'
:
'application/json'
,
headers
:
{
},
'Content-Type'
:
'application/json'
body
:
JSON
.
stringify
({
end
:
1
}),
},
mode
:
'cors'
body
:
JSON
.
stringify
({
end
:
1
}),
})).
json
()
);
mode
:
'cors'
})
).
json
()
console
.
log
(
'---------------->'
,
resp
)
;
console
.
log
(
'---------------->'
,
resp
)
}
}
async
function
endAudioInput
()
{
async
function
endAudioInput
()
{
...
@@ -276,7 +278,7 @@ async function onQ(question: string) {
...
@@ -276,7 +278,7 @@ async function onQ(question: string) {
try
{
try
{
// 视频链接匹配不上,直接走大模型
// 视频链接匹配不上,直接走大模型
await
llmLoop
(
question
)
;
await
llmLoop
(
question
)
}
catch
(
error
)
{
}
catch
(
error
)
{
microphoneState
.
value
=
'input'
microphoneState
.
value
=
'input'
showError
(
`llm:
${
error
}
`
)
showError
(
`llm:
${
error
}
`
)
...
@@ -284,24 +286,26 @@ async function onQ(question: string) {
...
@@ -284,24 +286,26 @@ async function onQ(question: string) {
}
}
async
function
llmLoop
(
question
:
string
)
{
async
function
llmLoop
(
question
:
string
)
{
if
(
!
role
)
return
;
if
(
!
role
)
return
microphoneState
.
value
=
'loading'
microphoneState
.
value
=
'loading'
const
resp
=
(
await
(
await
fetch
(
`
${
settings
.
llmUrl
}
/api/v1/generate`
,
{
const
resp
=
await
(
method
:
'POST'
,
await
fetch
(
`
${
settings
.
llmUrl
}
/api/v1/generate`
,
{
headers
:
{
method
:
'POST'
,
'Content-Type'
:
'application/json'
,
headers
:
{
},
'Content-Type'
:
'application/json'
body
:
JSON
.
stringify
({
question
}),
},
mode
:
'cors'
body
:
JSON
.
stringify
({
question
}),
})).
json
()
);
mode
:
'cors'
})
).
json
()
if
(
resp
.
results
[
0
].
status_code
!==
100
)
{
if
(
resp
.
results
[
0
].
status_code
!==
100
)
{
throw
new
Error
(
`status_code:
${
resp
.
results
[
0
].
status_code
}
;
${
JSON
.
stringify
(
resp
.
results
)
}
`
);
throw
new
Error
(
`status_code:
${
resp
.
results
[
0
].
status_code
}
;
${
JSON
.
stringify
(
resp
.
results
)}
`
)
}
}
inputContext
.
llmEnd
=
false
;
inputContext
.
llmEnd
=
false
let
index
=
0
;
let
index
=
0
while
(
true
)
{
while
(
true
)
{
// @ts-ignore
// @ts-ignore
...
@@ -309,57 +313,63 @@ async function llmLoop(question: string) {
...
@@ -309,57 +313,63 @@ async function llmLoop(question: string) {
break
break
}
}
await
new
Promise
(
resolve
=>
setTimeout
(
resolve
,
100
))
await
new
Promise
(
(
resolve
)
=>
setTimeout
(
resolve
,
100
))
const
{
results
}
=
(
await
(
await
fetch
(
`
${
settings
.
llmUrl
}
/api/v1/audio`
,
{
const
{
results
}
=
await
(
method
:
'POST'
,
await
fetch
(
`
${
settings
.
llmUrl
}
/api/v1/audio`
,
{
headers
:
{
method
:
'POST'
,
'Content-Type'
:
'application/json'
,
headers
:
{
},
'Content-Type'
:
'application/json'
mode
:
'cors'
,
},
body
:
JSON
.
stringify
({
question
})
mode
:
'cors'
,
})).
json
()
);
body
:
JSON
.
stringify
({
question
})
})
).
json
()
const
audioList
=
results
[
0
].
audio_list
as
string
[]
;
const
audioList
=
results
[
0
].
audio_list
as
string
[]
if
(
audioList
.
length
===
0
)
continue
;
if
(
audioList
.
length
===
0
)
continue
const
isEnd
=
audioList
.
at
(
-
1
)
===
'stream_end'
;
const
isEnd
=
audioList
.
at
(
-
1
)
===
'stream_end'
if
(
isEnd
)
audioList
.
pop
();
if
(
isEnd
)
audioList
.
pop
()
const
newList
=
audioList
.
slice
(
index
)
;
const
newList
=
audioList
.
slice
(
index
)
if
(
newList
.
length
===
0
&&
isEnd
)
break
;
if
(
newList
.
length
===
0
&&
isEnd
)
break
if
(
newList
.
length
===
0
)
continue
;
if
(
newList
.
length
===
0
)
continue
for
(
let
i
=
index
;
i
<
audioList
.
length
;
i
++
)
{
for
(
let
i
=
index
;
i
<
audioList
.
length
;
i
++
)
{
console
.
log
(
results
[
0
].
text
[
i
]
+
':'
+
audioList
[
i
]);
console
.
log
(
results
[
0
].
text
[
i
]
+
':'
+
audioList
[
i
])
}
}
index
+=
newList
.
length
;
index
+=
newList
.
length
// @ts-ignore
// @ts-ignore
if
(
microphoneState
.
value
===
'input'
||
microphoneState
.
value
===
'waitInput'
)
{
if
(
microphoneState
.
value
===
'input'
||
microphoneState
.
value
===
'waitInput'
)
{
break
break
}
}
// inputContext.ttsAudios.push(...newList.map(path => {
inputContext
.
ttsAudios
.
push
(
// const audio = new Audio(`file://${path}`)
...
newList
.
map
((
path
)
=>
{
// audio.load()
const
audio
=
new
Audio
(
`file://
${
path
}
`
)
// return audio;
audio
.
load
()
// }))
return
audio
})
)
// TODO: test
// TODO: test
inputContext
.
ttsAudios
.
push
(...
newList
.
map
(
path
=>
{
// inputContext.ttsAudios.push(
const
audio
=
new
Audio
(
`http://192.168.1.57:6767/
${
path
.
split
(
'
\
\'
).pop()}`)
// ...newList.map((path) => {
audio.load()
// const audio = new Audio(`http://192.168.1.57:6767/${path.split('\\').pop()}`)
return audio;
// audio.load()
}))
// return audio
// })
// )
runAudioPlay
()
runAudioPlay
()
if (isEnd) break
;
if
(
isEnd
)
break
}
}
inputContext.llmEnd = true
;
inputContext
.
llmEnd
=
true
}
}
let
isPlayRunning
=
false
let
isPlayRunning
=
false
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment