fix(translate): Kilo API response_format, reasoning_effort skip, structured_outputs fallback, refusal handling
- Enable response_format (json_object) for all providers including Kilo/OpenRouter - Skip reasoning_effort for Kilo/OpenRouter (returns 400 — mandatory reasoning) - Add structured_outputs fallback: retry once without response_format if upstream provider (e.g. StepFun) rejects it with 'structured_outputs is not supported' - Handle model refusal field (refusal) instead of treating as empty content - Fix None-handling guards for message/finish_reason/content fields - Apply same fixes to both preview.py and executor.py _call_openai_compatible - Connect orphaned TermCorrectionPopup, BulkReplaceModal, BulkCorrectionSidebar
This commit is contained in:
@@ -1,127 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# [DEF:BuildOfflineDockerBundle:Module]
|
||||
# @PURPOSE: Build and export an offline Docker bundle for enterprise-clean releases.
|
||||
# @COMPLEXITY: 2
|
||||
# @PURPOSE: Thin wrapper — delegates to ./build.sh bundle
|
||||
# @COMPLEXITY: 1
|
||||
# @RATIONALE: Unified into build.sh to avoid confusion; kept for backward compat.
|
||||
# [/DEF:BuildOfflineDockerBundle:Module]
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
DIST_ROOT="${PROJECT_ROOT}/dist/docker"
|
||||
|
||||
TAG="${1:-v1.0.0-rc2}"
|
||||
POSTGRES_IMAGE="${POSTGRES_IMAGE:-postgres:16-alpine}"
|
||||
BACKEND_IMAGE="ss-tools-backend:${TAG}"
|
||||
FRONTEND_IMAGE="ss-tools-frontend:${TAG}"
|
||||
TAG="${1:-}"
|
||||
|
||||
get_image_id() {
|
||||
docker image inspect --format '{{.Id}}' "$1"
|
||||
}
|
||||
if [[ -z "$TAG" ]]; then
|
||||
echo "Usage: $0 <tag>"
|
||||
echo "Delegates to: ./build.sh bundle <tag>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
get_repo_digest() {
|
||||
local digest
|
||||
digest="$(docker image inspect --format '{{join .RepoDigests ","}}' "$1" 2>/dev/null || true)"
|
||||
if [[ -n "${digest}" && "${digest}" != "<no value>" ]]; then
|
||||
printf '%s' "${digest}"
|
||||
else
|
||||
printf '%s' "unavailable"
|
||||
fi
|
||||
}
|
||||
|
||||
mkdir -p "${DIST_ROOT}"
|
||||
|
||||
cd "${PROJECT_ROOT}"
|
||||
|
||||
echo "[offline-bundle] building backend image ${BACKEND_IMAGE}"
|
||||
docker build -f docker/backend.Dockerfile -t "${BACKEND_IMAGE}" .
|
||||
|
||||
echo "[offline-bundle] building frontend image ${FRONTEND_IMAGE}"
|
||||
docker build -f docker/frontend.Dockerfile -t "${FRONTEND_IMAGE}" .
|
||||
|
||||
echo "[offline-bundle] pulling postgres image ${POSTGRES_IMAGE}"
|
||||
docker pull "${POSTGRES_IMAGE}"
|
||||
|
||||
echo "[offline-bundle] exporting tar archives"
|
||||
docker save -o "${DIST_ROOT}/backend.${TAG}.tar" "${BACKEND_IMAGE}"
|
||||
docker save -o "${DIST_ROOT}/frontend.${TAG}.tar" "${FRONTEND_IMAGE}"
|
||||
docker save -o "${DIST_ROOT}/postgres.${TAG}.tar" "${POSTGRES_IMAGE}"
|
||||
|
||||
echo "[offline-bundle] calculating checksums"
|
||||
(
|
||||
cd "${DIST_ROOT}"
|
||||
sha256sum "backend.${TAG}.tar" "frontend.${TAG}.tar" "postgres.${TAG}.tar" > "sha256sums.${TAG}.txt"
|
||||
)
|
||||
|
||||
BACKEND_IMAGE_ID="$(get_image_id "${BACKEND_IMAGE}")"
|
||||
FRONTEND_IMAGE_ID="$(get_image_id "${FRONTEND_IMAGE}")"
|
||||
POSTGRES_IMAGE_ID="$(get_image_id "${POSTGRES_IMAGE}")"
|
||||
|
||||
BACKEND_REPO_DIGEST="$(get_repo_digest "${BACKEND_IMAGE}")"
|
||||
FRONTEND_REPO_DIGEST="$(get_repo_digest "${FRONTEND_IMAGE}")"
|
||||
POSTGRES_REPO_DIGEST="$(get_repo_digest "${POSTGRES_IMAGE}")"
|
||||
|
||||
cat > "${DIST_ROOT}/manifest.${TAG}.txt" <<EOF
|
||||
release_tag=${TAG}
|
||||
backend_image=${BACKEND_IMAGE}
|
||||
backend_image_id=${BACKEND_IMAGE_ID}
|
||||
backend_repo_digest=${BACKEND_REPO_DIGEST}
|
||||
frontend_image=${FRONTEND_IMAGE}
|
||||
frontend_image_id=${FRONTEND_IMAGE_ID}
|
||||
frontend_repo_digest=${FRONTEND_REPO_DIGEST}
|
||||
postgres_image=${POSTGRES_IMAGE}
|
||||
postgres_image_id=${POSTGRES_IMAGE_ID}
|
||||
postgres_repo_digest=${POSTGRES_REPO_DIGEST}
|
||||
compose_file=docker-compose.enterprise-clean.yml
|
||||
env_template=.env.enterprise-clean.example
|
||||
env_bootstrap_fields=INITIAL_ADMIN_CREATE,INITIAL_ADMIN_USERNAME,INITIAL_ADMIN_PASSWORD,INITIAL_ADMIN_EMAIL
|
||||
checksums_file=sha256sums.${TAG}.txt
|
||||
generated_at_utc=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
EOF
|
||||
|
||||
cat > "${DIST_ROOT}/manifest.${TAG}.json" <<EOF
|
||||
{
|
||||
"release_tag": "${TAG}",
|
||||
"images": [
|
||||
{
|
||||
"role": "backend",
|
||||
"image": "${BACKEND_IMAGE}",
|
||||
"image_id": "${BACKEND_IMAGE_ID}",
|
||||
"repo_digest": "${BACKEND_REPO_DIGEST}",
|
||||
"archive": "backend.${TAG}.tar"
|
||||
},
|
||||
{
|
||||
"role": "frontend",
|
||||
"image": "${FRONTEND_IMAGE}",
|
||||
"image_id": "${FRONTEND_IMAGE_ID}",
|
||||
"repo_digest": "${FRONTEND_REPO_DIGEST}",
|
||||
"archive": "frontend.${TAG}.tar"
|
||||
},
|
||||
{
|
||||
"role": "postgres",
|
||||
"image": "${POSTGRES_IMAGE}",
|
||||
"image_id": "${POSTGRES_IMAGE_ID}",
|
||||
"repo_digest": "${POSTGRES_REPO_DIGEST}",
|
||||
"archive": "postgres.${TAG}.tar"
|
||||
}
|
||||
],
|
||||
"compose_file": "docker-compose.enterprise-clean.yml",
|
||||
"env_template": ".env.enterprise-clean.example",
|
||||
"env_bootstrap_fields": [
|
||||
"INITIAL_ADMIN_CREATE",
|
||||
"INITIAL_ADMIN_USERNAME",
|
||||
"INITIAL_ADMIN_PASSWORD",
|
||||
"INITIAL_ADMIN_EMAIL"
|
||||
],
|
||||
"checksums_file": "sha256sums.${TAG}.txt"
|
||||
}
|
||||
EOF
|
||||
|
||||
cp "${PROJECT_ROOT}/docker-compose.enterprise-clean.yml" "${DIST_ROOT}/docker-compose.enterprise-clean.yml"
|
||||
cp "${PROJECT_ROOT}/.env.enterprise-clean.example" "${DIST_ROOT}/.env.enterprise-clean.example"
|
||||
|
||||
echo "[offline-bundle] bundle created in ${DIST_ROOT}"
|
||||
echo "[offline-bundle] next step:"
|
||||
echo " docker load -i ${DIST_ROOT}/backend.${TAG}.tar"
|
||||
echo " docker load -i ${DIST_ROOT}/frontend.${TAG}.tar"
|
||||
echo " docker load -i ${DIST_ROOT}/postgres.${TAG}.tar"
|
||||
echo "[offline-bundle] Delegating to ./build.sh bundle $TAG..."
|
||||
exec "${PROJECT_ROOT}/build.sh" bundle "$TAG"
|
||||
|
||||
Reference in New Issue
Block a user