Architecture - huqianghui/AI-Coach-vibe-coding GitHub Wiki
Architecture
System Overview
┌──────────────────────────────────────────────────────────────┐
│ Frontend (React) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────┐ │
│ │ Training │ │ Scenario │ │ Scoring │ │ Dashboard │ │
│ │ Session │ │ Config │ │ & Report │ │ & Analytics │ │
│ └─────┬────┘ └─────┬────┘ └─────┬────┘ └───────┬────────┘ │
│ └─────────────┴───────────┴───────────────┘ │
│ API Layer (axios) │
└──────────────────────────┬───────────────────────────────────┘
│ REST + WebSocket
┌──────────────────────────┴───────────────────────────────────┐
│ Backend (FastAPI) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────┐ │
│ │ Auth │ │ Session │ │ Scoring │ │ HCP Profile │ │
│ │ Router │ │ Router │ │ Router │ │ Router │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └───────┬────────┘ │
│ └─────────────┴────────────┴───────────────┘ │
│ Service Layer │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ AI Coaching Adapters │ │
│ │ ┌─────────┐ ┌──────────┐ ┌──────┐ ┌──────────────┐ │ │
│ │ │ Claude │ │ Azure │ │ GPT-4│ │ Mock (dev) │ │ │
│ │ │ Adapter │ │ OpenAI │ │ │ │ │ │ │
│ │ └─────────┘ └──────────┘ └──────┘ └──────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ Database Layer (SQLAlchemy) │
└──────────────────────────┬───────────────────────────────────┘
│
┌──────┴──────┐
│ PostgreSQL │
│ (SQLite dev)│
└─────────────┘
Backend Architecture
Layered Pattern
Router (HTTP) → Schema (Validation) → Service (Business Logic) → Model (ORM) → Database
Key Domain Models
- User: MR accounts with role/BU association
- HCPProfile: Virtual doctor configuration (personality, knowledge, perspective)
- Scenario: Training scenario definitions
- Session: Training session lifecycle management
- Conversation: Chat history within sessions
- Assessment: Multi-dimensional scoring results
- TrainingMaterial: Document/content management
- Report: Generated training reports
AI Adapter Architecture
BaseCoachingAdapter (ABC)
├── execute() → AsyncIterator[CoachEvent]
├── is_available() → bool
├── get_version() → str | None
│
├── ClaudeAdapter (Anthropic Claude)
├── AzureOpenAIAdapter (Azure OpenAI)
├── GPT4Adapter (OpenAI native)
└── MockAdapter (dev/test)
Frontend Architecture
Component Hierarchy
App
├── AuthProvider
│ ├── LoginPage
│ └── Layout
│ ├── Sidebar (navigation)
│ ├── PageHeader
│ └── Routes
│ ├── DashboardPage
│ ├── TrainingSessionPage
│ │ ├── ScenarioSelector
│ │ ├── ChatInterface (audio/text)
│ │ └── ScoringPanel
│ ├── ScenarioConfigPage
│ ├── HCPProfilePage
│ ├── ReportPage
│ └── AdminPages
└── CoachChatPanel (sidebar agent)
State Management
- Server state: TanStack Query (sessions, scenarios, reports)
- Auth state: Lightweight store (JWT, user info)
- UI state: React local state + Context for agent routing
Data Flow
Training Session Flow
1. MR selects scenario + HCP profile
2. Session created (status: created → in_progress)
3. MR interacts via audio/text
4. AI adapter processes input → generates HCP response
5. Real-time scoring suggestions shown
6. Session ends → comprehensive scoring generated
7. Report persisted → dashboard updated
Deployment
GitHub → CI/CD → Azure Container Registry → Azure Container Apps
├── ai-coach-backend (FastAPI + uvicorn)
└── ai-coach-frontend (nginx + React SPA)