# tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform architecture

> Architecture diagram of the GitHub repository tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform
- Repository: https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform

## Overview

AI Interviewer is a recruitment platform centered on adaptive candidate interviews: authenticated API clients start interviews and submit turns, the interview agent plans and generates questions using knowledge retrieval, answers are evaluated, and reports expose results. Text and voice are documented interaction modes; the sampled WebSocket route and voice session show the voice path. The repository also includes organization, campaign, application, scheduling, and candidate-communication workflows. Some agent and service connections are supported only by the README or SOURCE INDEX references, so unsampled details are not expanded.

Main entry points: [`apps/api/v1/routes/recruitment_campaigns.py`](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/apps/api/v1/routes/recruitment_campaigns.py) (Campaign endpoints), [`apps/api/v1/routes/interview.py`](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/apps/api/v1/routes/interview.py) (Interview endpoints), [`agents/interview_agent`](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/tree/main/agents/interview_agent) (Interview agent), [`apps/api/websocket/interview.py`](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/apps/api/websocket/interview.py) (Voice WebSocket)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and identity"]
  node_application["API application<br/>[main.py]"]
  node_auth["Authentication<br/>[auth_service.py]"]
  node_tenant["Tenant authorization"]
  node_interview_api["Interview endpoints<br/>[interview.py]"]
  node_campaign_api["Campaign endpoints"]
end

subgraph group_recruitment["Recruitment operations"]
  node_campaign["Campaign workflow"]
  node_campaign_service["Campaign management"]
  node_applications["Candidate applications"]
  node_scheduling["Interview scheduling"]
  node_communications["Candidate communications"]
  node_database[("Platform database<br/>[database.py]")]
end

subgraph group_interview["Interview intelligence"]
  node_interview_service["Interview service"]
  node_agent["Interview agent"]
  node_question["Question generation"]
  node_evaluation["Answer evaluation<br/>[service.py]"]
  node_report["Interview reports<br/>[report_service.py]"]
  node_llm["LLM providers<br/>[provider.py]"]
end

subgraph group_knowledge["Knowledge retrieval"]
  node_rag["Knowledge retrieval<br/>[service.py]"]
  node_corpus["Corpus loading<br/>[corpus_loader.py]"]
end

subgraph group_voice["Voice interaction"]
  node_voice_ws["Voice WebSocket<br/>[interview.py]"]
  node_voice_session["Voice session<br/>[session.py]"]
  node_voice_providers["Speech providers<br/>[real_providers.py]"]
end

node_client(("API client"))

node_client -->|"sends requests"| node_application
node_application -->|"routes requests"| node_interview_api
node_application -->|"routes requests"| node_campaign_api
node_interview_api -->|"uses authentication"| node_auth
node_interview_api -->|"checks access"| node_tenant
node_interview_api -->|"calls service"| node_interview_service
node_interview_api -->|"requests reports"| node_report
node_campaign_api -->|"checks access"| node_tenant
node_campaign_api -->|"orchestrates workflow"| node_campaign
node_campaign_api -->|"calls service"| node_campaign_service
node_campaign_api -->|"uses applications"| node_applications
node_campaign_api -->|"requests scheduling"| node_scheduling
node_campaign_api -->|"requests communications"| node_communications
node_campaign_service -->|"reads and writes"| node_database
node_campaign_api -.->|"campaign data"| node_database
node_interview_service -.->|"runs interview"| node_agent
node_agent -.->|"generates questions"| node_question
node_agent -->|"evaluates answers"| node_evaluation
node_agent -->|"uses provider"| node_llm
node_agent -.->|"retrieves context"| node_rag
node_interview_api -.->|"uses knowledge base"| node_rag
node_corpus -->|"loads corpus"| node_rag
node_voice_ws -->|"creates session"| node_voice_session
node_voice_session -->|"uses speech services"| node_voice_providers
node_voice_ws -->|"validates token"| node_auth
node_voice_ws -.->|"shares interview mode"| node_interview_api
node_evaluation -.->|"supplies assessment"| node_report

click node_application "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/apps/api/main.py"
click node_auth "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/auth_service.py"
click node_tenant "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/tenant_authorization.py"
click node_interview_api "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/apps/api/v1/routes/interview.py"
click node_campaign_api "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/apps/api/v1/routes/recruitment_campaigns.py"
click node_campaign "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/recruitment_campaign_orchestrator.py"
click node_campaign_service "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/recruitment_campaign_service.py"
click node_applications "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/candidate_application_service.py"
click node_scheduling "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/interview_scheduling_service.py"
click node_communications "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/candidate_communication_service.py"
click node_interview_service "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/interview_service.py"
click node_agent "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/tree/main/agents/interview_agent"
click node_question "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/tree/main/agents/question_agent"
click node_evaluation "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/evaluation/service.py"
click node_report "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/report_service.py"
click node_llm "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/integrations/llm_providers/provider.py"
click node_rag "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/rag/service.py"
click node_corpus "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/rag/corpus_loader.py"
click node_voice_ws "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/apps/api/websocket/interview.py"
click node_voice_session "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/voice/session.py"
click node_voice_providers "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/voice/real_providers.py"
click node_database "https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/database.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_application,node_auth,node_tenant,node_interview_api,node_campaign_api,node_client toneBlue
class node_campaign,node_campaign_service,node_applications,node_scheduling,node_communications,node_database toneAmber
class node_interview_service,node_agent,node_question,node_evaluation,node_report,node_llm toneMint
class node_rag,node_corpus toneRose
class node_voice_ws,node_voice_session,node_voice_providers toneIndigo
```

## Components

### API and identity

- [API application](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/apps/api/main.py): `apps/api/main.py`
- [Authentication](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/auth_service.py): `services/auth_service.py`
- [Tenant authorization](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/tenant_authorization.py): `services/tenant_authorization.py`
- [Interview endpoints](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/apps/api/v1/routes/interview.py): `apps/api/v1/routes/interview.py`
- [Campaign endpoints](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/apps/api/v1/routes/recruitment_campaigns.py): `apps/api/v1/routes/recruitment_campaigns.py`

### Recruitment operations

- [Campaign workflow](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/recruitment_campaign_orchestrator.py): `services/recruitment_campaign_orchestrator.py`
- [Campaign management](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/recruitment_campaign_service.py): `services/recruitment_campaign_service.py`
- [Candidate applications](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/candidate_application_service.py): `services/candidate_application_service.py`
- [Interview scheduling](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/interview_scheduling_service.py): `services/interview_scheduling_service.py`
- [Candidate communications](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/candidate_communication_service.py): `services/candidate_communication_service.py`
- [Platform database](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/database.py): `services/database.py`

### Interview intelligence

- [Interview service](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/interview_service.py): `services/interview_service.py`
- [Interview agent](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/tree/main/agents/interview_agent): `agents/interview_agent`
- [Question generation](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/tree/main/agents/question_agent): `agents/question_agent`
- [Answer evaluation](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/evaluation/service.py): `evaluation/service.py`
- [Interview reports](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/services/report_service.py): `services/report_service.py`
- [LLM providers](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/integrations/llm_providers/provider.py): `integrations/llm_providers/provider.py`

### Knowledge retrieval

- [Knowledge retrieval](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/rag/service.py): `rag/service.py`
- [Corpus loading](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/rag/corpus_loader.py): `rag/corpus_loader.py`

### Voice interaction

- [Voice WebSocket](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/apps/api/websocket/interview.py): `apps/api/websocket/interview.py`
- [Voice session](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/voice/session.py): `voice/session.py`
- [Speech providers](https://github.com/tri01012002/ai-interviewer-adaptive-multimodal-ai-interview-platform/blob/main/voice/real_providers.py): `voice/real_providers.py`

### Other components

- **API client**

## Connections

- API client → API application: sends requests (evidence: `README.md`)
- API application → Interview endpoints: routes requests (evidence: `apps/api/main.py`)
- API application → Campaign endpoints: routes requests (evidence: `apps/api/main.py`)
- Interview endpoints → Authentication: uses authentication (evidence: `apps/api/v1/routes/interview.py`)
- Interview endpoints → Tenant authorization: checks access (evidence: `apps/api/v1/routes/interview.py`)
- Interview endpoints → Interview service: calls service (evidence: `apps/api/v1/routes/interview.py`)
- Interview endpoints → Interview reports: requests reports (evidence: `apps/api/v1/routes/interview.py`)
- Campaign endpoints → Tenant authorization: checks access (evidence: `apps/api/v1/routes/recruitment_campaigns.py`)
- Campaign endpoints → Campaign workflow: orchestrates workflow (evidence: `apps/api/v1/routes/recruitment_campaigns.py`)
- Campaign endpoints → Campaign management: calls service (evidence: `apps/api/v1/routes/recruitment_campaigns.py`)
- Campaign endpoints → Candidate applications: uses applications (evidence: `apps/api/v1/routes/recruitment_campaigns.py`)
- Campaign endpoints → Interview scheduling: requests scheduling (evidence: `apps/api/v1/routes/recruitment_campaigns.py`)
- Campaign endpoints → Candidate communications: requests communications (evidence: `apps/api/v1/routes/recruitment_campaigns.py`)
- Campaign management → Platform database: reads and writes (evidence: `services/recruitment_campaign_service.py`)
- Campaign endpoints → Platform database: campaign data
- Interview service → Interview agent: runs interview
- Interview agent → Question generation: generates questions (evidence: `README.md`)
- Interview agent → Answer evaluation: evaluates answers (evidence: `agents/interview_agent/graph/__init__.py`)
- Interview agent → LLM providers: uses provider (evidence: `agents/interview_agent/graph/__init__.py`)
- Interview agent → Knowledge retrieval: retrieves context (evidence: `README.md`)
- Interview endpoints → Knowledge retrieval: uses knowledge base (evidence: `README.md`)
- Corpus loading → Knowledge retrieval: loads corpus (evidence: `rag/corpus_loader.py`)
- Voice WebSocket → Voice session: creates session (evidence: `apps/api/websocket/interview.py`)
- Voice session → Speech providers: uses speech services (evidence: `voice/session.py`)
- Voice WebSocket → Authentication: validates token (evidence: `apps/api/websocket/interview.py`)
- Voice WebSocket → Interview endpoints: shares interview mode (evidence: `README.md`)
- Answer evaluation → Interview reports: supplies assessment
