migrate from pip to uv for dependency management
- Add pyproject.toml and uv.lock for modern Python packaging - Update README and Dockerfile to use uv instead of pip
This commit is contained in:
31
Dockerfile
31
Dockerfile
@@ -1,14 +1,25 @@
|
|||||||
# Per ora abbiamo bisogno solo di python, se nel futuro avremo bisogno di pytorch/cuda possiamo sempre tornare indietro
|
# Vogliamo usare una versione di linux leggera con già uv installato
|
||||||
#FROM pytorch/pytorch:2.6.0-cuda12.6-cudnn9-devel
|
# Infatti scegliamo l'immagine ufficiale di uv che ha già tutto configurato
|
||||||
FROM python:3.11-slim
|
# Nel caso in cui si volesse usare un'altra immagine di base che ha magari CUDA
|
||||||
|
# bisognerebbe installare uv manualmente come descritto nel README
|
||||||
|
#FROM pytorch/pytorch:2.6.0-cuda12.6-cudnn9-devel # Lo lascio qui nel caso
|
||||||
|
FROM ghcr.io/astral-sh/uv:python3.12-alpine
|
||||||
|
|
||||||
# Copio tutti i dati del progetto nella workdir
|
# Dopo aver definito la workdir mi trovo già in essa
|
||||||
# (dopo aver definito la workdir mi trovo già in essa)
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY src .
|
|
||||||
COPY requirements.txt .
|
|
||||||
COPY LICENSE .
|
|
||||||
|
|
||||||
# Installo le dipendenze
|
# Settiamo variabili d'ambiente per usare python del sistema invece che venv
|
||||||
RUN pip install --no-cache-dir -r requirements.txt
|
ENV UV_PROJECT_ENVIRONMENT=/usr/local
|
||||||
|
ENV UV_LINK_MODE=copy
|
||||||
|
|
||||||
|
# Copiamo prima i file di configurazione delle dipendenze e installiamo le dipendenze
|
||||||
|
COPY pyproject.toml ./
|
||||||
|
COPY uv.lock ./
|
||||||
|
RUN uv sync --frozen --no-cache
|
||||||
|
|
||||||
|
# Copiamo i file sorgente dopo aver installato le dipendenze per sfruttare la cache di Docker
|
||||||
|
COPY LICENSE .
|
||||||
|
COPY src ./src
|
||||||
|
|
||||||
|
# Comando di default all'avvio dell'applicazione
|
||||||
CMD ["python", "src/app.py"]
|
CMD ["python", "src/app.py"]
|
||||||
|
|||||||
36
README.md
36
README.md
@@ -8,38 +8,26 @@ Questa è la repository per l'esame di Applicazioni Intelligenti che consiste in
|
|||||||
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.
|
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.
|
||||||
|
|
||||||
# Installazione
|
# Installazione
|
||||||
Per l'installazione si può utilizzare un approccio tramite **pip** (manuale) oppure utilizzare un ambiente **Docker** già pronto (automatico)
|
Per l'installazione si può utilizzare un approccio tramite **uv** (manuale) oppure utilizzare un ambiente **Docker** già pronto (automatico)
|
||||||
|
|
||||||
### PIP
|
### UV
|
||||||
**1. Ambiente**: Per prima cosa si deve creare un nuovo environment Python:
|
**1. Installazione uv**: Per prima cosa installa uv se non è già presente sul sistema:
|
||||||
```sh
|
```sh
|
||||||
python -m venv .venv
|
# Windows (PowerShell)
|
||||||
|
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
|
||||||
|
|
||||||
|
# macOS/Linux
|
||||||
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
**2. Attivare l'ambiente**: dobbiamo usare uno dei seguenti comandi, in base al fatto che siamo su Windows o Unix.
|
**2. Ambiente e dipendenze**: uv installerà python e creerà automaticamente l'ambiente virtuale con le dipendenze corrette:
|
||||||
|
|
||||||
*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 ```
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Unix
|
uv sync --frozen --no-cache
|
||||||
source .venv/bin/activate
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
.venv/Scripts/activate
|
|
||||||
|
|
||||||
# Windows (PS)
|
|
||||||
.venv/Scripts/Activate.ps1
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**3. Dipendenze**: Infine installiamo le dipendenze nell'ambiente appena creato:
|
**3. Run**: Successivamente si può far partire il progetto tramite il comando:
|
||||||
```sh
|
```sh
|
||||||
python -m pip install -r requirements.txt
|
uv run python src/app.py
|
||||||
```
|
|
||||||
|
|
||||||
**4. Run**: Successivamente si può far partire il progetto tramite il comando:
|
|
||||||
```sh
|
|
||||||
python src/app.py
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Docker
|
### Docker
|
||||||
|
|||||||
36
pyproject.toml
Normal file
36
pyproject.toml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
[project]
|
||||||
|
name = "upo-app-ai"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "Agente di Pianificazione Viaggi Intelligente"
|
||||||
|
requires-python = "==3.12.*"
|
||||||
|
|
||||||
|
# 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.
|
||||||
|
# Inoltre ho messo una emoji per indicare se è raccomandato o meno.
|
||||||
|
dependencies = [
|
||||||
|
# ✅ per gestire variabili d'ambiente (generalmente API keys o opzioni)
|
||||||
|
"dotenv",
|
||||||
|
|
||||||
|
# 🟡 per fare richieste HTTP
|
||||||
|
"requests",
|
||||||
|
# 🟡 per fare scraping di pagine web
|
||||||
|
"bs4",
|
||||||
|
|
||||||
|
# ✅ per fare una UI web semplice con input e output
|
||||||
|
"gradio",
|
||||||
|
|
||||||
|
# 🟡 per fare in modo di ottenere dati validati e strutturati
|
||||||
|
"pydantic",
|
||||||
|
|
||||||
|
# ❌ per l'elaborazione del linguaggio naturale in locale (https://huggingface.co/learn/llm-course/chapter1/3?fw=pt)
|
||||||
|
"transformers",
|
||||||
|
# ❌ per interagire con l'API di OpenAI e di altri (basta cambiare il baseurl)
|
||||||
|
"openai",
|
||||||
|
# ❌ per fare chiamate a modelli indipendentemente dal modello specifico (astrae meglio rispetto a openai)
|
||||||
|
"langchain",
|
||||||
|
# ✅ per costruire agenti (ovvero modelli che possono fare più cose tramite tool) https://github.com/agno-agi/agno
|
||||||
|
# altamente consigliata dato che ha anche tools integrati per fare scraping, calcoli e molto altro
|
||||||
|
"agno",
|
||||||
|
]
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# 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.
|
|
||||||
# Inoltre ho messo una emoji per indicare se è raccomandato o meno.
|
|
||||||
|
|
||||||
# ✅ per gestire variabili d'ambiente (generalmente API keys o opzioni)
|
|
||||||
dotenv
|
|
||||||
|
|
||||||
# 🟡 per fare richieste HTTP
|
|
||||||
requests
|
|
||||||
# 🟡 per fare scraping di pagine web
|
|
||||||
bs4
|
|
||||||
|
|
||||||
# ✅ per fare una UI web semplice con input e output
|
|
||||||
gradio
|
|
||||||
|
|
||||||
# 🟡 per fare in modo di ottenere dati validati e strutturati
|
|
||||||
pydantic
|
|
||||||
|
|
||||||
# ❌ per l'elaborazione del linguaggio naturale in locale (https://huggingface.co/learn/llm-course/chapter1/3?fw=pt)
|
|
||||||
transformers
|
|
||||||
# ❌ per interagire con l'API di OpenAI e di altri (basta cambiare il baseurl)
|
|
||||||
openai
|
|
||||||
# ❌ per fare chiamate a modelli indipendentemente dal modello specifico (astrae meglio rispetto a openai)
|
|
||||||
langchain
|
|
||||||
# ✅ per costruire agenti (ovvero modelli che possono fare più cose tramite tool) https://github.com/agno-agi/agno
|
|
||||||
# altamente consigliata dato che ha anche tools integrati per fare scraping, calcoli e molto altro
|
|
||||||
agno
|
|
||||||
Reference in New Issue
Block a user