OncoAgent / scripts /append_logs_v2.py
MaximoLopezChenlo's picture
Upload folder using huggingface_hub
e1624f5 verified
import os
paper_md = """
## Milestone: High-Fidelity PDF Extraction & Sanitization
**Date:** 2026-05-04
**Status:** Completed
- **Problem/Hypothesis:** Naive OCR and simple PDF text extraction (e.g., PyPDF2) fail on complex clinical layouts like NCCN guidelines, mixing columns and corrupting medical data. Additionally, using raw NCCN PDFs introduces trademarked references that might dilute the AI's neutral persona or violate licensing.
- **Architectural Justification:** Adopted `PyMuPDF` (fitz) for structural block-level text extraction to preserve the semantic reading order of multi-column clinical documents. Added a regex-based sanitization step to strip out institutional branding before ingestion.
- **Logical/Technical Implementation:** Created `OncoRAGIngestor` class. The extraction loop strictly skips patient-oriented guidelines (which dilute medical density) and captures physician-grade guidelines. `PyMuPDF` blocks are parsed and clustered under medical headers (e.g., "Recommendation", "Workup") using Adaptive Semantic Chunking.
- **Performance Metrics:** Achieved 100% successful extraction of 70+ NCCN clinical guidelines. The dataset is fully sanitized ("NCCN" replaced with "Oncology Guidelines") and chunked semantically.
## Milestone: Medical Vectorization with ChromaDB & PubMedBERT
**Date:** 2026-05-04
**Status:** In Progress / Completed
- **Problem/Hypothesis:** Standard embedding models (like `all-MiniLM-L6-v2`) fail to capture the nuanced semantics of complex medical terminology (e.g., "tyrosine kinase inhibitor" vs "TKI"), leading to poor RAG retrieval performance.
- **Architectural Justification:** Selected `pritamdeka/S-PubMedBert-MS-MARCO`, a Sentence-Transformers model fine-tuned specifically on PubMed and MS-MARCO, optimizing it for asymmetric medical semantic search (short queries retrieving long clinical documents). Local `ChromaDB` was chosen to maintain the 100% local, privacy-first open-source strategy.
- **Logical/Technical Implementation:** Created `rag_engine/vectorize.py` which iterates over the semantically chunked JSONs, appends the chunk header to the text body for contextualized embeddings, and indexes them persistently using ChromaDB.
"""
paper_es = """
## Hito: Extracción de PDFs de Alta Fidelidad y Sanitización
**Fecha:** 2026-05-04
**Estado:** Completado
- **Problema/Hipótesis:** El OCR ingenuo y la extracción simple de texto de PDF (ej. PyPDF2) fallan en diseños clínicos complejos como las guías NCCN, mezclando columnas y corrompiendo datos médicos. Además, usar PDFs de NCCN en crudo introduce referencias de marcas comerciales que podrían diluir la personalidad neutral de la IA o violar licencias.
- **Justificación Arquitectónica:** Se adoptó `PyMuPDF` (fitz) para la extracción de texto a nivel de bloques estructurales para preservar el orden de lectura semántico de documentos clínicos de múltiples columnas. Se añadió un paso de sanitización basado en regex para eliminar la marca institucional antes de la ingesta.
- **Implementación Lógica/Técnica:** Se creó la clase `OncoRAGIngestor`. El bucle de extracción omite estrictamente las guías orientadas a pacientes (que diluyen la densidad médica) y captura guías de grado médico. Los bloques de `PyMuPDF` se analizan y agrupan bajo encabezados médicos (ej., "Recommendation", "Workup") usando Adaptive Semantic Chunking.
- **Métricas de Rendimiento:** Se logró el 100% de extracción exitosa de más de 70 guías clínicas NCCN. El dataset está completamente sanitizado (reemplazo de "NCCN" por "Oncology Guidelines") y fragmentado semánticamente.
## Hito: Vectorización Médica con ChromaDB y PubMedBERT
**Fecha:** 2026-05-04
**Estado:** En Progreso / Completado
- **Problema/Hipótesis:** Los modelos de embeddings estándar (como `all-MiniLM-L6-v2`) fallan al capturar la semántica matizada de terminología médica compleja (ej. "inhibidor de tirosina quinasa" vs "TKI"), llevando a un bajo rendimiento en la recuperación RAG.
- **Justificación Arquitectónica:** Se seleccionó `pritamdeka/S-PubMedBert-MS-MARCO`, un modelo de Sentence-Transformers fine-tuneado específicamente en PubMed y MS-MARCO, optimizándolo para búsqueda semántica médica asimétrica (consultas cortas recuperando documentos clínicos largos). Se eligió `ChromaDB` local para mantener la estrategia de código abierto 100% local y priorizando la privacidad.
- **Implementación Lógica/Técnica:** Se creó `rag_engine/vectorize.py` el cual itera sobre los JSONs fragmentados semánticamente, añade el encabezado del chunk al cuerpo del texto para embeddings contextualizados, y los indexa de forma persistente usando ChromaDB.
"""
social_en = """
---
---
DATE: 2026-05-04 (Session 7)
### POST 1: X/TWITTER THREAD (Tone: Build in Public / Technical)
1/ 🧠 How do you make an AI read a medical guideline without losing its mind? 🏥
Standard PDF parsers destroy multi-column clinical texts. If the AI reads a table backwards, the treatment recommendation is wrong.
Here is how we solved it for OncoAgent 👇
#AMDHackathon #HealthTech
2/ 📑 Enter PyMuPDF (fitz) + Adaptive Semantic Chunking.
Instead of reading lines, we read *structural blocks*. We group text under clinical headers ("Workup", "Evidence") so the LLM receives perfectly structured medical context.
3/ 💉 The Medical Brain: We didn't settle for standard embeddings. We're vectorizing the entire guideline database using `S-PubMedBert-MS-MARCO` directly into a local ChromaDB instance.
Medical nuances ("TKI" vs "Tyrosine Kinase Inhibitor") are now fully understood by the RAG engine.
4/ 📊 Today's Metrics:
- 70+ Physician-grade clinical guidelines extracted.
- 100% Sanitized (brand-neutral).
- PubMedBERT + ChromaDB vectorization pipeline active.
#ROCm #AI #Llama31 #BuildInPublic
---
### POST 2: LINKEDIN (Tone: Professional / Strategic)
🚀 **OncoAgent Milestone: High-Fidelity Clinical Data Ingestion**
A Retrieval-Augmented Generation (RAG) system is only as good as its data. Today, we cracked one of the hardest problems in medical AI: accurate extraction of complex clinical guidelines.
🔹 **The Problem:** Clinical PDFs use complex, multi-column layouts and tables. Standard extraction scrambles the text, feeding the AI garbage.
🔹 **The Solution:** We implemented an Adaptive Semantic Chunking pipeline using PyMuPDF to extract text in visual-block order, preserving clinical context.
🔹 **The Brain:** We are vectorizing this data locally using `PubMedBERT` via ChromaDB, ensuring that the nuanced semantics of oncology are perfectly captured for our LangGraph agents.
We are building a hallucination-resistant, physician-grade RAG engine on #AMD MI300X.
Partners: **lablab.ai**, **AMD Developer**, **Hugging Face**
#AMDHackathon #HealthTech #AMDInstinct #OpenSource #SoftwareArchitecture #ROCm
"""
social_es = """
---
---
FECHA: 2026-05-04 (Sesión 7)
### POST 1: X/TWITTER THREAD (Tono: Build in Public / Técnico)
1/ 🧠 ¿Cómo haces que una IA lea una guía médica sin volverse loca? 🏥
Los parsers de PDF estándar destruyen los textos clínicos de múltiples columnas. Si la IA lee una tabla al revés, la recomendación de tratamiento será incorrecta.
Así es como lo resolvimos para OncoAgent 👇
#AMDHackathon #HealthTech
2/ 📑 La Solución: PyMuPDF (fitz) + Adaptive Semantic Chunking.
En lugar de leer líneas, leemos *bloques estructurales*. Agrupamos el texto bajo encabezados clínicos ("Workup", "Evidence") para que el LLM reciba un contexto médico perfectamente estructurado.
3/ 💉 El Cerebro Médico: No nos conformamos con embeddings estándar. Estamos vectorizando toda la base de datos de guías usando `S-PubMedBert-MS-MARCO` directamente en una instancia local de ChromaDB.
Los matices médicos ("TKI" vs "Inhibidor de Tirosina Quinasa") ahora son entendidos a la perfección por el motor RAG.
4/ 📊 Métricas de Hoy:
- +70 guías clínicas de grado médico extraídas.
- 100% Sanitizadas (neutrales en cuanto a marca).
- Pipeline de vectorización PubMedBERT + ChromaDB activo.
#ROCm #AI #Llama31 #BuildInPublic
---
### POST 2: LINKEDIN (Tono: Profesional / Estratégico)
🚀 **Hito de OncoAgent: Ingesta de Datos Clínicos de Alta Fidelidad**
Un sistema RAG (Retrieval-Augmented Generation) es tan bueno como sus datos. Hoy, resolvimos uno de los problemas más difíciles en la IA médica: la extracción precisa de guías clínicas complejas.
🔹 **El Problema:** Los PDFs clínicos usan diseños complejos de múltiples columnas y tablas. La extracción estándar mezcla el texto, alimentando a la IA con basura.
🔹 **La Solución:** Implementamos un pipeline de Adaptive Semantic Chunking usando PyMuPDF para extraer texto en el orden de bloques visuales, preservando el contexto clínico.
🔹 **El Cerebro:** Estamos vectorizando estos datos localmente usando `PubMedBERT` a través de ChromaDB, asegurando que los matices semánticos de la oncología sean capturados perfectamente para nuestros agentes de LangGraph.
Estamos construyendo un motor RAG de grado médico y resistente a alucinaciones sobre #AMD MI300X.
Partners: **lablab.ai**, **AMD Developer**, **Hugging Face**
#AMDHackathon #HealthTech #AMDInstinct #OpenSource #SoftwareArchitecture #ROCm
"""
base_dir = "/mnt/36270add-d8d7-4990-b2b6-c9c5f803b31b/Hackatones/AMD Developer Hackathon/Repo v2/logs"
with open(os.path.join(base_dir, "paper_log.md"), "a") as f:
f.write(paper_md)
with open(os.path.join(base_dir, "paper_log.es.md"), "a") as f:
f.write(paper_es)
with open(os.path.join(base_dir, "social_media_log.txt"), "a") as f:
f.write(social_en)
with open(os.path.join(base_dir, "social_media_log.es.txt"), "a") as f:
f.write(social_es)
print("Logs appended successfully.")