Add semantic-index service, deployment assets, and tests
This commit is contained in:
Executable
+71
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
usage() {
|
||||
cat >&2 <<'EOF'
|
||||
Usage:
|
||||
semantic_index/search.sh "query text" [project_identifier] [limit]
|
||||
|
||||
Examples:
|
||||
semantic_index/search.sh "goods return" customer-service 3
|
||||
semantic_index/search.sh "candidate follow up" hiring 5 | jq '.results[] | {id, score, citation}'
|
||||
|
||||
Environment:
|
||||
SEMANTIC_INDEX_URL default: http://127.0.0.1:8787
|
||||
SEMANTIC_INDEX_API_KEY optional; falls back to semantic_index/.env or .env
|
||||
EOF
|
||||
}
|
||||
|
||||
if [[ $# -lt 1 ]]; then
|
||||
usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
query=$1
|
||||
project=${2:-}
|
||||
limit=${3:-10}
|
||||
base_url=${SEMANTIC_INDEX_URL:-http://127.0.0.1:8787}
|
||||
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
install_root=$(cd "$script_dir/.." && pwd)
|
||||
|
||||
read_env_value() {
|
||||
local key=$1
|
||||
local file
|
||||
for file in /etc/semantic-index.env "$install_root/semantic_index/.env" "$install_root/.env" semantic_index/.env .env; do
|
||||
if [[ -f "$file" ]]; then
|
||||
awk -F= -v key="$key" '
|
||||
$1 == key {
|
||||
value = substr($0, index($0, "=") + 1)
|
||||
gsub(/^[ \t"'\''"]+|[ \t"'\''"]+$/, "", value)
|
||||
print value
|
||||
exit
|
||||
}
|
||||
' "$file"
|
||||
return
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
json_escape() {
|
||||
sed \
|
||||
-e 's/\\/\\\\/g' \
|
||||
-e 's/"/\\"/g' \
|
||||
-e ':a;N;$!ba;s/\n/\\n/g'
|
||||
}
|
||||
|
||||
escaped_query=$(printf '%s' "$query" | json_escape)
|
||||
payload="{\"query\":\"$escaped_query\",\"limit\":$limit"
|
||||
if [[ -n "$project" ]]; then
|
||||
escaped_project=$(printf '%s' "$project" | json_escape)
|
||||
payload="$payload,\"project_identifier\":\"$escaped_project\""
|
||||
fi
|
||||
payload="$payload}"
|
||||
|
||||
api_key=${SEMANTIC_INDEX_API_KEY:-$(read_env_value SEMANTIC_INDEX_API_KEY)}
|
||||
|
||||
args=(-sS -H "Content-Type: application/json" -d "$payload")
|
||||
if [[ -n "${api_key:-}" ]]; then
|
||||
args+=(-H "Authorization: Bearer $api_key")
|
||||
fi
|
||||
|
||||
curl "${args[@]}" "$base_url/search"
|
||||
Reference in New Issue
Block a user