Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from langchain_openai.embeddings import OpenAIEmbeddings | |
| from langchain.agents import load_tools | |
| import time | |
| from time import sleep | |
| from css import * | |
| import replicate | |
| from pre import * | |
| from search import * | |
| from post import * | |
| os.environ["REPLICATE_API_TOKEN"] = "r8_IYJpjwjrxegcUfBeBbyUxErJXXsnHDM4AlSQQ" | |
| os.environ["OPENAI_API_KEY"] = "sb-6a683cb3bd63a9b72040aa2dd08feff8b68f08a0e1d959f5" | |
| os.environ['OPENAI_BASE_URL'] = "https://api.openai-sb.com/v1/" | |
| os.environ["SERPAPI_API_KEY"] = "dcc98b22d5f7d413979a175ff7d75b721c5992a3ee1e2363020b2bbdf4f82404" | |
| embedding_model = OpenAIEmbeddings() | |
| tools_google = load_tools(["serpapi"]) | |
| llm=ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0.6) | |
| flag="None" | |
| selected_model = None | |
| def process_option(option): | |
| global selected_model, llm, flag # 使用全局变量 | |
| llm= ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0.6) | |
| if option in ["gpt-3.5-turbo-0125", "gpt-4o", "gpt-4o-mini","None"]: | |
| selected_model = option | |
| llm = ChatOpenAI(model=selected_model, temperature=0.6) | |
| elif option=="llama-3-70b": | |
| flag="llama-3-70b" | |
| elif option == "llama-3-8b": | |
| flag = "llama-3-8b" | |
| elif option=="mistral": | |
| flag = "mistral" | |
| return selected_model | |
| options = ["gpt-3.5-turbo-0125", "gpt-4o", "gpt-4o-mini", "llama-3-70b","llama-3-8b","mistral","None"] | |
| selected_search = None | |
| def search_option(option): | |
| global selected_search | |
| if option in ["bing_news","baidu_news","google_news"]: | |
| selected_search=option | |
| search_options=["bing_news","baidu_news","google_news"] | |
| def update_ans_box_label(selected_model): | |
| return gr.update(label=selected_model) | |
| origin_prompt = ChatPromptTemplate.from_template(template) | |
| def detect_fake_news(news,context,progress=gr.Progress()): | |
| progress(0, desc="初始化") | |
| sleep(1) # Simulate some processing time | |
| chain = origin_prompt | llm | StrOutputParser() | |
| ori_result=chain.invoke(news) | |
| progress(0.25, desc="分割子句") | |
| sleep(1) | |
| cap_result=capture_sub_queries(news) | |
| progress(0.50, desc="提取相关信息") | |
| sleep(1) | |
| information=context+baidu(cap_result) | |
| result = detect_chain.invoke({"news": news, "text": information}) | |
| result = extract_clauses_with_counts(result) | |
| if (result.count.get("不确定的子句个数")): | |
| if selected_search == "bing_news": | |
| search_text=search_bing(news) | |
| elif selected_search=="baidu_news": | |
| search_text=search_baidu(news) | |
| elif selected_search=="google_news": | |
| search_text=search_google(news) | |
| information = search_text + information | |
| progress(0.75, desc="Running main chain...") | |
| sleep(1) | |
| if flag=="None": | |
| rag_chain = rag_prompt | llm | StrOutputParser() | |
| rag_result = rag_chain.invoke({"news": news,"information":information}) | |
| else: | |
| input = { | |
| "top_p": 0.9, | |
| "prompt": rag_prompt.format( | |
| news=news, | |
| information=information | |
| ), | |
| "min_tokens": 0, | |
| "temperature": 0.6, | |
| "prompt_template": "system\n\nYou are a helpful assistantuser\n\n{prompt}assistant\n\n", | |
| "presence_penalty": 1.15 | |
| } | |
| if flag == "llama-3-70b": | |
| output = replicate.run("meta/meta-llama-3-70b-instruct", input=input) | |
| elif flag == "llama-3-8b": | |
| output = replicate.run("meta/meta-llama-3-8b-instruct", input=input) | |
| elif flag == "mistral": | |
| output = replicate.run("mistralai/mixtral-8x7b-instruct-v0.1", input=input) | |
| rag_result = "".join(output) | |
| progress(1, desc="完成") | |
| rag_result=json.loads(rag_result) | |
| rag_result="这是"+rag_result['label']+","+rag_result['explanation'] | |
| return cap_result,information, ori_result, rag_result | |
| def toggle_visibility(is_visible): | |
| # 切换文本框的可见性 | |
| new_visibility = not is_visible | |
| return gr.update(visible=new_visibility),gr.update(visible=new_visibility), new_visibility | |
| current_css = css1 | |
| def toggle_style(): | |
| global current_css | |
| # 切换CSS样式 | |
| if current_css == css1: | |
| current_css = css2 | |
| else: | |
| current_css = css1 | |
| # 返回更新后的HTML内容 | |
| return f'<style id="dynamic-css">{current_css}</style>' | |
| with gr.Blocks(css=current_css) as iface: | |
| gr.Markdown("<h1 style='font-size: 36px; text-align: center; color: #333333; margin-bottom: 20px;'>虚假信息检测</h1>") | |
| is_visible = gr.State(False) | |
| html_output = gr.HTML(f'<style id="dynamic-css">{current_css}</style>') | |
| with gr.Row(): | |
| with gr.Column(scale=2): | |
| chatbot=gr.Chatbot(elem_classes="gradio-output") | |
| context_box = gr.Textbox(label="上下文", elem_classes="gradio-input",placeholder="请输入与该新闻有关的上下文", lines=2) | |
| input_box = gr.Textbox(label="新闻", elem_classes="gradio-input",placeholder="请输入新闻", lines=3) | |
| with gr.Column(scale=1): | |
| option_select = gr.Dropdown(choices=options, label="选择模型",elem_classes="gradio-output") | |
| output = gr.Textbox(label="选择模型",visible=False) | |
| search_select=gr.Dropdown(choices=search_options,label="选择搜索api",elem_classes="gradio-output") | |
| ans_box = gr.Textbox(label="gpt-3.5-turbo-0125",lines=5,elem_classes="gradio-output") | |
| rag_box = gr.Textbox(label="有RAG增强",visible=False) | |
| # trans_box=gr.Textbox(label="transform",visible=False) | |
| capture_box=gr.Textbox(label="子句划分结果",visible=False,lines=3) | |
| information_box=gr.Textbox(label="提取到的信息",visible=False,lines=3) | |
| css_btn = gr.Button("白天(夜晚)模式切换", elem_classes="gradio-button") | |
| toggle_btn = gr.Button("显示(隐藏)文本框",elem_classes="gradio-button") | |
| clear = gr.Button("清空页面",elem_classes="gradio-button") | |
| submit_btn = gr.Button("提交",elem_classes="gradio-button") | |
| option_select.change(process_option, option_select, output).then( | |
| update_ans_box_label, inputs=output, outputs=ans_box | |
| ) | |
| search_select.change(search_option,search_select) | |
| toggle_btn.click(toggle_visibility, [is_visible], [capture_box,information_box, is_visible]) | |
| css_btn.click(toggle_style, inputs=None, outputs=html_output) | |
| def user(user_input, user_context, history): | |
| if history is None: | |
| history = [] | |
| return "", "", history + [[user_input, None]] | |
| def bot(history,rag_box): | |
| if history is None or len(history) == 0: | |
| return | |
| bot_rag = str(rag_box) | |
| history[-1][1] = "" | |
| for character in bot_rag: | |
| history[-1][1] += character | |
| time.sleep(0.01) | |
| yield history | |
| submit_btn.click(detect_fake_news,[input_box,context_box],[capture_box,information_box,ans_box,rag_box]).then( | |
| user,[input_box,context_box,chatbot],[input_box,context_box,chatbot] | |
| ).then( | |
| bot,[chatbot,rag_box],chatbot | |
| ) | |
| clear.click(lambda: (None, None, []), inputs=None, outputs=[chatbot, ans_box, rag_box], queue=False) | |
| if __name__ == "__main__": | |
| iface.queue() | |
| app, local_url, share_url = iface.launch() | |
| # print(app, local_url, share_url) |