Egeekle commited on
Commit
b6431e1
·
verified ·
1 Parent(s): 0c7af1b

Upload 7 files

Browse files
Files changed (7) hide show
  1. .dockerignore +6 -0
  2. .gitignore +12 -0
  3. .python-version +1 -0
  4. Dockerfile +30 -0
  5. README.md +56 -9
  6. pyproject.toml +90 -0
  7. uv.lock +0 -0
.dockerignore ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ .git
2
+ .venv
3
+ __pycache__
4
+ *.pyc
5
+ .DS_Store
6
+ .env
.gitignore ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+ .env
12
+
.python-version ADDED
@@ -0,0 +1 @@
 
 
1
+ 3.12
Dockerfile ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.12-slim
2
+
3
+ # Install uv
4
+ COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
5
+
6
+ WORKDIR /underwriting_insurance
7
+
8
+ ENV UV_COMPILE_BYTECODE=1
9
+ ENV UV_LINK_MODE=copy
10
+
11
+ RUN apt-get update && apt-get install -y \
12
+ build-essential \
13
+ && rm -rf /var/lib/apt/lists/*
14
+
15
+ COPY pyproject.toml uv.lock ./
16
+
17
+ RUN uv sync --no-install-project
18
+
19
+ ENV PATH="/underwriting_insurance/.venv/bin:$PATH"
20
+
21
+ COPY . .
22
+
23
+ RUN uv sync
24
+
25
+ EXPOSE 8501
26
+
27
+ # REMOVED: ENV OPENAI_API_KEY=...
28
+ # (Docker will inject the variable from the .env file automatically)
29
+
30
+ CMD ["streamlit", "run", "src/infrastructure/app.py", "--server.port=8501", "--server.address=0.0.0.0"]
README.md CHANGED
@@ -1,12 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
- title: Underwriting Insurance
3
- emoji: 💻
4
- colorFrom: blue
5
- colorTo: green
6
- sdk: docker
7
- pinned: false
8
- license: mit
9
- short_description: 'Asistente de Polizas de Seguros '
 
 
 
 
 
10
  ---
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
1
+ # Proyecto: Asistente de Seguros (Underwriting Insurance App)
2
+
3
+ ## Planteamiento del Problema
4
+
5
+ ### Negocio
6
+ El sector de seguros enfrenta desafíos operativos relacionados con la gestión eficiente de la información y la atención al cliente, específicamente en la oferta corporativa y la consulta de pólizas.
7
+
8
+ ### Objetivos
9
+ 1. **Gestionar oferta corporativa:** Administrar eficientemente planes, coberturas y pricing.
10
+ 2. **Automatizar consultas:** Facilitar la consulta automatizada de información de pólizas de seguros para reducir tiempos de respuesta.
11
+ 3. **Mejorar acceso a información:** Solucionar la dificultad y el tiempo excesivo que toma recuperar y juntar información relevante atrapada en documentos no estructurados (PDFs).
12
+
13
+ ### Hipótesis
14
+ La implementación de un asistente virtual inteligente (Chatbot), capaz de clasificar intenciones de usuario y extraer información de fuentes estructuradas y no estructuradas, optimizará la recuperación de datos, reduciendo el tiempo de atención al cliente y mejorando la precisión en la gestión de ofertas corporativas.
15
+
16
+ ### Acciones con Entregables
17
+ * Desarrollo de un pipeline de clasificación de intenciones (NLP).
18
+ * Implementación de módulos para consulta de reglas de negocio y precios.
19
+ * Creación de una interfaz o API para interactuar con el asistente.
20
+ * Documentó de análisis y reporte de resultados.
21
+
22
+ ---
23
+
24
+ ## Acceso a Datos
25
+
26
+ ### Tipo de Datos
27
+ * **Estructurados:**
28
+ * Información transaccional simulada (bases de datos de clientes, estados de pólizas, historial de pagos).
29
+ * Reglas de negocio definidas en código (pricing, coberturas).
30
+ * Datasets sintéticos para entrenamiento del modelo de clasificación (`crear_dataset_rules`).
31
+ * **No Estructurados:**
32
+ * Documentos de pólizas y condiciones generales en formato PDF (fuente de información para consultas complejas).
33
+
34
  ---
35
+
36
+ ## Tipo de Solución a Elaborar
37
+
38
+ Se desarrollará una solución basada en **Inteligencia Artificial y Automatización** que consiste en:
39
+
40
+ 1. **Chatbot de Asistencia:**
41
+ * Modelo de Machine Learning (Pipeline `TfidfVectorizer` + `RandomForestClassifier`) para entender la intención del usuario (ej. cotizar, consultar pagos, reportar emergencias).
42
+ * Lógica de negocio (`core.py` e `infrastructure`) para ejecutar acciones específicas basadas en la intención detectada.
43
+
44
+ 2. **Infraestructura de Datos:**
45
+ * Integración de reglas de negocio para validar coberturas y calcular precios.
46
+ * Simulación de consultas a sistemas externos (bancos, bases de datos de pólizas).
47
+
48
  ---
49
 
50
+ ## Cronograma de Trabajo
51
+
52
+ | Fase | Actividad | Descripción |
53
+ | :--- | :--- | :--- |
54
+ | **1** | **Planteamiento y Diseño** | Definición del alcance, objetivos y arquitectura de la solución. (Completado) |
55
+ | **2** | **Acceso y Preparación de Datos** | Generación de datasets sintéticos y configuración de acceso a documentos. |
56
+ | **3** | **Desarrollo de Modelos** | Entrenamiento del modelo de clasificación de intenciones y ajuste de reglas. |
57
+ | **4** | **Implementación de Lógica** | Desarrollo del `core` del chatbot y funciones de `infrastructure` (pagos, cotizaciones, etc.). |
58
+ | **5** | **Integración y Pruebas** | Unificación de componentes en el flujo principal (`main.py`) y validación de casos de uso. |
59
+ | **6** | **Documentación y Entrega** | Finalización del README y reporte de resultados. |
pyproject.toml ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [project]
2
+ name = "underwriting-insurance"
3
+ version = "0.1.0"
4
+ description = "Add your description here"
5
+ readme = "README.md"
6
+ requires-python = ">=3.12"
7
+ dependencies = [
8
+ "aiohappyeyeballs>=2.6.1",
9
+ "aiohttp>=3.13.3",
10
+ "aiosignal>=1.4.0",
11
+ "annotated-types>=0.7.0",
12
+ "anyio>=4.12.0",
13
+ "async-timeout>=5.0.1",
14
+ "attrs>=25.4.0",
15
+ "certifi>=2025.11.12",
16
+ "charset-normalizer>=3.4.4",
17
+ "colorama>=0.4.6",
18
+ "dataclasses-json>=0.6.7",
19
+ "distro>=1.9.0",
20
+ "exceptiongroup>=1.3.1",
21
+ "faiss-cpu>=1.13.2",
22
+ "fastapi>=0.128.0",
23
+ "fpdf>=1.7.2",
24
+ "frozenlist>=1.8.0",
25
+ "greenlet>=3.3.0",
26
+ "h11>=0.16.0",
27
+ "httpcore>=1.0.9",
28
+ "httpx>=0.28.1",
29
+ "idna>=3.11",
30
+ "jiter>=0.12.0",
31
+ "joblib>=1.5.3",
32
+ "jsonpatch>=1.33",
33
+ "jsonpointer>=3.0.0",
34
+ "langchain>=1.2.0",
35
+ "langchain-chroma>=1.1.0",
36
+ "langchain-classic>=1.0.1",
37
+ "langchain-community>=0.4.1",
38
+ "langchain-core>=1.2.6",
39
+ "langchain-google-genai>=4.1.2",
40
+ "langchain-openai>=1.1.6",
41
+ "langchain-text-splitters>=1.1.0",
42
+ "langgraph>=1.0.5",
43
+ "langsmith>=0.6.0",
44
+ "marshmallow>=3.26.2",
45
+ "multidict>=6.7.0",
46
+ "mypy-extensions>=1.1.0",
47
+ "numpy>=2.4.0",
48
+ "openai>=2.14.0",
49
+ "orjson>=3.11.5",
50
+ "packaging>=25.0",
51
+ "pandas>=2.3.3",
52
+ "propcache>=0.4.1",
53
+ "pydantic>=2.12.5",
54
+ "pydantic-core>=2.41.5",
55
+ "pypdf>=6.5.0",
56
+ "python-dotenv>=1.2.1",
57
+ "pyyaml>=6.0.3",
58
+ "rasa>=0.1.1",
59
+ "regex>=2025.11.3",
60
+ "requests>=2.32.5",
61
+ "requests-toolbelt>=1.0.0",
62
+ "scikit-learn>=1.8.0",
63
+ "sniffio>=1.3.1",
64
+ "sqlalchemy>=2.0.45",
65
+ "tenacity>=9.1.2",
66
+ "tiktoken>=0.12.0",
67
+ "tqdm>=4.67.1",
68
+ "typing-extensions>=4.15.0",
69
+ "typing-inspect>=0.9.0",
70
+ "typing-inspection>=0.4.2",
71
+ "urllib3>=2.3.0",
72
+ "uvicorn>=0.40.0",
73
+ "yarl>=1.22.0",
74
+ "streamlit>=1.32.0",
75
+ ]
76
+
77
+ [dependency-groups]
78
+ dev = [
79
+ "ipykernel>=7.1.0",
80
+ "pyzmq>=27.1.0",
81
+ "jupyter>=1.0.0",
82
+ "pytest>=9.0.2",
83
+ ]
84
+ [build-system]
85
+ requires = ["setuptools>=72.0"]
86
+ build-backend = "setuptools.build_meta"
87
+
88
+ [tool.setuptools.packages.find]
89
+ where = ["src"]
90
+ include = ["underwriting_insurance"]
uv.lock ADDED
The diff for this file is too large to render. See raw diff