Spaces:
Sleeping
Sleeping
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", | |
} |