chore: clean unnecessary markdown files for CV sharing

This commit is contained in:
Renato97
2026-03-31 01:16:12 -03:00
parent dcf887c510
commit 585f4b5839
10 changed files with 0 additions and 6797 deletions

View File

@@ -1,207 +0,0 @@
# Pipeline de Generación de Resúmenes Matemáticos (LaTeX -> PDF)
Este documento contiene un script genérico en Python diseñado para integrarse en pipelines de automatización (GitHub Actions, Jenkins, GitLab CI). El script toma un archivo de texto plano, genera un resumen académico con fórmulas matemáticas usando LLMs (MiniMax, GLM, Gemini) y lo compila a PDF preservando la notación LaTeX.
## 1. Requisitos del Sistema
El entorno donde se ejecute este script debe tener instalado:
- **Python 3.8+**
- **Pandoc** (para conversión de documentos)
- **PDFLaTeX** (generalmente parte de TexLive, para renderizar fórmulas)
### Instalación en Debian/Ubuntu (Docker o CI)
```bash
apt-get update && apt-get install -y pandoc texlive-latex-base texlive-fonts-recommended python3-pip
pip install requests
```
## 2. Script Genérico (`math_summary.py`)
Guarda el siguiente código como `math_summary.py`. Este script es agnóstico al proveedor y se configura mediante argumentos o variables de entorno.
```python
#!/usr/bin/env python3
import os
import sys
import argparse
import subprocess
import requests
import json
# Configuración de Modelos
PROVIDERS = {
"minimax": {
"url": "https://api.minimax.io/anthropic/v1/messages",
"model": "MiniMax-M2",
"header_key": "x-api-key",
"version_header": {"anthropic-version": "2023-06-01"},
"env_var": "MINIMAX_API_KEY"
},
"glm": {
"url": "https://api.z.ai/api/anthropic/v1/messages",
"model": "glm-4.7",
"header_key": "x-api-key",
"version_header": {"anthropic-version": "2023-06-01"},
"env_var": "GLM_API_KEY"
}
}
PROMPT_SYSTEM = """
Eres un asistente académico experto en matemáticas y economía.
Tu tarea es resumir el texto proporcionado manteniendo el rigor científico.
REGLAS DE FORMATO (CRÍTICO):
1. La salida debe ser Markdown válido.
2. TODAS las fórmulas matemáticas deben estar en formato LaTeX.
3. Usa bloques $$ ... $$ para ecuaciones centradas importantes.
4. Usa $ ... $ para ecuaciones en línea.
5. NO uses bloques de código (```latex) para las fórmulas, úsalas directamente en el texto para que Pandoc las renderice.
6. Incluye una sección de 'Conceptos Matemáticos' con las fórmulas desglosadas.
"""
def get_api_key(provider):
env_var = PROVIDERS[provider]["env_var"]
key = os.getenv(env_var)
if not key:
print(f"Error: La variable de entorno {env_var} no está definida.")
sys.exit(1)
return key
def call_llm(provider, text, api_key):
print(f"--- Contactando API: {provider.upper()} ---")
config = PROVIDERS[provider]
headers = {
"Content-Type": "application/json",
config["header_key"]: api_key,
}
if "version_header" in config:
headers.update(config["version_header"])
payload = {
"model": config["model"],
"max_tokens": 4096,
"messages": [
{"role": "user", "content": f"{PROMPT_SYSTEM}\n\nTEXTO A RESUMIR:\n{text}"}
]
}
try:
resp = requests.post(config["url"], json=payload, headers=headers, timeout=120)
resp.raise_for_status()
data = resp.json()
# Manejo específico para MiniMax que puede devolver bloques de "thinking"
content = ""
for part in data.get("content", []):
if part.get("type") == "text":
content += part.get("text", "")
# Fallback si no hay tipo explícito (GLM estándar)
if not content and data.get("content"):
if isinstance(data["content"], list):
content = data["content"][0].get("text", "")
return content
except Exception as e:
print(f"Error llamando a {provider}: {e}")
return None
def convert_to_pdf(markdown_content, output_file):
base_name = os.path.splitext(output_file)[0]
md_file = f"{base_name}.md"
with open(md_file, "w", encoding="utf-8") as f:
f.write(markdown_content)
print(f"--- Generando PDF: {output_file} ---")
cmd = [
"pandoc", md_file,
"-o", output_file,
"--pdf-engine=pdflatex",
"-V", "geometry:margin=2.5cm",
"-V", "fontsize=12pt",
"--highlight-style=tango"
]
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode == 0:
print("Éxito: PDF generado correctamente.")
return True
else:
print("Error en Pandoc:")
print(result.stderr)
return False
def main():
parser = argparse.ArgumentParser(description="Generador de Resúmenes Matemáticos PDF")
parser.add_argument("input_file", help="Ruta al archivo de texto (.txt) fuente")
parser.add_argument("--provider", choices=["minimax", "glm"], default="glm", help="Proveedor de IA a usar")
parser.add_argument("--output", default="resumen_output.pdf", help="Nombre del archivo PDF de salida")
args = parser.parse_args()
if not os.path.exists(args.input_file):
print(f"Error: No se encuentra el archivo {args.input_file}")
sys.exit(1)
with open(args.input_file, "r", encoding="utf-8") as f:
text_content = f.read()
api_key = get_api_key(args.provider)
summary_md = call_llm(args.provider, text_content, api_key)
if summary_md:
convert_to_pdf(summary_md, args.output)
else:
print("Fallo en la generación del resumen.")
sys.exit(1)
if __name__ == "__main__":
main()
```
## 3. Ejemplo de Uso en Pipeline
### Ejecución Local
```bash
export GLM_API_KEY="tu_api_key_aqui"
python3 math_summary.py entrada.txt --provider glm --output reporte_final.pdf
```
### GitHub Actions (Ejemplo .yaml)
Este paso automatizaría la creación del PDF cada vez que se sube un .txt a la carpeta `docs/`.
```yaml
name: Generar PDF Matemático
on:
push:
paths:
- 'docs/*.txt'
jobs:
build-pdf:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Instalar dependencias
run: |
sudo apt-get update
sudo apt-get install -y pandoc texlive-latex-base texlive-fonts-recommended
pip install requests
- name: Generar Resumen
env:
GLM_API_KEY: ${{ secrets.GLM_API_KEY }}
run: |
python3 math_summary.py docs/archivo.txt --provider glm --output docs/resumen.pdf
- name: Subir Artefacto
uses: actions/upload-artifact@v3
with:
name: PDF-Resumen
path: docs/resumen.pdf
```

View File

@@ -1,221 +0,0 @@
# Prompt para Generar Resúmenes Académicos en LaTeX
## Instrucciones de Uso
1. Transcribir la clase (audio a texto) usando Whisper o similar
2. Tener el material bibliográfico en formato digital (PDF escaneado con OCR o texto)
3. Copiar el prompt de abajo y completar los campos entre `[corchetes]`
---
## Prompt Template
```
Sos un asistente académico experto en [MATERIA]. Tu tarea es crear un resumen extenso y detallado en LaTeX basado en la transcripción de clase y el material bibliográfico que te proporciono.
## Material de entrada
### Transcripción de clase:
[PEGAR TRANSCRIPCIÓN AQUÍ]
### Material bibliográfico de apoyo:
[PEGAR TEXTO DEL LIBRO/APUNTE O INDICAR QUE LO SUBISTE COMO ARCHIVO]
## Requisitos del resumen
### Extensión y profundidad:
- Mínimo 10 páginas
- Cubrir TODOS los temas mencionados en clase
- Expandir cada concepto con definiciones formales del material bibliográfico
- No resumir demasiado: preferir explicaciones completas
### Estructura obligatoria:
1. Portada con título, materia, fecha y tema
2. Índice (table of contents)
3. Introducción contextualizando el tema
4. Desarrollo organizado en secciones y subsecciones
5. Tablas comparativas cuando haya clasificaciones o tipos
6. Diagramas con TikZ cuando haya procesos, flujos o relaciones
7. Cajas destacadas para definiciones, ejemplos y conceptos importantes
8. Fórmulas matemáticas cuando corresponda
9. Glosario de términos técnicos al final
10. Referencias al material bibliográfico
### Formato LaTeX requerido:
```latex
\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish,provide=*]{babel}
\usepackage{amsmath,amssymb}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,positioning,shapes.geometric,calc}
\usepackage{booktabs}
\usepackage{enumitem}
\usepackage{fancyhdr}
\usepackage{titlesec}
\usepackage{tcolorbox}
\usepackage{array}
\usepackage{multirow}
\geometry{margin=2.5cm}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{[MATERIA] - CBC}
\fancyhead[R]{Clase [N]}
\fancyfoot[C]{\thepage}
% Cajas para destacar contenido
\newtcolorbox{definicion}[1][]{
colback=blue!5!white,
colframe=blue!75!black,
fonttitle=\bfseries,
title=#1
}
\newtcolorbox{importante}[1][]{
colback=red!5!white,
colframe=red!75!black,
fonttitle=\bfseries,
title=#1
}
\newtcolorbox{ejemplo}[1][]{
colback=green!5!white,
colframe=green!50!black,
fonttitle=\bfseries,
title=#1
}
```
### Estilo de contenido:
- Usar \textbf{} para términos clave en su primera aparición
- Usar \textit{} para énfasis y palabras en otros idiomas
- Incluir ejemplos concretos mencionados en clase
- Relacionar teoría con casos prácticos
- Mantener el tono académico pero accesible
- Si el profesor hizo énfasis en algo ("esto es importante", "esto entra en el parcial"), destacarlo en caja roja
### Elementos visuales:
- Tablas con booktabs para comparaciones (usar \toprule, \midrule, \bottomrule)
- Diagramas TikZ para flujos, ciclos o relaciones entre conceptos
- Listas itemize/enumerate para secuencias o características
- Fórmulas centradas con equation o align para expresiones matemáticas
## Ejemplo de calidad esperada
Para cada concepto principal:
1. Definición formal (del libro)
2. Explicación en palabras simples (como lo explicó el profesor)
3. Ejemplo concreto
4. Relación con otros conceptos
5. Por qué es importante / para qué sirve
## Output
Generá el archivo .tex completo, listo para compilar con pdflatex (dos pasadas para el índice).
```
---
## Comandos para compilar
```bash
# Compilar (dos veces para índice)
pdflatex resumen_clase_X.tex
pdflatex resumen_clase_X.tex
# Abrir PDF
xdg-open resumen_clase_X.pdf # Linux
open resumen_clase_X.pdf # macOS
```
---
## Pipeline completo
### 1. Transcripción de audio (con Whisper)
```bash
# Instalar whisper
pip install openai-whisper
# Transcribir audio de clase
whisper "clase_X.mp3" --language Spanish --output_format txt
```
### 2. OCR de PDFs escaneados (con marker-pdf)
```bash
# Crear entorno virtual
python -m venv .venv
source .venv/bin/activate
# Instalar marker
pip install marker-pdf
# Procesar PDF (usa GPU si está disponible)
marker_single "libro_capitulo_X.pdf" --output_dir output/
```
### 3. Generar resumen
Usar el prompt de arriba con:
- Claude (Anthropic)
- GPT-4 (OpenAI)
- Gemini (Google)
### 4. Compilar LaTeX
```bash
pdflatex resumen.tex && pdflatex resumen.tex
```
---
## Tips para mejores resultados
1. **Transcripción completa**: No cortar la transcripción, la IA necesita todo el contexto
2. **Material bibliográfico**: Incluir los capítulos específicos, no todo el libro
3. **Ser específico**: Indicar la materia, el nivel (CBC, carrera, posgrado) y el enfoque del profesor
4. **Iterar**: Si el primer resultado es corto, pedir "expandí la sección X con más detalle"
5. **Diagramas**: Si hay un diagrama importante, describirlo y pedir que lo haga en TikZ
6. **Revisar**: La IA puede cometer errores conceptuales, siempre verificar con el material
---
## Materias donde funciona bien
- Economía (micro/macro)
- Física
- Química
- Matemática (álgebra, análisis)
- Biología
- Sociología
- Historia
- Derecho (con adaptaciones)
- Cualquier materia con contenido teórico estructurado
---
## Ejemplo de uso rápido
```
Sos un asistente académico experto en Física. Creá un resumen extenso en LaTeX sobre "Cinemática" basado en esta transcripción de clase del CBC:
[pegar transcripción]
Material de apoyo: Capítulo 2 de Serway "Movimiento en una dimensión":
[pegar texto del capítulo]
Incluí:
- Definiciones de posición, velocidad, aceleración
- Fórmulas del MRU y MRUV
- Diagramas de movimiento con TikZ
- Gráficos posición-tiempo y velocidad-tiempo
- Ejemplos resueltos paso a paso
- Glosario de términos
```