LOT 1 - Optimizare script build -Instalare mono comanda
This commit is contained in:
parent
5380c3fc63
commit
42ff22bf85
127 changed files with 16163 additions and 532 deletions
49
ai_platform/local_gpu_stack/seed/seed_brain.sh
Normal file
49
ai_platform/local_gpu_stack/seed/seed_brain.sh
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env bash
|
||||
# Brain stack helpers: render env, align postgres password, create atomic token,
|
||||
# seed the canonical taxonomy. Idempotent. Requires lib.sh sourced + master .env
|
||||
# loaded ($POSTGRES_PASSWORD, $ATOMIC_TOKEN, $HOST_IP, $ENV_FILE, $BRAIN_DIR).
|
||||
|
||||
# Write didi_brain/.env (read by brain-api/scheduler) + infra/.env (compose interpolation)
|
||||
brain_write_env() {
|
||||
local pw=$1 tok=$2
|
||||
cp "${BRAIN_DIR}/.env.example" "${BRAIN_DIR}/.env"
|
||||
sed -i \
|
||||
-e "s#^LLM_ROUTER_URL=.*#LLM_ROUTER_URL=http://didiAI-llm-api:14011#" \
|
||||
-e "s#^LLM_VLLM_URL=.*#LLM_VLLM_URL=http://didiAI-vllm-qwen3.5:14001#" \
|
||||
-e "s#^EMBEDDING_URL=.*#EMBEDDING_URL=http://didiAI-embeddings-api:14100#" \
|
||||
-e "s#^RERANKER_URL=.*#RERANKER_URL=http://didiAI-rerank-api:14200#" \
|
||||
-e "s#^MODEL_FAST_ENABLED=.*#MODEL_FAST_ENABLED=true#" \
|
||||
-e "s#^POSTGRES_PASSWORD=.*#POSTGRES_PASSWORD=${pw}#" \
|
||||
"${BRAIN_DIR}/.env"
|
||||
if grep -q '^ATOMIC_TOKEN=' "${BRAIN_DIR}/.env"; then
|
||||
sed -i "s#^ATOMIC_TOKEN=.*#ATOMIC_TOKEN=${tok}#" "${BRAIN_DIR}/.env"
|
||||
else
|
||||
echo "ATOMIC_TOKEN=${tok}" >> "${BRAIN_DIR}/.env"
|
||||
fi
|
||||
printf 'POSTGRES_USER=atomic\nPOSTGRES_PASSWORD=%s\nPOSTGRES_DB=atomic\n' "$pw" > "${BRAIN_DIR}/infra/.env"
|
||||
}
|
||||
|
||||
# Force the postgres role password to match (volume may have been initialized with a different one)
|
||||
brain_align_pg() {
|
||||
local pw=$1
|
||||
docker exec didibrain-postgres psql -U atomic -d atomic \
|
||||
-c "ALTER USER atomic WITH PASSWORD '${pw}';" >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
# Create an atomic API token if the master .env doesn't have one yet. Echos the token.
|
||||
brain_ensure_token() {
|
||||
local pw=$1 cur=$2
|
||||
if [ -n "$cur" ]; then printf '%s' "$cur"; return 0; fi
|
||||
local out tok
|
||||
out=$(docker exec didibrain-atomic atomic-server token create --name didibrain \
|
||||
--storage postgres --database-url "postgres://atomic:${pw}@postgres:5432/atomic" 2>&1)
|
||||
tok=$(printf '%s' "$out" | grep -oE 'at_[A-Za-z0-9_.-]{20,}' | head -1)
|
||||
printf '%s' "$tok"
|
||||
}
|
||||
|
||||
# Seed canonical taxonomy into atomic (idempotent; tags created if missing).
|
||||
brain_seed_taxonomy() {
|
||||
docker cp "${BRAIN_DIR}/scripts" didibrain-api:/app/scripts >/dev/null 2>&1 || true
|
||||
# local _tag_ids.json write is read-only in the image — harmless, atomic gets the tags
|
||||
docker exec -e PYTHONPATH=/app didibrain-api python /app/scripts/04_seed_taxonomy.py >/dev/null 2>&1 || true
|
||||
}
|
||||
36
ai_platform/local_gpu_stack/seed/seed_catalog.sh
Normal file
36
ai_platform/local_gpu_stack/seed/seed_catalog.sh
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/env bash
|
||||
# Idempotent seed of the dashboard DB-backed Model & Extractor catalog.
|
||||
# Defines seed_catalog(); requires lib.sh sourced + $HOST_IP set.
|
||||
|
||||
seed_catalog() {
|
||||
local base="http://${HOST_IP}:51300/api/catalog"
|
||||
# existing names (idempotency)
|
||||
local existing
|
||||
existing=$(curl -s -m10 "$base" | python3 -c 'import sys,json
|
||||
try:
|
||||
d=json.load(sys.stdin); items=d if isinstance(d,list) else d.get("items",d.get("data",[]))
|
||||
print("\n".join(x.get("name","") for x in items))
|
||||
except Exception: pass' 2>/dev/null)
|
||||
|
||||
local entries=(
|
||||
'{"kind":"model","name":"qwen3.5","display_name":"Qwen3.5-35B-A3B","service":"llm","capabilities":["chat","completion","reasoning"],"context_length":32000,"supports_gpu":true,"endpoint":"http://HOST:14011","notes":"vLLM MoE, GPU 0"}'
|
||||
'{"kind":"model","name":"bge-m3","display_name":"BGE-M3 Embeddings","service":"embeddings","capabilities":["embeddings"],"context_length":8192,"supports_gpu":true,"endpoint":"http://HOST:14100","notes":"1024-dim, vLLM GPU 1"}'
|
||||
'{"kind":"model","name":"bge-reranker-v2-m3","display_name":"BGE Reranker v2-m3","service":"rerank","capabilities":["rerank"],"context_length":8192,"supports_gpu":true,"endpoint":"http://HOST:14200","notes":"cross-encoder, vLLM GPU 1"}'
|
||||
'{"kind":"model","name":"busterx","display_name":"BusterX++ (deepfake)","service":"video","capabilities":["deepfake-detection","video-vlm"],"context_length":32768,"supports_gpu":true,"endpoint":"http://HOST:54600","notes":"Qwen2.5-VL based, vLLM GPU 1"}'
|
||||
'{"kind":"model","name":"whisper-large-v3-turbo","display_name":"Whisper large-v3-turbo","service":"audio","capabilities":["transcription","stt"],"supports_gpu":true,"endpoint":"http://HOST:54300","notes":"faster-whisper, GPU 0"}'
|
||||
'{"kind":"extractor","name":"gliner-multi-v2.1","display_name":"GLiNER NER (multilingual)","service":"extractors","capabilities":["ner"],"supports_gpu":true,"endpoint":"http://HOST:54400/v1/ner","notes":"validat RO"}'
|
||||
'{"kind":"extractor","name":"yolov8n","display_name":"YOLOv8 Object Detection","service":"extractors","capabilities":["object-detection"],"supports_gpu":true,"endpoint":"http://HOST:54400/v1/detect"}'
|
||||
'{"kind":"extractor","name":"metadata","display_name":"Media Metadata (EXIF/ELA/ffprobe/C2PA)","service":"extractors","capabilities":["exif","ela","spectrogram","integrity"],"supports_cpu":true,"endpoint":"http://HOST:54400/v1/metadata"}'
|
||||
'{"kind":"extractor","name":"forensic-suite","display_name":"Forensic detectors (rPPG/lip-sync/forgery/lighting)","service":"forensic","capabilities":["rppg","lip-sync","forgery-heatmap","lighting"],"supports_gpu":true,"endpoint":"http://HOST:8085/api/forensic-evidence"}'
|
||||
)
|
||||
local added=0 skipped=0 e name
|
||||
for e in "${entries[@]}"; do
|
||||
name=$(printf '%s' "$e" | python3 -c 'import sys,json;print(json.load(sys.stdin)["name"])')
|
||||
if printf '%s\n' "$existing" | grep -qx "$name"; then skipped=$((skipped+1)); continue; fi
|
||||
e=${e//HOST/$HOST_IP}
|
||||
if [ "$(curl -s -m10 -o /dev/null -w '%{http_code}' -X POST "$base" -H 'Content-Type: application/json' -d "$e")" = "200" ]; then
|
||||
added=$((added+1))
|
||||
fi
|
||||
done
|
||||
echo "catalog: +$added adaugate, $skipped existau deja"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue