Files
Agent-System/deploy/pi-agent/entrypoint.sh
T
weichen b812d1d30f feat(dev): single-binary no-docker runtime with managed localpg
Embed web/dist, run events in-process, manage brew PG18+pgvector, add PI host sidecar and launch --no-docker; unify MiniMax-M2.7-highspeed pins and record dev acceptance.
2026-09-24 15:53:50 +00:00

115 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
set -e
# Host Go E2E shares bind-mounted workspaces; keep files group/world readable.
umask 000
# =============================================================================
# Pi Agent Container Entrypoint
# Dynamically configures MiniMax provider (4 core parameters) & Tavily search extension
# =============================================================================
# 1. 核心参数配置与规整
# 1) ENDPOINT URL (默认: https://api.minimaxi.com/v1)
ENDPOINT_URL="${MINIMAX_ENDPOINT_URL:-https://api.minimaxi.com/v1}"
# 2) API TOKEN (用户自行设定)
API_TOKEN="${MINIMAX_API_KEY:-${MINIMAX_API_TOKEN:-}}"
# 3) MODEL ID (默认: MiniMax-M3)
MODEL_ID="${MINIMAX_MODEL_ID:-MiniMax-M2.7-highspeed}"
# 4) API 类型 (用户设定 openai-compatible,规整映射至 pi 的 openai-completions)
RAW_API_TYPE="${MINIMAX_API_TYPE:-openai-compatible}"
if [ "$RAW_API_TYPE" = "openai-compatible" ] || [ "$RAW_API_TYPE" = "openai" ]; then
API_TYPE="openai-completions"
else
API_TYPE="$RAW_API_TYPE"
fi
echo "================================================================="
echo " 🚀 Starting Pi-Agent Container"
echo " - ENDPOINT URL : ${ENDPOINT_URL}"
echo " - MODEL ID : ${MODEL_ID}"
echo " - API TYPE : ${API_TYPE} (from ${RAW_API_TYPE})"
if [ -z "$API_TOKEN" ]; then
echo " - API TOKEN : [WARNING] MINIMAX_API_KEY is not set yet!"
else
MASKED_KEY="${API_TOKEN:0:4}...${API_TOKEN: -4}"
echo " - API TOKEN : configured (${MASKED_KEY})"
fi
if [ -n "$TAVILY_API_KEYS" ] || [ -n "$TAVILY_API_KEY" ]; then
echo " - TAVILY SEARCH: configured (API Key Pool active)"
else
echo " - TAVILY SEARCH: not configured (set TAVILY_API_KEYS to enable)"
fi
echo "================================================================="
# 2. 准备 Pi Agent 运行时目录结构
PI_DIR="${PI_CODING_AGENT_DIR:-/root/.pi/agent}"
mkdir -p "${PI_DIR}/extensions"
mkdir -p "${DATA_DIR:-/app/data/workspaces}"
# 3. 注入 Tavily Web Search 扩展
if [ -f "/app/extensions/tavily-search.mjs" ]; then
cp -f "/app/extensions/tavily-search.mjs" "${PI_DIR}/extensions/tavily-search.mjs"
fi
# 4. 动态生成 models.json
cat <<EOF > "${PI_DIR}/models.json"
{
"providers": {
"minimax": {
"name": "MiniMax",
"baseUrl": "${ENDPOINT_URL}",
"api": "${API_TYPE}",
"apiKey": "${API_TOKEN}",
"models": [
{
"id": "${MODEL_ID}",
"name": "${MODEL_ID}",
"reasoning": true,
"input": ["text"],
"contextWindow": 1000000,
"maxTokens": 131072
},
{
"id": "MiniMax-M2.7-highspeed",
"name": "MiniMax-M2.7-highspeed",
"reasoning": true,
"input": ["text"],
"contextWindow": 1000000,
"maxTokens": 131072
},
{
"id": "MiniMax-M3",
"name": "MiniMax-M3",
"reasoning": true,
"input": ["text"],
"contextWindow": 1000000,
"maxTokens": 131072
}
]
}
}
}
EOF
# 5. 生成 settings.json 设置默认 Provider、Model 与全局扩展
cat <<EOF > "${PI_DIR}/settings.json"
{
"defaultProvider": "minimax",
"defaultModel": "${MODEL_ID}",
"extensions": [
"/app/extensions/tavily-search.mjs"
]
}
EOF
# 6. 执行容器命令
if [ "$#" -eq 0 ]; then
exec node /app/runner.mjs
else
exec "$@"
fi