Spaces:
Sleeping
Sleeping
| import operator | |
| from typing_extensions import Optional, Annotated, List, Sequence, Literal, Union | |
| from langchain_core.messages import BaseMessage | |
| from langgraph.graph import MessagesState | |
| from langgraph.graph.message import add_messages | |
| from pydantic import BaseModel, Field, field_validator | |
| class SparrowInputState(MessagesState): | |
| """Input state for the full agent - only contains from the user input.""" | |
| pass | |
| class SparrowAgentState(MessagesState): | |
| """ | |
| Main state for the full multi-agent Sparrow customer service system. | |
| Extends MessagesState with additional fields for Sparrow customer service coordination. | |
| Note: Some fields are duplicated across different state classes for proper | |
| state management between subgraphs and main workflow. | |
| """ | |
| query_brief: Optional[str] | |
| master_messages: Annotated[Sequence[BaseMessage], add_messages] | |
| notes: Annotated[list[str], operator.add] = [] | |
| final_message: str | |
| clarification_complete: Optional[bool] | |
| needs_clarification: Optional[bool] | |
| query_brief_complete: Optional[bool] | |
| execution_jobs: Optional[List[str]] | |
| error: Optional[str] | |
| class ClarifyWithUser(BaseModel): | |
| """Schema for user clarification decision and questions""" | |
| need_clarification: Union[Literal["yes", "no"], bool] = Field( | |
| description="Whether the user needs to be asked a clarifying question. Can be 'yes'/'no' or true/false" | |
| ) | |
| question: str = Field( | |
| description="A question to ask the user to clarify the need", | |
| default="" | |
| ) | |
| verification: str = Field( | |
| description="Verify message that we will start research after the user has provided the necessary information", | |
| default="" | |
| ) | |
| def convert_bool_to_string(cls, v): | |
| """Convert boolean values to yes/no strings""" | |
| if isinstance(v, bool): | |
| return "yes" if v else "no" | |
| if isinstance(v, str): | |
| v_lower = v.lower() | |
| if v_lower in ['true', '1', 'yes']: | |
| return "yes" | |
| elif v_lower in ['false', '0', 'no']: | |
| return "no" | |
| return v | |
| class CustomerQuestion(BaseModel): | |
| """Schema for structured customer query brief """ | |
| query_brief: str = Field( | |
| description="A customer question that will be used to guide the research." | |
| ) |