From a88b2bdd6060fdab0e3cea8355b67ba89cf08a5d Mon Sep 17 00:00:00 2001 From: Berack96 Date: Wed, 3 Sep 2025 16:36:19 +0200 Subject: [PATCH] Remove obsolete Docker configuration and documentation; add new Dockerfile, docker-compose, and update README for project setup --- ...avoro - Edit Docker Container Settings.png | Bin 21333 -> 0 bytes ...iente di Lavoro - Run and Debug config.png | Bin 85506 -> 0 bytes .../Configurazione Ambiente di Lavoro.md | 117 ------------------ Configurazione Ambiente di Lavoro/Dockerfile | 14 --- .../requirements.txt | 7 -- Dockerfile | 14 +++ Programmazione App Intelligenti.md | 92 +++++--------- README.md | 51 ++++++-- docker-compose.yaml | 8 ++ requirements.txt | 17 +++ src/app.py | 4 + 11 files changed, 116 insertions(+), 208 deletions(-) delete mode 100644 Configurazione Ambiente di Lavoro/Configurazione Ambiente di Lavoro - Edit Docker Container Settings.png delete mode 100644 Configurazione Ambiente di Lavoro/Configurazione Ambiente di Lavoro - Run and Debug config.png delete mode 100644 Configurazione Ambiente di Lavoro/Configurazione Ambiente di Lavoro.md delete mode 100644 Configurazione Ambiente di Lavoro/Dockerfile delete mode 100644 Configurazione Ambiente di Lavoro/requirements.txt create mode 100644 Dockerfile create mode 100644 docker-compose.yaml create mode 100644 requirements.txt create mode 100644 src/app.py diff --git a/Configurazione Ambiente di Lavoro/Configurazione Ambiente di Lavoro - Edit Docker Container Settings.png b/Configurazione Ambiente di Lavoro/Configurazione Ambiente di Lavoro - Edit Docker Container Settings.png deleted file mode 100644 index 0d7aaaaefad2529b6ff9ca4ca829e5c9c03733de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21333 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 diff --git a/Configurazione Ambiente di Lavoro/Configurazione Ambiente di Lavoro.md b/Configurazione Ambiente di Lavoro/Configurazione Ambiente di Lavoro.md deleted file mode 100644 index c32022e..0000000 --- a/Configurazione Ambiente di Lavoro/Configurazione Ambiente di Lavoro.md +++ /dev/null @@ -1,117 +0,0 @@ -### Passo 0: Gestire Windows -La natura di questa guida è permettere agli utenti Windows di lavorare con Docker e con la GPU nei progetti pytorch (similarmente tensorflow). Rispettare questi passi, possibilmente in ordine: -1. Installare i driver aggiornati della propria GPU Nvidia -2. Installare [Nvidia Toolkit](https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=11&target_type=exe_local) dal sito ufficiale Nvidia. - 1. Se tutto va a buon fine lanciare in Powershell il comando `nvidia-smi` e dovrebbe comparire un output simile a questo: - -```bash - Fri Mar 7 13:57:22 2025 -+-----------------------------------------------------------------------------------------+ -| NVIDIA-SMI 570.124.03 Driver Version: 572.60 CUDA Version: 12.8 | -|-----------------------------------------+------------------------+----------------------+ -| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | -| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | -| | | MIG M. | -|=========================================+========================+======================| -| 0 NVIDIA GeForce RTX 4090 On | 00000000:0C:00.0 On | Off | -| 31% 57C P2 312W / 450W | 14791MiB / 24564MiB | 91% Default | -| | | N/A | -+-----------------------------------------+------------------------+----------------------+ - -+-----------------------------------------------------------------------------------------+ -| Processes: | -| GPU GI CI PID Type Process name GPU Memory | -| ID ID Usage | -|=========================================================================================| -| No running processes found | -+-----------------------------------------------------------------------------------------+ -``` - -3. Windows mantiene la compatibilità con i vari tool e framework appoggiandosi a WSL2, ossia la virtualizzazione integrata di Linux. È quindi necessario avere l'opzione di virtualizzazione abilitata nel proprio BIOS del computer. Se WSL2 si apre significa che è già attiva e non devi fare niente. Si consiglia una versione Ubuntu ma non dovrebbero esserci problemi con altre distro. -4. WSL2 permette il pass through della GPU solo installando nella distro WSL2 scelta le dipendenze necessarie come indicato [sul sito Nvidia](https://docs.nvidia.com/cuda/wsl-user-guide/index.html). Anche da WSL2 lanciare il comando `nvidia-smi` e aspettarsi un output simile al precedente. -5. Installare Docker su Windows e nelle impostazioni sotto al tab `Generale` controllare che sia abilitato l'uso di WSL2. Oramai di default è abilitato ma per scrupolo controllare. -### Passo 1: Creare un file Dockerfile - -1. **Crea il Dockerfile**: All'interno della tua directory del progetto, crea un file chiamato `Dockerfile`. (Sì, senza estensione) - -2. **Contenuto del Dockerfile**: -```dockerfile -# Usa l'immagine base di PyTorch con supporto per CUDA 12.6 e CuDNN 9 -FROM pytorch/pytorch:2.6.0-cuda12.6-cudnn9-devel - -# Imposta il working directory all'interno del container -WORKDIR /upo-appAI - -# Copia i file necessari nel container -COPY requirements.txt . - -# Installa le dipendenze Python dalla lista in requirements.txt -RUN pip install --no-cache-dir -r requirements.txt - -# Copia i file del progetto all'interno del container -COPY . /upo-appAI -``` - -### Passo 2: Costruire l'immagine Docker - -1. **Costruisci l'immagine**: Apri un terminale e naviga alla directory `upo-appAI`. Esegui il seguente comando per costruire l'immagine Docker: -```bash -docker build -t appAI . -``` -Da questo momento l'immagine avrà il nome di `appAI` -### Passo 3: Creare e gestire un container -Per il momento ci occuperemo di crearne uno ma se serve agganciarlo ad un IDE l'operazione potrebbe richiedere configurazioni specifiche per il singolo IDE. Ad esempio Pycharm di Jetbrains crea un nuovo container a partire dalla immagine compilata o addirittura direttamente dal dockerfile, quindi se interessa Pycharm saltare al punto che lo tratta senza creare il container come indicato qui sotto, anche se raccomandato leggerlo per conoscenza. - -**Avvia il container**: Una volta che l'immagine è stata costruita, puoi avviare un container con il comando che segue avendo cura di essere nel percorso della cartella di progetto: -```bash -docker run --name appAI_container --gpus all -v ${PWD}:/upo-appAI -it appAI /bin/sh -``` -Questo comando monta la directory corrente sul volume del container e ti dà accesso a una shell interattiva. Attenzione: -* In PowerShell, la sintassi corretta per ottenere il percorso corrente è `${PWD}` mentre su shell Linux sarebbe `$(pwd)`, se capita di usare comandi suggeriti da vari LLM prestarci attenzione. -* Si può sostituire col percorso assoluto della cartella di progetto. - -È importante il `--gpus all` altrimenti CUDA non funziona. Sostituire `all` con il nome della GPU nel caso ce ne sia più di una e non interessa usarle tutte. -Per scrupolo, controlliamo che funzioni tutto bene nel container lanciando il comando nella shell del cocker appena avviato: -```shell -python -c "import torch; print(torch.__version__); print('CUDA available:', torch.cuda.is_available())" -``` -Ci si aspetta questo output: -```bash -2.6.0+cu126 -CUDA available: True -``` - -Una alternativa è lanciare il comando `nvidia-smi` aspettandosi come output qualcosa di molto simile a quanto visto sopra. - -Per accedere in un secondo momento alla shell del Docker usare il comando: -```shell -docker exec -it appAI_container /bin/sh -``` - - -#### Manipolazione Generale -Per gestire i container docker si può passare da GUI (Windows) o da CLI ma in entrambi i casi i container non possono essere modificati runtime. - -##### Rimozione container -O da GUI usando i 3 puntini verticali sul nome del container, o da CLI coi comandi -```shell -docker stop appAI_container # STOP del docker prima della rimozione -docker rm appAI_container # Eliminazione effettiva del contenitore -``` - -##### Riavvio Container -Sempre o da GUI o col comando: -```bash -docker restart appAI_container -``` - -#### Pycharm -Premessa: pycharm non si aggancia ad un container esistente di default quindi o si crea una connessione di rete (anche locale) oppure pycharm ha bisogno di creare il suo. Per ragioni di comodità si sceglie di lasciar creare un nuovo container a pycharm. -Per usare docker come python interpreter bisogna aggiungerne un nuovo interprete e selezionare docker. Qui si può scegliere se selezionare l'immagine già compilata o partire dal Dockerfile. Attenzione!!! Qui non è possibile specificare il `--gpus all` e andrà fatto dopo la creazione del Docker. Una volta finito andare nelle opzioni di esecuzione in `Edit Configurations` tirando giù il menu a tendina di fianco al bottone play in alto a destra. - -Configurazione Ambiente di Lavoro - Edit Docker Container Settings - -In `docker container setting` fare click sul simbolo della cartella. Si aprirà una finestra in cui in fondo bisogna inserire dentro a `Run options` l'opzione `--gpus all`. - -Configurazione Ambiente di Lavoro - Edit Docker Container Settings - diff --git a/Configurazione Ambiente di Lavoro/Dockerfile b/Configurazione Ambiente di Lavoro/Dockerfile deleted file mode 100644 index a5c9e66..0000000 --- a/Configurazione Ambiente di Lavoro/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -# Usa l'immagine base di PyTorch con supporto per CUDA 12.6 e CuDNN 9 -FROM pytorch/pytorch:2.6.0-cuda12.6-cudnn9-devel - -# Imposta il working directory all'interno del container -WORKDIR /upo-appAI - -# Copia i file necessari nel container -COPY requirements.txt . - -# Installa le dipendenze Python dalla lista in requirements.txt -RUN pip install --no-cache-dir -r requirements.txt - -# Copia i file del progetto all'interno del container -COPY . /upo-appAI \ No newline at end of file diff --git a/Configurazione Ambiente di Lavoro/requirements.txt b/Configurazione Ambiente di Lavoro/requirements.txt deleted file mode 100644 index 3ce1680..0000000 --- a/Configurazione Ambiente di Lavoro/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -pandas -numpy -tqdm -scikit-learn -matplotlib -seaborn -optuna \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7df2e2f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +# Per ora abbiamo bisogno solo di python, se nel futuro avremo bisogno di pytorch/cuda possiamo sempre tornare indietro +#FROM pytorch/pytorch:2.6.0-cuda12.6-cudnn9-devel +FROM python:3.11-slim + +# Copio tutti i dati del progetto nella workdir +# (dopo aver definito la workdir mi trovo già in essa) +WORKDIR /app +COPY src . +COPY requirements.txt . +COPY LICENSE . + +# Installo le dipendenze +RUN pip install --no-cache-dir -r requirements.txt +CMD ["python", "src/app.py"] diff --git a/Programmazione App Intelligenti.md b/Programmazione App Intelligenti.md index c6439a7..3df1ef7 100644 --- a/Programmazione App Intelligenti.md +++ b/Programmazione App Intelligenti.md @@ -1,69 +1,37 @@ -## 1. Sistema di Pianificazione Domestica Intelligente Adattiva +Assolutamente. Ecco il piano di lavoro completo per il tuo progetto di esame, formattato come documento interno per una consultazione più semplice. -- **Ambito:** Domotica (si può simulare facilmente). -- **Idea:** Un sistema con diversi agenti che collaborano per pianificare le attività domestiche (pulizie, spesa, preparazione pasti) in modo adattivo in base a: - - **Preferenze dell'utente:** Apprese tramite interazione o configurazione iniziale. - - **Disponibilità di risorse:** Simulate (es. "frigorifero vuoto", "tempo libero"). - - **Eventi imprevisti:** Simulati (es. "ospiti inattesi", "cambio di programma"). -- **Intelligenza Dimostrata:** Gli agenti devono negoziare e ri-pianificare le attività in base alle nuove informazioni e priorità, utilizzando l'LLM per generare piani di azione coerenti e spiegazioni delle decisioni prese. Ad esempio, se arrivano ospiti, l'agente "cucina" potrebbe chiedere all'agente "spesa" di aggiungere ingredienti extra e all'agente "pulizie" di concentrarsi su determinate aree. -- **LLM Usage:** - - Generare suggerimenti per i piani di azione. - - Fornire spiegazioni in linguaggio naturale delle decisioni prese dagli agenti. - - Adattare il tono e il contenuto delle comunicazioni in base al contesto. -- **Agenti Potenziali:** - - Agente "Pianificatore": Coordina le attività. - - Agente "Cucina": Gestisce i pasti. - - Agente "Pulizie": Organizza la pulizia. - - Agente "Spesa": Si occupa degli acquisti. - - Agente "Calendario": Tiene traccia degli impegni. -- **Simulazione:** Puoi simulare lo stato della casa (frigorifero, calendario, "stanze sporche") tramite variabili o semplici file di testo che gli agenti possono leggere e modificare. Gli "eventi imprevisti" possono essere input manuali o generati casualmente. +--- +### **Progetto di Esame: Agente di Pianificazione Viaggi Intelligente** -## 2. Sistema di Raccomandazione di Itinerari Turistici Adattivo +#### **Obiettivo** +Creare un sistema di pianificazione viaggi basato su **LLM Agents** che genera itinerari personalizzati e adattivi in base a vincoli e informazioni in tempo reale. L'obiettivo è dimostrare la capacità del sistema di ragionare, adattarsi a eventi esterni e comunicare in modo intelligente. -- **Ambito:** Turismo (facile da simulare con dati pubblici). -- **Idea:** Un sistema che raccomanda itinerari turistici personalizzati in base a: - - **Interessi dell'utente:** Ricavati da input diretto o (idealmente) da una breve interazione con l'LLM. - - **Vincoli:** Tempo disponibile, budget, preferenze di trasporto. - - **Condizioni esterne:** Simulate (es. "meteo avverso", "chiusura di un'attrazione"). -- **Intelligenza Dimostrata:** Il sistema non si limita a presentare una lista statica di luoghi, ma adatta l'itinerario in tempo reale in base ai vincoli e agli eventi, magari suggerendo alternative o modificando l'ordine delle visite. L'LLM può essere usato per generare descrizioni coinvolgenti dei luoghi e per rispondere a domande specifiche. -- **LLM Usage:** - - Comprendere gli interessi dell'utente tramite conversazione. - - Generare descrizioni dei luoghi di interesse. - - Suggerire attività alternative in caso di imprevisti. - - Creare riepiloghi e narrazioni dell'itinerario. -- **Agenti Potenziali:** - - Agente "Profilo Utente": Gestisce gli interessi e i vincoli. - - Agente "Ricerca Luoghi": Recupera informazioni sui punti di interesse (potresti usare un piccolo database simulato o API pubbliche). - - Agente "Pianificatore Itinerari": Genera e adatta il percorso. - - Agente "Comunicazione": Interagisce con l'utente. -- **Simulazione:** Puoi simulare le "condizioni esterne" come cambiamenti meteo o chiusure tramite input manuali o eventi casuali. I dati sui luoghi turistici possono essere semplificati. +--- +#### **1. Input Utente e Analisi Preliminare** +L'utente interagisce con una semplice interfaccia, fornendo una richiesta di viaggio che include: +* **Vincoli finanziari:** Budget massimo. +* **Preferenze di viaggio:** Tipologia di vacanza (es. mare, montagna, città) e mezzo di trasporto preferito (es. treno, aereo). +* **Tempistiche:** Date di viaggio e durata. -## 3. Sistema di Supporto Tecnico Adattivo +L'**Agente di Comunicazione** riceve queste informazioni e, usando un **LLM**, le interpreta e le formatta per gli agenti successivi. -- **Ambito:** Supporto clienti (si può simulare un ambiente di problemi tecnici). -- **Idea:** Un sistema che aiuta a risolvere problemi tecnici simulati per un software o un dispositivo. -- **Intelligenza Dimostrata:** Il sistema non segue un semplice albero decisionale predefinito, ma adatta la sua strategia di troubleshooting in base alle risposte dell'utente e ai risultati dei tentativi di soluzione (simulati). L'LLM può essere usato per interpretare le descrizioni dei problemi e generare suggerimenti di soluzione in linguaggio naturale. -- **LLM Usage:** - - Comprendere la descrizione del problema fornita dall'utente. - - Generare potenziali cause e soluzioni. - - Fornire spiegazioni chiare dei passaggi da seguire. - - Adattare il tono e la complessità delle spiegazioni all'utente. -- **Agenti Potenziali:** - - Agente "Diagnostico": Analizza il problema. - - Agente "Base di Conoscenza": Accede a informazioni (simulate) su problemi e soluzioni. - - Agente "Esecutore (Simulato)": Simula l'esecuzione di azioni di troubleshooting e ne riporta un "risultato" (successo/fallimento). - - Agente "Comunicazione": Interagisce con l'utente. -- **Simulazione:** Puoi simulare un ambiente software/hardware con "problemi" definiti (es. "errore di connessione", "applicazione che non si avvia"). L'agente "Esecutore" simulerebbe l'applicazione di una soluzione e restituirebbe un esito. +--- +#### **2. Processo di Pianificazione e Acquisizione Dati** +Questo processo si basa sulla collaborazione di più agenti specializzati, in linea con l'approccio dei modelli di ragionamento. +* **Agente Pianificatore:** Sulla base della richiesta iniziale, questo agente genera internamente una serie di **idee di viaggio** iniziali. +* **Agente Meteo:** Per ogni destinazione, richiede le previsioni del tempo tramite un'API REST, come quella di `open-meteo.com`. +* **Agente Notizie:** Interroga un'API di notizie (`newsapi.com`) per rilevare eventuali eventi imprevisti o avvisi importanti per le località considerate. +* **Agente Ricerca:** Per ogni idea di viaggio, raccoglie informazioni essenziali sui **punti di interesse**, sfruttando un database statico o un'API semplificata, come suggerito nelle linee guida del progetto. +* **Agente Logistico:** Ottiene dati simulati su opzioni di viaggio (voli, treni) e costi per ciascuna destinazione. -## Punti Chiave per Dimostrare "Intelligenza" +--- +#### **3. Valutazione e Selezione Adattiva** +L'**Agente Pianificatore** valuta le idee di viaggio in base alle informazioni raccolte dagli altri agenti. +* **Valutazione Logica:** Analizza il budget e la compatibilità dei mezzi di trasporto. +* **Adattabilità:** Scarta o modifica le proposte se le condizioni esterne lo rendono necessario. Ad esempio, non proporrà un viaggio al mare se sono previste forti piogge, o cambierà l'ordine delle tappe in base a notizie rilevanti. -- **Adattabilità:** Il sistema deve cambiare il suo comportamento o piano d'azione in risposta a nuove informazioni o eventi. -- **Ragionamento:** Gli agenti devono mostrare una logica nel loro processo decisionale, anche se semplice. L'LLM può aiutare a esplicitare questo ragionamento. -- **Collaborazione:** Se ci sono più agenti, la loro interazione e coordinazione per raggiungere un obiettivo comune è fondamentale. -- **Comunicazione Intelligente:** L'uso dell'LLM per generare un linguaggio naturale che sia informativo, adattivo al contesto e all'utente. - -## Considerazioni per Sviluppo Non Eccessivo - -- **Semplificare la Simulazione:** Non è necessario creare un ambiente complesso. L'uso di variabili, file di testo o semplici API può essere sufficiente. -- **Concentrarsi sull'Interazione Agente-Agente e Agente-LLM:** Il cuore del progetto dovrebbe essere come gli agenti si coordinano e come utilizzano l'LLM per prendere decisioni e comunicare. -- **Non Ambire alla Perfezione:** Un prototipo funzionante che dimostri i concetti chiave è più importante di un sistema completo e rifinito. \ No newline at end of file +--- +#### **4. Presentazione dei Risultati** +Infine, il sistema presenta all'utente un massimo di tre proposte di viaggio. +* **Itinerari Dettagliati:** Ogni proposta include un riepilogo del viaggio, le tappe suggerite e i costi stimati. +* **Ragionamenti (Note):** Vengono aggiunte note esplicative che descrivono il processo decisionale degli agenti, dimostrando il "perché" della scelta fatta. Ad esempio, "Abbiamo evitato la città A perché le notizie riportano un evento di traffico locale". \ No newline at end of file diff --git a/README.md b/README.md index 79ba459..5cd22f3 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,46 @@ -# upo-appAI -Progetto per il corso di Applicazioni intelligenti. - - - - -### Esame +# **Progetto di Esame: Agente di Pianificazione Viaggi Intelligente** +Questa è la repository per l'esame di Applicazioni Intelligenti che consiste in: - Progetto per 2/3 del voto. - Orale per 1/3 dei punti compreso da: - Presentazione (come se lo facessimo ad un cliente) di gruppo - - Orale singolo con domande del corso (teoria e strumnenti visti + - Orale singolo con domande del corso (teoria e strumenti visti) + +L'obiettivo di questo progetto è creare un sistema basato su **LLM Agents** e deve dimostrare la capacità di ragionare, adattarsi a eventi esterni e comunicare in modo intelligente. + +Una prima idea è quella di fare un sistema che genera itinerari personalizzati e adattivi in base a vincoli e informazioni in tempo reale. + +## Installazione +Per l'installazione si possono seguire i seguenti step per creare l'ambiente corretto o utilizzare un ambiente Docker già pronto: + +**Ambiente**: Per prima cosa si deve creare un nuovo environment Python: +```sh +python -m venv .venv +``` + +**Attivare l'ambiente**: dobbiamo usare uno dei seguenti comandi, in base al fatto che siamo su Windows o Unix.\ +*Nota*: nel caso Windows non faccia partire lo script per policy interne di sicurezza, bisogna far eseguire questo comando prima di attivare l'ambiente virtuale creato: ``` Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser ``` + +|Sistema Operativo|Comando| +|:---|:---| +|Unix| ``` source .venv/bin/activate ``` | +|Windows| ``` .venv/Scripts/activate ``` | +|Windows (PS)| ``` .venv/Scripts/Activate.ps1 ``` | + +**Dipendenze**: Infine installiamo le dipendenze nell'ambiente appena creato: +```sh +python -m pip install -r requirements.txt +``` + +**Run**: Successivamente si può far partire il progetto tramite il comando: +```sh +python src/app.py +``` + +### Docker +Alternativamente, se si ha installato Docker, si può utilizzare il [Dockerfile](Dockerfile) e il [docker-compose.yaml](docker-compose.yaml) per creare il container con tutti i file necessari e già in esecuzione: +```sh +docker compose up -d +``` + +## Applicazione +TODO diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..4438e01 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,8 @@ +services: + app: + build: . + container_name: upo-app-ai + ports: + - "8000:8000" + volumes: + - .:/app diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2ccb2e2 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,17 @@ +# Qui ho messo alcune librerie utili utilizzate durante il corso. +# Se si nota che alcune non sono necessarie, si potrebbero rimuovere +# in modo da evitare conflitti o problemi futuri. +# Per ogni roba ho fatto un commento per evitare di dimenticarmi cosa fa chi. + +# per fare richieste HTTP +requests +# per l'elaborazione del linguaggio naturale in locale (https://huggingface.co/learn/llm-course/chapter1/3?fw=pt) +transformers +# per fare una UI web semplice con input e output +gradio +# per interagire con l'API di OpenAI e di altri (basta cambiare il baseurl) +openai +# per fare in modo di ottenere dati validati e strutturati +pydantic +# per gestire variabili d'ambiente (generalmente API keys o opzioni) +dotenv diff --git a/src/app.py b/src/app.py new file mode 100644 index 0000000..c9dbf67 --- /dev/null +++ b/src/app.py @@ -0,0 +1,4 @@ + +if __name__ == "__main__": + print("Hello World!") +