| from __future__ import annotations |
|
|
| from dataclasses import dataclass, field |
| from typing import TypedDict |
|
|
| from langgraph.graph import add_messages |
| from typing_extensions import Annotated |
|
|
|
|
| import operator |
| from dataclasses import dataclass, field |
| from typing_extensions import Annotated |
|
|
|
|
| class OverallState(TypedDict): |
| messages: Annotated[list, add_messages] |
| search_query: Annotated[list, operator.add] |
| web_research_result: Annotated[list, operator.add] |
| sources_gathered: Annotated[list, operator.add] |
| initial_search_query_count: int |
| max_research_loops: int |
| research_loop_count: int |
| reasoning_model: str |
|
|
|
|
| class ReflectionState(TypedDict): |
| is_sufficient: bool |
| knowledge_gap: str |
| follow_up_queries: Annotated[list, operator.add] |
| research_loop_count: int |
| number_of_ran_queries: int |
|
|
|
|
| class Query(TypedDict): |
| query: str |
| rationale: str |
|
|
|
|
| class QueryGenerationState(TypedDict): |
| query_list: list[Query] |
|
|
|
|
| class WebSearchState(TypedDict): |
| search_query: str |
| id: str |
|
|
|
|
| @dataclass(kw_only=True) |
| class SearchStateOutput: |
| running_summary: str = field(default=None) |
|
|