# dikshanta1/ai-news-agent architecture

> Architecture diagram of the GitHub repository dikshanta1/ai-news-agent, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dikshanta1/ai-news-agent
- Repository: https://github.com/dikshanta1/ai-news-agent

## Overview

This Streamlit app lets a user choose a chatbot or AI-news workflow, configure a Groq model, and view the result. The main flow loads UI inputs, builds the selected LangGraph, and delegates execution and rendering to the result display. The graph supports a basic LLM chatbot, a tool-routed web chatbot, and a news fetch–summarize–save workflow. Edges reflect the excerpts and README; unsampled internals are not inferred.

Main entry points: [`src/langgraphagenticai/graph/graph_builder.py`](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/graph/graph_builder.py) (Graph builder), [`src/langgraphagenticai/main.py`](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/main.py) (App coordinator), [`src/langgraphagenticai/nodes/ai_news_node.py`](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/nodes/ai_news_node.py) (AI news stages), [`src/langgraphagenticai/ui/streamlitui/loadui.py`](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/ui/streamlitui/loadui.py) (Input and workflow selector)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Streamlit UI"]
  node_app["App entry<br/>[app.py]"]
  node_ui_loader["Input and workflow selector<br/>[loadui.py]"]
  node_config["UI configuration<br/>[uiconfigfile.py]"]
  node_display["Result display<br/>[display_result.py]"]
end

subgraph group_orchestration["Workflow orchestration"]
  node_main["App coordinator<br/>[main.py]"]
  node_builder["Graph builder<br/>[graph_builder.py]"]
  node_state["Graph message state<br/>[state.py]"]
end

subgraph group_chat["Chat workflows"]
  node_basic["Basic chatbot node"]
  node_webchat["Tool chatbot node"]
  node_search["Search tool setup<br/>[search_tool.py]"]
  node_toolnode["Tool executor<br/>[search_tool.py]"]
end

subgraph group_news["AI news workflow"]
  node_news["AI news stages<br/>[ai_news_node.py]"]
  node_digest[("Digest files")]
end

subgraph group_integrations["External services"]
  node_llm_setup["Groq model setup<br/>[groqllm.py]"]
  node_groq["Groq LLM"]
  node_tavily_search["Tavily web search"]
  node_tavily_news["Tavily news API"]
end

node_user(("User"))

node_user -->|"selects workflow"| node_ui_loader
node_app -->|"starts app"| node_main
node_main -->|"loads inputs"| node_ui_loader
node_ui_loader -->|"reads options"| node_config
node_main -->|"configures model"| node_llm_setup
node_llm_setup -->|"creates model"| node_groq
node_main -->|"builds workflow"| node_builder
node_builder -->|"sets graph state"| node_state
node_builder -->|"registers node"| node_basic
node_builder -->|"registers node"| node_webchat
node_builder -->|"creates tools"| node_search
node_builder -->|"creates executor"| node_toolnode
node_builder -->|"registers stages"| node_news
node_basic -->|"invokes model"| node_groq
node_webchat -->|"invokes bound model"| node_groq
node_search -->|"configures search"| node_tavily_search
node_news -->|"fetches articles"| node_tavily_news
node_news -->|"summarizes articles"| node_groq
node_news -->|"writes digest"| node_digest
node_main -->|"passes graph and input"| node_display
node_display -->|"reads digest"| node_digest

click node_app "https://github.com/dikshanta1/ai-news-agent/blob/main/app.py"
click node_main "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/main.py"
click node_ui_loader "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/ui/streamlitui/loadui.py"
click node_config "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/ui/uiconfigfile.py"
click node_display "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/ui/streamlitui/display_result.py"
click node_llm_setup "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/LLMS/groqllm.py"
click node_builder "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/graph/graph_builder.py"
click node_state "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/state/state.py"
click node_basic "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/nodes/basic_chatbot_node.py"
click node_webchat "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/nodes/chatbot_with_Tool_node.py"
click node_search "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/tools/search_tool.py"
click node_toolnode "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/tools/search_tool.py"
click node_news "https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/nodes/ai_news_node.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_ui_loader,node_config,node_display,node_user toneBlue
class node_main,node_builder,node_state toneAmber
class node_basic,node_webchat,node_search,node_toolnode toneMint
class node_news,node_digest toneRose
class node_llm_setup,node_groq,node_tavily_search,node_tavily_news toneIndigo
```

## Components

### Streamlit UI

- [App entry](https://github.com/dikshanta1/ai-news-agent/blob/main/app.py): `app.py`
- [Input and workflow selector](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/ui/streamlitui/loadui.py): `src/langgraphagenticai/ui/streamlitui/loadui.py`
- [UI configuration](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/ui/uiconfigfile.py): `src/langgraphagenticai/ui/uiconfigfile.py`
- [Result display](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/ui/streamlitui/display_result.py): `src/langgraphagenticai/ui/streamlitui/display_result.py`

### Workflow orchestration

- [App coordinator](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/main.py): `src/langgraphagenticai/main.py`
- [Graph builder](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/graph/graph_builder.py): `src/langgraphagenticai/graph/graph_builder.py`
- [Graph message state](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/state/state.py): `src/langgraphagenticai/state/state.py`

### Chat workflows

- [Basic chatbot node](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/nodes/basic_chatbot_node.py): `src/langgraphagenticai/nodes/basic_chatbot_node.py`
- [Tool chatbot node](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/nodes/chatbot_with_Tool_node.py): `src/langgraphagenticai/nodes/chatbot_with_Tool_node.py`
- [Search tool setup](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/tools/search_tool.py): `src/langgraphagenticai/tools/search_tool.py`
- [Tool executor](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/tools/search_tool.py): `src/langgraphagenticai/tools/search_tool.py`

### AI news workflow

- [AI news stages](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/nodes/ai_news_node.py): `src/langgraphagenticai/nodes/ai_news_node.py`
- **Digest files**

### External services

- [Groq model setup](https://github.com/dikshanta1/ai-news-agent/blob/main/src/langgraphagenticai/LLMS/groqllm.py): `src/langgraphagenticai/LLMS/groqllm.py`
- **Groq LLM**
- **Tavily web search**
- **Tavily news API**

### Other components

- **User**

## Connections

- User → Input and workflow selector: selects workflow (evidence: `src/langgraphagenticai/ui/streamlitui/loadui.py`)
- App entry → App coordinator: starts app (evidence: `app.py`)
- App coordinator → Input and workflow selector: loads inputs (evidence: `src/langgraphagenticai/main.py`)
- Input and workflow selector → UI configuration: reads options (evidence: `src/langgraphagenticai/ui/streamlitui/loadui.py`)
- App coordinator → Groq model setup: configures model (evidence: `src/langgraphagenticai/main.py`)
- Groq model setup → Groq LLM: creates model (evidence: `src/langgraphagenticai/LLMS/groqllm.py`)
- App coordinator → Graph builder: builds workflow (evidence: `src/langgraphagenticai/main.py`)
- Graph builder → Graph message state: sets graph state (evidence: `src/langgraphagenticai/graph/graph_builder.py`)
- Graph builder → Basic chatbot node: registers node (evidence: `src/langgraphagenticai/graph/graph_builder.py`)
- Graph builder → Tool chatbot node: registers node (evidence: `src/langgraphagenticai/graph/graph_builder.py`)
- Graph builder → Search tool setup: creates tools (evidence: `src/langgraphagenticai/graph/graph_builder.py`)
- Graph builder → Tool executor: creates executor (evidence: `src/langgraphagenticai/graph/graph_builder.py`)
- Graph builder → AI news stages: registers stages (evidence: `src/langgraphagenticai/graph/graph_builder.py`)
- Basic chatbot node → Groq LLM: invokes model (evidence: `src/langgraphagenticai/nodes/basic_chatbot_node.py`)
- Tool chatbot node → Groq LLM: invokes bound model (evidence: `src/langgraphagenticai/nodes/chatbot_with_Tool_node.py`)
- Search tool setup → Tavily web search: configures search (evidence: `src/langgraphagenticai/tools/search_tool.py`)
- AI news stages → Tavily news API: fetches articles (evidence: `README.md`)
- AI news stages → Groq LLM: summarizes articles (evidence: `src/langgraphagenticai/nodes/ai_news_node.py`)
- AI news stages → Digest files: writes digest (evidence: `src/langgraphagenticai/nodes/ai_news_node.py`)
- App coordinator → Result display: passes graph and input (evidence: `src/langgraphagenticai/main.py`)
- Result display → Digest files: reads digest (evidence: `src/langgraphagenticai/ui/streamlitui/display_result.py`)
