#!/usr/bin/env bash set -euo pipefail MODEL="$1" PROMPT_FILE="$2" REASONING_FLAG="${3:-}" ES_NODE="${ES_NODE:-http://localhost:9200}" ES_INDEX="${ES_INDEX:-quo_distill_index}" OLLAMA_URL="${OLLAMA_URL:-http://localhost:11434}" if [[ -z "${MODEL:-}" || -z "${PROMPT_FILE:-}" ]]; then echo "Usage: $0 [-r]" exit 1 fi if [[ ! -f "$PROMPT_FILE" ]]; then echo "❌ Error: prompt file '$PROMPT_FILE' not found." exit 1 fi ############################################################ # 1. Fetch random ES chunk ############################################################ echo "📡 Fetching 1 random chunk from Elasticsearch…" RANDOM_DOC=$(curl -s -X POST "$ES_NODE/$ES_INDEX/_search" \ -H "Content-Type: application/json" \ -d '{ "size": 1, "query": { "function_score": { "random_score": {} } } }') CHUNK=$(echo "$RANDOM_DOC" | jq -r '.hits.hits[0]._source.content') DOC_ID=$(echo "$RANDOM_DOC" | jq -r '.hits.hits[0]._id') echo "🧩 Random chunk ID: $DOC_ID" echo "----------------------------------------------" echo "$CHUNK" | head -n 20 echo "… (truncated)" echo "----------------------------------------------" ############################################################ # 2. Replace {{CONTEXT}} in prompt ############################################################ RAW_PROMPT=$(cat "$PROMPT_FILE") PROMPT="${RAW_PROMPT//\{\{CONTEXT\}\}/$CHUNK}" ############################################################ # 3. Build JSON payload (no jq merging!) ############################################################ if [[ "$REASONING_FLAG" == "-r" ]]; then echo "🧠 Reasoning mode: ON" OPTIONS='"options":{"reasoning":true},' else echo "🧠 Reasoning mode: OFF" OPTIONS="" fi # Safely quote prompt text PROMPT_JSON=$(printf '%s' "$PROMPT" | jq -Rs .) # Build payload manually — no parsing of fragments PAYLOAD=$(cat <