#!/bin/bash
# M3 v13：修正 probe 调用方式（POST）+ 直连代理验证 + ingest 全链路
BASE=http://10.168.3.36:19088
INST=friend-48beca9b
C=friend-deploy-0acc642d-5c1
AUTH="Authorization: Bearer dev-admin-token"
CT="Content-Type: application/json"

ITOK=$(docker exec $C sh -c "grep api_auth_token /app/config/config.yaml" | awk '{print $2}')
TTOK=$(curl -sS --max-time 10 -X POST -H "$AUTH" -H "$CT" -d '{}' "$BASE/api/v1/instances/$INST/tunnels" | python3 -c "
import sys,json,urllib.parse as u
print(u.parse_qs(u.urlparse(json.load(sys.stdin)['url']).query)['__friend_tunnel'][0])")
api() { local p=$1; shift; curl -sS --max-time 25 -H "Cookie: friend_cluster_tunnel=$TTOK" -H "Authorization: Bearer $ITOK" "$BASE/panel/$INST$p" "$@"; }

echo "=== 1. 直连 39527 验证代理转发（带错误输出）==="
docker exec $C sh -c "wget -S -O- --header='Authorization: Bearer sk-yunwo-internal' --header='Content-Type: application/json' --post-data='{\"model\":\"glm-5-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hi\"}],\"max_tokens\":20}' http://127.0.0.1:39527/v1/chat/completions 2>&1 | tail -15"
echo

echo "=== 2. 正确调用 probe（POST）==="
for id in 1 2; do
  echo "-- probe model $id --"
  api "/api/llm/models/$id/probe" -X POST | head -c 300
  echo
done

echo "=== 3. 模型状态复查 ==="
api /api/llm/models | python3 -c "
import sys,json
for m in json.load(sys.stdin):
    r=m.get('runtime') or {}
    print(m.get('model_key'),'|',r.get('state'),'|',(r.get('last_error') or '')[:100])"

echo "=== 4. 若 healthy 则 ingest 注入并等回复 ==="
STATE=$(api /api/llm/models | python3 -c "
import sys,json
models=json.load(sys.stdin)
print(any((m.get('runtime') or {}).get('state')=='healthy' for m in models))")
if [ "$STATE" = "True" ]; then
  TS=$(date -u +%Y-%m-%dT%H:%M:%SZ)
  docker exec $C sh -c "wget -qO- --header='Authorization: Bearer $ITOK' --header='Content-Type: application/json' --post-data='{\"platform\":\"yunwo\",\"platform_user_id\":\"u97\",\"platform_chat_id\":\"chat97\",\"message_type\":\"text\",\"content\":{\"parts\":[{\"type\":\"text\",\"text\":\"请用一句话介绍你自己\"}]},\"timestamp\":\"$TS\"}' http://127.0.0.1:8787/ingest 2>&1"
  MAINID=c89441e6-1962-4048-807c-db4f011f9336
  for i in 1 2 3 4 5 6; do
    sleep 15
    OUT=$(api "/api/chains/$MAINID/nodes")
    INFO=$(echo "$OUT" | python3 -c "
import sys,json
nodes=json.load(sys.stdin)
print(len(nodes),'|',','.join(n.get('type') for n in nodes))" 2>/dev/null)
    echo "[poll $i] nodes=$INFO"
    echo "$INFO" | grep -qE "transmission|tool_call|assistant" && { echo "$OUT" | python3 -c "
import sys,json
for n in json.load(sys.stdin)[-3:]:
    p=n.get('payload') or {}
    print(n.get('seq'),n.get('type'),str(p)[:250])"; break; }
  done
else
  echo "MODELS_STILL_NOT_HEALTHY"
fi

echo "=== 5. brain 日志尾部 ==="
docker exec $C sh -c 'grep -E "brain.think|llm\." /var/lib/friend/logs/friend.log 2>/dev/null' | tail -6
echo DONE
