Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
0559f9d
first commit
nalanshi Aug 1, 2025
42d7930
changed project structure, add automatic test and much more ..
nalanshi Aug 2, 2025
c9a49b3
changed project structure
nalanshi Aug 3, 2025
a49df05
import bug fixed
nalanshi Aug 6, 2025
d63435c
import bug fixed
nalanshi Aug 6, 2025
8c08a6b
fixed port issue
nalanshi Aug 7, 2025
827232e
modificato il testo
nalanshi Aug 7, 2025
55397db
Update README.md
cola-marco Aug 7, 2025
5e61940
Update README.md
cola-marco Aug 7, 2025
d4a4acf
Update README.md
cola-marco Aug 7, 2025
45ea955
Update README.md
cola-marco Aug 7, 2025
27f3409
Update README.md
cola-marco Aug 7, 2025
c087ba2
some changes
nalanshi Aug 8, 2025
aea5814
Merge branch 'dev' of https://github.com/7Commits/MVP into dev
nalanshi Aug 8, 2025
e04ee78
some changes
nalanshi Aug 8, 2025
e7bb666
some changes
nalanshi Aug 8, 2025
7cb5ae3
db fixed
nalanshi Aug 8, 2025
885b334
clean code
nalanshi Aug 8, 2025
83a3e5a
improved the stucture , added some test file
nalanshi Aug 11, 2025
f4f3b0a
modified requirements
nalanshi Aug 11, 2025
4a24fe6
added all test unit
nalanshi Aug 11, 2025
a6ac57a
some changes
nalanshi Aug 16, 2025
5941dd8
Spostato tutto il CSS su file apposito
dalpoz01 Aug 17, 2025
a698948
Modificato menu
dalpoz01 Aug 18, 2025
5098a3f
Aggiornamento CSS
dalpoz01 Aug 22, 2025
b451cba
Aggiornato file app.py
dalpoz01 Aug 22, 2025
c3a32fa
Modifica stile bottoni
dalpoz01 Aug 22, 2025
45712f4
rimosso blanks e cambiato view in views nel file yml di CI
cola-marco Aug 22, 2025
e0fe82a
rimossi altri blanks per test flake8
cola-marco Aug 22, 2025
945f562
rimossi altri blanks per test flake8
cola-marco Aug 22, 2025
9f4ad83
rimossi altri blanks per test flake8
cola-marco Aug 22, 2025
4c85dcc
rimossi altri blanks per test flake8
cola-marco Aug 22, 2025
2718c6d
rimossi altri blanks per test flake8
cola-marco Aug 22, 2025
fa54059
rimossi altri blanks per test flake8
cola-marco Aug 22, 2025
59b712f
changed pyproject to ignore some kind of error
nalanshi Aug 24, 2025
f48f3f5
Merge pull request #1 from 7Commits/stefano
nalanshi Aug 25, 2025
ed2a163
Modifica grafica a gestione domande e gestione set
dalpoz01 Aug 25, 2025
655b622
upload file error fixed
nalanshi Aug 25, 2025
b251529
changed config file for github action
nalanshi Aug 25, 2025
43e5d14
Merge pull request #2 from 7Commits/stefano
nalanshi Aug 25, 2025
8334a5c
test file fixed
nalanshi Aug 25, 2025
5185a54
test file fixed
nalanshi Aug 25, 2025
48bbd5c
Update development dependencies in requirements-dev.txt
nalanshi Aug 25, 2025
e3dc0fb
Update requirements.txt
nalanshi Aug 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[flake8]
max-line-length = 120
extend-ignore = E203,W503
42 changes: 42 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: CI

on:
push:
branches: [ main ]
pull_request:

jobs:
test:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.0
env:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
MYSQL_ROOT_HOST: '%'
MYSQL_DATABASE: llm_platform
ports:
- 3306:3306
options: >-
--health-cmd="mysqladmin ping"
--health-interval=10s
--health-timeout=5s
--health-retries=3
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -r requirements-dev.txt
- name: Configure database for tests
run: sed -i 's/host=db/host=127.0.0.1/' db.config.example
- name: Run linters
run: |
flake8 --ignore=E501,W504,E261 app.py controllers/ models/ views/
mypy app.py controllers/ models/ views/
- name: Run tests
run: pytest --cov=controllers --cov=models
6 changes: 6 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["streamlit", "run", "app.py", "--server.port", "8501", "--server.address", "0.0.0.0"]
244 changes: 242 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,242 @@
# MVP
Repository per il Minimum Viable Product della fase PB
# Artificial QI – Minimum Viable Product🧠⚙️

Piattaforma sviluppata dal gruppo **7Commits** per la valutazione delle prestazioni di LLM (Large Language Models).

## 👥 Componenti del Gruppo:
- **Marco Cola** - 2079237
- **Ruize Lin** - 2068236
- **Stefano Dal Poz** - 1204683
- **Giulia Hu** - 2009118
- **Mattia Piva** - 2008065
- **Giada Rossi** - 2045353

---

## 📦 Requisiti

> Puoi eseguire la webapp **con Docker** (consigliato) oppure **con Python + MySQL** in locale.

### 🔧 Requisiti comuni

- [x] **Git**
- [x] File `db.config` (creato da `db.config.example`)

---

### 📦 Requisiti per l’**esecuzione con Docker** (consigliato)

- [x] Docker ≥ 20.10
- [x] Docker Compose

### 🐍 Requisiti per l’**esecuzione con Python**

- [x] Python ≥ 3.10
- [x] MySQL ≥ 5.7
- [x] `pip install -r requirements.txt`

---

## 📁 Clonazione del progetto

```bash
git clone https://github.com/7Commits/MVP
cd MVP
cp db.config.example db.config

```

## 🐳 Avvio con Docker

Assicurati che il file db.config contenga:
```bash
[mysql]
host=db
user=root
password=
database=llm_platform
port=3306
```

poi esegui:
```bash
docker compose up -d --build
```

infine accedi alla webapp:
[localhost:8501](http://localhost:8501)


## 🛑 Arresto dell'app (Docker)

Per mettere in pausa:

```bash
docker compose stop
```

Per spegnere e rimuovere:

```bash
docker compose down
```

## 🐍 Avvio con Python + MySQL locale

1. Avvia il tuo server MySQL locale (con porta, user e password compatibili)

2. Modifica db.config così:
```bash
[mysql]
host=localhost
user=root
password=your_password_here
database=llm_platform
port=3306
ssl_ca=
```
3. Installa le dipendenze Python:
```bash
pip install -r requirements.txt
```

4. Avvia l'app con:
```bash
python -m streamlit run app.py --server.port 8501
```

# 🧪 Guida all’Uso dell’Applicazione

## 🏠 Pagina Home

La pagina iniziale della webapp mostra una descrizione dell’app e un menu laterale con le varie sezioni disponibili.

---

## ⚙️ Configurazione API

In questa sezione puoi creare dei **preset** di connessione per i vari LLM, inserendo:

- Nome del preset
- Chiave API
- Endpoint del provider (URL)
- Modello da utilizzare
- Temperatura di generazione

Puoi salvare, modificare o eliminare preset già configurati.

---

## ❓ Gestione Domande

Qui puoi gestire le **domande e risposte attese**:

- Inserire manualmente domanda e risposta, oppure set di domande e risposte
- Modificare o eliminare una voce
- Importare un file `.csv` o `.json` con domande e risposte attese

### 📄 Esempio di formato richiesto per importazione domande e risposte CSV
Deve includere le colonne 'domanda' e 'risposta_attesa'. Può includere opzionalmente 'categoria'.
```csv
domanda,risposta_attesa,categoria
"Quanto fa 2+2?","4","Matematica Base"
"Qual è la capitale della Francia?","Parigi","Geografia"
"Chi ha scritto 'Amleto'?","William Shakespeare","Letteratura"
```

### 📄 Esempio di formato richiesto per importazione domande e risposte JSON
Deve contenere un array di oggetti con i campi 'domanda' e 'risposta_attesa'. Può includere opzionalmente 'categoria'.
```json
[
{
"domanda": "Quanto fa 2+2?",
"risposta_attesa": "4",
"categoria": "Matematica Base"
},
{
"domanda": "Qual è la capitale della Francia?",
"risposta_attesa": "Parigi",
"categoria": "Geografia"
},
{
"domanda": "Chi ha scritto 'Romeo e Giulietta'?",
"risposta_attesa": "William Shakespeare"
}
]
```

### 📄 Esempio di formato richiesto per importazione set di domande e risposte CSV
Ogni riga deve contenere le colonne name (nome del set), id (ID della domanda), domanda (testo), risposta_attesa e categoria.
```csv
name,id,domanda,risposta_attesa,categoria
Capitali,1,Qual è la capitale della Francia?,Parigi,Geografia
Capitali,2,Qual è la capitale della Germania?,Berlino,Geografia
Matematica Base,3,Quanto fa 2+2?,4,Matematica
Matematica Base,4,Quanto fa 10*4?,40,Matematica
```


### 📄 Esempio di formato richiesto per importazione set di domande e risposte JSON

```json
[
{
"name": "Capitali",
"questions": [
{
"id": "1",
"domanda": "Qual è la capitale della Francia?",
"risposta_attesa": "Parigi",
"categoria": "Geografia"
},
{
"id": "2",
"domanda": "Qual è la capitale della Germania?",
"risposta_attesa": "Berlino",
"categoria": "Geografia"
}
]
},
{
"name": "Matematica Base",
"questions": [
{
"id": "3",
"domanda": "Quanto fa 2+2?",
"risposta_attesa": "4",
"categoria": "Matematica"
},
{
"id": "4",
"domanda": "Quanto fa 10*4?",
"risposta_attesa": "40",
"categoria": "Matematica"
}
]
}
]
```
#### Note importazione:

- Se una domanda con lo stesso ID esiste già, non verrà aggiunta nuovamente
- Se un set con lo stesso nome esiste già, verrà saltato
- Solo le domande nuove verranno aggiunte al database
- Le domande esistenti verranno referenziate nei nuovi set


## 💬 Supporto tecnico

In caso di problemi o domande, contattare:

- 📧 Email: [7commits@gmail.com](mailto:7commits@gmail.com)

Inserendo eventuali messaggi di errore e una breve descrizione del problema.










41 changes: 41 additions & 0 deletions app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import logging

import streamlit as st

from views.session_state import initialize_session_state
from views.style_utils import load_css
from utils.startup_utils import setup_logging

logger = logging.getLogger(__name__)

setup_logging()
logger.info("Applicazione avviata")

# Imposta la configurazione della pagina
st.set_page_config(
page_title="LLM Test Evaluation Platform",
page_icon="🧠",
layout="wide",
initial_sidebar_state="expanded"
)
initialize_session_state()

# Applicazione principale
st.title("🧠 LLM Test Evaluation Platform - Artificial QI")

# Aggiungi CSS personalizzato e stili globali
load_css()

# --- Definizione pagine con il nuovo sistema ---
Home = st.Page("views/home.py", title="Home", icon=":material/home:", default=True)
Configurazione_API = st.Page("views/api_configurazione.py", title="Configurazione API", icon=":material/api:")
Gestione_domande = st.Page("views/gestione_domande.py", title="Gestione Domande", icon=":material/construction:")
Gestione_set = st.Page("views/gestione_set.py", title="Gestione Set di Domande", icon=":material/list:")
Esecuzione_test = st.Page("views/esecuzione_test.py", title="Esecuzione Test", icon=":material/rule_settings:")
Visualizza_risultati = st.Page("views/visualizza_risultati.py",
title="Visualizzazione Risultati",
icon=":material/bar_chart:")

# --- Navigazione ---
pg = st.navigation([Home, Configurazione_API, Gestione_domande, Gestione_set, Esecuzione_test, Visualizza_risultati])
pg.run()
Loading