from omegaconf import OmegaConf from query import VectaraQuery import os import gradio as gr def isTrue(x) -> bool: if isinstance(x, bool): return x return x.strip().lower() == 'true' corpus_keys = str(os.environ['corpus_keys']).split(',') cfg = OmegaConf.create({ 'corpus_keys': corpus_keys, 'api_key': str(os.environ['api_key']), 'title': os.environ['title'], 'source_data_desc': os.environ['source_data_desc'], 'streaming': isTrue(os.environ.get('streaming', False)), 'prompt_name': os.environ.get('prompt_name', None), 'examples': os.environ.get('examples', None) }) vq = VectaraQuery(cfg.api_key, cfg.corpus_keys, cfg.prompt_name) def respond(message, history): if cfg.streaming: # Call stream response and stream output stream = vq.submit_query_streaming(message) for output in stream: yield output else: # Call non-stream response and return message output response = vq.submit_query(message) yield response def vote(data: gr.LikeData): if data.liked: print("Received Thumbs up") else: print("Received Thumbs down") heading_html = f'''

Vectara AI Assistant: {cfg.title}

This demo uses Retrieval Augmented Generation from Vectara to ask questions about {cfg.source_data_desc}.
''' bot_css = """ table { border: none; width: 100%; table-layout: fixed; border-collapse: separate;} td { vertical-align: middle; border: none;} img { width: 75%;} h1 { font-size: 2em; /* Adjust the size as needed */} """ if cfg.examples: app_examples = [example.strip() for example in cfg.examples.split(",")] else: app_examples = None with gr.Blocks(css=bot_css) as demo: gr.HTML(heading_html) chatbot = gr.Chatbot(value=[[None, "How may I help you?"]]) msg = gr.Textbox(label="Message") clear = gr.Button("Clear") def user(message, history): return "", history + [[message, None]] def bot(history): message = history[-1][0] bot_message = respond(message, history) if cfg.streaming: full_response = "" for chunk in bot_message: full_response += chunk history[-1][1] = full_response yield history else: history[-1][1] = next(bot_message) yield history msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then( bot, chatbot, chatbot, api_name="bot_response" ) chatbot.like(vote, None, None) clear.click(lambda: None, None, chatbot, queue=False) if app_examples: gr.Examples( app_examples, inputs=msg, outputs=chatbot, fn=user, cache_examples=False ) if __name__ == "__main__": demo.launch() # from omegaconf import OmegaConf # from query import VectaraQuery # import os # import gradio as gr # def isTrue(x) -> bool: # if isinstance(x, bool): # return x # return x.strip().lower() == 'true' # corpus_keys = str(os.environ['corpus_keys']).split(',') # cfg = OmegaConf.create({ # 'corpus_keys': corpus_keys, # 'api_key': str(os.environ['api_key']), # 'title': os.environ['title'], # 'source_data_desc': os.environ['source_data_desc'], # 'streaming': isTrue(os.environ.get('streaming', False)), # 'prompt_name': os.environ.get('prompt_name', None), # 'examples': os.environ.get('examples', None) # }) # vq = VectaraQuery(cfg.api_key, cfg.corpus_keys, cfg.prompt_name) # def respond(message, history): # if cfg.streaming: # # Call stream response and stream output # stream = vq.submit_query_streaming(message) # outputs = "" # for output in stream: # outputs += output # yield outputs # else: # # Call non-stream response and return message output # response = vq.submit_query(message) # yield response # heading_html = f''' # # # # # # # # #

Vectara AI Assistant: {cfg.title}

This demo uses Retrieval Augmented Generation from Vectara to ask questions about {cfg.source_data_desc}.
# ''' # bot_css = """ # table { # border: none; # width: 100%; # table-layout: fixed; # border-collapse: separate; # } # td { # vertical-align: middle; # border: none; # } # img { # width: 75%; # } # h1 { # font-size: 2em; /* Adjust the size as needed */ # } # """ # if cfg.examples: # app_examples = [example.strip() for example in cfg.examples.split(",")] # else: # app_examples = None # demo = gr.ChatInterface(respond, description = heading_html, css = bot_css, # chatbot = gr.Chatbot(value = [[None, "How may I help you?"]]), examples = app_examples, cache_examples = False) # if __name__ == "__main__": # demo.launch()