|
import gradio as gr |
|
from volcengine.maas.v2 import MaasService |
|
from volcengine.maas import MaasException, ChatRole |
|
import json |
|
import os |
|
|
|
def maas_chat(input, novel_type): |
|
query = input.split('\n') |
|
query = [item for item in query if item] |
|
query = json.dumps(query, ensure_ascii=False) |
|
maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing',connection_timeout=15) |
|
|
|
|
|
|
|
ak = os.getenv('AK') |
|
sk = os.getenv('SK') |
|
maas.set_ak(ak) |
|
maas.set_sk(sk) |
|
prompt = "我将提供一份小说片段并且是使用 JSON 数组进行格式化,JSON 数组内的每个对象的内容就是一个故事的场景,你根据我提供的场景原文生成用来 AI 绘画的提示词,注意提示词应该和小说片段具有强相关性,当小说内容没有场景时,结合 JSON 中其他内容输出提示词,并同样使用 JSON 输出并且数组大小和输入的数组大小一样,下面给出 JSON 格式化后的文字:" |
|
if novel_type == "古文": |
|
prompt = '我将提供一份古风小说片段并且是使用JSON数组进行格式化,JSON数组内的每个对象的内容就是一个小说内容的一个片段,你根据我提供的小说片段生成中国古代风格的AI绘画的提示词,注意提示词应该和小说片段具有强相关性,当小说内容没有场景时,结合JSON中其他内容输出提示词,并同样使用JSON输出并且数组大小和输入的数组大小一样,下面给出JSON格式化后的文字:'; |
|
|
|
req = { |
|
"parameters": { |
|
"max_new_tokens": 1000, |
|
"min_new_tokens": 1, |
|
"temperature": 0, |
|
"top_p": 0, |
|
"top_k": 0, |
|
"max_prompt_tokens": 4096, |
|
}, |
|
"messages": [ |
|
{ |
|
"role": ChatRole.SYSTEM, |
|
"content": prompt |
|
}, { |
|
"role": ChatRole.USER, |
|
"content": query |
|
} |
|
] |
|
} |
|
|
|
ID = os.getenv('ID') |
|
GUID = os.getenv('GUID') |
|
|
|
endpoint_id = ID if novel_type == "现代" else GUID |
|
resp = maas.chat(endpoint_id, req) |
|
output = resp.choices[0].message['content'] |
|
|
|
|
|
list = json.loads(output) |
|
return '\n'.join(list) |
|
|
|
|
|
novel_types = ["现代", "古文"] |
|
|
|
demo = gr.Interface( |
|
fn=maas_chat, |
|
inputs=[gr.Textbox(lines=6, placeholder="输入小说片段(JSON 格式)"), gr.Dropdown(novel_types,label="文章类型")], |
|
|
|
outputs=gr.Textbox(lines=6, placeholder="输出提示词(JSON 格式)"), |
|
title="小说片段转 AI 绘画提示词", |
|
description="输入小说片段(JSON 格式),输出用来 AI 绘画的提示词(JSON 格式)。", |
|
) |
|
|
|
demo.launch(share=True) |