DeepRead.Monkai 2.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,360 @@
1
+ Metadata-Version: 2.4
2
+ Name: DeepRead.Monkai
3
+ Version: 2.0.1
4
+ Summary: Biblioteca para extração inteligente de documentos PDF com IA
5
+ Author-email: Monkai <contato@monkai.com.br>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/BeMonkAI/deepread
8
+ Project-URL: Documentation, https://github.com/BeMonkAI/deepread#readme
9
+ Project-URL: Repository, https://github.com/BeMonkAI/deepread
10
+ Project-URL: Issues, https://github.com/BeMonkAI/deepread/issues
11
+ Keywords: pdf,extraction,ai,ocr,document,llm,openai
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
+ Classifier: Topic :: Text Processing :: General
22
+ Requires-Python: >=3.9
23
+ Description-Content-Type: text/markdown
24
+ Requires-Dist: pydantic>=2.0.0
25
+ Requires-Dist: python-dotenv>=1.0.0
26
+ Requires-Dist: openai>=1.0.0
27
+ Requires-Dist: tiktoken>=0.5.0
28
+ Requires-Dist: llama-index-readers-file>=0.1.0
29
+ Requires-Dist: llama-index-core>=0.10.0
30
+ Requires-Dist: pypdf>=4.0.0
31
+ Requires-Dist: PyMuPDF>=1.24.0
32
+ Requires-Dist: requests>=2.28.0
33
+ Provides-Extra: ocr
34
+ Requires-Dist: azure-ai-vision-imageanalysis>=1.0.0; extra == "ocr"
35
+ Requires-Dist: Pillow>=10.0.0; extra == "ocr"
36
+ Provides-Extra: dev
37
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
38
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
39
+ Requires-Dist: black>=23.0.0; extra == "dev"
40
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
41
+ Provides-Extra: all
42
+ Requires-Dist: deepread[dev,ocr]; extra == "all"
43
+
44
+ # 📚 DeepRead
45
+
46
+ **Biblioteca Python para extração inteligente de documentos PDF com IA**
47
+
48
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
49
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
50
+
51
+ ---
52
+
53
+ ## ✨ Características
54
+
55
+ - 🔐 **Autenticação por Token** - Sistema seguro de autenticação
56
+ - 📄 **Extração Inteligente** - Extrai informações de PDFs usando LLMs
57
+ - 🔍 **OCR Automático** - Detecta e processa documentos baseados em imagem
58
+ - 📊 **Structured Output** - Respostas tipadas com Pydantic
59
+ - ⚡ **Modular** - Configure perguntas e classificações dinamicamente
60
+ - 💰 **Tracking de Custos** - Monitore tokens e custos por requisição
61
+
62
+ ---
63
+
64
+ ## 🚀 Instalação
65
+
66
+ ```bash
67
+ pip install deepread
68
+ ```
69
+
70
+ Ou instale do source:
71
+
72
+ ```bash
73
+ git clone https://github.com/BeMonkAI/deepread.git
74
+ cd deepread
75
+ pip install -e .
76
+ ```
77
+
78
+ Para suporte a OCR (Azure):
79
+
80
+ ```bash
81
+ pip install deepread[ocr]
82
+ ```
83
+
84
+ ---
85
+
86
+ ## 📖 Uso Rápido
87
+
88
+ ### 1. Gerar Token de Autenticação
89
+
90
+ ```python
91
+ from deepread.auth import generate_token
92
+
93
+ # Gerar token para um usuário
94
+ token = generate_token(
95
+ user_id="user_123",
96
+ permissions=["read", "process"],
97
+ expires_in_days=30
98
+ )
99
+
100
+ print(f"Token: {token.token}")
101
+ # dr_eyJ1c2VyX2lkIjog...
102
+ ```
103
+
104
+ ### 2. Configurar e Processar Documentos
105
+
106
+ ```python
107
+ from deepread import DeepRead, Question, QuestionConfig
108
+ from pydantic import BaseModel, Field
109
+
110
+ # Definir modelo de resposta estruturada
111
+ class ExtractionResponse(BaseModel):
112
+ valor: str = Field(description="Valor extraído")
113
+ unidade: str = Field(default="", description="Unidade de medida")
114
+ confianca: float = Field(default=1.0, ge=0, le=1)
115
+
116
+ # Criar pergunta
117
+ question = Question(
118
+ config=QuestionConfig(
119
+ id="quantidade",
120
+ name="Extração de Quantidade",
121
+ description="Extrai quantidade do documento"
122
+ ),
123
+ system_prompt="Você é um especialista em extração de dados de documentos.",
124
+ user_prompt="""
125
+ Analise o texto e extraia a quantidade mencionada.
126
+
127
+ Texto:
128
+ {texto}
129
+ """,
130
+ keywords=["quantidade", "litros", "volume", "total"],
131
+ response_model=ExtractionResponse
132
+ )
133
+
134
+ # Inicializar DeepRead
135
+ dr = DeepRead(
136
+ api_token="dr_seu_token_aqui",
137
+ openai_api_key="sk-sua_key_aqui", # ou use OPENAI_API_KEY env
138
+ model="gpt-5.1", # opcional
139
+ verbose=True
140
+ )
141
+
142
+ # Adicionar pergunta
143
+ dr.add_question(question)
144
+
145
+ # Processar documento
146
+ result = dr.process("documento.pdf")
147
+
148
+ # Acessar resultados
149
+ print(f"Resposta: {result.get_answer('quantidade')}")
150
+ print(f"Tokens: {result.total_metrics.tokens}")
151
+ print(f"Custo: ${result.total_metrics.cost_usd:.4f}")
152
+ ```
153
+
154
+ ### 3. Múltiplas Perguntas
155
+
156
+ ```python
157
+ # Adicionar várias perguntas de uma vez
158
+ dr.add_questions([
159
+ Question(
160
+ config=QuestionConfig(id="preco", name="Preço"),
161
+ user_prompt="Extraia o preço: {texto}",
162
+ keywords=["preço", "valor", "R$"]
163
+ ),
164
+ Question(
165
+ config=QuestionConfig(id="data", name="Data"),
166
+ user_prompt="Extraia a data: {texto}",
167
+ keywords=["data", "prazo", "vigência"]
168
+ ),
169
+ ])
170
+
171
+ # Processar todas as perguntas
172
+ result = dr.process("documento.pdf")
173
+
174
+ # Acessar cada resposta
175
+ for r in result.results:
176
+ print(f"{r.question_name}: {r.answer}")
177
+ ```
178
+
179
+ ### 4. Classificação de Documentos
180
+
181
+ ```python
182
+ from deepread import Classification
183
+ from typing import Literal
184
+
185
+ class ClassificacaoDoc(BaseModel):
186
+ classificacao: Literal["APROVADO", "REPROVADO", "REVISAR"]
187
+ justificativa: str
188
+ confianca: float = Field(ge=0, le=1)
189
+
190
+ # Configurar classificação
191
+ classification = Classification(
192
+ system_prompt="Você é um classificador de documentos.",
193
+ user_prompt="""
194
+ Baseado nos dados extraídos, classifique o documento:
195
+
196
+ {dados}
197
+ """,
198
+ response_model=ClassificacaoDoc
199
+ )
200
+
201
+ dr.set_classification(classification)
202
+
203
+ # Processar com classificação
204
+ result = dr.process("documento.pdf", classify=True)
205
+ print(f"Classificação: {result.classification}")
206
+ ```
207
+
208
+ ### 5. Processamento em Lote
209
+
210
+ ```python
211
+ from pathlib import Path
212
+
213
+ # Listar documentos
214
+ docs = list(Path("documentos/").glob("*.pdf"))
215
+
216
+ # Processar todos
217
+ results = dr.process_batch(docs, classify=True)
218
+
219
+ # Exportar para CSV
220
+ import csv
221
+
222
+ with open("resultados.csv", "w", newline="") as f:
223
+ writer = csv.DictWriter(f, fieldnames=results[0].to_flat_dict().keys())
224
+ writer.writeheader()
225
+ for r in results:
226
+ writer.writerow(r.to_flat_dict())
227
+ ```
228
+
229
+ ---
230
+
231
+ ## 🔐 Sistema de Autenticação
232
+
233
+ O DeepRead usa tokens JWT-like para autenticação:
234
+
235
+ ```python
236
+ from deepread.auth import generate_token, validate_token
237
+
238
+ # Gerar token
239
+ token = generate_token(
240
+ user_id="user_123",
241
+ permissions=["read", "process", "classify"],
242
+ expires_in_days=30,
243
+ metadata={"company": "Acme Corp"}
244
+ )
245
+
246
+ # Validar token
247
+ try:
248
+ auth = validate_token(token.token)
249
+ print(f"Usuário: {auth.user_id}")
250
+ print(f"Permissões: {auth.permissions}")
251
+ except InvalidTokenError:
252
+ print("Token inválido!")
253
+ except ExpiredTokenError:
254
+ print("Token expirado!")
255
+ ```
256
+
257
+ ### Variáveis de Ambiente
258
+
259
+ Configure a chave secreta para produção:
260
+
261
+ ```bash
262
+ export DEEPREAD_SECRET_KEY="sua_chave_secreta_muito_segura"
263
+ export OPENAI_API_KEY="sk-..."
264
+ export AZURE_AI_VISION_KEY="..." # Para OCR
265
+ export AZURE_AI_VISION_ENDPOINT="https://..."
266
+ ```
267
+
268
+ ---
269
+
270
+ ## 📊 Modelos Disponíveis
271
+
272
+ ```python
273
+ from deepread import DeepRead
274
+
275
+ # Listar modelos
276
+ print(DeepRead.available_models())
277
+ # {
278
+ # "fast": "gpt-4.1",
279
+ # "balanced": "gpt-5.1",
280
+ # "complete": "gpt-5-2025-08-07",
281
+ # "economic": "gpt-5-mini-2025-08-07"
282
+ # }
283
+ ```
284
+
285
+ ---
286
+
287
+ ## 🛠️ API Reference
288
+
289
+ ### `DeepRead`
290
+
291
+ | Método | Descrição |
292
+ |--------|-----------|
293
+ | `add_question(question)` | Adiciona uma pergunta |
294
+ | `add_questions(questions)` | Adiciona múltiplas perguntas |
295
+ | `remove_question(id)` | Remove uma pergunta |
296
+ | `set_classification(config)` | Configura classificação |
297
+ | `process(document)` | Processa um documento |
298
+ | `process_batch(documents)` | Processa múltiplos documentos |
299
+
300
+ ### `Question`
301
+
302
+ | Campo | Tipo | Descrição |
303
+ |-------|------|-----------|
304
+ | `config` | `QuestionConfig` | Configuração básica |
305
+ | `system_prompt` | `str` | Prompt de sistema |
306
+ | `user_prompt` | `str` | Template do prompt (use `{texto}`) |
307
+ | `keywords` | `list[str]` | Keywords para filtrar páginas |
308
+ | `response_model` | `BaseModel` | Modelo Pydantic (opcional) |
309
+
310
+ ### `ProcessingResult`
311
+
312
+ | Campo | Tipo | Descrição |
313
+ |-------|------|-----------|
314
+ | `document` | `DocumentMetadata` | Metadados do documento |
315
+ | `results` | `list[Result]` | Resultados por pergunta |
316
+ | `classification` | `dict` | Classificação (se aplicável) |
317
+ | `total_metrics` | `ProcessingMetrics` | Métricas totais |
318
+
319
+ ---
320
+
321
+ ## 📁 Estrutura do Projeto
322
+
323
+ ```
324
+ deepread/
325
+ ├── __init__.py # Exports principais
326
+ ├── reader.py # Classe DeepRead
327
+ ├── config.py # Configurações
328
+ ├── utils.py # Utilitários
329
+ ├── ocr.py # Módulo OCR
330
+ ├── exceptions.py # Exceções
331
+ ├── auth/
332
+ │ ├── __init__.py
333
+ │ ├── token.py # Gestão de tokens
334
+ │ └── exceptions.py # Exceções de auth
335
+ └── models/
336
+ ├── __init__.py
337
+ ├── question.py # Modelo Question
338
+ ├── result.py # Modelos de resultado
339
+ └── classification.py # Modelo Classification
340
+ ```
341
+
342
+ ---
343
+
344
+ ## 🤝 Contribuindo
345
+
346
+ 1. Fork o repositório
347
+ 2. Crie uma branch (`git checkout -b feature/nova-feature`)
348
+ 3. Commit suas mudanças (`git commit -am 'Add nova feature'`)
349
+ 4. Push para a branch (`git push origin feature/nova-feature`)
350
+ 5. Abra um Pull Request
351
+
352
+ ---
353
+
354
+ ## 📄 Licença
355
+
356
+ MIT License - veja [LICENSE](LICENSE) para detalhes.
357
+
358
+ ---
359
+
360
+ **Desenvolvido por [Monkai](https://www.monkai.com.br)** 🐵
@@ -0,0 +1,21 @@
1
+ README.md
2
+ pyproject.toml
3
+ DeepRead.Monkai.egg-info/PKG-INFO
4
+ DeepRead.Monkai.egg-info/SOURCES.txt
5
+ DeepRead.Monkai.egg-info/dependency_links.txt
6
+ DeepRead.Monkai.egg-info/requires.txt
7
+ DeepRead.Monkai.egg-info/top_level.txt
8
+ deepread/__init__.py
9
+ deepread/config.py
10
+ deepread/exceptions.py
11
+ deepread/ocr.py
12
+ deepread/reader.py
13
+ deepread/utils.py
14
+ deepread/auth/__init__.py
15
+ deepread/auth/exceptions.py
16
+ deepread/auth/token.py
17
+ deepread/models/__init__.py
18
+ deepread/models/classification.py
19
+ deepread/models/question.py
20
+ deepread/models/result.py
21
+ deepread/models/schemas.py
@@ -0,0 +1,22 @@
1
+ pydantic>=2.0.0
2
+ python-dotenv>=1.0.0
3
+ openai>=1.0.0
4
+ tiktoken>=0.5.0
5
+ llama-index-readers-file>=0.1.0
6
+ llama-index-core>=0.10.0
7
+ pypdf>=4.0.0
8
+ PyMuPDF>=1.24.0
9
+ requests>=2.28.0
10
+
11
+ [all]
12
+ deepread[dev,ocr]
13
+
14
+ [dev]
15
+ pytest>=7.0.0
16
+ pytest-cov>=4.0.0
17
+ black>=23.0.0
18
+ ruff>=0.1.0
19
+
20
+ [ocr]
21
+ azure-ai-vision-imageanalysis>=1.0.0
22
+ Pillow>=10.0.0