commit 2ee39fbab470e5ec605ebdcf319581dd3929bd2b
parent 89c808006abfb335a49591859f7ecd693aca56c5
Author: Pablo Cárdenas <pablo.cardenas@imca.edu.pe>
Date: Wed, 17 Jul 2024 21:01:55 -0500
newsboat: Added my openai plugin
Diffstat:
4 files changed, 108 insertions(+), 6 deletions(-)
diff --git a/.config/newsboat/config b/.config/newsboat/config
@@ -1,11 +1,18 @@
reload-time 15
-# suppress-first-reload yes
+suppress-first-reload yes
auto-reload yes
reload-threads 100
-prepopulate-query-feeds yes
-macro v set browser "setsid -f mpv --audio-device=alsa/pulse --ytdl-raw-options=sub-langs=\"[en.*,es.*,fr.*,pt.*]\",write-sub=,write-auto-sub= </dev/null >/dev/null 2>&1" ; open-in-browser ; set browser "$BROWSER"
-html-renderer "sed 's/</</g;s/>/>/g;s/&/\\&/g' | perl -pe 's:<q>.*?(MIRA|LEE TAMBI).*?</q>::g' | perl -pe 's|(<img.*?alt=\")(.*?)(\".*?/>)|<p>\\1 [IMG] \\2\\3</p>|g' | lynx -image_links -stdin --assume_charset=utf-8 --display-charset=utf-8 -dump -width=1024"
+macro v set browser "setsid -f mpv --audio-device=alsa/pulse --ytdl-raw-options=sub-langs=\"[en.*,es.*,fr.*,pt.*]\",write-sub=,write-auto-sub= </dev/null >/dev/null 2>&1"; open-in-browser; set browser "$BROWSER"
-external-url-viewer "urlview"
+#html-renderer "sed 's/</</g;s/>/>/g;s/&/\\&/g' | perl -pe 's:<q>.*?(MIRA|LEE TAMBI).*?</q>::g' | perl -pe 's|^<ul>.*?</ul>||' | perl -pe 's|(<img.*?alt=\")(.*?)(\".*?/>)|<p>\\1 [IMG] \\2\\3</p>|g' | lynx -nonumbers -hiddenlinks=ignore -nolist -image_links -stdin --assume_charset=utf-8 --display-charset=utf-8 -dump -width=1024"
+
+macro l set text-width 1024; set html-renderer "cat"; set pager "awk '/^Title:/ { print gensub(/^Title: (.*)$/, \"<h1>\\\\1</h1>\", \"g\", $0) } /^</ { print }' %f | perl -pe 's:<q>.*?(MIRA|LEE|MÁS).*?</q>::g' | perl -pe 's|^<ul>.*?</ul>||' | perl -pe 's|(<img.*?alt=\")(.*?)(\".*?/>)||g' | lynx -stdin -nolist -width=1024 --assume-charset=utf-8 --display-charset=utf-8"; open; set pager internal; set html-renderer internal; set text-width 0
+
+macro a set text-width 1024; set html-renderer "cat"; set pager "~/.config/newsboat/openai.sh"; open; set pager internal; set html-renderer internal; set text-width 0
+
+#pager "vim %f"
+#pager "lynx -force_html %f"
+
+#external-url-viewer "urlview"
diff --git a/.config/newsboat/openai.sh b/.config/newsboat/openai.sh
@@ -0,0 +1,91 @@
+#!/bin/sh
+
+newspaper="$(grep "^Feed: " "$1" | sed 's/^Feed: //')"
+
+text_body="$(
+ grep '^<' "$1" |
+ perl -pe 's:<q>.*?(MIRA|LEE|MÁS|PUEDES VER|REVISA AQUÍ).*?</q>::g' |
+ perl -pe 's|^<ul>.*?</ul>||' |
+ perl -pe 's|(<img.*?alt=\")(.*?)(\".*?/>)||g'
+)"
+
+request="$(
+ {
+ echo "<h1>$(grep "^Title: " "$1" | sed 's/^Title: //' || true)</h1>"
+ echo "${text_body}"
+ } |
+ pandoc -f html -t markdown_strict-raw_html --wrap=none --lua-filter="${XDG_CONFIG_HOME}/newsboat/remove_links.lua"
+)"
+
+echo "CREATE TABLE IF NOT EXISTS openai(request TEXT, response TEXT);" |
+ sqlite3 "${XDG_DATA_HOME}/newsboat/openai.db"
+
+request_str=$(printf %s "${request}" | jq -Rs | sed "s/'/\\'/g;s/^\"//;s/\"$//")
+response_str=$(
+ echo "SELECT response FROM openai WHERE request = '${request_str}'" |
+ sqlite3 "${XDG_DATA_HOME}/newsboat/openai.db"
+)
+
+
+if [ -z "${response_str}" ]; then
+ . "${XDG_CONFIG_HOME}/secrets/openai.sh"
+ content_system="
+ Eres un asistente que ayuda a los usuarios a mejorar su comprensión y memorización de artículos.
+ - Proporcionas preguntas y sus respuestas basadas en el contenido del artículo proporcionado.
+ - La primera pregunta siempre debe ser \"¿Cuál es el título del artículo?\".
+ - Luego, las preguntas de deben basarse en la respuestas ya dadas.
+ - Evita incluir detalles específicos como nombres, fechas exactas, lugares o cargos en los enunciados de las preguntas ya que estos detalles deberían ser preguntados y respondidos por el lector.
+ - Asegúrate de que las respuestas cubran todas las ideas y todos los detalles del artículo.
+ - Formatea tu respuesta como un objeto cuyo atributo \"preguntas\" sea el arreglo de objetos con atributos \"pregunta\" y \"respuesta\" en formato JSON.
+ - Recuerda que es el usuario quien debe recordar los detalles del artículo, no les des pistas en el enunciado de las preguntas.
+ - El articulo proviene de '${newspaper}'.
+ "
+ data=$(
+ jq -n \
+ --arg content_system "${content_system}" \
+ --arg content_user "${request}" \
+ '{
+ "model": "gpt-4o",
+ "response_format": { "type": "json_object" },
+ "seed": 42,
+ "temperature": 0,
+ "messages": [
+ {
+ "role": "system",
+ "content": $content_system
+ },
+ {
+ "role": "user",
+ "content": $content_user
+ }
+ ]
+ }'
+ )
+
+ response=$(
+ curl https://api.openai.com/v1/chat/completions \
+ -H "Content-Type: application/json" \
+ -H "Authorization: Bearer ${OPENAI_API_KEY}" \
+ -d "${data}"
+ )
+
+ response_str=$(printf %s "${response}" | jq -Rs | sed "s/'/''/g;s/^\"//;s/\"$//")
+ echo "INSERT INTO openai VALUES ('${request_str}', '${response_str}');" | sqlite3 "${XDG_DATA_HOME}/newsboat/openai.db"
+else
+ response=$(echo "{ \"response\": \"${response_str}\" }" | jq -r '.response')
+fi
+
+path_request=$(mktemp)
+echo "${request}" > "${path_request}"
+
+path_questions=$(mktemp)
+echo "${response}" |
+ jq -r '.choices[0].message.content | fromjson | .preguntas[].pregunta' > "${path_questions}"
+
+path_questions_and_answers=$(mktemp)
+echo "${response}" |
+ jq -r '.choices[0].message.content | fromjson | .preguntas | to_entries[] | "Q" + (.key + 1|tostring) + ": " + .value.pregunta + "\nA" + (.key + 1|tostring) + ": " + .value.respuesta + "\n"' |
+ fmt -s > "${path_questions_and_answers}"
+
+less "${path_request}" "${path_questions}" "${path_questions_and_answers}"
+rm -f "${path_request}" "${path_questions}" "${path_questions_and_answers}"
diff --git a/.config/newsboat/remove_links.lua b/.config/newsboat/remove_links.lua
@@ -0,0 +1,3 @@
+function Link(el)
+ return el.content
+end
diff --git a/.config/newsboat/urls b/.config/newsboat/urls
@@ -98,8 +98,9 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCngn7SVujlvskHRvRKc1cTw you
https://www.youtube.com/feeds/videos.xml?channel_id=UCOmCxjmeQrkB5GmCEssbvxg youtube "~Youtube RobertElderSoftware"
# News
-https://elcomercio.pe/arc/outboundfeeds/rss/category/politica/?outputType=xml news "~El Comercio - politica"
https://elcomercio.pe/arc/outboundfeeds/rss/category/mundo/?outputType=xml news "~El Comercio - mundo"
https://elcomercio.pe/arc/outboundfeeds/rss/category/economia/?outputType=xml news "~El Comercio - economía"
+https://elcomercio.pe/arc/outboundfeeds/rss/category/politica/?outputType=xml news "~El Comercio - política"
+https://elcomercio.pe/arc/outboundfeeds/rss/category/lima/?outputType=xml news "~El Comercio - lima"
#"query:Unread news:unread=\"yes\" and tags#\"news\""