diff --git a/PRD.md b/PRD.md new file mode 100644 index 0000000..54ba88a --- /dev/null +++ b/PRD.md @@ -0,0 +1,671 @@ +# LLM Monitor - Product Requirements Document (PRD) + +**Versione:** 1.0.0 +**Data:** Aprile 2024 +**Autore:** Luca Sacchi +**Status:** Active Development + +--- + +## πŸ“‹ Indice + +1. [Executive Summary](#executive-summary) +2. [Vision & Obiettivi](#vision--obiettivi) +3. [Problema & Soluzione](#problema--soluzione) +4. [Utenti Target](#utenti-target) +5. [Feature Principali](#feature-principali) +6. [Requisiti Tecnici](#requisiti-tecnici) +7. [Architettura](#architettura) +8. [User Stories](#user-stories) +9. [Acceptance Criteria](#acceptance-criteria) +10. [Timeline & Roadmap](#timeline--roadmap) +11. [Success Metrics](#success-metrics) +12. [Constraints & Assumptions](#constraints--assumptions) + +--- + +## 🎯 Executive Summary + +**LLM Monitor** Γ¨ una **dashboard web moderna** per il monitoraggio in tempo reale dei modelli LLM caricati in **Ollama**. L'applicazione fornisce una visualizzazione intuitiva dello stato dei modelli, delle risorse utilizzate e dell'accesso ai dati via API REST documentata con Swagger/OpenAPI. + +### Highlights +- βœ… Dashboard reattiva senza page reload +- βœ… Web Worker per sincronizzazione dati in background +- βœ… localStorage per cache locale e offline support +- βœ… API REST completamente documentata +- βœ… Containerizzata con Docker +- βœ… Architettura server-client moderna + +--- + +## πŸš€ Vision & Obiettivi + +### Vision +Fornire ai developer e ai DevOps una **visibilitΓ  completa e in tempo reale** dei modelli LLM disponibili in Ollama, eliminando la necessitΓ  di comandi CLI per il monitoraggio. + +### Obiettivi Primari +1. **Visualizzare modelli** caricati in Ollama senza comandi CLI +2. **Monitorare risorse** (dimensione, memoria, stato) +3. **Accedere all'API** via dashboard intuitiva +4. **Documentare API** con Swagger per integrazioni esterne +5. **Deployare facilmente** con Docker/Docker Compose +6. **Aggiornamenti in tempo reale** senza page reload + +### Obiettivi Secondari +1. Supporto offline via localStorage +2. Performance ottimale con Web Workers +3. UI moderna e responsive +4. FacilitΓ  di installazione e configurazione + +--- + +## πŸ” Problema & Soluzione + +### Problema +Attualmente, per verificare i modelli LLM in Ollama, Γ¨ necessario: +- Usare comandi CLI (`ollama list`) +- Fare chiamate API manuali con curl/Postman +- Non c'Γ¨ una dashboard visuale dedicata +- Difficile monitoraggio per non-developer + +### Soluzione Proposta +**LLM Monitor** fornisce: +- βœ… Dashboard web intuitiva e moderna +- βœ… Aggiornamenti automatici ogni 30 secondi +- βœ… Nessun page reload grazie ai Web Workers +- βœ… API documentata e testabile direttamente +- βœ… Deployment semplice con Docker + +--- + +## πŸ‘₯ Utenti Target + +### Primary Users +1. **DevOps Engineers** - Monitorare modelli in produzione +2. **ML Engineers** - Verificare disponibilitΓ  modelli +3. **Developers** - Integrazioni via API + +### Secondary Users +1. **System Administrators** - Overview dell'infrastruttura +2. **Project Managers** - Status modelli disponibili + +### Use Cases + +#### UC1: Verificare Modelli Caricati +- **Actor:** Developer +- **Goal:** Vedere quali modelli sono disponibili +- **Flow:** Apri dashboard β†’ visualizza elenco modelli con dettagli +- **Benefit:** Non usare CLI, visione immediata + +#### UC2: Monitorare Spazio Disco +- **Actor:** DevOps +- **Goal:** Tracciare consumo spazio dei modelli +- **Flow:** Dashboard β†’ visualizza spazio totale e per modello +- **Benefit:** Pianificare cleanup e capacity planning + +#### UC3: Integrare via API +- **Actor:** Developer +- **Goal:** Automatizzare script che consumano dati modelli +- **Flow:** Consulta Swagger β†’ crea script che chiama endpoint API +- **Benefit:** Automazione e integrazione con altri sistemi + +#### UC4: Offline Mode +- **Actor:** Developer (senza connessione) +- **Goal:** Accedere ai dati modelli salvati +- **Flow:** localStorage fornisce ultimo stato noto +- **Benefit:** Accesso parziale anche offline + +--- + +## ⚑ Feature Principali + +### 1. Dashboard Principale +**Descrizione:** Homepage con overview dei modelli + +**Componenti:** +- Header con logo e status Ollama +- Stat cards: Modelli caricati, Spazio totale, Status +- Lista modelli con: + - Nome modello + - Dimensione + - Data ultimo aggiornamento + - Digest (hash univoco) +- Pulsante refresh manuale + +**Behavior:** +- Auto-refresh ogni 30 secondi +- Aggiorna solo elementi cambiati (no full re-render) +- Mostra loading state durante fetch +- Error handling con messaggi chiari + +--- + +### 2. API REST Documentata + +**Endpoints:** + +#### `GET /api/v1/health` +Verifica lo stato dell'API e di Ollama + +**Risposta:** +```json +{ + "status": "healthy", + "ollama_status": "online", + "timestamp": "2024-04-15T10:30:00Z" +} +``` + +#### `GET /api/v1/models` +Recupera elenco di tutti i modelli + +**Risposta:** +```json +{ + "models": [ + { + "name": "llama2", + "digest": "abc123...", + "size": 3825922048, + "modified_at": "2024-04-15T10:30:00Z" + } + ], + "total": 1 +} +``` + +#### `GET /api/v1/models/{model_name}` +Dettagli di un modello specifico + +**Risposta:** +```json +{ + "name": "llama2", + "digest": "abc123...", + "size": 3825922048, + "modified_at": "2024-04-15T10:30:00Z" +} +``` + +#### `POST /api/v1/models/{model_name}/pull` +Scarica/carica un modello + +#### `DELETE /api/v1/models/{model_name}` +Elimina un modello + +--- + +### 3. Web Worker per Sincronizzazione +**Descrizione:** Thread separato per aggiornamenti dati + +**Feature:** +- Esegue richieste HTTP senza bloccare UI +- Aggiorna localStorage ogni 30 secondi +- Notifica main thread con nuovi dati +- Fallback per browser senza Web Worker support + +**Vantaggi:** +- UI sempre responsiva (60 FPS) +- Niente lag durante fetch +- ScalabilitΓ  migliore + +--- + +### 4. LocalStorage Persistence +**Descrizione:** Cache locale dei dati + +**Dati Salvati:** +- `llm_monitor_health` - Status health +- `llm_monitor_models` - Elenco modelli + +**Benefit:** +- Offline support +- Caricamento istantaneo +- Ripristino ultimo stato noto + +--- + +### 5. Swagger/OpenAPI Documentation +**Descrizione:** Documentazione interattiva API + +**URL:** +- Swagger UI: `/docs` +- ReDoc: `/redoc` + +**Feature:** +- Testa endpoint direttamente +- Visualizza schemi +- Genera client code (curl, Python, JS, ecc.) + +--- + +### 6. Docker Support +**Descrizione:** Containerizzazione dell'applicazione + +**Componenti:** +- Dockerfile multi-stage ottimizzato +- docker-compose.yml con Ollama incluso +- Health checks configurati +- Sempre acceso fino all'arresto manuale + +--- + +## πŸ—οΈ Requisiti Tecnici + +### Backend +- **Linguaggio:** Python 3.10+ +- **Framework:** FastAPI +- **Server:** uVicorn +- **Validation:** Pydantic +- **HTTP Client:** requests/httpx + +### Frontend +- **HTML5** - Template base +- **CSS:** TailwindCSS (utility-first) +- **JavaScript:** Vanilla JS (no frameworks) +- **Web APIs:** + - Fetch API per HTTP + - Web Workers per threading + - localStorage per persistence + +### DevOps +- **Container:** Docker +- **Orchestration:** Docker Compose +- **Network:** HTTP/HTTPS + +### Database +- Nessuno (stateless) +- localStorage nel browser (client-side only) + +--- + +## πŸ›οΈ Architettura + +### Componenti Principali + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Client (Browser) β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ index.html + app.js (Main Thread) β”‚ β”‚ +β”‚ β”‚ - Renderizza UI β”‚ β”‚ +β”‚ β”‚ - Legge localStorage β”‚ β”‚ +β”‚ β”‚ - Aggiorna DOM granularmente β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ data-sync.worker.js (Web Worker Thread) β”‚ β”‚ +β”‚ β”‚ - Fetch /api/v1/health β”‚ β”‚ +β”‚ β”‚ - Fetch /api/v1/models β”‚ β”‚ +β”‚ β”‚ - Aggiorna localStorage β”‚ β”‚ +β”‚ β”‚ - Comunica con main thread β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ HTTP REST API + β”‚ +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ FastAPI Server (Python) β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ main.py (Entry Point) β”‚ β”‚ +β”‚ β”‚ - CORS middleware β”‚ β”‚ +β”‚ β”‚ - Route setup β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ app/api/ (Endpoints) β”‚ β”‚ +β”‚ β”‚ - health.py β”‚ β”‚ +β”‚ β”‚ - models.py β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ app/services/ (Business Logic) β”‚ β”‚ +β”‚ β”‚ - ollama.py (OllamaClient) β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ HTTP API + β”‚ +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Ollama Server (LLM Models) β”‚ +β”‚ - API Port: 11434 β”‚ +β”‚ - Gestisce modelli LLM β”‚ +β”‚ - Endpoint: /api/tags β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### Data Flow + +1. **Inizializzazione:** + - Main thread carica localStorage + - Renderizza UI con dati cached + - Avvia Web Worker + +2. **Sincronizzazione Periodica (ogni 30s):** + - Worker fetch `/api/v1/health` + - Worker fetch `/api/v1/models` + - Worker aggiorna localStorage + - Worker invia messaggio a main thread + +3. **Aggiornamento UI:** + - Main thread riceve messaggio dal Worker + - Confronta dati vecchi vs nuovi + - Aggiorna solo elementi cambiati + +4. **Refresh Manuale:** + - Utente clicca pulsante πŸ”„ + - Main thread chiama `worker.postMessage({ type: "SYNC_NOW" })` + - Worker esegue sincronizzazione immediata + +--- + +## πŸ‘€ User Stories + +### US1: Visualizzare Modelli Disponibili +``` +Come: Developer +Voglio: Vedere lista di modelli caricati in Ollama +AffinchΓ©: Sapere quali modelli sono disponibili + +Acceptance Criteria: +- Dashboard mostra elenco modelli +- Per ogni modello: nome, dimensione, data aggiornamento +- Totale modelli visualizzato in stat card +- Dati aggiornati ogni 30 secondi +``` + +### US2: Monitorare Consumo Spazio +``` +Come: DevOps Engineer +Voglio: Verificare quanto spazio occupano i modelli +AffinchΓ©: Pianificare capacity planning e cleanup + +Acceptance Criteria: +- Stat card mostra spazio totale +- Ogni modello mostra dimensione +- Formato leggibile (GB, MB, etc) +- Aggiornamenti automatici +``` + +### US3: Verificare Status Ollama +``` +Come: System Admin +Voglio: Sapere se Ollama Γ¨ online +AffinchΓ©: Identificare problemi rapidamente + +Acceptance Criteria: +- Status indicator nel header (verde/rosso) +- Testo descrittivo ("Online/Offline") +- Health check ogni 30 secondi +``` + +### US4: Accedere alla API Documentata +``` +Come: Developer +Voglio: Consultare documentazione API con esempi +AffinchΓ©: Integrare i dati in miei script/app + +Acceptance Criteria: +- Swagger UI disponibile su /docs +- ReDoc disponibile su /redoc +- Tutti gli endpoint documentati +- Possibile testare endpoint dal browser +``` + +### US5: Usare Dashboard Offline +``` +Come: Developer +Voglio: Visualizzare ultimi dati anche offline +AffinchΓ©: Accedere all'info anche senza connessione + +Acceptance Criteria: +- localStorage persiste dati +- Dashboard carica senza server +- Mostra timestamp ultimo aggiornamento +- Warning se dati non aggiornati +``` + +### US6: Refresh Manuale +``` +Come: User +Voglio: Aggiornare i dati immediatamente +AffinchΓ©: Ottenere le informazioni piΓΉ recenti + +Acceptance Criteria: +- Pulsante πŸ”„ presente nella dashboard +- Clicco aggiorna immediatamente i dati +- Loading state durante fetch +- Nessun page reload +``` + +--- + +## βœ… Acceptance Criteria + +### FunzionalitΓ  + +| # | Feature | Accettazione | +|---|---------|--------------| +| 1 | Dashboard carica modelli | βœ… Elenco visibile entro 2 secondi | +| 2 | Auto-refresh ogni 30s | βœ… Nessun page reload, solo DOM update | +| 3 | Status Ollama | βœ… Indicatore verde/rosso corretto | +| 4 | localStorage sincronizzato | βœ… Dati persistenti tra session | +| 5 | Web Worker attivo | βœ… Main thread mai bloccato | +| 6 | API Swagger disponibile | βœ… Endpoint testabili su /docs | +| 7 | Docker container | βœ… Avvia e rimane acceso | +| 8 | Offline mode | βœ… Carica con localStorage | + +### Performance + +| # | Metrica | Target | +|---|---------|--------| +| 1 | FCP (First Contentful Paint) | < 1s | +| 2 | LCP (Largest Contentful Paint) | < 2s | +| 3 | TTI (Time to Interactive) | < 3s | +| 4 | API response time | < 200ms | +| 5 | Dashboard refresh FPS | 60 FPS | +| 6 | Memory usage | < 50MB | + +### CompatibilitΓ  Browser + +| Browser | Versione Minima | Status | +|---------|-----------------|--------| +| Chrome | 70+ | βœ… Supportato | +| Firefox | 65+ | βœ… Supportato | +| Safari | 12+ | βœ… Supportato | +| Edge | 79+ | βœ… Supportato | +| Opera | 57+ | βœ… Supportato | +| IE11 | - | ❌ Non supportato (no Web Workers) | + +--- + +## πŸ“… Timeline & Roadmap + +### Phase 1: MVP (In Development - Completato βœ…) +**Durata:** 2 settimane +**Feature:** +- [x] Dashboard base con elenco modelli +- [x] API REST con 3 endpoint +- [x] Swagger documentation +- [x] Docker setup +- [x] Web Worker architettura +- [x] localStorage integration + +**Release:** v1.0.0 + +--- + +### Phase 2: Enhancement (Pianificato πŸ”„) +**Durata:** 2 settimane +**Feature:** +- [ ] Statistiche storiche (grafici) +- [ ] Ricerca e filtri modelli +- [ ] Dark/Light theme toggle +- [ ] Configurazione refresh rate +- [ ] Export dati (CSV/JSON) +- [ ] Notifiche cambio status + +**Release:** v1.1.0 + +--- + +### Phase 3: Advanced (Futuro πŸš€) +**Durata:** 3+ settimane +**Feature:** +- [ ] Multi-tenant support +- [ ] Authentication & Authorization +- [ ] User preferences storage +- [ ] Service Worker per PWA +- [ ] Real-time updates (WebSocket) +- [ ] Model versioning +- [ ] Pull/Delete confirmation modal +- [ ] Advanced error handling + +**Release:** v2.0.0 + +--- + +### Phase 4: Production (Futuro πŸ†) +**Durata:** Ongoing +**Feature:** +- [ ] Monitoring & Alerting +- [ ] Analytics dashboard +- [ ] Performance optimization +- [ ] Load testing & benchmarks +- [ ] Security audit +- [ ] GDPR compliance + +**Release:** v2.1.0+ + +--- + +## πŸ“Š Success Metrics + +### Technical Metrics + +| Metrica | Target | Misura | +|---------|--------|--------| +| Uptime | 99%+ | Monitoring | +| API latency | < 200ms | New Relic/DataDog | +| Error rate | < 0.1% | Logs | +| Test coverage | 80%+ | pytest coverage | +| Bundle size | < 100KB | webpack-bundle-analyzer | + +### Business Metrics + +| Metrica | Target | Misura | +|---------|--------|--------| +| Time to load | < 2s | Lighthouse | +| Page interactions/sec | 100+ | App metrics | +| User satisfaction | 4.5/5 | Feedback form | +| DevOps adoption | 70%+ | Usage analytics | +| Automation enabled | 50%+ | Script integrations | + +### User Engagement + +| Metrica | Target | Misura | +|---------|--------|--------| +| Monthly active users | 100+ | Analytics | +| Dashboard views/month | 1000+ | Google Analytics | +| API calls/day | 500+ | API logs | +| Feature usage rate | 80%+ | Telemetry | + +--- + +## 🚫 Constraints & Assumptions + +### Constraints + +#### Tecnici +- Ollama deve essere in esecuzione (hard requirement) +- Python 3.10+ necessario +- Docker richiesto per containerizzazione +- Browser moderno necessario (Web Workers) + +#### Organizzativi +- Team: 1-2 developer +- Budget: Open source (free) +- Timeline: Sprint 2 settimane + +#### User +- Conoscenza base di Docker +- Accesso locale a Ollama +- Browser moderno + +### Assumptions + +#### Prodotto +- Ollama API rimane stabile +- Modelli LLM sono relativamente statici (cambiano meno di 24h) +- Refresh ogni 30s Γ¨ adeguato + +#### Tecnico +- Web Workers supportati dai browser target +- localStorage disponibile (non private mode) +- CORS enabled tra client e server + +#### Market +- Ollama diventerΓ  standard per LLM locali +- Interesse crescente in monitoring tools +- Community contribuirΓ  improvement + +--- + +## πŸ“ Note Implementative + +### Dependencies +``` +fastapi==0.104.1 +uvicorn==0.24.0 +pydantic==2.5.0 +requests==2.31.0 +jinja2==3.1.2 +``` + +### Dev Dependencies +``` +pytest==7.4.3 +black==23.12.0 +flake8==6.1.0 +mypy==1.7.1 +``` + +### File Structure +``` +llm-monitor/ +β”œβ”€β”€ main.py # FastAPI entry point +β”œβ”€β”€ app/ +β”‚ β”œβ”€β”€ config.py # Configuration +β”‚ β”œβ”€β”€ api/ # Endpoints +β”‚ β”œβ”€β”€ services/ # Business logic +β”‚ └── web/ # Frontend (HTML, JS, CSS) +β”œβ”€β”€ tests/ # Test suite +β”œβ”€β”€ Dockerfile # Container +└── docker-compose.yml # Orchestration +``` + +--- + +## πŸ”— Riferimenti + +### Documentazione Esterna +- [FastAPI Docs](https://fastapi.tiangolo.com/) +- [Ollama API](https://github.com/ollama/ollama/blob/main/docs/api.md) +- [Web Workers MDN](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) +- [localStorage API](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) + +### Repository +- [GitHub: llm-monitor](https://github.com/lucasacchiNet/llm-monitor) +- [Docker Hub: llm-monitor](https://hub.docker.com/r/lucasacchi/llm-monitor) + +--- + +## ✍️ Changelog PRD + +| Data | Versione | Autore | Cambiamenti | +|------|----------|--------|------------| +| 2024-04-24 | 1.0 | Luca Sacchi | Documento iniziale | +| 2024-04-25 | 1.1 | - | TBD | + +--- + +**Documento approvato:** βœ… +**Revisore:** Product Team +**Ultimo aggiornamento:** Aprile 2024 +**Prossima review:** Giugno 2024 +