Spaces:
Sleeping
Sleeping
import os | |
import warnings | |
import gradio as gr | |
from dotenv import load_dotenv | |
from langchain_community.vectorstores import FAISS | |
from langchain_community.embeddings import AzureOpenAIEmbeddings | |
from langchain.embeddings.openai import OpenAIEmbeddings | |
from openai import AzureOpenAI | |
# Patch Gradio bug (schema parsing issue) | |
import gradio_client.utils | |
gradio_client.utils.json_schema_to_python_type = lambda schema, defs=None: "string" | |
# Load environment variables | |
load_dotenv() | |
AZURE_OPENAI_API_KEY = os.getenv("AZURE_OPENAI_API_KEY") | |
AZURE_OPENAI_ENDPOINT = os.getenv("AZURE_OPENAI_ENDPOINT") | |
AZURE_OPENAI_LLM_DEPLOYMENT = os.getenv("AZURE_OPENAI_LLM_DEPLOYMENT") | |
embeddings = OpenAIEmbeddings() | |
if not all([AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_LLM_DEPLOYMENT, OPENAI_EMBEDDING]): | |
raise ValueError("Azure OpenAI environment variables are missing.") | |
# Suppress warnings | |
warnings.filterwarnings("ignore") | |
# Initialize embedding model | |
# embeddings = AzureOpenAIEmbeddings( | |
# azure_deployment=OPENAI_EMBEDDING, | |
# azure_endpoint=AZURE_OPENAI_ENDPOINT, | |
# openai_api_key=AZURE_OPENAI_API_KEY, | |
# openai_api_version="2024-08-01-preview", | |
# chunk_size=1000 | |
# ) | |
# Load FAISS vector store | |
vectorstore = FAISS.load_local( | |
"faiss_index_sysml", embeddings, allow_dangerous_deserialization=True | |
) | |
# Initialize Azure OpenAI client directly | |
client = AzureOpenAI( | |
api_key=AZURE_OPENAI_API_KEY, | |
azure_endpoint=AZURE_OPENAI_ENDPOINT, | |
api_version="2024-08-01-preview" | |
) | |
history = [] | |
# Chatbot logic using AzureOpenAI directly | |
def sysml_chatbot(message, history): | |
# Perform retrieval | |
retriever = vectorstore.as_retriever() | |
docs = retriever.get_relevant_documents(message) | |
context = "\n\n".join(doc.page_content for doc in docs[:4]) | |
# Compose prompt with retrieved context | |
system_prompt = "You are a helpful assistant knowledgeable in SysML. Use the context below to answer the user's question.\n\nContext:\n" + context | |
response = client.chat.completions.create( | |
model=AZURE_OPENAI_LLM_DEPLOYMENT, | |
messages=[ | |
{"role": "system", "content": system_prompt}, | |
{"role": "user", "content": message} | |
] | |
) | |
answer = response.choices[0].message.content | |
history.append((message, answer)) | |
return "", history | |
# Gradio UI | |
with gr.Blocks() as demo: | |
gr.Markdown("## SysML Chatbot") | |
chatbot = gr.Chatbot() | |
msg = gr.Textbox(placeholder="Ask me about SysML diagrams or concepts...") | |
clear = gr.Button("Clear") | |
state = gr.State(history) | |
msg.submit(sysml_chatbot, [msg, state], [msg, chatbot]) | |
clear.click(lambda: ([], ""), None, [chatbot, msg]) | |
if __name__ == "__main__": | |
demo.launch() | |