# rikonju/novelty-multi-agent-framework architecture

> Architecture diagram of the GitHub repository rikonju/novelty-multi-agent-framework, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rikonju/novelty-multi-agent-framework
- Repository: https://github.com/rikonju/novelty-multi-agent-framework

## Overview

This is a research-prototype paper novelty-checking application: users submit a paper, then receive a traceable report built from extracted novelty points, literature research, evidence review, and report rendering. The README documents the main workflow and additional capabilities such as dynamic task fan-out, supplemental research, configurable retrieval sources, and PDF processing. The graph preserves those documented stages; unsampled implementation links are omitted rather than inferred.

Main entry points: [`backend/src/novelty_agent_framework/workflows/novelty.py`](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/workflows/novelty.py) (Novelty workflow), [`frontend/src/app/App.tsx`](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/app/App.tsx) (Web application), [`backend/src/novelty_agent_framework/services/workflow_service.py`](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/services/workflow_service.py) (Workflow service), [`frontend/src/api/client.ts`](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/api/client.ts) (API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_frontend["Web application<br/>[App.tsx]"]
  node_upload["Paper upload<br/>[UploadView.tsx]"]
  node_progress["Run progress<br/>[useRun.ts]"]
  node_report_view["Report preview<br/>[ReportView.tsx]"]
  node_api_client["API client<br/>[client.ts]"]
  node_api_contracts["API contracts<br/>[contracts.ts]"]
end

subgraph group_service["Application service"]
  node_http_api["FastAPI application<br/>[main.py]"]
  node_workflow_service["Workflow service"]
  node_run_store[("Run state store<br/>[store.py]")]
end

subgraph group_workflow["Novelty workflow"]
  node_paper_processing["Paper processing<br/>[paper_processor.py]"]
  node_main_workflow["Novelty workflow<br/>[novelty.py]"]
  node_point_extractor["Point extraction<br/>[point_extractor.py]"]
  node_coordinator["Task coordination<br/>[coordinator.py]"]
end

subgraph group_research["Research and evidence"]
  node_research_task["Research task graph<br/>[research_task.py]"]
  node_researcher["Task researcher<br/>[research.py]"]
  node_search_planner["Search planning<br/>[search_planner.py]"]
  node_structured_retrieval["Structured retrieval"]
  node_database_sources["Retrieval providers"]
  node_evidence_review["Evidence review"]
end

subgraph group_runtime["Runtime and storage"]
  node_domain_schemas["Domain contracts<br/>[domain.py]"]
  node_model_client["Model client<br/>[model_client.py]"]
  node_persistence[("Paper persistence<br/>[persistence.py]")]
  node_renderer["Report renderer<br/>[renderer.py]"]
end

node_user(("Paper submitter"))

node_user -->|"submits paper"| node_frontend
node_frontend -->|"shows upload"| node_upload
node_frontend -->|"tracks run"| node_progress
node_frontend -->|"shows report"| node_report_view
node_frontend -->|"requests data"| node_api_client
node_api_client -->|"validates response"| node_api_contracts
node_api_client -.->|"calls API"| node_http_api
node_http_api -->|"configures service"| node_workflow_service
node_workflow_service -.->|"records run state"| node_run_store
node_workflow_service -.->|"processes paper"| node_paper_processing
node_workflow_service -->|"runs workflow"| node_main_workflow
node_paper_processing -.->|"provides PaperInput"| node_main_workflow
node_main_workflow -->|"extracts points"| node_point_extractor
node_main_workflow -->|"plans tasks"| node_coordinator
node_main_workflow -->|"dispatches tasks"| node_research_task
node_research_task -->|"runs agent"| node_researcher
node_researcher -->|"invokes tool"| node_structured_retrieval
node_structured_retrieval -->|"plans query"| node_search_planner
node_structured_retrieval -->|"retrieves literature"| node_database_sources
node_main_workflow -->|"reviews evidence"| node_evidence_review
node_main_workflow -->|"renders report"| node_renderer
node_main_workflow -.->|"stores artifacts"| node_persistence
node_point_extractor -.->|"calls model"| node_model_client
node_evidence_review -->|"calls model"| node_model_client
node_researcher -->|"uses contracts"| node_domain_schemas

click node_frontend "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/app/App.tsx"
click node_upload "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/features/upload/UploadView.tsx"
click node_progress "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/features/run-progress/useRun.ts"
click node_report_view "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/features/report/ReportView.tsx"
click node_api_client "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/api/client.ts"
click node_api_contracts "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/api/contracts.ts"
click node_http_api "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/main.py"
click node_workflow_service "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/services/workflow_service.py"
click node_run_store "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/web/store.py"
click node_paper_processing "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/processing/paper_processor.py"
click node_main_workflow "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/workflows/novelty.py"
click node_point_extractor "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/agents/point_extractor.py"
click node_coordinator "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/agents/coordinator.py"
click node_research_task "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/workflows/research_task.py"
click node_researcher "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/agents/research.py"
click node_search_planner "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/agents/search_planner.py"
click node_structured_retrieval "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/tools/database_search/structured_retrieval.py"
click node_database_sources "https://github.com/rikonju/novelty-multi-agent-framework/tree/main/backend/src/novelty_agent_framework/tools/database_search/providers"
click node_evidence_review "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/agents/evidence_reviewer.py"
click node_domain_schemas "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/schemas/domain.py"
click node_model_client "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/env/model_client.py"
click node_persistence "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/persistence.py"
click node_renderer "https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/tools/renderer.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_frontend,node_upload,node_progress,node_report_view,node_api_client,node_api_contracts toneBlue
class node_http_api,node_workflow_service,node_run_store toneAmber
class node_paper_processing,node_main_workflow,node_point_extractor,node_coordinator toneMint
class node_research_task,node_researcher,node_search_planner,node_structured_retrieval,node_database_sources,node_evidence_review toneRose
class node_domain_schemas,node_model_client,node_persistence,node_renderer,node_user toneIndigo
```

## Components

### User experience

- [Web application](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/app/App.tsx): `frontend/src/app/App.tsx`
- [Paper upload](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/features/upload/UploadView.tsx): `frontend/src/features/upload/UploadView.tsx`
- [Run progress](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/features/run-progress/useRun.ts): `frontend/src/features/run-progress/useRun.ts`
- [Report preview](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/features/report/ReportView.tsx): `frontend/src/features/report/ReportView.tsx`
- [API client](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/api/client.ts): `frontend/src/api/client.ts`
- [API contracts](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/frontend/src/api/contracts.ts): `frontend/src/api/contracts.ts`

### Application service

- [FastAPI application](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/main.py): `backend/src/novelty_agent_framework/main.py`
- [Workflow service](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/services/workflow_service.py): `backend/src/novelty_agent_framework/services/workflow_service.py`
- [Run state store](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/web/store.py): `backend/src/novelty_agent_framework/web/store.py`

### Novelty workflow

- [Paper processing](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/processing/paper_processor.py): `backend/src/novelty_agent_framework/processing/paper_processor.py`
- [Novelty workflow](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/workflows/novelty.py): `backend/src/novelty_agent_framework/workflows/novelty.py`
- [Point extraction](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/agents/point_extractor.py): `backend/src/novelty_agent_framework/agents/point_extractor.py`
- [Task coordination](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/agents/coordinator.py): `backend/src/novelty_agent_framework/agents/coordinator.py`

### Research and evidence

- [Research task graph](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/workflows/research_task.py): `backend/src/novelty_agent_framework/workflows/research_task.py`
- [Task researcher](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/agents/research.py): `backend/src/novelty_agent_framework/agents/research.py`
- [Search planning](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/agents/search_planner.py): `backend/src/novelty_agent_framework/agents/search_planner.py`
- [Structured retrieval](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/tools/database_search/structured_retrieval.py): `backend/src/novelty_agent_framework/tools/database_search/structured_retrieval.py`
- [Retrieval providers](https://github.com/rikonju/novelty-multi-agent-framework/tree/main/backend/src/novelty_agent_framework/tools/database_search/providers): `backend/src/novelty_agent_framework/tools/database_search/providers`
- [Evidence review](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/agents/evidence_reviewer.py): `backend/src/novelty_agent_framework/agents/evidence_reviewer.py`

### Runtime and storage

- [Domain contracts](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/schemas/domain.py): `backend/src/novelty_agent_framework/schemas/domain.py`
- [Model client](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/env/model_client.py): `backend/env/model_client.py`
- [Paper persistence](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/persistence.py): `backend/src/novelty_agent_framework/persistence.py`
- [Report renderer](https://github.com/rikonju/novelty-multi-agent-framework/blob/main/backend/src/novelty_agent_framework/tools/renderer.py): `backend/src/novelty_agent_framework/tools/renderer.py`

### Other components

- **Paper submitter**

## Connections

- Paper submitter → Web application: submits paper (evidence: `frontend/src/app/App.tsx`)
- Web application → Paper upload: shows upload (evidence: `frontend/src/app/App.tsx`)
- Web application → Run progress: tracks run (evidence: `frontend/src/app/App.tsx`)
- Web application → Report preview: shows report (evidence: `frontend/src/app/App.tsx`)
- Web application → API client: requests data (evidence: `frontend/src/app/App.tsx`)
- API client → API contracts: validates response (evidence: `frontend/src/api/client.ts`)
- API client → FastAPI application: calls API
- FastAPI application → Workflow service: configures service (evidence: `backend/src/novelty_agent_framework/main.py`)
- Workflow service → Run state store: records run state
- Workflow service → Paper processing: processes paper
- Workflow service → Novelty workflow: runs workflow (evidence: `backend/src/novelty_agent_framework/services/workflow_service.py`)
- Paper processing → Novelty workflow: provides PaperInput
- Novelty workflow → Point extraction: extracts points (evidence: `README.md`)
- Novelty workflow → Task coordination: plans tasks (evidence: `README.md`)
- Novelty workflow → Research task graph: dispatches tasks (evidence: `README.md`)
- Research task graph → Task researcher: runs agent (evidence: `README.md`)
- Task researcher → Structured retrieval: invokes tool (evidence: `README.md`)
- Structured retrieval → Search planning: plans query (evidence: `README.md`)
- Structured retrieval → Retrieval providers: retrieves literature (evidence: `README.md`)
- Novelty workflow → Evidence review: reviews evidence (evidence: `README.md`)
- Novelty workflow → Report renderer: renders report (evidence: `README.md`)
- Novelty workflow → Paper persistence: stores artifacts
- Point extraction → Model client: calls model
- Evidence review → Model client: calls model (evidence: `backend/src/novelty_agent_framework/agents/evidence_reviewer.py`)
- Task researcher → Domain contracts: uses contracts
