dotfiles

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README

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:
M.config/newsboat/config | 17++++++++++++-----
A.config/newsboat/openai.sh | 91+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/newsboat/remove_links.lua | 3+++
M.config/newsboat/urls | 3++-
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/&lt;/</g;s/&gt;/>/g;s/&amp;/\\&/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/&lt;/</g;s/&gt;/>/g;s/&amp;/\\&/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\""