Spaces:
Sleeping
Sleeping
import os | |
import re | |
from dotenv import load_dotenv | |
load_dotenv() | |
import gradio as gr | |
from langchain.agents.openai_assistant import OpenAIAssistantRunnable | |
from langchain.schema import HumanMessage, AIMessage | |
api_key = os.getenv('OPENAI_API_KEY') | |
extractor_agent = os.getenv('ASSISTANT_ID_SOLUTION_SPECIFIER_B') | |
# Create the assistant. By default, we don't specify a thread_id, | |
# so the first call that doesn't pass one will create a new thread. | |
extractor_llm = OpenAIAssistantRunnable( | |
assistant_id=extractor_agent, | |
api_key=api_key, | |
as_agent=True | |
) | |
# We will store thread_id globally or in a session variable. | |
THREAD_ID = None | |
def remove_citation(text): | |
pattern = r"【\d+†\w+】" | |
return re.sub(pattern, "📚", text) | |
def predict(message, history): | |
""" | |
Receives the new user message plus the entire conversation history | |
from Gradio. If no thread_id is set, we create a new thread. | |
Otherwise we pass the existing thread_id. | |
""" | |
global THREAD_ID | |
# debug print | |
print("current history:", history) | |
# If history is empty, this means that it is probably a new conversation and therefore the thread shall be reset | |
if not history: | |
THREAD_ID = None | |
# 1) Decide if we are creating a new thread or continuing the old one | |
if THREAD_ID is None: | |
# No thread_id yet -> this is the first user message | |
response = extractor_llm.invoke({"content": message}) | |
THREAD_ID = response.thread_id # store for subsequent calls | |
else: | |
# We already have a thread_id -> continue that same thread | |
response = extractor_llm.invoke({"content": message, "thread_id": THREAD_ID}) | |
# 2) Extract the text output from the response | |
output = response.return_values["output"] | |
non_cited_output = remove_citation(output) | |
# 3) Return the model's text to display in Gradio | |
return non_cited_output | |
# Create a Gradio ChatInterface using our predict function | |
chat = gr.ChatInterface( | |
fn=predict, | |
title="Solution Specifier B", | |
#description="Testing threaded conversation" | |
) | |
chat.launch(share=True) |