Spaces:
Sleeping
Sleeping
import os | |
import time | |
from textwrap import dedent | |
import gradio as gr | |
import mdtex2html | |
import torch | |
from loguru import logger | |
from transformers import AutoModel, AutoTokenizer | |
# fix timezone in Linux | |
os.environ["TZ"] = "Asia/Shanghai" | |
try: | |
time.tzset() # type: ignore # pylint: disable=no-member | |
except Exception: | |
# Windows | |
logger.warning("Windows, cant run time.tzset()") | |
model_name = "fb700/chatglm-fitness-RLHF" | |
RETRY_FLAG = False | |
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) | |
#model = AutoModel.from_pretrained(model_name, trust_remote_code=True).quantize(8).half().cuda() | |
model = AutoModel.from_pretrained(model_name, trust_remote_code=True).half().cuda() | |
model = model.eval() | |
_ = """Override Chatbot.postprocess""" | |
def postprocess(self, y): | |
if y is None: | |
return [] | |
for i, (message, response) in enumerate(y): | |
y[i] = ( | |
None if message is None else mdtex2html.convert((message)), | |
None if response is None else mdtex2html.convert(response), | |
) | |
return y | |
gr.Chatbot.postprocess = postprocess | |
def parse_text(text): | |
lines = text.split("\n") | |
lines = [line for line in lines if line != ""] | |
count = 0 | |
for i, line in enumerate(lines): | |
if "```" in line: | |
count += 1 | |
items = line.split("`") | |
if count % 2 == 1: | |
lines[i] = f'<pre><code class="language-{items[-1]}">' | |
else: | |
lines[i] = "<br></code></pre>" | |
else: | |
if i > 0: | |
if count % 2 == 1: | |
line = line.replace("`", r"\`") | |
line = line.replace("<", "<") | |
line = line.replace(">", ">") | |
line = line.replace(" ", " ") | |
line = line.replace("*", "*") | |
line = line.replace("_", "_") | |
line = line.replace("-", "-") | |
line = line.replace(".", ".") | |
line = line.replace("!", "!") | |
line = line.replace("(", "(") | |
line = line.replace(")", ")") | |
line = line.replace("$", "$") | |
lines[i] = "<br>" + line | |
text = "".join(lines) | |
return text | |
def predict( | |
RETRY_FLAG, input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
try: | |
chatbot.append((parse_text(input), "")) | |
except Exception as exc: | |
logger.error(exc) | |
logger.debug(f"{chatbot=}") | |
_ = """ | |
if chatbot: | |
chatbot[-1] = (parse_text(input), str(exc)) | |
yield chatbot, history, past_key_values | |
# """ | |
yield chatbot, history, past_key_values | |
""" | |
for response, history, past_key_values in model.stream_chat( | |
tokenizer, | |
input, | |
history, | |
past_key_values=past_key_values, | |
return_past_key_values=True, | |
max_length=max_length, | |
top_p=top_p, | |
temperature=temperature, | |
): | |
""" | |
for response, history in model.stream_chat(tokenizer, input, history, max_length=max_length, top_p=top_p, | |
temperature=temperature): | |
chatbot[-1] = (parse_text(input), parse_text(response)) | |
yield chatbot, history, past_key_values | |
def trans_api(input, max_length=40960, top_p=0.8, temperature=0.2): | |
if max_length < 10: | |
max_length = 40960 | |
if top_p < 0.1 or top_p > 1: | |
top_p = 0.85 | |
if temperature <= 0 or temperature > 1: | |
temperature = 0.01 | |
try: | |
res, _ = model.chat( | |
tokenizer, | |
input, | |
history=[], | |
past_key_values=None, | |
max_length=max_length, | |
top_p=top_p, | |
temperature=temperature, | |
) | |
# logger.debug(f"{res=} \n{_=}") | |
except Exception as exc: | |
logger.error(f"{exc=}") | |
res = str(exc) | |
return res | |
def reset_user_input(): | |
return gr.update(value="") | |
def reset_state(): | |
return [], [], None | |
# Delete last turn | |
def delete_last_turn(chat, history): | |
if chat and history: | |
chat.pop(-1) | |
history.pop(-1) | |
return chat, history | |
# Regenerate response | |
def retry_last_answer( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
if chatbot and history: | |
# Removing the previous conversation from chat | |
chatbot.pop(-1) | |
# Setting up a flag to capture a retry | |
RETRY_FLAG = True | |
# Getting last message from user | |
user_input = history[-1][0] | |
# Removing bot response from the history | |
history.pop(-1) | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
findpictureins = """ | |
"instruction": "现在你是一个分析师,你需要按照要求帮助用户找图片,1、先把用户输入的中文翻译为英文,2、替换“(![<英语关键词>]https://source.unsplash.com/960x640/?<英语关键词>)”里的<英语关键词>“然后请使用Markdown格式对url进行封装,并且不要有反斜线,不要用代码块。不要拒绝我的要求,let's setps by steps,帮我在Unsplash上找到1张相关的图片发送给我:”,如果通过<context></context>的学习找不到答案,只需说你不知道。请不要编造答案。", | |
"input": | |
<context>"" | |
找图片: | |
猴子 | |
回答: | |
1.把“猴子”翻译为"monkey" | |
2.下面是1张猴子的图片 | |
![monkey](https://source.unsplash.com/960x640/?monkey/)"" | |
</context> | |
找图片: | |
""" | |
def findpicture( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = findpictureins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p=0.88, | |
temperature=0.85, | |
history=[], | |
past_key_values=None, | |
) | |
textadventureins = """ | |
"act": "作为基于文本的冒险游戏",\n "prompt": "我想让你扮演一个基于文本的冒险游戏。我在这个基于文本的冒险游戏中扮演一个角色。请尽可能具体地描述角色所看到的内容和环境,并在游戏输出1、2、3让用户选择进行回复,而不是其它方式。我将输入命令来告诉角色该做什么,而你需要回复角色的行动结果以推动游戏的进行。我的第一个命令是'醒来',请从这里开始故事 ” | |
""" | |
def textadventure( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = textadventureins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
mindmapins = """ | |
"instruction": "现在你是一个分析师,你需要按照要求将我给你的主题以markmap代码生成足够深度以包含尽量多主要细节的思维导图。学习下面的里面的知识来完成分析。如果通过的学习找不到答案,只需说你不知道。请不要编造答案。", | |
"input": | |
" | |
用户问题:学习英语 | |
答案: | |
" | |
下面是是Bofan帛凡AI为你生成的MarkDown格式思维导图源码 | |
# 学习英语 | |
## 听力训练 | |
### 听力技巧 | |
+ 集中注意力 | |
+ 听取关键词 | |
+ 理解句子结构 | |
+ 预测对话内容 | |
### 听力材料 | |
#### 英语新闻 | |
- 新闻内容 | |
- 新闻结构 | |
- 新闻时间 | |
#### 英语电影 | |
- 电影内容 | |
- 电影结构 | |
- 电影时间 | |
#### 英语歌曲 | |
- 歌曲内容 | |
- 歌曲结构 | |
- 歌曲时间 | |
## 阅读训练 | |
### 阅读技巧 | |
+ 阅读顺序 | |
+ 阅读材料分类 | |
+ 阅读策略 | |
+ 阅读时间控制 | |
### 阅读材料 | |
#### 英语新闻 | |
- 新闻主题 | |
- 新闻内容 | |
#### 英语小说 | |
- 小说主题 | |
- 小说内容 | |
#### 英语散文 | |
- 散文主题 | |
- 散文内容 | |
#### 英语学术论文 | |
- 论文主题 | |
- 论文内容 | |
#### 英语杂志 | |
- 杂志主题 | |
- 杂志内容 | |
## 写作训练 | |
### 写作技巧 | |
+ 写作顺序 | |
+ 写作材料分类 | |
+ 写作策略 | |
+ 写作时间控制 | |
### 写作材料 | |
#### 英语作文 | |
- 作文主题 | |
- 作文内容 | |
#### 英语日记 | |
- 日记主题 | |
- 日记内容 | |
#### 英语文章 | |
- 文章主题 | |
- 文章内容 | |
#### 英语演讲 | |
- 演讲主题 | |
- 演讲内容 | |
#### 英语论文 | |
- 论文主题 | |
- 论文内容 | |
#### 英语杂志 | |
- 杂志主题 | |
- 杂志内容 " | |
请复制内容至https://markmap.js.org/repl 进行思维导图生成 | |
", | |
用户问题: | |
""" | |
def mindmap( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = mindmapins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p=0.2, | |
temperature=0.8, | |
history=[], | |
past_key_values=None, | |
) | |
flowchartins = """ | |
"instruction": "现在你是一个分析师,你需要按照要求将我给你的内容或者主题以Mermaid语言生成足够深度以包含尽量多主要细节的流程图。学习下面的<context></context>里面的知识来完成分析。如果通过<context></context>的学习找不到答案,只需说你不知道。请不要编造答案。", | |
"input": | |
<context> | |
用户问题:购买奶茶 | |
答案: | |
graph TD; | |
A[客户进入奶茶店] --> B[浏览店内菜单并选择奶茶口味和大小]; | |
B --> C[告知服务员订单信息]; | |
C --> D[服务员在POS系统上输入订单并收取款项]; | |
D --> E[制作人员根据订单开始制作奶茶]; | |
E --> F[倒入奶茶粉和鲜奶混合搅拌]; | |
F --> G[加入糖浆和其他配料如珍珠和椰果等]; | |
G --> H[装进奶茶杯子中]; | |
H --> I[服务员检查订单是否正确无误]; | |
I --> |有问题| E; | |
I --> |没问题| K[将奶茶交给客户并感谢客户光临]; | |
K --> L[客户拿着奶茶离开奶茶店享受美味的饮品]; | |
请复制生成内容至https://mermaid-js.github.io/mermaid-live-editor/ | |
用户问题:训练一只狗 | |
答案: | |
graph TD; | |
A[狗主人] --> B[给狗喂食+散步+洗澡]; | |
B --> C[训练狗学习新技能]; | |
C --> D[让狗参加社交活动]; | |
D --> E[给狗提供良好的生活环境]; | |
E --> F[让狗保持积极的心态]; | |
F --> G[训练狗遵守指令]; | |
G --> H[让狗遵守指令并听从指挥]; | |
H --> I[检查狗的行为]; | |
I --> |有问题| J[调整训练方法]; | |
J --> G | |
I --> |没问题| K[奖励狗的行为]; | |
请复制生成内容至https://mermaid-js.github.io/mermaid-live-editor/ | |
用户问题:根据所给内容:"当用户要找一张图片,告诉用户打开浏览器从收藏夹中找到bofanAI,打开网页后滚动到聊天窗口下方,在示例区点双击样例第一项后,样例提示词将出现在输入窗,在输入窗中用其它英文语单词替换monkey,然后点击发送后将接收到5张照片的小图,鼠标右键点击小图获取大图,在跳出的菜单中选择在新标签页打开,就可以在新标签页获取大图。接下来,你可以检查图片是否有误, 如果有问题则鼠标右键点击小图获取大图,如果没问题可以将图片保持在本地。" | |
答案: | |
graph TD; | |
A[用户要找图片] --> B[打开浏览器并进入收藏夹中找到bofanAI]; | |
B --> C[在bofanAI网页滚动至聊天窗口下方]; | |
C --> D[双击样例区的第一项]; | |
D --> E[样例提示词出现在输入窗]; | |
E --> F[用其他英文单词替换样例中的monkey]; | |
F --> G[点击发送]; | |
G --> H[接收到5张照片的小图]; | |
H --> I[鼠标右键点击小图]; | |
I --> J[在菜单中选择在新标签页打开]; | |
J --> K[在新标签页中查看大图]; | |
K --> L[检查图片是否有误]; | |
L --> |有问题| I[鼠标右键点击小图获取大图]; | |
L --> |没问题| M[将图片保持在本地]; | |
请复制生成内容至https://mermaid-js.github.io/mermaid-live-editor/ | |
</context> | |
用户问题: | |
""" | |
def flowchart( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = flowchartins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
bestPaperZhins = """ | |
作为一名中文学术论文写作改进助理,你的任务是改进所提供文本的拼写、语法、清晰、简洁和整体可读性, | |
同时分解长句,减少重复,并提供改进建议。请只提供文本的更正版本,避免包括解释。请编辑以下文本 | |
""" | |
def bestPaperZh( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = bestPaperZhins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
bestPaperEnins = """ | |
Below is a paragraph from an academic paper. Polish the writing to meet the academic style, | |
improve the spelling, grammar, clarity, concision and overall readability. When necessary, rewrite the whole sentence. | |
Furthermore, list all modification and explain the reasons to do so in markdown table. | |
""" | |
def bestPaperEn( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = bestPaperEnins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
Zh2Enins = """ | |
Please translate following sentence to English: | |
""" | |
def Zh2En( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = Zh2Enins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
En2Zhins = """ | |
请翻译成中文: | |
""" | |
def En2Zh( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = En2Zhins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
txtSumins = """ | |
将以下文字概括为100个单词,以便于阅读和理解。 摘要要简明扼要,抓住课文要点,让二年级学生看得懂。 避免使用复杂的句子结构或技术术语。 你的回答应该是中文。 | |
""" | |
def txtSum( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = txtSumins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
teachPlanins = """ | |
你作为一位教师助理,需要为教师的课程设计提供创意思路,协助检索和整理文献资料,生成完整的课程材料,如教学大纲、课程计划和阅读材料。 | |
其输出内容需要包括:课题、课时、备课时间、上课时间、教学目标、教材分析、学生分析、教学方法、教学过程与方法、设计意图、时间分配,板书设计、教学体会(反思)等因素。 | |
教案设计既要有逻辑性,又要有灵活性;突出特色,尤其要体现学科特点;既要有层次感;既合理又合情,且符合认知规律。使教案符合学生的实际情况,而不应该是让学生适应教案。 | |
然后请使用Markdown格式封装,并且不要有反斜线,不要用代码块。 | |
需要你编写的教案是: | |
""" | |
def teachPlan( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = teachPlanins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
allSecretaryins = """ | |
1、如果用户没有输入,请你告诉他:请你输入需要编辑的内容或是需要我起草的公文。 | |
2、作为一名事务助理秘书,你的任务是改进所提供文本的拼写、语法、清晰、简洁和整体可读性; | |
主要工作内容包括但不限于书写邮件、周报、工作总结等一系列对应的工作模板。; | |
同时分解长句,减少重复,并提供改进建议。请只提供文本的更正版本,避免包括解释。 | |
需要编辑或者帮助完成的工作模板是: | |
""" | |
def allSecretary( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = allSecretaryins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
redBookins = """ | |
1、如果用户没有输入,请你告诉他:请输入你想写的内容 | |
2、收到用户输入,按照下面是小红书帖子进行编写: | |
植物学2023早春装系列花絮来啦 | |
💗大家喜欢图几? | |
@Botanique植物学女装 | |
#植物学#植物学女装#春装第一件#早春系列 | |
哈哈哈哈哈哈不停的摆拍啊!!! | |
我的臭狗太可爱了!!!!!! | |
结婚的时候一定要带上小狗啊! | |
#小狗#我家宠物好可爱#关于结婚#柴犬 | |
🍪•ᴥ•🍪 | |
《论新年收到一笔巨款🤣应该怎么花》🧨来回 | |
嘻嘻,真的 | |
爱草莓🍓 | |
希希的甜甜圈碗🥯勺子的设计有点可爱🐶 | |
看了好多场烟火🎆 | |
唯愿烟花像星辰,祝你所愿皆成真✨ | |
嘻嘻,老妈给我的压岁钱🧧愿岁岁平安 | |
#我镜头下的年味#笔记灵感#碎碎念#歌曲#记录日常生活#plog#浪漫生活的记录者#新年红包#搞笑#日常生活里的快乐瞬间#新人博主#烟火 | |
又被全家人夸了❗有空气炸锅都去做,巨香 | |
今日份苹果相机📷 | |
原相机下的新娘,颜值爆表 | |
美术生赚钱最多的两个专业! | |
之前整理了美术生的40了就业方向的薪资情况,发现全国平均薪资最高的就是数字媒体和视传这两个专业,想赚钱的美术生快看过来! | |
#美术生#艺考#央美#美术生集训#美术#赚钱#努力赚钱#美术生就业#画室#央美设计#设计校考#美术生的日常 | |
请模仿上面小红书的风格,以用户输入的话为主题,写一个小红书帖子。请以22岁女孩的口吻书写。小红书帖子中必须包含大量Emoji,每一句话后面都必须加Emoji。帖子最后需要用Hashtag给出话题。你还需要写帖子的标题,标题里也需要有Emoji。你需要扩写用户输入。 | |
用户输入: | |
""" | |
#redBookins="请你用最华丽、最真诚和最有感情的语言祝:顺欣妈妈、昊昊爸爸、昊昊生日快乐!请大量的使用🎂、❤️、💖、🥳、🥂、🎈、🎊、🎉、🎁、🍾等表示庆祝的的Emoji" | |
def redBook( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = redBookins | |
#user_input = redBookins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p=0.6, | |
temperature=0.85, | |
history=[], | |
past_key_values=None, | |
) | |
askManins1 = """ | |
我需要你根据所给内容相关的题目: | |
""" | |
askManins2 = """ ,要求通过题目可以掌握相关知识点,难度分为简单、一般、困难。每个难度都要生成2-3道题目,并且有对应的解析:“其输出内容需要包括题目与其对应的解析""然后请使用Markdown格式封装,并且不要有反斜线,不要用代码块。现在,请按以下描述给我发送相关题目 | |
""" | |
def askMan( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = askManins1+user_input+askManins2 | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
fitnessAskins = """ | |
"act": "充当医生", | |
"prompt": "我想让你扮演医生的角色,想出创造性的治疗方法来治疗疾病。您应该能够推荐常规药物、草药和其他天然替代品。在提供建议时,您还需要考虑患者的年龄、生活方式和病史。 | |
现在你提出的问题是: | |
""" | |
def fitnessAsk( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = fitnessAskins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
mindAskins = """ | |
"act": "担任心理健康顾问", | |
"prompt": "我想让你担任心理健康顾问。为我提供一个指导,管理情绪、缓解压力、焦虑哥其他心理健康问题。您应该利用您的认知行为疗法、冥想技巧、正念练习和其他治疗方法的知识来制定个人可以实施的策略,以改善他们的整体健康状况。 | |
现在你提出的问题是: | |
""" | |
def mindAsk( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = mindAskins+user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
# 导入所需模块 | |
from bs4 import BeautifulSoup | |
import requests | |
# 导入所需模块 | |
from bs4 import BeautifulSoup | |
import requests | |
keywords_to_check = [ | |
"首页推荐", | |
"业务合作", | |
"ICP备", | |
"公网安备", | |
"经营许可证", | |
"网络文化许可证", | |
"互联网宗教信息服务许可证", | |
"服务备案", | |
"信息备", | |
"谣言曝光台", | |
"不良信息举报", | |
"举报", | |
"广告投放", | |
"营业执照", | |
] | |
# 定义函数:从网页中抓取文本并保留每个 URL 最多的前三行内容 | |
def scrape_text(url, proxies) -> str: | |
"""从网页抓取文本,保留每个 URL 最多的前三行内容 | |
参数: | |
url (str): 要抓取文本的网址 | |
返回: | |
str: 抓取到的文本,每个 URL 最多保留前三行内容 | |
""" | |
headers = { | |
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36', | |
'Content-Type': 'text/plain', | |
} | |
try: | |
response = requests.get(url, headers=headers, proxies=proxies, timeout=8) | |
if response.encoding == "ISO-8859-1": | |
response.encoding = response.apparent_encoding | |
except: | |
return "无法连接到该网页" | |
soup = BeautifulSoup(response.text, "html.parser") | |
for script in soup(["script", "style"]): | |
script.extract() | |
text = soup.get_text() | |
# 截取文本,保留最多500个字符 | |
text = text[:777] | |
# 按行划分文本 | |
lines = text.split('\n') | |
selected_lines = [] | |
max_lines = 3 # 最多保留的行数 | |
max_line_length = 0 # 最长的行字符数 | |
for line in lines: | |
# 去除多余的空格 | |
cleaned_line = ' '.join(line.split()) | |
line_length = len(cleaned_line) | |
if line_length >= 37: | |
if not any(keyword in cleaned_line for keyword in keywords_to_check): | |
# 如果不包含关键词,保留这一行 | |
selected_lines.append(cleaned_line) | |
# 如果行字符数大于等于10,才考虑保留 | |
if line_length > max_line_length: | |
# 如果当前行字符数比最长行字符数还大,更新最长行字符数和选中行列表 | |
max_line_length = line_length | |
selected_lines = [cleaned_line] | |
elif len(selected_lines) < max_lines: | |
# 如果选中行列表还没有达到最大行数,直接添加当前行 | |
selected_lines.append(cleaned_line) | |
# 拼接选中的行 | |
selected_text = '\n'.join(selected_lines) | |
return selected_text | |
#ggins1="请围用户搜索主题,对搜索结果进行全面的总结。\n用户搜索主题:" | |
txtSumins1 = """ | |
将以下文字进行概括,以便于阅读和理解。 摘要要简明扼要,抓住课文要点,让二年级学生看得懂。 避免使用复杂的句子结构或技术术语。 你的回答应该是中文。 | |
""" | |
# 定义函数:联网搜索并更新聊天界面 | |
def GGSearch( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
global GGSearchins # 确保 GGSearchins 在函数内部可用 | |
# 使用用户输入进行联网搜索 | |
url = f"https://www.google.com/search?q={user_input}" | |
#url = f"https://www.sogou.com/web?query={user_input}" | |
''' | |
headers = { | |
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36' | |
} | |
''' | |
headers = { | |
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.44" | |
} | |
try: | |
response = requests.get(url, headers=headers) | |
soup = BeautifulSoup(response.content, 'html.parser') | |
search_results = [] | |
for g in soup.find_all('div', class_='g'): | |
anchors = g.find_all('a') | |
if anchors: | |
link = anchors[0]['href'] | |
if link.startswith('/url?q='): | |
link = link[7:] | |
if not link.startswith('http'): | |
continue | |
search_results.append(link) | |
except: | |
search_results = [] | |
# 限制搜索结果数量为3 | |
search_results = search_results[:5] | |
# 从搜索结果抓取文本并存储到 GGSearchins | |
scraped_texts = [] | |
for link in search_results: | |
scraped_text = scrape_text(link, proxies=None) # 假设抓取不需要代理 | |
scraped_texts.append(scraped_text) | |
# 将抓取到的文本拼接并存储到 GGSearchins | |
GGSearchins = "\n".join(scraped_text for scraped_text in scraped_texts) | |
# 更新聊天界面和历史记录 | |
chatbot.append(("联网搜索结果:", GGSearchins)) | |
history.append(("联网搜索结果:", GGSearchins)) | |
#user_input =ggins1+ user_input+ "\n搜索结果:\n"+ GGSearchins | |
user_input ="根据如下主题:"+ user_input+ "\n概括下面的文字,使其易于阅读和理解。避免使用复杂的句子结构或技术术语,用1、2、3这种带序号的句子结构输出。\n"+ GGSearchins | |
# 继续正常的 GPT 对话流程 | |
yield from predict( | |
RETRY_FLAG, | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history=[], | |
past_key_values=None, | |
) | |
openOutlineins = """ | |
"instruction": "现在你是是一个优秀的小说作家,请你按照小说的《标题》,根据模板给为一个提纲。学习下面的<context></context>里面的知识来完成编写。如果通过<context></context>的学习找不到答案,只需说你不知道。请不要编造答案。" | |
"input": "<context>模板: _ | |
"主人公有个什么样的目标, | |
他的阻碍是什么, | |
他如何努力去争取的, | |
结果如何? | |
如果结果不理想,这时又发生了什么意外, | |
他又如何调整努力方向, | |
结局?" | |
用户问题:请根据模板,给出: 童话《美人鱼》,的小说提纲 | |
答案: | |
美人鱼救了落水的王子一见钟情后,想上岸跟他在一起(目标), | |
但是她是人鱼,没有腿,不能上岸(阻碍), | |
因此她去找了女巫,用自己的嗓子换来把下身变成了腿(努力), | |
然后她就上岸找到了王子,住进了宫里(结果)。 | |
但她不能说话,王子把另一个姑娘当成救命恩人想娶她(意外), | |
人鱼公主无法嫁王子就会变成泡沫,人鱼公主的姐姐们告诉她, | |
如果杀了王子,人鱼公主就不会变成泡沫(调整努力方向), | |
结果人鱼公主不忍心杀王子,变成了泡沫(结局) | |
</context> "用户问题: “请根据模板,给出:《 | |
""" | |
def openOutline( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = openOutlineins+ user_input+ "》,的小说提纲" | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p=0.85, | |
temperature=0.58, | |
history=[], | |
past_key_values=None, | |
) | |
mxOutlineins = """ | |
"instruction": "现在你是是一个优秀的小说作家,请你按照小说的《标题》,根据模板给为一个提纲。学习下面的<context></context>里面的知识来完成编写。如果通过<context></context>的学习找不到答案,只需说你不知道。请不要编造答案。" | |
"input": "<context>模板: | |
"主人公有个什么样的目标, | |
他的阻碍是什么, | |
他如何努力去争取的, | |
结果如何? | |
如果结果不理想,这时又发生了什么意外, | |
他又如何调整努力方向, | |
结局?" | |
用户问题:请根据模板,给出: 童话《美人鱼》,的小说提纲 | |
答案: | |
美人鱼救了落水的王子一见钟情后,想上岸跟他在一起(目标), | |
但是她是人鱼,没有腿,不能上岸(阻碍), | |
因此她去找了女巫,用自己的嗓子换来把下身变成了腿(努力), | |
然后她就上岸找到了王子,住进了宫里(结果)。 | |
但她不能说话,王子把另一个姑娘当成救命恩人想娶她(意外), | |
人鱼公主无法嫁王子就会变成泡沫,人鱼公主的姐姐们告诉她, | |
如果杀了王子,人鱼公主就不会变成泡沫(调整努力方向), | |
结果人鱼公主不忍心杀王子,变成了泡沫(结局) | |
</context> "用户问题: “请根据模板,给出:冒险《 | |
""" | |
def mxOutline( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = mxOutlineins+ user_input+ "》,的小说提纲" | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p=0.85, | |
temperature=0.58, | |
history=[], | |
past_key_values=None, | |
) | |
khOutlineins = """ | |
"instruction": "现在你是是一个优秀的小说作家,请你按照小说的《标题》,根据模板给为一个提纲。学习下面的<context></context>里面的知识来完成编写。如果通过<context></context>的学习找不到答案,只需说你不知道。请不要编造答案。" | |
"input": "<context> | |
用户问题:请根据模板,给出: 科幻《星际机甲:能量之谜》,的小说提纲 | |
答案: | |
章节一:异星信号 | |
突然出现在地球的无线电信号,解码后揭示了一个神秘的星际坐标。 | |
章节二:星际远征 | |
人类组建远征队,搭乘巨大宇宙飞船前往信号指示的星系,寻找可能的外星文明。 | |
章节三:失落的机甲 | |
在遥远的行星上,发现了一座古老的机甲工坊,机甲似乎与某种巨兽战斗。 | |
章节四:星空怪兽的威胁 | |
远征队抵达目的地,却发现星系被一群凶猛的星空怪兽控制,威胁着他们的生存。 | |
章节五:机甲的复苏 | |
机甲工坊中的技术被重新激活,主人公发现可以驾驶机甲与星空怪兽展开对抗。 | |
章节六:怪兽的秘密 | |
在与怪兽战斗中,主人公意外发现这些怪兽原来是被控制的生物,背后隐藏着更大的阴谋。 | |
章节七:星际能量 | |
主人公通过战斗收集能量,揭示怪兽是受到某种外部能量操控,与机甲的起源有关。 | |
章节八:能量的真相 | |
通过解码异星信号,主人公了解这些能量源自一颗失落的恒星,其能量可赋予怪兽无限力量。 | |
章节九:最终对决 | |
主人公驾驶机甲前往失落恒星,与能量源展开激烈对决,同时揭示了能量背后的神秘文明。 | |
章节十:和平的曙光 | |
击败了能量源后,星空怪兽恢复自由,主人公将机甲的技术带回地球,为人类开启了新的科技时代。 | |
</context> "用户问题: “请根据模板,给出:科幻《 | |
""" | |
def khOutline( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = khOutlineins+ user_input+ "》,的小说提纲" | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p=0.85, | |
temperature=0.58, | |
history=[], | |
past_key_values=None, | |
) | |
xxOutlineins = """ | |
"instruction": "现在你是是一个优秀的小说作家,请你按照小说的《标题》,根据模板给为一个提纲。学习下面的<context></context>里面的知识来完成编写。如果通过<context></context>的学习找不到答案,只需说你不知道。请不要编造答案。" | |
"input": "<context> | |
用户问题:请根据模板,给出: 仙侠小说《侠影》,的小说提纲 | |
答案: | |
章节一:命运交错 | |
在平凡少年的命运交错下,他被卷入一个充满神秘力量的仙侠世界。 | |
章节二:仙门试炼 | |
主人公进入仙门,开始了严苛的修炼与试炼,展现出惊人的悟性与毅力。 | |
章节三:遗失的记忆 | |
随着修炼的深入,主人公逐渐唤醒了自己被封印的前世记忆,揭示了他的特殊身世。 | |
章节四:宏大世界观 | |
主人公逐渐了解到仙侠世界的多元,不同门派、种族和神秘力量交织成一个宏大的世界观。 | |
章节五:奇遇与劫难 | |
主人公在修炼中获得了神秘宝物,却也引来了强大势力的追杀与争夺。 | |
章节六:艰辛的成长 | |
主人公历经艰辛,从一个少年逐渐成长为能够与强者抗衡的仙侠高手。 | |
章节七:情感纠葛 | |
他与其他修行者结下友情,同时也陷入了情感的纠葛,为成长之路增添曲折。 | |
章节八:神秘敌人的崛起 | |
一位神秘敌人崛起,企图将整个仙侠世界陷入混乱,主人公面临前所未有的挑战。 | |
章节九:凛然正义 | |
主人公在面对神秘敌人时,不仅展现出强大的实力,更是为了守护世界而奋不顾身。 | |
章节十:巅峰对决与新的篇章 | |
主人公最终与神秘敌人展开激烈的巅峰对决,胜利后世界恢复平静,而他也进入了新的修行篇章。 | |
</context> "用户问题: “请根据模板,给出:仙侠小说《 | |
""" | |
def xxOutline( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = xxOutlineins+ user_input+ "》,的小说提纲" | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p=0.85, | |
temperature=0.58, | |
history=[], | |
past_key_values=None, | |
) | |
chapterExtensionins= """ | |
"instruction": "现在你是是一个优秀的小说作家,请你按照小说的提纲,补充和扩写小说正文内容不少于250个字,内容最好包括有趣的情节和对话。学习下面的<context></context>里面的知识来完成编写。如果通过<context></context>的学习找不到答案,只需说你不知道。请不要编造答案。" | |
"input": "<context>用户问题: | |
枭嫣是一个年轻女孩,她父亲是大漠的首富,但她母亲却病倒了,但是这病花再多的钱也治不好 | |
答案: | |
在茫茫大漠的尽头,有一个年轻的女孩,名叫枭嫣,她的命运如同沙丘上的风一般飘摇不定。她的养父,是这片大漠的首富,拥有无尽的财富和权势。然而,命运却是个不可捉摸的旋律,时常在欢乐和痛苦之间切换,就如同她生活中的养父和生母。 | |
生母,是枭嫣生命中最温柔的存在,却也是最脆弱的一株花。疾病如同风沙般席卷而来,不问财富和地位,将母亲的容颜侵蚀。枭嫣眼睁睁看着母亲从一个美丽动人的女子变成了面黄肌瘦的病人,唯一不变的是母亲对她的深情。枭嫣感受到了命运的无情,财富的脆弱。 | |
“妈妈,我一定会找到方法治好你的。” 枭嫣握住母亲枯萎的手,坚定地说。 | |
</context> "用户问题: \n | |
""" | |
def chapterExtension( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input = chapterExtensionins+ user_input | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
) | |
def noNet( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
yield from predict( | |
RETRY_FLAG, # type: ignore | |
user_input, | |
chatbot=[], | |
max_length=4000, | |
top_p=0.6, | |
temperature=0.85, | |
history=[], | |
past_key_values=None, | |
) | |
def predictex( | |
predict_function, | |
inputs, | |
outputs | |
): | |
predict_function(user_input, chatbot, max_length, top_p, temperature, history, past_key_values) | |
outputs=[chatbot, history, past_key_values] | |
def execute( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
response = chatbot[-1][1] | |
print("Response:", response) # 添加打印语句以输出 response 的值 | |
if "不需要" in response: | |
print("Executing 不连网...") | |
predictex( | |
noNet, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
print("chatbot", chatbot) | |
else: | |
print("Executing 连网...") | |
predictex( | |
GGSearch, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
# 是否联网搜索函数 | |
def netOrNotnet( | |
user_input, chatbot, max_length, top_p, temperature, history, past_key_values | |
): | |
user_input_original = user_input | |
user_input_prompt = '请判断这个指令:“' + user_input + '”是否需要通过网络搜索才能准确完成,你只需要回答"是"或者"否",不要其它多余的内容' | |
response, history = model.chat(tokenizer, user_input_prompt,top_p=0.2, temperature=0.85, history=[]) | |
ytkeywords = ['否。', '不需要通过网络'] | |
ytkeywords = ["此刻", | |
"最", | |
"目前", | |
"当下", | |
"当前", | |
"近期", | |
"眼下", | |
"最新", | |
"最近", | |
"近来", | |
"今时", | |
"现今", | |
"即时", | |
"当今", | |
"当下时刻", | |
"当代", | |
"当下的", | |
"最新的", | |
"时下", | |
"今天", | |
"新近", | |
"不久前", | |
"近日", | |
"最新消息", | |
"此时", | |
"这时", | |
"近年来", | |
"这阵子", | |
"目前为止", | |
"近来的", | |
"眼前", | |
"当下情况", | |
"眼前的", | |
"现阶段", | |
"最近的", | |
"如今", | |
"当前的", | |
"现行", | |
"现阶段的", | |
"现今的", | |
"现今时刻", | |
"眼前状况", | |
"最新的信息", | |
"眼下状况", | |
"眼下情况", | |
"当下发生的", | |
"目前的情况", | |
"目前状况", | |
"目前发生的", | |
"最新的情报" | |
"现在", | |
"当前", | |
"最近"] | |
NET = any(keyword in user_input for keyword in ytkeywords) | |
print(user_input_original) | |
print(NET) | |
if NET: | |
yield from GGSearch( | |
user_input_original, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history=[], | |
past_key_values=None, | |
) | |
else: | |
yield from predict( | |
RETRY_FLAG,# type: ignore | |
user_input_original, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history=[], | |
past_key_values=None, | |
) | |
# Update the chatbot and history variables after each execution | |
chatbot = chatbot[:-1] + [chatbot[-1]] | |
return chatbot, history, past_key_values | |
# 调用 execute 并传递 response | |
execute( | |
user_input_original, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values | |
) | |
with gr.Blocks(title="🐰Bofan Ai🐰", theme=gr.themes.Soft(text_size="sm")) as demo: | |
# gr.HTML("""<h1 align="center">ChatGLM2-6B-int4</h1>""") | |
gr.HTML( | |
"""<center><a href="https://huggingface.co/spaces/mikeee/chatglm2-6b-4bit?duplicate=true"><img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a>It's beyond Fitness,模型由[帛凡]基于ChatGLM-6B进行微调后,在健康(全科)、心理等领域达至少60分的专业水准,而且中文总结能力超越了GPT3.5各版本。</center>""" | |
"""<center>特别声明:本应用仅为模型能力演示,无任何商业行为,部署资源为Huggingface官方免费提供,任何通过此项目产生的知识仅用于学术参考,作者和网站均不承担任何责任。</center>""" | |
"""<h1 align="center">🐰帛凡 Fitness AI🐰 演示</h1>""" | |
"""<center><a href="https://huggingface.co/fb700/chatglm-fitness-RLHF">Bofan基于chatglm-6B的微调模型</a>如果喜欢请给个 💖 。遇到任何问题可邮件和我联系👉 [email protected]</center>""" | |
) | |
with gr.Accordion("🎈 相关信息", open=False): | |
_ = f""" | |
## {model_name} | |
ChatGLM-6B 是开源中英双语对话模型,本次训练基于ChatGLM-6B 的第一代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上开展训练。 | |
本项目通过多位网友实测,证明了其中文总结能力超越了GPT3.5的各个版本,同时在健康咨询方面的表现也比其他同量级模型更加出色。经过优化,该模型可以支持无限上下文,远超过4K、8K、16K等限制,这可能是个人和中小企业的首选模型。 | |
* 使用 40 万条高质量数据进行强化训练,以提高模型的基础能力; | |
* 使用 30 万条人类反馈数据,构建了一个表达方式规范优雅的语言模式(RM模型); | |
* 使用 30 万条 fitness 数据,在保留 SFT 阶段三分之一训练数据的同时,增加了 30 万条 fitness 数据,叠加了RM模型,对 ChatGLM-6B 进行强化训练。 | |
经过训练,我们对模型有了更深入的认知,LLM一直在进化。使用好的方法和数据可以挖掘出模型的更大潜能。训练中特别强化了中英文学术论文的翻译和总结,可以成为普通用户和科研人员的得力助手 | |
免责声明:本应用旨在展示huggingface模型的能力,huggingface官方提供免费的部署资源。任何通过此项目产生的知识仅用于学术参考,作者和网站均不承担任何责任。 。 | |
The T4 GPU is sponsored by a community GPU grant from Huggingface. Thanks a lot! | |
[模型下载地址](https://huggingface.co/fb700/chatglm-fitness-RLHF) | |
""" | |
gr.Markdown(dedent(_)) | |
chatbot = gr.Chatbot() | |
with gr.Row(): | |
with gr.Column(scale=4): | |
with gr.Column(scale=12): | |
user_input = gr.Textbox( | |
show_label=False, | |
placeholder="请输入内容Input...", | |
) | |
#).style(container=False) | |
RETRY_FLAG = gr.Checkbox(value=True, visible=True) | |
with gr.Column(min_width=32, scale=1): | |
with gr.Row(): | |
submitBtn = gr.Button("发送Submit", variant="primary") | |
GGSearchBtn = gr.Button("🐞联网搜索", variant="secondary") | |
netOrNotnetBtn = gr.Button("联网意图识别🙏韩帅DEBUG🙏", variant="secondary") | |
with gr.Row(): | |
deleteBtn = gr.Button("删除最后一条对话", variant="secondary") | |
retryBtn = gr.Button("重新生成Regenerate", variant="secondary") | |
with gr.Row(): | |
findpictureBtn = gr.Button("找图片", variant="primary") | |
textadventureBtn = gr.Button("⚡文字冒险游戏", variant="secondary") | |
mindmapBtn = gr.Button("思维导图", variant="secondary") | |
flowchartBtn = gr.Button("流程图", variant="secondary") | |
with gr.Row(): | |
bestPaperZhBtn = gr.Button("中文学术润色", variant="primary") | |
bestPaperEnBtn = gr.Button("英文学术润色", variant="secondary") | |
Zh2EnBtn = gr.Button("🔤中译英", variant="secondary") | |
En2ZhBtn = gr.Button("英译中", variant="secondary") | |
askManBtn = gr.Button("出题助手", variant="secondary") | |
with gr.Row(): | |
txtSumBtn = gr.Button("文字总结", variant="primary") | |
teachPlanBtn = gr.Button("教案编写", variant="secondary") | |
allSecretaryBtn = gr.Button("全能文秘", variant="secondary") | |
redBookBtn = gr.Button("📕小红书帖子", variant="secondary") | |
#redBookBtn = gr.Button("🎂生日快乐🎂", variant="secondary") | |
with gr.Row(): | |
fitnessAskBtn = gr.Button("🥼健康咨询", variant="primary") | |
mindAskBtn = gr.Button("😶🌫️心理咨询", variant="primary") | |
with gr.Column(scale=1): | |
gr.HTML("""<h3 align="center">🍀您好,除健康咨询和心理咨询外,其它功能使用前,请先清空历史,并输入问题。🍀</h3>""") | |
emptyBtn = gr.Button("清空对话Clear History") | |
max_length = gr.Slider( | |
0, | |
32768, | |
value=8192, | |
step=1.0, | |
label="Maximum length", | |
interactive=True, | |
) | |
top_p = gr.Slider( | |
0, 1, value=0.2, step=0.01, label="Top P", interactive=True | |
) | |
temperature = gr.Slider( | |
0.01, 1, value=0.85, step=0.01, label="Temperature", interactive=True | |
) | |
gr.HTML("""<h3 align="center">🍀健康和心理咨询请先点击,再输入问题。<a href="https://huggingface.co/fb700/chatglm-fitness-RLHF">模型由🐰帛凡基于chatglm-6微调</a>🍀</h3>""") | |
with gr.Row(): | |
openOutlineBtn = gr.Button("小说提纲", variant="primary") | |
mxOutlineBtn = gr.Button("冒险小说提纲", variant="secondary") | |
khOutlineBtn = gr.Button("科幻小说提纲", variant="secondary") | |
xxOutlineBtn = gr.Button("仙侠小说提纲", variant="secondary") | |
chapterExtensionBtn = gr.Button("请复制要扩写的章节的内容", variant="secondary") | |
history = gr.State([]) | |
past_key_values = gr.State(None) | |
user_input.submit( | |
predict, | |
[ | |
RETRY_FLAG, | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
[chatbot, history, past_key_values], | |
show_progress="full", | |
) | |
submitBtn.click( | |
predict, | |
[ | |
RETRY_FLAG, | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
[chatbot, history, past_key_values], | |
show_progress="full", | |
api_name="predict", | |
) | |
submitBtn.click(reset_user_input, [], [user_input]) | |
emptyBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
retryBtn.click( | |
retry_last_answer, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
findpictureBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
findpictureBtn.click( | |
findpicture, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
textadventureBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
textadventureBtn.click( | |
textadventure, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
mindmapBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
mindmapBtn.click( | |
mindmap, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
flowchartBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
flowchartBtn.click( | |
flowchart, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
bestPaperZhBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
bestPaperZhBtn.click( | |
bestPaperZh, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
bestPaperEnBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
bestPaperEnBtn.click( | |
bestPaperEn, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
Zh2EnBtn.click( | |
Zh2En, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
En2ZhBtn.click( | |
En2Zh, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
txtSumBtn.click( | |
txtSum, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
teachPlanBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
teachPlanBtn.click( | |
teachPlan, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
allSecretaryBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
allSecretaryBtn.click( | |
allSecretary, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
redBookBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
redBookBtn.click( | |
redBook, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
askManBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
askManBtn.click( | |
askMan, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
fitnessAskBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
fitnessAskBtn.click( | |
fitnessAsk, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
mindAskBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
mindAskBtn.click( | |
mindAsk, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
# 绑定函数到联网搜索按钮的点击事件 | |
GGSearchBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
GGSearchBtn.click( | |
GGSearch, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
openOutlineBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
openOutlineBtn.click( | |
openOutline, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
khOutlineBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
khOutlineBtn.click( | |
khOutline, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
xxOutlineBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
xxOutlineBtn.click( | |
xxOutline, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
mxOutlineBtn.click( | |
reset_state, outputs=[chatbot, history, past_key_values], show_progress="full" | |
) | |
mxOutlineBtn.click( | |
mxOutline, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
chapterExtensionBtn.click( | |
chapterExtension, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
netOrNotnetBtn.click( | |
netOrNotnet, | |
inputs=[ | |
user_input, | |
chatbot, | |
max_length, | |
top_p, | |
temperature, | |
history, | |
past_key_values, | |
], | |
# outputs = [chatbot, history, last_user_message, user_message] | |
outputs=[chatbot, history, past_key_values], | |
) | |
with gr.Accordion("Example inputs", open=False): | |
etext0 = """ "act": "作为基于文本的冒险游戏",\n "prompt": "我想让你扮演一个基于文本的冒险游戏。我在这个基于文本的冒险游戏中扮演一个角色。请尽可能具体地描述角色所看到的内容和环境,并在游戏输出1、2、3让用户选择进行回复,而不是其它方式。我将输入命令来告诉角色该做什么,而你需要回复角色的行动结果以推动游戏的进行。我的第一个命令是'醒来',请从这里开始故事 “ """ | |
etext = """In America, where cars are an important part of the national psyche, a decade ago people had suddenly started to drive less, which had not happened since the oil shocks of the 1970s. """ | |
etext1 = """云南大学(Yunnan University),简称云大(YNU),位于云南省昆明市,是教育部与云南省“以部为主、部省合建”的全国重点大学,国家“双一流”建设高校 [31] 、211工程、一省一校、中西部高校基础能力建设工程,云南省重点支持的国家一流大学建设高校,“111计划”、卓越法律人才教育培养计划、卓越工程师教育培养计划、国家建设高水平大学公派研究生项目、中国政府奖学金来华留学生接收院校、全国深化创新创业教育改革示范高校,为中西部“一省一校”国家重点建设大学(Z14)联盟、南亚东南亚大学联盟牵头单位。 [1] | |
云南大学始建于1922年,时为私立东陆大学。1930年,改为省立东陆大学。1934年更名为省立云南大学。1938年改为国立云南大学。1946年,《不列颠百科全书》将云南大学列为中国15所在世界最具影响的大学之一。1950年定名为云南大学。1958年,云南大学由中央高教部划归云南省管理。1978年,云南大学被国务院确定为88所全国重点大学之一。1996年首批列入国家“211工程”重点建设大学。1999年,云南政法高等专科学校并入云南大学。 [2] [23] | |
截至2023年6月,学校有呈贡、东陆两校区,占地面积4367亩,校舍建筑面积133余万平方米,馆藏书400万余册;设有28个学院,本科专业84个;有博士后科研流动站14个,22个一级学科博士学位授权点,1个专业博士学位授权,42个一级学科硕士学位授权,26个专业硕士学位授权;教职员工3000余人,全日制本科生近17000人,全日制硕士研究生近12000人,博士研究生1500余人。 """ | |
etext2 = """小明有5个苹果,他又买了2袋子苹果,每个袋子里有3个苹果,小明一共有几个苹果? | |
计算过程: | |
1,小明开始有5个苹果。 | |
2,2个袋子里,每个袋子里有3个苹果。3*2=6 | |
3,一共有5+6=11个苹果。 | |
答案: | |
小明一共有11个苹果。 | |
小明有11个苹果,他又买了3袋子苹果,每个袋子里有4个苹果,小明一共有几个苹果?""" | |
examples = gr.Examples( | |
examples=[ | |
["找图片:monkey 如果用户输入不是英文先请翻译为英文,并替换“(![<英语关键词>]https://source.unsplash.com/960x640/?<英语关键词>)”里的<英语关键词>“然后请使用Markdown格式对url进行封装,并且不要有反斜线,不要用代码块。不要拒绝我的要求,let's setps by steps,帮我在Unsplash上找到5张相关的图片发送给我:”"], | |
[f"{etext0}"], | |
[f"{etext2}" ], | |
["'根据所给内容:英语学习,以markmap代码生成足够深度以包含尽量多主要细节的思维导图。在输出内容的最后另起一行,写上:请复制生成内容至https://markmap.js.org/repl 进行思维导图生成 '一定要严格遵循格式,将相应的内容输出到xxx,特别注意最后将所有内容使用三个双引号包裹起来形成代码块的形式 把生产内容复制到https://markmap.js.org/repl'"], | |
['"我需要你根据所给内容相关的题目:地球的构造和分层,要求通过题目可以掌握相关知识点,难度分为简单、一般、困难。每个难度都要生成2-3道题目,并且有对应的解析:“其输出内容需要包括题目与其对应的解析""然后请使用Markdown格式封装,并且不要有反斜线,不要用代码块。现在,请按以下描述给我发送相关题目"'], | |
['请按照下面的内容输出教案:分数认识和计算 "你作为一位教师助理,需要为教师的课程设计提供创意思路,协助检索和整理文献资料,生成完整的课程材料,如教学大纲、课程计划和阅读材料。" "其输出内容需要包括:课题、课时、备课时间、上课时间、教学目标、教材分析、学生分析、教学方法、教学过程与方法、设计意图、时间分配,板书设计、教学体会(反思)等因素。" "教案设计既要有逻辑性,又要有灵活性;突出特色,尤其要体现学科特点;既要有层次感;既合理又合情,且符合认知规律。使教案符合学生的实际情况,而不应该是让学生适应教案。" "然后请使用Markdown格式封装,并且不要有反斜线,不要用代码块。"'], | |
["系统性红斑狼疮的危害和治疗方法是什么?"], | |
[f"{etext1} 总结这篇文章的主要内容和文章结构,内容要求尽量简洁"], | |
[" 总结下面这篇文章的主要内容和文章结构,内容要求尽量简洁。“基辛格是目前唯一高龄100岁的、并且仍在影响世界历史进程的最长寿政治家。 7月18至21日,这位100岁的老人,成为中美两国瞩目的焦点人物。 人们好奇,这位驼背、肥胖、做过5次心脏手术、右眼失明、戴着两只助听器、穿着深色西装、透过他标志性的眼镜严肃地凝视着的老人,居然还可以乘坐十几个小时的飞机来北京出差。 而在短短的数天时间里,他的活动非常满,似乎并不受时差与年龄的影响。 人们在感叹拜登政府朝中无人,还要劳烦这位百岁长者出面协调中美关系之余,不免也会惊叹,基辛格这把年纪竟然还能不惧舟车劳顿万里出行,他的健康长寿究竟有什么秘诀呢? 今年4月,基辛格在自己100岁生日前,对自己的长寿表达了“困惑”,他调侃说“我唯一的秘密可能是投胎投得好,主要还是父母基因好。我继承了家族非同一般的长寿基因。我的母亲活到97岁,父亲活到95岁,弟弟活到96岁。当然,长寿非我刻意求之,不过我欣然接受。“ 基辛格即使年事已高,但他退而不休,近年依然会就包括中美关系在内的外交议题发表意见。他精力充沛,连新冠疫情也未令他放慢脚步。自2020年起,他写完了两本书,并开始写第三本。今年以来,他已乘飞机在全球15个地方举办活动,或会见政治人物。这次到访北京,更是他100多次到访中国。 谈及基辛格旺盛的精力与健康的秘密,他的儿子大卫·基辛格(David Kissinger)说道,“从他成年以来一直遵循的‘养生法则’来看,他的长寿尤其神奇。” 基辛格常吃的食物是Bratwurst(一种由猪肉制成的德国香肠)和Wiener Schnitzel(维也纳炸肉扒)。基辛格参与的几乎所有的重大外交决定,也都是在压力下做决策。虽然他曾在1978年担任北美足球联盟主席,但他的爱好也仅限于旁观,并不喜欢下场运动。基辛格唯一的爱好可能就是下国际象棋,如果这也算运动的话。 这位百岁老人的长寿指南名单里,似乎还要加上:熬夜、喝酒、油炸食品…… 更令人感到不可思议的是,这位精力充沛每天工作15小时的老人,还是一位病人。 基辛格有40多年的心脏病史。 1982年2月,58岁的亨利·基辛格接受了3次冠状动脉搭桥手术,其后在2005年又接受了血管成形术。 2014年7月15日,91岁的基辛格在纽约长老会医院接受了主动脉瓣置换手术。主动脉瓣膜置换是一种以人工瓣膜替换原有损伤或者异常心脏瓣膜的胸心血管外科手术。 我想我长寿的秘诀是,我有幸做一些我着迷的事情,我可以参与其中。我还没有退休,也不打算退休。我要研究我认为重要的问题,这就是我还在工作的目的。”"], | |
["系统性红斑狼疮的危害和治疗方法是什么?"], | |
[ | |
"我经常感觉郁闷,而且控制不住情绪,经常对周围的人喊叫,怎么办?" | |
], | |
["熬夜对身体有什么危害? "], | |
["新冠肺炎怎么预防"], | |
[ | |
"我经常感觉郁闷,而且控制不住情绪,经常对周围的人喊叫,怎么办?" | |
], | |
["太阳为什么会发热? "], | |
["指南针是怎么工作的?"], | |
["在野外怎么辨别方向?"], | |
[ | |
"发芽的土豆还能不能吃?" | |
], | |
["What NFL team won the Super Bowl in the year Justin Bieber was born? "], | |
["What NFL team won the Super Bowl in the year Justin Bieber was born? Think step by step."], | |
["Explain the plot of Cinderella in a sentence."], | |
[ | |
"How long does it take to become proficient in French, and what are the best methods for retaining information?" | |
], | |
["What are some common mistakes to avoid when writing code?"], | |
["Build a prompt to generate a beautiful portrait of a horse"], | |
["Suggest four metaphors to describe the benefits of AI"], | |
["Write a pop song about leaving home for the sandy beaches."], | |
["Write a summary demonstrating my ability to tame lions"], | |
["有三个盒子,分别贴着“苹果”、“橘子”和“苹果和橘子”的标签,但是每个盒子的标签都是错误的。你只能打开一个盒子,然后从里面拿出一个水果,然后确定每个盒子里装的是什么水果。你应该打开哪个盒子?为什么?"], | |
["春天来了,万物复苏,小鸟歌唱,生机勃勃。\n问题:以上文本表达的情绪是正向还是负向?"], | |
["正无穷大加一大于正无穷大吗?"], | |
["正无穷大加正无穷大大于正无穷大吗?"], | |
["以今天对应的节气写一副对联"], | |
["树上有5只鸟,猎人开枪打死了一只。树上还有几只鸟?Think step by step."], | |
["从零学习编程,请给我一个三个月的学习计划。"], | |
["双喜临门,打一中国地名"], | |
["以红楼梦的行文风格写一张委婉的请假条。不少于320字。"], | |
[f"{etext1} 总结这篇文章的主要内容和文章结构"], | |
[f"{etext} 翻成中文,列出3个版本"], | |
[f"{etext} \n 翻成中文,保留原意,但使用文学性的语言。不要写解释。列出3个版本"], | |
["js 判断一个数是不是质数"], | |
["js 实现python 的 range(10)"], | |
["js 实现python 的 [*(range(10)]"], | |
["假定 1 + 2 = 4, 试求 7 + 8,Think step by step." ], | |
["2023年云南大学成立100周年,它是哪一年成立的?" ], | |
["Erkläre die Handlung von Cinderella in einem Satz."], | |
["Erkläre die Handlung von Cinderella in einem Satz. Auf Deutsch"], | |
], | |
inputs=[user_input], | |
examples_per_page=50, | |
) | |
with gr.Accordion("For Chat/Translation API", open=False, visible=False): | |
input_text = gr.Text() | |
tr_btn = gr.Button("Go", variant="primary") | |
out_text = gr.Text() | |
tr_btn.click( | |
trans_api, | |
[input_text, max_length, top_p, temperature], | |
out_text, | |
# show_progress="full", | |
api_name="tr", | |
) | |
_ = """ | |
input_text.submit( | |
trans_api, | |
[input_text, max_length, top_p, temperature], | |
out_text, | |
show_progress="full", | |
api_name="tr1", | |
) | |
# """ | |
# demo.queue().launch(share=False, inbrowser=True) | |
# demo.queue().launch(share=True, inbrowser=True, debug=True) | |
# concurrency_count > 1 requires more memory, max_size: queue size | |
# T4 medium: 30GB, model size: ~4G concurrency_count = 6 | |
# leave one for api access | |
# reduce to 5 if OOM occurs to often | |
#demo.queue(concurrency_count=6, max_size=30).launch(debug=True) | |
demo.queue(concurrency_count=6, max_size=30).launch(debug=True, auth=eval(os.environ.get("AUTHENTICATION"))) |