Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
T
text2video-frontend
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
周成波
text2video-frontend
Commits
f6a8833c
Commit
f6a8833c
authored
1 year ago
by
周成波
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
按需求对接llm模型,人工匹配角色关键词
parent
76fbfb23
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
81 additions
and
160 deletions
+81
-160
text2videoService.ts
src/api/service/text2videoService.ts
+3
-3
useManyValues.ts
src/views/home/compositions/useManyValues.ts
+14
-129
index.vue
src/views/home/index.vue
+64
-28
No files found.
src/api/service/text2videoService.ts
View file @
f6a8833c
...
...
@@ -4,11 +4,11 @@
import
request
from
'@/api/request'
export
default
{
submitGpt
(
prompt
:
string
):
Promise
<
string
>
{
submitGpt
(
prompt
:
string
,
llm
:
string
=
"gpt"
):
Promise
<
string
>
{
if
(
!
prompt
)
{
return
Promise
.
reject
(
"输入不能为空"
);
}
const
post_data
=
{
source_text
:
prompt
,
llm
:
'tyqw'
}
const
post_data
=
{
source_text
:
prompt
,
llm
:
llm
}
return
request
.
post
(
'/text2video/text2gpt'
,
post_data
)
.
then
((
res
:
any
)
=>
{
// console.log(res);
...
...
@@ -21,7 +21,7 @@ export default {
})
.
catch
((
err
:
any
)
=>
{
console
.
log
(
err
);
return
Promise
.
reject
(
"
chatgpt
通讯失败"
);
return
Promise
.
reject
(
"
与LLM
通讯失败"
);
});
},
...
...
This diff is collapsed.
Click to expand it.
src/views/home/compositions/useManyValues.ts
View file @
f6a8833c
This diff is collapsed.
Click to expand it.
src/views/home/index.vue
View file @
f6a8833c
...
...
@@ -27,6 +27,16 @@ const form = reactive({
const
sd_prompt_prefix
=
default_data
.
sd_prompt_prefix
;
const
sd_negative_prompt_prefix
=
default_data
.
sd_negative_prompt_prefix
;
const
wenan_llm
=
"langchain"
const
wenan_llm_name
=
"baichuan2-7b"
const
role_llm
=
"langchain"
const
role_llm_name
=
"baichuan2-7b"
const
tuili_llm
=
"langchain"
const
tuili_llm_name
=
"baichuan2-7b"
const
fanyi_llm
=
"langchain"
const
fanyi_llm_name
=
"baichuan2-7b"
onMounted
(()
=>
{
// 初始化示例数据
onChangeScreen
(
form
.
screen
);
...
...
@@ -34,7 +44,7 @@ onMounted(() => {
const
onSubmitGpt
=
()
=>
{
text2videoService
.
submitGpt
(
form
.
chatgpt_prompt
)
.
submitGpt
(
form
.
chatgpt_prompt
,
wenan_llm
)
.
then
((
result
:
string
)
=>
{
console
.
log
(
form
.
chatgpt_prompt
);
console
.
log
(
result
);
...
...
@@ -68,19 +78,26 @@ const onAdaptRoles = async () => {
要求:
角色和角色关键词要对应。
严格以如下格式返回:[{"角色":"","角色关键词":""}]`
;
const
keywords
=
await
text2videoService
.
submitGpt
(
form
.
chatgpt_answer
+
"
\n
"
+
adapt_restrict
);
const
keywords
=
await
text2videoService
.
submitGpt
(
form
.
chatgpt_answer
+
"
\n
"
+
adapt_restrict
,
role_llm
);
console
.
log
(
keywords
)
const
keywords_obj
=
utils
.
formatJsonObj
(
keywords
.
replace
(
/```json/g
,
''
).
replace
(
/```/g
,
''
))
console
.
log
(
keywords_obj
)
form
.
chatgpt_answer_roles
=
[]
for
(
let
item
of
keywords_obj
)
{
let
newObjItem
=
{
"角色"
:
JSON
.
stringify
(
item
[
"角色"
]).
replace
(
/"/g
,
''
),
"角色关键词"
:
JSON
.
stringify
(
item
[
"角色关键词"
]).
replace
(
/"/g
,
''
)
};
form
.
chatgpt_answer_roles
.
push
(
newObjItem
);
if
(
'error'
in
keywords_obj
)
{
ElMessage
({
message
:
"未解析到角色"
,
type
:
"error"
,
});
}
else
{
for
(
let
item
of
keywords_obj
)
{
let
newObjItem
=
{
"角色"
:
JSON
.
stringify
(
item
[
"角色"
]).
replace
(
/"/g
,
''
),
"角色关键词"
:
JSON
.
stringify
(
item
[
"角色关键词"
]).
replace
(
/"/g
,
''
)
};
form
.
chatgpt_answer_roles
.
push
(
newObjItem
);
}
console
.
log
(
form
.
chatgpt_answer_roles
)
}
console
.
log
(
form
.
chatgpt_answer_roles
)
}
catch
(
error
)
{
ElMessage
({
message
:
String
(
error
),
...
...
@@ -127,7 +144,7 @@ const onAdapt = async () => {
async
function
processScenes
()
{
for
(
const
item
of
form
.
adapt_result_json
)
{
await
onAdaptOne
(
item
);
await
delay
(
100
0
);
await
delay
(
100
);
await
onDrawOne
(
item
);
}
}
...
...
@@ -164,25 +181,44 @@ const onAdaptOne = async (item: any) => {
指令:
请理解这个故事,针对其中的这个场景:“
${
item
.
场景描述
}
”,给出这个场景的:
场景关键词(年代,空间,时间段,地理环境,天气,物品,人物,镜头角度)、
角色(从所有角色中选择本场景的角色)、
角色关键词(从所有角色中选择本场景的角色关键字,原样拷贝)。
角色(从所有角色中选择本场景的角色)。
要求:
角色和角色关键词要对应。
严格以如下格式返回:[{"场景关键词":"(多个词以逗号分隔)","角色":"(角色以逗号分隔)"
,"角色关键词":"(分别给予对应角色的关键词,多个词以逗号分隔)"
}]
严格以如下格式返回:[{"场景关键词":"(多个词以逗号分隔)","角色":"(角色以逗号分隔)"}]
除了按格式返回的内容之外,不要添加其他的任何说明。`
;
const
keywords
=
await
text2videoService
.
submitGpt
(
"故事:
\n
"
+
form
.
chatgpt_answer
+
"
\n
所有角色:
\n
"
+
JSON
.
stringify
(
form
.
chatgpt_answer_roles
)
+
"
\n
"
+
adapt_restrict
);
const
keywords
=
await
text2videoService
.
submitGpt
(
"故事:
\n
"
+
form
.
chatgpt_answer
+
"
\n
所有角色:
\n
"
+
JSON
.
stringify
(
form
.
chatgpt_answer_roles
)
+
"
\n
"
+
adapt_restrict
,
tuili_llm
);
// console.log(keywords)
const
keywords_obj
=
utils
.
formatJsonObj
(
keywords
.
replace
(
/```json/g
,
''
).
replace
(
/```/g
,
''
))
// console.log(keywords_obj)
i
tem
.
场景关键词
=
JSON
.
stringify
(
keywords_obj
[
0
].
场景关键词
).
replace
(
/"/g
,
''
);
if
(
form
.
chatgpt_answer_roles
.
length
===
0
)
{
// 总角色为空
item
.
角色
=
''
;
item
.
角色关键词
=
''
;
i
f
(
'error'
in
keywords_obj
)
{
ElMessage
(
{
message
:
`分镜
${
item
.
编号
}
推理关键词失败,请重试`
,
type
:
"error"
,
})
;
}
else
{
// 总角色不为空
item
.
角色
=
JSON
.
stringify
(
keywords_obj
[
0
].
角色
).
replace
(
/"/g
,
''
);
item
.
角色关键词
=
JSON
.
stringify
(
keywords_obj
[
0
].
角色关键词
).
replace
(
/"/g
,
''
);
item
.
场景关键词
=
JSON
.
stringify
(
keywords_obj
[
0
].
场景关键词
).
replace
(
/"/g
,
''
);
if
(
form
.
chatgpt_answer_roles
.
length
===
0
)
{
// 总角色为空
item
.
角色
=
''
;
item
.
角色关键词
=
''
;
}
else
{
// 总角色不为空
// item.角色 = JSON.stringify(keywords_obj[0].角色).replace(/"/g, '');
// item.角色关键词 = JSON.stringify(keywords_obj[0].角色关键词).replace(/"/g, '');
const
item_roles
=
JSON
.
stringify
(
keywords_obj
[
0
].
角色
).
replace
(
/"/g
,
''
);
item
.
角色
=
item_roles
;
let
role_kws
=
""
const
item_roles_arr
=
item_roles
.
split
(
/
[
,,
]
/
);
item_roles_arr
.
forEach
(
one_item_role
=>
{
// 人工指定角色关键词,包含则取
form
.
chatgpt_answer_roles
.
forEach
(
i
=>
{
if
(
i
[
"角色"
].
includes
(
one_item_role
.
trim
())
||
one_item_role
.
includes
(
i
[
"角色"
].
trim
()))
{
role_kws
=
`
${
role_kws
}
【
${
i
[
"角色"
]}
:
${
i
[
"角色关键词"
]}
】`
}
})
})
item
.
角色关键词
=
role_kws
;
}
}
}
catch
(
error
)
{
ElMessage
({
...
...
@@ -214,7 +250,7 @@ const onDrawOne = async (item: any) => {
const
sd_describe
=
await
text2videoService
.
submitGpt
(
`
${
temp_prompt
}
指令:
请理解以上内容,并返回一段英文的描述。`
请理解以上内容,并返回一段英文的描述。`
,
fanyi_llm
);
item
.
画面描述词
=
sd_describe
;
const
sd_prompt
=
item
.
画面描述词
+
","
+
sd_prompt_prefix
;
...
...
@@ -380,14 +416,14 @@ const handleExceed: UploadProps['onExceed'] = (files) => {
<el-input
v-model=
"form.chatgpt_prompt"
:autosize=
"true"
type=
"textarea"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"onSubmitGpt"
>
生成文案
</el-button>
<el-button
type=
"primary"
@
click=
"onSubmitGpt"
>
生成文案
(
{{
wenan_llm_name
}}
)
</el-button>
</el-form-item>
<el-form-item
label=
"文案"
>
<el-input
v-model=
"form.chatgpt_answer"
:autosize=
"true"
type=
"textarea"
/>
</el-form-item>
<!-- 角色 -->
<el-form-item>
<el-button
type=
"primary"
@
click=
"onAdaptRoles"
>
推理所有角色
</el-button>
<el-button
type=
"primary"
@
click=
"onAdaptRoles"
>
推理所有角色
(
{{
role_llm_name
}}
)
</el-button>
<el-button
plain
@
click=
"clean_roles"
>
清空总角色列表
</el-button>
</el-form-item>
<el-form-item
label=
"角色"
>
...
...
@@ -406,7 +442,7 @@ const handleExceed: UploadProps['onExceed'] = (files) => {
</el-form-item>
<!-- 分镜 -->
<el-form-item>
<el-button
type=
"primary"
@
click=
"onAdapt"
>
分镜、推理关键词、绘图
</el-button>
<el-button
type=
"primary"
@
click=
"onAdapt"
>
分镜、推理关键词
({{tuili_llm_name}})、翻译({{fanyi_llm_name}})
、绘图
</el-button>
</el-form-item>
<el-form-item
label=
"分镜"
>
<el-table
:data=
"form.adapt_result_json"
border
style=
"width: 100%; z-index: calc(var(--el-table-index) -1)"
>
...
...
@@ -447,8 +483,8 @@ const handleExceed: UploadProps['onExceed'] = (files) => {
</template>
-->
<
template
v-slot=
"scope"
>
<div
style=
"margin: 10px 0"
><el-button
type=
"primary"
size=
"default"
@
click=
"onAdaptOne(scope.row)"
>
重新推理
<br
/>
关键字
</el-button></div>
<div
style=
"margin: 10px 0"
><el-button
type=
"primary"
size=
"default"
@
click=
"onDrawOne(scope.row)"
>
重绘本镜
</el-button></div>
<div
style=
"margin: 10px 0"
><el-button
type=
"primary"
size=
"default"
@
click=
"onAdaptOne(scope.row)"
>
推理关键词
</el-button></div>
<div
style=
"margin: 10px 0"
><el-button
type=
"primary"
size=
"default"
@
click=
"onDrawOne(scope.row)"
>
翻译、绘图
</el-button></div>
<el-upload
class=
"upload-demo"
ref=
"upload"
...
...
This diff is collapsed.
Click to expand it.
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