acep_gpt(), acep_claude(), acep_gemini(),
acep_ollama(), acep_openrouter(), acep_together()) aceptan ahora un
argumento system para sobreescribir la persona (prompt de sistema) del
analista. Por defecto (NULL) usa la persona estándar de ACEP, así que el
comportamiento previo no cambia. El esquema de salida estructurada se mantiene
siempre, sin importar la persona.
acep_together(), system es ortogonal a prompt_system: este último
sigue controlando el modo ("json"/"texto"/personalizado) y system solo
reemplaza la persona; si se pasan ambos, system tiene prioridad para la
persona.acep_ollama() incorpora el argumento timeout (120 s por defecto),
igualando a los demás proveedores. Es aditivo: el valor por defecto coincide
con el timeout fijo anterior.utils_provider.R:
.acep_provider_resolve_system() (resuelve la persona con override opcional) y
.acep_provider_json_system_prompt() (arma el prompt de modo JSON compartido
por acep_together() y acep_openrouter()).system es el último parámetro de cada
función y por defecto reproduce byte a byte el prompt de versiones
anteriores (validado con tests). No se renombró ni reordenó ningún argumento.acep_clean(): ahora remueve correctamente las stopwords acentuadas escritas
en MAYÚSCULA (p. ej. "MÁS", "SÍ"). Antes el plegado de tildes corría después de
la remoción de stopwords y esas palabras quedaban sin filtrar.acep_count() / acep_detect(): los términos del diccionario que contienen
metacaracteres de expresiones regulares ((, ), ., $, etc.) ahora se
tratan como texto literal. Antes podían producir coincidencias erróneas o
abortar con un error de regex. Además, acep_detect() aplica los límites de
palabra (\b) de la misma forma que acep_count() cuando el término viene
rodeado de espacios (antes el \b se insertaba como una "b" literal).acep_token_table() y acep_token_plot(): la proporción (prop) se calcula
sobre el total del corpus y no sobre el subconjunto de las u palabras más
frecuentes, coincidiendo con la definición documentada en la viñeta.acep_extract(): una entrada NA ahora devuelve NA real en lugar de la
cadena literal "NA".acep_token(): descarta entradas NA en vez de generar filas de tokens NA.acep_token_plot(): restaura el estado gráfico par() al salir
(on.exit()), cumpliendo con la política de CRAN.acep_gpt(), acep_claude(), acep_gemini(),
acep_together(), acep_openrouter()): se agregó el parámetro timeout
(120 s por defecto) y un timeout HTTP efectivo, evitando que una conexión
estancada bloquee la sesión de R indefinidamente..acep_provider_http_error_message()) que no falla cuando el
cuerpo de error es atómico, de texto plano (HTML 5xx) o no tiene el campo
error$message (p. ej. respuestas 429/5xx).acep_gemini() y acep_claude(): se elimina additionalProperties de forma
recursiva en los esquemas anidados (antes solo se quitaba del nivel raíz).acep_load_base(): maneja fallos de red/URL con tryCatch, agrega timeout y
devuelve NULL de forma controlada en lugar de propagar errores crudos.plot.acep_result(): el gráfico de serie temporal ahora pasa los vectores
correctos a acep_plot_st() (antes le pasaba un data frame y fallaba).acep_corpus(): valida que id tenga la misma longitud que texto y que
metadata sea una lista.acep_upos() y acep_svo(): las validaciones de entrada ahora usan stop()
en vez de devolver NULL silenciosamente..acep_provider_post()) para construir la petición HTTP, eliminando
duplicación (refactor interno, sin cambios de comportamiento).acep_count(): el caché de expresiones regulares ahora está acotado (máximo
1000 patrones; se vacía al alcanzarlo) para evitar crecimiento de memoria sin
límite en sesiones largas con muchos diccionarios distintos.grDevices en Imports (se usaba vía :: sin declarar).Author/Maintainer del DESCRIPTION
(se derivan de Authors@R).vignettes/geocode_cache.json y demás
archivos geocode_cache.json/Rplots.pdf (y se quitaron del repositorio).acep_diccionarios (son URLs, no
vectores de palabras), acep_rs (tipo, sw2, emojis) y acep_prompt_gpt
(6 componentes, incluyendo los prompts de sistema).acep_gpt(): la descripción refleja todos los modelos soportados.acep_corpus, pipe_*, acep_pipeline) y de las correcciones de
esta versión. Las pruebas del núcleo ahora se ejecutan también en CRAN.acep_load_base() y acep_diccionarios que requieren internet ahora quedan marcados como no ejecutables.Se agregó acep_corpus(): constructor de objetos corpus para trabajar con pipelines de procesamiento de texto.
Se agregó acep_result(): constructor de objetos resultado con métodos de impresión y resumen.
Se agregó acep_pipeline(): pipeline completo que integra limpieza, conteo e intensidad.
Se agregaron funciones pipeline para análisis composable:
pipe_clean(): limpieza de texto en pipelinepipe_count(): conteo de menciones en pipelinepipe_intensity(): cálculo de intensidad en pipelinepipe_timeseries(): generación de series temporales en pipelineSe agregó acep_postag_hibrido(): etiquetado POS, lematización y extracción de entidades con spacyr.
Se agregó acep_process_chunks(): procesamiento de textos en lotes para gestionar grandes volúmenes de datos.
Se agregó acep_gpt_schema(): esquemas JSON predefinidos para análisis de texto con GPT.
Se agregó acep_ollama(): interacción con modelos de lenguaje de Ollama tanto locales como cloud usando structured outputs. Permite ejecutar análisis sin costos en local y activar modelos gigantes (DeepSeek 671B, Kimi 1T, Qwen3 Coder) con una API key opcional.
Se agregó acep_ollama_setup(): guía de instalación y configuración de Ollama.
Se agregó acep_together(): integración con TogetherAI para acceder a modelos open source (Llama, Qwen, DeepSeek, Moonshot) con JSON mode, esquemas validados y postprocesamiento automático.
Nuevas funciones de IA con Structured Outputs:
acep_claude(): interacción con modelos Anthropic Claude (Sonnet 4.5, Claude 3.5, Claude 3) usando tool calling forzado para structured outputsacep_gemini(): interacción con modelos Google Gemini (2.5 y 2.0) usando responseSchema con OpenAPI 3.0. Incluye acceso gratuito limitadoacep_openrouter(): gateway unificado para acceder a 400+ modelos de 60+ proveedores (OpenAI, Anthropic, Google, Meta, Qwen, DeepSeek) con una sola API y soporte de fallback automáticoSe agregaron funciones auxiliares para gestión de caché:
acep_clear_regex_cache(): limpia el caché de expresiones regularesacep_regex_cache_size(): consulta el tamaño del cachéacep_count(): se incorporó sistema de caché de expresiones regulares para mejorar rendimiento.acep_gpt(): se actualizó completamente para soportar Structured Outputs de OpenAI con esquemas JSON. Ahora incluye:
max_tokens vs max_completion_tokens) según el modeloacep_clean(): renombrada desde acep_cleaning() para mayor consistencia.acep_ollama(): ahora detecta el tipo de endpoint (localhost o cloud), permite fijar max_tokens, usa hosts remotos con autenticación mediante OLLAMA_API_KEY y elimina la dependencia obligatoria de ollamar.acep_openrouter(): agrega listado actualizado de modelos GPT-5, Grok 4, DeepSeek V3/R1, Llama 4 y Mixtral, aplica fallback inteligente entre candidatos, refuerza la validación JSON y reporta el detalle de errores por intento.acep_bases: se reorganizó la documentación e incorpora el data frame lc_720 con 720 notas anotadas manualmente para evaluar diccionarios y extracción estructurada de eventos de protesta.acep_together() y las mejoras de acep_ollama()/acep_openrouter(), con ejemplos para modo cloud, fallback y JSON mode.Incorporamos una función para extraer palabras clave de corpus de texto en base a un diccionario.
Se creo una nueva función para interactuar con la api de OpenAI.
NEWS.md para seguir los cambios en el paquete.