fix(orchestrator): rename TEMP to TEMPERATURE to avoid collision with POSIX temp directory in ROCm

This commit is contained in:
Noel Bautista 2026-10-21 14:18:43 -07:00
parent 8af11cc8ef
commit b753f48c2b
No known key found for this signature in database
2 changed files with 23 additions and 7 deletions

View file

@ -6,6 +6,17 @@
set -euo pipefail set -euo pipefail
# Sanitize environment:
# TEMP/TMP are standard POSIX variables for temporary file directories.
# If set to a sampling temperature (float/number), ROCm/libstdc++ crashes during initialization!
if [ -n "${TEMP:-}" ] && [ ! -d "${TEMP}" ]; then
TEMPERATURE="${TEMPERATURE:-${TEMP}}"
unset TEMP
fi
if [ -n "${TMP:-}" ] && [ ! -d "${TMP}" ]; then
unset TMP
fi
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
LOG_DIR="${LOG_DIR:-${SCRIPT_DIR}/logs}" LOG_DIR="${LOG_DIR:-${SCRIPT_DIR}/logs}"
mkdir -p "${LOG_DIR}" mkdir -p "${LOG_DIR}"
@ -45,7 +56,7 @@ LLAMA_SERVER="$(find_llama_server)"
check_health() { check_health() {
local port="${1:-11434}" local port="${1:-11434}"
local host="${2:-127.0.0.1}" local host="${2:-127.0.0.1}"
if curl -s "http://${host}:${port}/health" 2>/dev/null | grep -q '"status":\s*"ok"\|"status":\s*"loading model"\|"ok"'; then if curl -s "http://${host}:${port}/health" 2>/dev/null | grep -q '"status":\s*"ok"\|"ok"'; then
return 0 return 0
fi fi
return 1 return 1
@ -247,7 +258,7 @@ cmd_muse() {
local tmpl="${TEMPLATE:-${SCRIPT_DIR}/templates/muse-glimmer/chat_template.jinja}" local tmpl="${TEMPLATE:-${SCRIPT_DIR}/templates/muse-glimmer/chat_template.jinja}"
launch_instance "muse_solo" "$model" "${PORT:-11434}" "${CTX:-131072}" \ launch_instance "muse_solo" "$model" "${PORT:-11434}" "${CTX:-131072}" \
"$mmproj" "$tmpl" "${TEMP:-0.6}" "${TOP_P:-0.95}" "${TOP_K:-40}" \ "$mmproj" "$tmpl" "${TEMPERATURE:-${SAMPLING_TEMP:-0.6}}" "${TOP_P:-0.95}" "${TOP_K:-40}" \
"${MIN_P:-0.05}" "${NGL:-99}" "${LOAD_MODE:-none}" "${FLASH_ATTN:-on}" \ "${MIN_P:-0.05}" "${NGL:-99}" "${LOAD_MODE:-none}" "${FLASH_ATTN:-on}" \
"${CTK:-q8_0}" "${CTV:-q8_0}" "${REASONING_PRESERVE:-true}" "${CTK:-q8_0}" "${CTV:-q8_0}" "${REASONING_PRESERVE:-true}"
@ -270,7 +281,7 @@ cmd_superqwen() {
local tmpl="${TEMPLATE:-${SCRIPT_DIR}/templates/Qwen3.8/chat_template.jinja}" local tmpl="${TEMPLATE:-${SCRIPT_DIR}/templates/Qwen3.8/chat_template.jinja}"
launch_instance "superqwen_solo" "$model" "${PORT:-11434}" "${CTX:-262144}" \ launch_instance "superqwen_solo" "$model" "${PORT:-11434}" "${CTX:-262144}" \
"$mmproj" "$tmpl" "${TEMP:-0.6}" "${TOP_P:-0.95}" "${TOP_K:-40}" \ "$mmproj" "$tmpl" "${TEMPERATURE:-${SAMPLING_TEMP:-0.6}}" "${TOP_P:-0.95}" "${TOP_K:-40}" \
"${MIN_P:-0.05}" "${NGL:-99}" "${LOAD_MODE:-none}" "${FLASH_ATTN:-on}" \ "${MIN_P:-0.05}" "${NGL:-99}" "${LOAD_MODE:-none}" "${FLASH_ATTN:-on}" \
"${CTK:-q8_0}" "${CTV:-q8_0}" "${REASONING_PRESERVE:-true}" "${CTK:-q8_0}" "${CTV:-q8_0}" "${REASONING_PRESERVE:-true}"
@ -290,7 +301,7 @@ cmd_qwen4b() {
local tmpl="${TEMPLATE:-${SCRIPT_DIR}/templates/Qwen3.5/chat_template.jinja}" local tmpl="${TEMPLATE:-${SCRIPT_DIR}/templates/Qwen3.5/chat_template.jinja}"
launch_instance "qwen4b_solo" "$model" "${PORT:-11434}" "${CTX:-32768}" \ launch_instance "qwen4b_solo" "$model" "${PORT:-11434}" "${CTX:-32768}" \
"$mmproj" "$tmpl" "${TEMP:-0.7}" "${TOP_P:-0.8}" "${TOP_K:-20}" \ "$mmproj" "$tmpl" "${TEMPERATURE:-${SAMPLING_TEMP:-0.7}}" "${TOP_P:-0.8}" "${TOP_K:-20}" \
"${MIN_P:-0.05}" "${NGL:-99}" "${LOAD_MODE:-mmap}" "${FLASH_ATTN:-on}" \ "${MIN_P:-0.05}" "${NGL:-99}" "${LOAD_MODE:-mmap}" "${FLASH_ATTN:-on}" \
"${CTK:-q8_0}" "${CTV:-q8_0}" "false" "${CTK:-q8_0}" "${CTV:-q8_0}" "false"
@ -315,7 +326,7 @@ cmd_custom() {
local name="custom_solo" local name="custom_solo"
launch_instance "${name}" "$model" "${PORT:-11434}" "${CTX:-65536}" \ launch_instance "${name}" "$model" "${PORT:-11434}" "${CTX:-65536}" \
"$mmproj" "$tmpl" "${TEMP:-0.6}" "${TOP_P:-0.95}" "${TOP_K:-40}" \ "$mmproj" "$tmpl" "${TEMPERATURE:-${SAMPLING_TEMP:-0.6}}" "${TOP_P:-0.95}" "${TOP_K:-40}" \
"${MIN_P:-0.05}" "${NGL:-99}" "${LOAD_MODE:-none}" "${FLASH_ATTN:-on}" \ "${MIN_P:-0.05}" "${NGL:-99}" "${LOAD_MODE:-none}" "${FLASH_ATTN:-on}" \
"${CTK:-q8_0}" "${CTV:-q8_0}" "${REASONING_PRESERVE:-false}" "${CTK:-q8_0}" "${CTV:-q8_0}" "${REASONING_PRESERVE:-false}"

View file

@ -725,9 +725,13 @@ class LLMConfigApp(App):
mmproj_val = str(self.query_one("#select-mmproj", Select).value or "") mmproj_val = str(self.query_one("#select-mmproj", Select).value or "")
env = os.environ.copy() env = os.environ.copy()
# Clean up POSIX temp directory variables that could collide with sampling parameters
env.pop("TEMP", None)
env.pop("TMP", None)
env["TEMPERATURE"] = self.query_one("#input-temp", Input).value or "0.6"
env["CTX"] = self.query_one("#input-ctx", Input).value or "65536" env["CTX"] = self.query_one("#input-ctx", Input).value or "65536"
env["PORT"] = self.query_one("#input-port", Input).value or "11434" env["PORT"] = self.query_one("#input-port", Input).value or "11434"
env["TEMP"] = self.query_one("#input-temp", Input).value or "0.6"
env["TOP_P"] = self.query_one("#input-top-p", Input).value or "0.95" env["TOP_P"] = self.query_one("#input-top-p", Input).value or "0.95"
env["MIN_P"] = self.query_one("#input-min-p", Input).value or "0.05" env["MIN_P"] = self.query_one("#input-min-p", Input).value or "0.05"
env["NGL"] = self.query_one("#input-ngl", Input).value or "99" env["NGL"] = self.query_one("#input-ngl", Input).value or "99"
@ -757,7 +761,8 @@ class LLMConfigApp(App):
f" Port: {env['PORT']} | Context: {env['CTX']} | KV Quant: {env['CTK']}\n" f" Port: {env['PORT']} | Context: {env['CTX']} | KV Quant: {env['CTK']}\n"
) )
subprocess.Popen(cmd, env=env, cwd=str(SCRIPT_DIR), start_new_session=True) runner_log = open(LOGS_DIR / "runner.log", "a")
subprocess.Popen(cmd, env=env, cwd=str(SCRIPT_DIR), stdout=runner_log, stderr=runner_log, start_new_session=True)
self.notify(f"Launching {preset} server. Switching to Status & Logs...", severity="information") self.notify(f"Launching {preset} server. Switching to Status & Logs...", severity="information")
self.query_one(TabbedContent).active = "tab-status" self.query_one(TabbedContent).active = "tab-status"
self.action_refresh_status() self.action_refresh_status()