import gradio as gr from langchain.tools import Tool from langchain.utilities import GoogleSearchAPIWrapper from rank_bm25 import BM25Okapi import sys import nltk nltk.download('punkt') from langchain.chat_models import AzureChatOpenAI from langchain.schema import HumanMessage, SystemMessage from langchain.callbacks import get_openai_callback import openai import time import pandas as pd import random import os import csv from langchain.tools import Tool from langchain.utilities import GoogleSearchAPIWrapper from langchain.embeddings import OpenAIEmbeddings from langchain.text_splitter import CharacterTextSplitter from langchain.vectorstores import Chroma from langchain.document_loaders import TextLoader from langchain.llms import OpenAI from langchain.chains import RetrievalQA from langchain.chains.question_answering import load_qa_chain from langchain.llms import OpenAI import os from langchain.chains import RetrievalQA from langchain.llms import OpenAI from langchain.document_loaders import TextLoader from langchain.document_loaders import PyPDFLoader from langchain.indexes import VectorstoreIndexCreator from langchain.text_splitter import CharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma import tempfile from langchain.embeddings.openai import OpenAIEmbeddings from langchain.text_splitter import CharacterTextSplitter from langchain.vectorstores import ElasticVectorSearch, Pinecone, Weaviate, FAISS import os from langchain.chains.question_answering import load_qa_chain from langchain.llms import OpenAI import os import time # Import Azure OpenAI from langchain.chat_models import AzureChatOpenAI from langchain.schema import HumanMessage from langchain.callbacks import get_openai_callback import os import openai # Import Azure OpenAI from langchain.chat_models import AzureChatOpenAI from langchain.schema import HumanMessage from langchain.callbacks import get_openai_callback import sys from langchain.chat_models import AzureChatOpenAI from langchain.schema import HumanMessage, SystemMessage from langchain.callbacks import get_openai_callback import openai import pandas as pd import random import os import csv import numpy as np import pickle from rank_bm25 import BM25Okapi from openai import OpenAI from nltk.tokenize import word_tokenize loaded_texts = np.load('texts.npy', allow_pickle=True) loaded_texts= [str(text) if not isinstance(text, str) else text for text in loaded_texts] with open('bm25_model.pkl', 'rb') as file: bm25 = pickle.load(file) # france credentials BASE_URL = "https://cnerg-gpt-france.openai.azure.com/" DEPLOYMENT_NAME = "GPT-4-France" API_KEY = os.environ['API_KEY'] model = AzureChatOpenAI( openai_api_base=BASE_URL, openai_api_version="2023-05-15", deployment_name=DEPLOYMENT_NAME, openai_api_key=API_KEY, openai_api_type="azure", ) search = GoogleSearchAPIWrapper() import os def top10_results(query): return search.results(query, 10) tool = Tool( name="Google Search", description="Search Google for recent results.", func=top10_results, ) def search_results(input_text): raw_text_list = tool.run(input_text) return raw_text_list def Bm25(raw_text_list,input_text,n) : corpus = [item['snippet'] for item in raw_text_list] tokenized_corpus = [doc.split(" ") for doc in corpus] bm25 = BM25Okapi(tokenized_corpus) query = input_text tokenized_query = query.split(" ") doc_scores = bm25.get_scores(tokenized_query) top_5_results = bm25.get_top_n(tokenized_query, corpus, n=n) results = '\n'.join(top_5_results) combined_input = "query = " + input_text + "\n\n For the above query these are some results from a search engine: \n ".join(results) + "\n\n Give detailed and brief answer for the query write in 500-1000 words. Give detailed and well informative answer(include calculations if needed, using tables and other styles of structuring is optional for better answering ) " return combined_input,results def llm_route(llm): openai_api_key = "EMPTY" openai_api_base = "" if llm=="llama-2-7b": openai_api_base= os.environ['llama7_api'] if llm=="llama-2-13b": openai_api_base= os.environ['llama13_api'] if llm=="Vicuna-13b": openai_api_base= os.environ['vicuna13_api'] client = OpenAI( api_key=openai_api_key, base_url=openai_api_base, ) models = client.models.list() model = models.data[0].id return model,client # Define your functions here def function2(input_text,one_shot_example,llm): if llm=="GPT-4": model = AzureChatOpenAI( openai_api_base=BASE_URL, openai_api_version="2023-05-15", deployment_name=DEPLOYMENT_NAME, openai_api_key=API_KEY, openai_api_type="azure", ) if len(one_shot_example)==0: combined_input = f"please provide comprehensive and well-researched responses to the following question. Ensure that the information is up-to-date and includes relevant scientific insights and data , question : {input_text}" generated_answer = model( [ HumanMessage( content=combined_input ) ] ) return generated_answer.content else: combined_input = f"please provide comprehensive and well-researched responses to the following question. Ensure that the information is up-to-date and includes relevant scientific insights and data ,Below is a example question-answer pair for reference\n\n {one_shot_example} \n\n Now answer this question \n\n question :{input_text}" generated_answer = model( [ HumanMessage( content=combined_input ) ] ) return generated_answer.content else : model,client=llm_route(llm) if len(one_shot_example)==0: combined_input = f"please provide comprehensive and well-researched responses to the following question. Ensure that the information is up-to-date and includes relevant scientific insights and data , question : {input_text}" completion = client.completions.create( model=model, prompt=combined_input, max_tokens=1024, # Adjust the number of tokens as needed n=1, # Number of completions to generate stop=None, # Optional: specify a stop sequence temperature=0.7 # Adjust the creativity of the response ) return completion.choices[0].text.strip() else: combined_input = f"please provide comprehensive and well-researched responses to the following question. Ensure that the information is up-to-date and includes relevant scientific insights and data ,Below is a example question-answer pair for reference\n\n {one_shot_example} \n\n Now answer this question \n\n question :{input_text}" completion = client.completions.create( model=model, prompt=combined_input, max_tokens=1024, # Adjust the number of tokens as needed n=1, # Number of completions to generate stop=None, # Optional: specify a stop sequence temperature=0.7 # Adjust the creativity of the response ) return completion.choices[0].text.strip() def function3(input_text,one_shot_example,n,llm): n=int(n) k=search_results(input_text) k,results=Bm25(k,input_text,n) if llm=="GPT-4": model = AzureChatOpenAI( openai_api_base=BASE_URL, openai_api_version="2023-05-15", deployment_name=DEPLOYMENT_NAME, openai_api_key=API_KEY, openai_api_type="azure", ) if len(one_shot_example)==0: combined_input = k generated_answer = model( [ HumanMessage( content=combined_input ) ] ) return generated_answer.content,results else: combined_input = k+f"\n\n Here is a sample question answer pair for reference :\n\n {one_shot_example} " generated_answer = model( [ HumanMessage( content=combined_input ) ] ) return generated_answer.content,results else: model,client=llm_route(llm) if len(one_shot_example)==0: combined_input = k completion = client.completions.create( model=model, prompt=combined_input, max_tokens=1024, # Adjust the number of tokens as needed n=1, # Number of completions to generate stop=None, # Optional: specify a stop sequence temperature=0.7 # Adjust the creativity of the response ) return completion.choices[0].text.strip(),results else: combined_input = k+f"\n\n Here is a sample question answer pair for reference :\n\n {one_shot_example} " completion = client.completions.create( model=model, prompt=combined_input, max_tokens=1024, # Adjust the number of tokens as needed n=1, # Number of completions to generate stop=None, # Optional: specify a stop sequence temperature=0.7 # Adjust the creativity of the response ) return completion.choices[0].text.strip(),results def function4(input_text, one_shot_example, n,llm): tokenized_query = word_tokenize(input_text.lower()) doc_scores = bm25.get_scores(tokenized_query) sorted_docs = [doc for _, doc in sorted(zip(doc_scores, loaded_texts), reverse=True)] n=int(n) k="" for doc in sorted_docs[:n]: k+=doc results=k if llm=="GPT-4": model = AzureChatOpenAI( openai_api_base=BASE_URL, openai_api_version="2023-05-15", deployment_name=DEPLOYMENT_NAME, openai_api_key=API_KEY, openai_api_type="azure", ) if len(one_shot_example)==0: combined_input = f"please provide comprehensive and well-researched responses to the following question. Ensure that the information is up-to-date and includes relevant scientific insights and data , context:{k} \n\n question : {input_text}" generated_answer = model( [ HumanMessage( content=combined_input ) ] ) return generated_answer.content,results else: combined_input = f"please provide comprehensive and well-researched responses to the following question. Ensure that the information is up-to-date and includes relevant scientific insights and data \n\n context:{k} \n\n,Below is an example question-answer pair for reference\n\n {one_shot_example} \n\n Now answer this question \n\n question :{input_text}" generated_answer = model( [ HumanMessage( content=combined_input ) ] ) return generated_answer.content,results else: model,client=llm_route(llm) if len(one_shot_example)==0: combined_input = f"please provide comprehensive and well-researched responses to the following question. Ensure that the information is up-to-date and includes relevant scientific insights and data , context:{k} \n\n question : {input_text}" completion = client.completions.create( model=model, prompt=combined_input, max_tokens=1024, # Adjust the number of tokens as needed n=1, # Number of completions to generate stop=None, # Optional: specify a stop sequence temperature=0.7 # Adjust the creativity of the response ) return completion.choices[0].text.strip(),results else: completion = client.completions.create( model=model, prompt=combined_input, max_tokens=1024, # Adjust the number of tokens as needed n=1, # Number of completions to generate stop=None, # Optional: specify a stop sequence temperature=0.7 # Adjust the creativity of the response ) return completion.choices[0].text.strip(),results # Define the dropdown options dropdown_options = ["1", "2", "3"] dropdown_options_4 = ["1","2","3","4","5","6","7","8","9","10"] llm_dropdown=["GPT-4","llama-2-7b","llama-2-13b"] # ,"Vicuna-13b" # Create individual interfaces for each function # iface1 = gr.Interface(gpt4, inputs="text", outputs="text") #iface2 = gr.Interface(gpt4, inputs=["text", "text"], outputs="text") iface2 = gr.Interface( function2, inputs=[ gr.Textbox(label="Input Text"), gr.Textbox(label="One Shot Example"), gr.Dropdown(choices=llm_dropdown, label="LLM") ], outputs="text" ) iface3 = gr.Interface( function3, inputs=[ gr.Textbox(label="Input Text"), gr.Textbox(label="One Shot Example"), gr.Dropdown(choices=dropdown_options, label="Number of top search results"), gr.Dropdown(choices=llm_dropdown, label="LLM") ], outputs=[ gr.Textbox(label="LLM Answer"), gr.Textbox(label="Google Search Result") ] ) iface4 = gr.Interface( function4, inputs=[ gr.Textbox(label="Input Text"), gr.Textbox(label="One Shot Example"), gr.Dropdown(choices=dropdown_options_4, label="Number of top k documents"), gr.Dropdown(choices=llm_dropdown, label="LLM") ], outputs=[ gr.Textbox(label="LLM Answer"), gr.Textbox(label="Abstract Search Result") ] ) # Create a parallel interface that combines all individual interfaces iface = gr.TabbedInterface([iface2, iface3, iface4], tab_names=["LLM Inference", "LLM with internet search", "LLM with Abstract Search"]) # Launch the interface if __name__ == "__main__": iface.launch(share=True) #a