ImportFattureAI / settings_ai.py
MatteoScript's picture
Create settings_ai.py
4420602 verified
from google.ai.generativelanguage_v1beta.types import content
from typing import List, Optional
from pydantic import BaseModel, ValidationError
from dotenv import load_dotenv
load_dotenv()
import os
ENDPOINT_AZURE = os.getenv("ENDPOINT_AZURE")
API_AZURE = os.getenv("API_AZURE")
API_KEY_GEMINI = os.getenv("API_KEY_GEMINI")
NO_ARTICLE = "NESSUN_ARTICOLO_COMPATIBILE"
SYSTEM_INSTRUCTION = (
"Sei un esperto lettore di documenti. "
"Estrai il tutto il formato JSON come da schema fornito! "
"Mi raccomando compila tutti i campi! "
"Estra SOLO gli Articoli il cui codice inizia per 'AVE' o 'AV' o '3V' o '44'. Attenzione a quelli che iniziano per 'GEW 44..' sono da ESCLUDERE! "
"Nel campo 'TotaleNonIvato' inserisci il TOTALE MERCE per riga senza Iva: (Quantità * Prezzo Unitario) - Sconto. "
"Potrebbe non esserci lo 'Sconto' oppure potrebbe esserci direttamente il TOTALE MERCE per riga. "
"La 'Data' documento mettila in formato YYYY-MM-DD. "
"Attenzione, a volte ci sono articoli con DESCRIZIONE AVE ma con codice NON CORRISPONDENTE, devi escluderli! "
"Attenzione, a volte gli articoli AVE sono dentro la parentesi per esempio 'A789532 (AVE001)', qui l'articolo risulta COMPATIBILE perché ha AVE! "
"Attenzione, a volte i TOTALI hanno la formattazione con il punto (.) che rappresenta il SEPARATORE DELLE MIGLIAIA! Quindi 1.234,50 è 1234,50! "
f"Se non sono presenti articoli compatibili scrivi '{NO_ARTICLE}' nel codice articolo e metti 0 nel 'TotaleNonIvato'"
)
USER_MESSAGE = (
"Estrai i dati in formato JSON. "
)
class Articolo(BaseModel):
CodiceArticolo: str
DescrizioneArticolo: str
TotaleNonIvato: float
Verificato: Optional[int] = None
class Documento(BaseModel):
TipoDocumento: str
NumeroDocumento: str
Data: str
TotaleImponibile: float
Articoli: List[Articolo]
GENERATION_CONFIG = {
"temperature": 0.01,
"top_p": 0.1,
"top_k": 5,
"max_output_tokens": 500000,
"response_schema": content.Schema(
type=content.Type.OBJECT,
required=["TipoDocumento", "NumeroDocumento", "Data", "TotaleImponibile"],
properties={
"TipoDocumento": content.Schema(type=content.Type.STRING, enum=["FATTURA", "DDT"]),
"NumeroDocumento": content.Schema(type=content.Type.STRING),
"Data": content.Schema(type=content.Type.STRING),
"TotaleImponibile": content.Schema(type=content.Type.NUMBER),
"Articoli": content.Schema(
type=content.Type.ARRAY,
items=content.Schema(
type=content.Type.OBJECT,
required=["CodiceArticolo", "DescrizioneArticolo", "TotaleNonIvato"],
properties={
"CodiceArticolo": content.Schema(type=content.Type.STRING),
"DescrizioneArticolo": content.Schema(type=content.Type.STRING),
"TotaleNonIvato": content.Schema(type=content.Type.NUMBER),
},
),
)
},
),
"response_mime_type": "application/json",
}