Spaces:
Running on Zero
Running on Zero
Commit ·
52a8d7a
1
Parent(s): 88d4d8f
Make the demo export image-only for faster transcription
Browse filesDrop the four PDFs from the synthetic example so the one-click demo processes
faster: PDFs take an extra render/extraction path on top of vision OCR. The
export is now 11 images (was 11 images + 4 PDFs, ~686 KB -> ~490 KB), still
covering every dashboard category at least once plus the uncategorized image.
Trim the chat's PDF follow-up lines accordingly and acknowledge the lodging
confirmation in text instead of a PDF attachment.
assets/example/example_data.zip
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0823eee93b60de36645a178088a26fc8f86f06a66bb2ee6ebe5f6957f1808e21
|
| 3 |
+
size 501385
|
finetune/vision/synthetic_example_export.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
| 1 |
"""Generate a small, fully synthetic WhatsApp export ZIP for demo ingestion.
|
| 2 |
|
| 3 |
-
The export is deliberately compact
|
| 4 |
-
category the dashboard surfaces (quote,
|
| 5 |
-
invoice, lodging, identity)
|
|
|
|
| 6 |
hand-authored sale arc that uses the agency glossary correctly -- a cotacao
|
| 7 |
is an orcamento (a not-yet-purchased estimate), a reserva carries a locator
|
| 8 |
(PNR), a pedido is the closed-sale invoice, and an embarque is the boarding
|
|
@@ -45,22 +46,19 @@ OWNER = "Voce"
|
|
| 45 |
CLIENT = "Bianca Almeida"
|
| 46 |
AGENCY = "Viva Mais Viagens"
|
| 47 |
|
| 48 |
-
#
|
| 49 |
-
#
|
| 50 |
-
#
|
|
|
|
| 51 |
MEDIA_PLAN: tuple[tuple[ArtifactKind, str], ...] = (
|
| 52 |
(ArtifactKind.AIR_QUOTE, "image"),
|
| 53 |
-
(ArtifactKind.AIR_QUOTE, "pdf"),
|
| 54 |
(ArtifactKind.ACCOMMODATION, "image"),
|
| 55 |
-
(ArtifactKind.ACCOMMODATION, "pdf"),
|
| 56 |
(ArtifactKind.IDENTITY_DOC, "image"),
|
| 57 |
(ArtifactKind.IDENTITY_DOC, "image"),
|
| 58 |
(ArtifactKind.SALE_INVOICE, "image"),
|
| 59 |
-
(ArtifactKind.SALE_INVOICE, "pdf"),
|
| 60 |
(ArtifactKind.PAYMENT_PROOF, "image"),
|
| 61 |
(ArtifactKind.PAYMENT_PROOF, "image"),
|
| 62 |
(ArtifactKind.AIR_RESERVATION, "image"),
|
| 63 |
-
(ArtifactKind.AIR_RESERVATION, "pdf"),
|
| 64 |
(ArtifactKind.BOARDING_PASS, "image"),
|
| 65 |
(ArtifactKind.BOARDING_PASS, "image"),
|
| 66 |
(ArtifactKind.REFERENCE_ONLY, "image"),
|
|
@@ -81,21 +79,20 @@ CONVERSATION: tuple[tuple[str, str, str], ...] = (
|
|
| 81 |
),
|
| 82 |
(SAY, CLIENT, "Isso. De preferência com conexão curta e um hotel perto da praia."),
|
| 83 |
(SEND, OWNER, "Primeira opção de orçamento, ida e volta com bagagem."),
|
| 84 |
-
(SAY, OWNER, "Esse é só o print. Segue o orçamento completo com as duas tarifas."),
|
| 85 |
-
(SEND, OWNER, "Orçamento detalhado em PDF."),
|
| 86 |
(SAY, CLIENT, "Gostei! A cotação já inclui o seguro viagem?"),
|
| 87 |
(SAY, OWNER, "Inclui sim. Só reforçando: por enquanto é orçamento, nada foi reservado ainda."),
|
| 88 |
(SAY, OWNER, "Te mando uma opção de hotel na orla."),
|
| 89 |
(SEND, OWNER, "Opção de hospedagem perto da praia."),
|
| 90 |
(SAY, CLIENT, "Esse ficou ótimo. Pode confirmar essa hospedagem."),
|
| 91 |
-
(
|
| 92 |
-
|
|
|
|
|
|
|
|
|
|
| 93 |
(SEND, CLIENT, "Documento do primeiro passageiro."),
|
| 94 |
(SEND, CLIENT, "E o do segundo passageiro."),
|
| 95 |
(SAY, OWNER, "Perfeito. Vou montar o pedido com passagens, hotel e seguro."),
|
| 96 |
(SEND, OWNER, "Pedido fechado para conferência."),
|
| 97 |
-
(SAY, OWNER, "Segue o pedido em PDF também."),
|
| 98 |
-
(SEND, OWNER, "Pedido em PDF."),
|
| 99 |
(SAY, CLIENT, "Combinado! Posso dar uma entrada no Pix e parcelar o resto?"),
|
| 100 |
(SAY, OWNER, "Pode sim. Faz o sinal no Pix e o restante a gente parcela no cartão."),
|
| 101 |
(SEND, CLIENT, "Comprovante do sinal no Pix."),
|
|
@@ -103,8 +100,6 @@ CONVERSATION: tuple[tuple[str, str, str], ...] = (
|
|
| 103 |
(SEND, CLIENT, "Comprovante da parcela."),
|
| 104 |
(SAY, OWNER, "Pagamento confirmado. Vou emitir as passagens agora."),
|
| 105 |
(SEND, OWNER, "Reserva emitida, com o localizador."),
|
| 106 |
-
(SAY, OWNER, "Esse é o itinerário completo em PDF."),
|
| 107 |
-
(SEND, OWNER, "Itinerário em PDF."),
|
| 108 |
(SAY, CLIENT, "Que alívio, muito obrigada! E os cartões de embarque?"),
|
| 109 |
(SAY, OWNER, "Já fiz o check-in de vocês. Segue o embarque da ida."),
|
| 110 |
(SEND, OWNER, "Cartão de embarque da ida."),
|
|
|
|
| 1 |
"""Generate a small, fully synthetic WhatsApp export ZIP for demo ingestion.
|
| 2 |
|
| 3 |
+
The export is deliberately compact and image-only (no PDFs, so the demo
|
| 4 |
+
transcribes fast): every business category the dashboard surfaces (quote,
|
| 5 |
+
reservation, boarding pass, payment, invoice, lodging, identity) appears at
|
| 6 |
+
least once, plus a single uncategorized image. The chat is a
|
| 7 |
hand-authored sale arc that uses the agency glossary correctly -- a cotacao
|
| 8 |
is an orcamento (a not-yet-purchased estimate), a reserva carries a locator
|
| 9 |
(PNR), a pedido is the closed-sale invoice, and an embarque is the boarding
|
|
|
|
| 46 |
CLIENT = "Bianca Almeida"
|
| 47 |
AGENCY = "Viva Mais Viagens"
|
| 48 |
|
| 49 |
+
# Image-only media (no PDFs, so the demo transcribes fast): every business
|
| 50 |
+
# category the dashboard surfaces appears at least once, plus one uncategorized
|
| 51 |
+
# image, in the order they show up in the sale arc below. Each "send" entry in
|
| 52 |
+
# CONVERSATION consumes the next item here, so the two lists must stay aligned.
|
| 53 |
MEDIA_PLAN: tuple[tuple[ArtifactKind, str], ...] = (
|
| 54 |
(ArtifactKind.AIR_QUOTE, "image"),
|
|
|
|
| 55 |
(ArtifactKind.ACCOMMODATION, "image"),
|
|
|
|
| 56 |
(ArtifactKind.IDENTITY_DOC, "image"),
|
| 57 |
(ArtifactKind.IDENTITY_DOC, "image"),
|
| 58 |
(ArtifactKind.SALE_INVOICE, "image"),
|
|
|
|
| 59 |
(ArtifactKind.PAYMENT_PROOF, "image"),
|
| 60 |
(ArtifactKind.PAYMENT_PROOF, "image"),
|
| 61 |
(ArtifactKind.AIR_RESERVATION, "image"),
|
|
|
|
| 62 |
(ArtifactKind.BOARDING_PASS, "image"),
|
| 63 |
(ArtifactKind.BOARDING_PASS, "image"),
|
| 64 |
(ArtifactKind.REFERENCE_ONLY, "image"),
|
|
|
|
| 79 |
),
|
| 80 |
(SAY, CLIENT, "Isso. De preferência com conexão curta e um hotel perto da praia."),
|
| 81 |
(SEND, OWNER, "Primeira opção de orçamento, ida e volta com bagagem."),
|
|
|
|
|
|
|
| 82 |
(SAY, CLIENT, "Gostei! A cotação já inclui o seguro viagem?"),
|
| 83 |
(SAY, OWNER, "Inclui sim. Só reforçando: por enquanto é orçamento, nada foi reservado ainda."),
|
| 84 |
(SAY, OWNER, "Te mando uma opção de hotel na orla."),
|
| 85 |
(SEND, OWNER, "Opção de hospedagem perto da praia."),
|
| 86 |
(SAY, CLIENT, "Esse ficou ótimo. Pode confirmar essa hospedagem."),
|
| 87 |
+
(
|
| 88 |
+
SAY,
|
| 89 |
+
OWNER,
|
| 90 |
+
"Confirmado! Para emitir as passagens vou precisar do documento de cada passageiro.",
|
| 91 |
+
),
|
| 92 |
(SEND, CLIENT, "Documento do primeiro passageiro."),
|
| 93 |
(SEND, CLIENT, "E o do segundo passageiro."),
|
| 94 |
(SAY, OWNER, "Perfeito. Vou montar o pedido com passagens, hotel e seguro."),
|
| 95 |
(SEND, OWNER, "Pedido fechado para conferência."),
|
|
|
|
|
|
|
| 96 |
(SAY, CLIENT, "Combinado! Posso dar uma entrada no Pix e parcelar o resto?"),
|
| 97 |
(SAY, OWNER, "Pode sim. Faz o sinal no Pix e o restante a gente parcela no cartão."),
|
| 98 |
(SEND, CLIENT, "Comprovante do sinal no Pix."),
|
|
|
|
| 100 |
(SEND, CLIENT, "Comprovante da parcela."),
|
| 101 |
(SAY, OWNER, "Pagamento confirmado. Vou emitir as passagens agora."),
|
| 102 |
(SEND, OWNER, "Reserva emitida, com o localizador."),
|
|
|
|
|
|
|
| 103 |
(SAY, CLIENT, "Que alívio, muito obrigada! E os cartões de embarque?"),
|
| 104 |
(SAY, OWNER, "Já fiz o check-in de vocês. Segue o embarque da ida."),
|
| 105 |
(SEND, OWNER, "Cartão de embarque da ida."),
|