openai.sh (3447B)
1 #!/bin/sh 2 3 newspaper="$(grep "^Feed: " "$1" | sed 's/^Feed: //')" 4 5 text_body="$( 6 grep '^<' "$1" | 7 perl -pe 's:<q>.*?(MIRA|LEE|MÁS|PUEDES VER|REVISA AQUÍ).*?</q>::g' | 8 perl -pe 's|^<ul>.*?</ul>||' | 9 perl -pe 's|(<img.*?alt=\")(.*?)(\".*?/>)||g' 10 )" 11 12 request="$( 13 { 14 echo "<h1>$(grep "^Title: " "$1" | sed 's/^Title: //' || true)</h1>" 15 echo "${text_body}" 16 } | 17 pandoc -f html -t markdown_strict-raw_html --wrap=none --lua-filter="${XDG_CONFIG_HOME}/newsboat/remove_links.lua" 18 )" 19 20 echo "CREATE TABLE IF NOT EXISTS openai(request TEXT, response TEXT);" | 21 sqlite3 "${XDG_DATA_HOME}/newsboat/openai.db" 22 23 request_str=$(printf %s "${request}" | jq -Rs | sed "s/'/\\'/g;s/^\"//;s/\"$//") 24 response_str=$( 25 echo "SELECT response FROM openai WHERE request = '${request_str}'" | 26 sqlite3 "${XDG_DATA_HOME}/newsboat/openai.db" 27 ) 28 29 30 if [ -z "${response_str}" ]; then 31 . "${XDG_CONFIG_HOME}/secrets/openai.sh" 32 content_system=" 33 Eres un asistente que ayuda a los usuarios a mejorar su comprensión y memorización de artículos. 34 - Proporcionas preguntas y sus respuestas basadas en el contenido del artículo proporcionado. 35 - La primera pregunta siempre debe ser \"¿Cuál es el título del artículo?\". 36 - Luego, las preguntas de deben basarse en la respuestas ya dadas. 37 - 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. 38 - Asegúrate de que las respuestas cubran todas las ideas y todos los detalles del artículo. 39 - Formatea tu respuesta como un objeto cuyo atributo \"preguntas\" sea el arreglo de objetos con atributos \"pregunta\" y \"respuesta\" en formato JSON. 40 - Recuerda que es el usuario quien debe recordar los detalles del artículo, no les des pistas en el enunciado de las preguntas. 41 - El articulo proviene de '${newspaper}'. 42 " 43 data=$( 44 jq -n \ 45 --arg content_system "${content_system}" \ 46 --arg content_user "${request}" \ 47 '{ 48 "model": "gpt-4o", 49 "response_format": { "type": "json_object" }, 50 "seed": 42, 51 "temperature": 0, 52 "messages": [ 53 { 54 "role": "system", 55 "content": $content_system 56 }, 57 { 58 "role": "user", 59 "content": $content_user 60 } 61 ] 62 }' 63 ) 64 65 response=$( 66 curl https://api.openai.com/v1/chat/completions \ 67 -H "Content-Type: application/json" \ 68 -H "Authorization: Bearer ${OPENAI_API_KEY}" \ 69 -d "${data}" 70 ) 71 72 response_str=$(printf %s "${response}" | jq -Rs | sed "s/'/''/g;s/^\"//;s/\"$//") 73 echo "INSERT INTO openai VALUES ('${request_str}', '${response_str}');" | sqlite3 "${XDG_DATA_HOME}/newsboat/openai.db" 74 else 75 response=$(echo "{ \"response\": \"${response_str}\" }" | jq -r '.response') 76 fi 77 78 path_request=$(mktemp) 79 echo "${request}" > "${path_request}" 80 81 path_questions=$(mktemp) 82 echo "${response}" | 83 jq -r '.choices[0].message.content | fromjson | .preguntas[].pregunta' > "${path_questions}" 84 85 path_questions_and_answers=$(mktemp) 86 echo "${response}" | 87 jq -r '.choices[0].message.content | fromjson | .preguntas | to_entries[] | "Q" + (.key + 1|tostring) + ": " + .value.pregunta + "\nA" + (.key + 1|tostring) + ": " + .value.respuesta + "\n"' | 88 fmt -s > "${path_questions_and_answers}" 89 90 less "${path_request}" "${path_questions}" "${path_questions_and_answers}" 91 rm -f "${path_request}" "${path_questions}" "${path_questions_and_answers}"