Spaces:
Sleeping
Sleeping
from langchain_openai import ChatOpenAI | |
from langchain_core.messages import HumanMessage | |
from langchain_core.prompts import ChatPromptTemplate | |
from langchain_core.output_parsers import StrOutputParser | |
from langgraph.graph import StateGraph | |
from typing_extensions import Annotated, TypedDict | |
from langgraph.graph import add_messages, END | |
from langgraph.checkpoint.memory import MemorySaver | |
from dotenv import load_dotenv | |
load_dotenv() | |
llm = ChatOpenAI(model="gpt-4o", temperature=0) | |
memory = MemorySaver() | |
class State(TypedDict): | |
previous_questions: Annotated[list, add_messages] | |
context:str | |
prompt = ChatPromptTemplate.from_template( | |
""" | |
You are an expert at ingesting documents and creating questions for a medical questionnaire to be answered by patients with a high school level education. Given the following context that should contain medical questions, and from only this context extract all medical questions separated by '|' that would be appropriate for a patient to answer. Indicate if the question is a multiple choice and the include the possible choices. If there are no medical questions in the context, output 'None'. | |
Context: | |
{context} | |
""" | |
) | |
def create_questions(state): | |
results = (prompt | llm | StrOutputParser()).invoke(state) | |
questions = results.split("|") | |
questions = [q for q in questions if q and q != 'None'] | |
return {"previous_questions":questions, "context":state.get("context","") or ''} | |
graph = StateGraph(State) | |
graph.add_node("create_questions", create_questions) | |
graph.set_entry_point("create_questions") | |
graph.add_edge("create_questions", END) | |
workflow = graph.compile(checkpointer=memory) | |