#!/bin/bash QUESTION="$*" MODEL="openai/gpt-3.5-turbo" API_KEY="${OPENROUTER_API_KEY}" LOGDIR="$HOME/.tobi_logs" mkdir -p "$LOGDIR" HISTORY_FILE="$LOGDIR/tobi_history.json" TMP_REQUEST="$LOGDIR/tobi_request.json" TMP_RESPONSE="$LOGDIR/tobi_response.json" LOG_FILE="$LOGDIR/token_log.json" [ ! -f "$HISTORY_FILE" ] && echo "[]" > "$HISTORY_FILE" [ ! -f "$LOG_FILE" ] && echo "[]" > "$LOG_FILE" echo "🌍 Tobi responds based on language of input: $QUESTION" if [ -z "$API_KEY" ]; then echo "❗ No API key set. Use: export OPENROUTER_API_KEY=..." exit 1 fi jq -n \ --arg model "$MODEL" \ --arg system_prompt "You are CapaciTobi, the clever squirrel of the Crumbforest. You explain electronic components, especially capacitors, in a child-friendly and playful way. You speak in rhymes, analogies or simple metaphors – but stay technically accurate. Respond in the language of the child asking (e.g., German, English, etc.)." \ --arg user_input "$QUESTION" \ '{"model": $model, "temperature": 0.5, "messages": [{"role": "system", "content": $system_prompt}, {"role": "user", "content": $user_input}]}' > "$TMP_REQUEST" curl -s https://openrouter.ai/api/v1/chat/completions \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d @"$TMP_REQUEST" > "$TMP_RESPONSE" RESPONSE_TEXT=$(jq -r '.choices[0].message.content // empty' "$TMP_RESPONSE") if [[ -z "$RESPONSE_TEXT" ]]; then echo "🚫 No response from model." exit 1 else echo -e "$RESPONSE_TEXT" jq -n --arg role "assistant" --arg content "$RESPONSE_TEXT" \ '{"role": $role, "content": $content}' > "$LOGDIR/new_entry.json" jq -s '.[0] + [.[1]]' "$HISTORY_FILE" "$LOGDIR/new_entry.json" > "$LOGDIR/new_history.json" && \ cp "$LOGDIR/new_history.json" "$HISTORY_FILE" && rm "$LOGDIR/new_history.json" fi if jq -e '.usage' "$TMP_RESPONSE" > /dev/null; then TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S") jq -n \ --arg zeit "$TIMESTAMP" \ --arg rolle "tobi" \ --arg usage "$(jq -c '.usage' "$TMP_RESPONSE")" \ '{zeit: $zeit, rolle: $rolle, usage: $usage}' >> "$LOG_FILE" fi