Spaces:
Sleeping
Sleeping
from langchain_anthropic import ChatAnthropic | |
from langchain_openai.chat_models import ChatOpenAI | |
from langchain_community.tools.tavily_search import TavilySearchResults | |
from langchain_core.prompts import ChatPromptTemplate | |
from langchain_core.pydantic_v1 import BaseModel, Field | |
from langchain_core.runnables import Runnable, RunnableConfig | |
from langgraph.checkpoint.sqlite import SqliteSaver | |
from erp_core.state_definer import State | |
import time | |
from datetime import datetime | |
import getpass | |
class Assistant: | |
""" | |
Assistant class to handle the conversation with the user. | |
""" | |
def __init__(self, runnable: Runnable): | |
self.runnable = runnable | |
def __call__(self, state: State, config: RunnableConfig): | |
while True: | |
result = self.runnable.invoke(state) | |
if not result.tool_calls and ( | |
not result.content | |
or isinstance(result.content, list) | |
and not result.content[0].get("text") | |
): | |
messages = state["messages"] + [("user", "Respond with a real output.")] | |
state = {**state, "messages": messages} | |
messages = state["messages"] + [("user", "Respond with a real output.")] | |
state = {**state, "messages": messages} | |
else: | |
break | |
return {"messages": result} | |
class CompleteOrEscalate(BaseModel): | |
"""A tool to mark the current task as completed and/or to escalate control of the dialog to the main assistant, | |
who can re-route the dialog based on the user's needs.""" | |
cancel: bool = True | |
reason: str | |
class Config: | |
schema_extra = { | |
"example": { | |
"cancel": True, | |
"reason": "User changed their mind about the current task.", | |
}, | |
"example 2": { | |
"cancel": True, | |
"reason": "I have fully completed the task.", | |
}, | |
"example 3": { | |
"cancel": False, | |
"reason": "I need to search the user's emails or calendar for more information.", | |
}, | |
} |