"""Test.""" # pylint: disable=invalid-name, unused-import, broad-except, import os from copy import deepcopy from textwrap import dedent import gradio as gr import httpx from loguru import logger from app import (embed_files, ingest, ns, ns_initial, process_files, respond, upload_files) from load_api_key import load_api_key, pk_base, sk_base api_key = load_api_key() if api_key is not None: os.environ.setdefault("OPENAI_API_KEY", api_key) if api_key.startswith("sk-"): os.environ.setdefault("OPENAI_API_BASE", sk_base) elif api_key.startswith("pk-"): os.environ.setdefault("OPENAI_API_BASE", pk_base) # resetip try: url = "https://api.pawan.krd/resetip" headers = {"Authorization": f"{api_key}"} httpx.post(url, headers=headers) except Exception as exc_: logger.error(exc_) raise openai_api_key = os.getenv("OPENAI_API_KEY") openai_api_base = os.getenv("OPENAI_API_BASE") logger.info(f"openai_api_key (env var/hf space SECRETS): {openai_api_key}") logger.info(f"openai_api_base: {openai_api_base}") with gr.Blocks(theme=gr.themes.Soft()) as demo: with gr.Tab("🖹Upload files"): # Tab1 with gr.Accordion("ℹInfo", open=False): _ = """ ### multilingual dokugpt/多语dokugpt 和你的文件对话: 可用中文向外语文件提问或用外语向中文文件提问 Talk to your docs (.pdf, .docx, .epub, .txt .md and other text docs): You can ask questions in a language you prefer, independent of the document language. It takes quite a while to ingest docs (5-30 min. depending on net, RAM, CPU etc.). Send empty query (hit Enter) to check embedding status and files info ([filename, numb of chars]) Homepage: https://huggingface.co/spaces/mikeee/multilingual-dokugpt """ gr.Markdown(dedent(_)) # Upload files and generate vectorstore with gr.Row(): file_output = gr.File() # file_output = gr.Text() # file_output = gr.DataFrame() upload_button = gr.UploadButton( "Click to upload", # file_types=["*.pdf", "*.epub", "*.docx"], file_count="multiple", ) with gr.Row(): text2 = gr.Textbox("Process docs") process_btn = gr.Button("Click to process") with gr.Row(): text_embed = gr.Textbox("Generate embeddings") embed_btn = gr.Button("Click to embed") reset_btn = gr.Button("Reset everything", visible=True) with gr.Tab("🤖Query docs"): # Tab1 # interactive chat chatbot = gr.Chatbot() msg = gr.Textbox(label="Query") with gr.Row(): msg_submitbtn = gr.Button("Submit") clear = gr.Button("Clear") # actions def reset_all(): """Reset ns.""" # global ns globals().update(**{"ns": deepcopy(ns_initial)}) logger.debug(f"reset to {ns=}") return f"reset done: ns={ns}" # Tab1 upload_button.upload(upload_files, upload_button, file_output) process_btn.click(process_files, [], text2) embed_btn.click(embed_files, [], text_embed) reset_btn.click(reset_all, [], text2) # Tab2 msg.submit(respond, [msg, chatbot], [msg, chatbot]) msg_submitbtn.click(respond, [msg, chatbot], [msg, chatbot]) clear.click(lambda: None, None, chatbot, queue=True) if __name__ == "__main__": demo.queue(concurrency_count=20).launch()