115 lines
3.3 KiB
Bash
Executable File
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-M3}"
|
|
|
|
# 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
|