Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from | |
| from dotenv import load_dotenv | |
| import os | |
| load_dotenv() | |
| import openai | |
| from gptcall import generate | |
| # Set your OpenAI API key | |
| api_key = os.environ.get('OPEN_AI_KEY') # Replace with your actual API key | |
| openai.api_key = api_key | |
| hf = os.environ.get("HF_TOKEN") | |
| server_error_msg = "**NETWORK ERROR DUE TO HIGH TRAFFIC. PLEASE REGENERATE OR REFRESH THIS PAGE.**" | |
| def clear_history(request: gr.Request): | |
| state = None | |
| return ([], state, "") | |
| def post_process_code(code): | |
| sep = "\n```" | |
| if sep in code: | |
| blocks = code.split(sep) | |
| if len(blocks) % 2 == 1: | |
| for i in range(1, len(blocks), 2): | |
| blocks[i] = blocks[i].replace("\\_", "_") | |
| code = sep.join(blocks) | |
| return code | |
| def post_process_answer(answer): | |
| answer += f"<br><br>" | |
| answer = answer.replace("\n", "<br>") | |
| return answer | |
| def predict( | |
| question: str, | |
| system_content: str, | |
| use_api: bool, | |
| chatbot: list = [], | |
| history: list = [], | |
| ): | |
| try: | |
| if use_api: # Check if API call is requested | |
| history.append(question) | |
| answer = generate(question) | |
| history.append(answer) | |
| else: | |
| pass | |
| # Ensure history has an even number of elements | |
| if len(history) % 2 != 0: | |
| history.append("") | |
| chatbot = [(history[i], history[i + 1]) for i in range(0, len(history), 2)] | |
| return chatbot, history | |
| except Exception as e: | |
| history.append("") | |
| answer = server_error_msg + f" (error_code: 503)" | |
| history.append(answer) | |
| # Ensure history has an even number of elements | |
| if len(history) % 2 != 0: | |
| history.append("") | |
| chatbot = [(history[i], history[i + 1]) for i in range(0, len(history), 2)] | |
| return chatbot, history | |
| def reset_textbox(): return gr.update(value="") | |
| def main(): | |
| title = """ | |
| <h1 align="center">Chat with TxGpt π€</h1>""" | |
| css = """ | |
| @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap'); | |
| /* Hide the footer */ | |
| footer .svelte-1lyswbr { | |
| display: none !important; | |
| } | |
| /* Center the column container */ | |
| #prompt_container { | |
| margin-left: auto; | |
| margin-right: auto; | |
| background: linear-gradient(to right, #48c6ef, #6f86d6); /* Gradient background */ | |
| padding: 20px; /* Decreased padding */ | |
| border-radius: 10px; | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); | |
| color: black; | |
| font-family: 'Poppins', sans-serif; /* Poppins font */ | |
| font-weight: 600; /* Bold font */ | |
| resize: none; | |
| font-size: 18px; | |
| } | |
| /* Chatbot container styling */ | |
| #chatbot_container { | |
| margin: 0 auto; /* Remove left and right margins */ | |
| max-width: 80%; /* Adjust the maximum width as needed */ | |
| background: linear-gradient(to right, #ff7e5f, #feb47b); /* Gradient background */ | |
| padding: 20px; | |
| border-radius: 10px; | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); | |
| } | |
| /* Chatbot message area styling */ | |
| #chatbot .wrap.svelte-13f7djk { | |
| height: 60vh; /* Adjusted height */ | |
| max-height: 60vh; /* Adjusted height */ | |
| border: 2px solid #007bff; | |
| border-radius: 10px; | |
| overflow-y: auto; | |
| padding: 20px; | |
| background-color: #e9f5ff; | |
| } | |
| /* User message styling */ | |
| #chatbot .message.user.svelte-13f7djk.svelte-13f7djk { | |
| width: fit-content; | |
| background: #007bff; | |
| color: white; | |
| border-bottom-right-radius: 0; | |
| border-top-left-radius: 10px; | |
| border-top-right-radius: 10px; | |
| border-bottom-left-radius: 10px; | |
| margin-bottom: 10px; | |
| padding: 10px 15px; | |
| font-size: 14px; | |
| font-family: 'Poppins', sans-serif; /* Poppins font */ | |
| font-weight: 700; /* Bold font */ | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); | |
| } | |
| /* Bot message styling */ | |
| #chatbot .message.bot.svelte-13f7djk.svelte-13f7djk { | |
| width: fit-content; | |
| background: #e1e1e1; | |
| color: black; | |
| border-bottom-left-radius: 0; | |
| border-top-right-radius: 10px; | |
| border-top-left-radius: 10px; | |
| border-bottom-right-radius: 10px; | |
| margin-bottom: 10px; | |
| padding: 10px 15px; | |
| font-size: 14px; | |
| font-family: 'Poppins', sans-serif; /* Poppins font */ | |
| font-weight: 700; /* Bold font */ | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); | |
| } | |
| /* Preformatted text styling */ | |
| #chatbot .pre { | |
| border: 2px solid #f1f1f1; | |
| padding: 10px; | |
| border-radius: 5px; | |
| background-color: #ffffff; | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05); | |
| font-family: 'Poppins', sans-serif; /* Poppins font */ | |
| font-size: 14px; | |
| font-weight: 400; /* Regular font */ | |
| } | |
| /* General preformatted text styling */ | |
| pre { | |
| white-space: pre-wrap; /* Since CSS 2.1 */ | |
| white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ | |
| white-space: -pre-wrap; /* Opera 4-6 */ | |
| white-space: -o-pre-wrap; /* Opera 7 */ | |
| word-wrap: break-word; /* Internet Explorer 5.5+ */ | |
| font-family: 'Poppins', sans-serif; /* Poppins font */ | |
| font-size: 14px; | |
| font-weight: 400; /* Regular font */ | |
| line-height: 1.5; | |
| color: #333; | |
| background-color: #f8f9fa; | |
| padding: 10px; | |
| border-radius: 5px; | |
| } | |
| /* Styling for accordion sections */ | |
| .accordion.svelte-1lyswbr { | |
| background-color: #e9f5ff; /* Light blue background for accordions */ | |
| border: 1px solid #007bff; | |
| border-radius: 10px; | |
| padding: 10px; | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); | |
| resize: both; | |
| } | |
| /* Prompt styling */ | |
| #prompt_title { | |
| font-size: 24px; | |
| margin-bottom: 10px; | |
| resize= none; | |
| } | |
| /* Styling for Copy button */ | |
| .copy_button { | |
| display: inline-block; | |
| padding: 5px 10px; | |
| margin: 5px 0; | |
| font-size: 14px; | |
| cursor: pointer; | |
| color: #007bff; | |
| border: 1px solid #007bff; | |
| border-radius: 5px; | |
| background-color: #ffffff; | |
| transition: background-color 0.3s; | |
| } | |
| .copy_button:hover { | |
| background-color: #007bff; | |
| color: #ffffff; | |
| } | |
| """ | |
| with gr.Blocks(css=css) as demo: | |
| gr.HTML(title) | |
| with gr.Row(): | |
| with gr.Column(elem_id="prompt_container", scale=0.3): # Separate column for prompt | |
| with gr.Accordion("Description", open=True): | |
| system_content = gr.Textbox(value="TxGpt talk to your local documents without internet. If you need information on public data, please enable the ChatGpt checkbox and start querying!",show_label=False,lines=5) | |
| with gr.Column(elem_id="chatbot_container", scale=0.7): # Right column for chatbot interface | |
| chatbot = gr.Chatbot(elem_id="chatbot", label="TxGpt") | |
| question = gr.Textbox(placeholder="Ask something", show_label=False, value="") | |
| state = gr.State([]) | |
| use_api_toggle = gr.Checkbox(label="Enable ChatGpt", key="use_api") | |
| with gr.Row(): | |
| with gr.Column(): | |
| submit_btn = gr.Button(value="π Send") | |
| with gr.Column(): | |
| clear_btn = gr.Button(value="ποΈ Clear history") | |
| question.submit( | |
| predict, | |
| [question, system_content, use_api_toggle, chatbot, state], | |
| [chatbot, state], | |
| concurrency_limit=10 | |
| ) | |
| submit_btn.click( | |
| predict, | |
| [question, system_content, chatbot, state], | |
| [chatbot, state], | |
| concurrency_limit=10 | |
| ) | |
| submit_btn.click(reset_textbox, [], [question], concurrency_limit=10) | |
| clear_btn.click(clear_history, None, [chatbot, state, question], concurrency_limit=10) | |
| question.submit(reset_textbox, [], [question], concurrency_limit=10) | |
| #demo.launch(server_name=args.server_name, server_port=args.server_port, share=args.share, debug=args.debug) | |
| demo.launch(share=True, server_name='0.0.0.0') | |
| if __name__ == '__main__': | |
| """ import argparse | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument("--server-name", default="0.0.0.0") | |
| parser.add_argument("--server-port", default=8071) | |
| parser.add_argument("--share", action="store_true") | |
| parser.add_argument("--debug", action="store_true") | |
| parser.add_argument("--verbose", action="store_true") | |
| args = parser.parse_args() """ | |
| main() | |