Spaces:
Sleeping
Sleeping
File size: 3,134 Bytes
4420602 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
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",
} |