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", | |
| } |