dotfiles

My personal dotfiles
git clone git://pcardensab.com/dotfiles
Log | Files | Refs | Submodules | README

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}"