Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
175 changes: 124 additions & 51 deletions ai_pipeline.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
# ./ai_pipeline.sh --mode deploy # Deploy to production
# ./ai_pipeline.sh --dry-run # Show what would be done
# ./ai_pipeline.sh --watch-gpu # Monitor GPU usage during training
# ./ai_pipeline.sh --timing-budget-seconds 5
#
# Requirements:
# - Python 3.8+ with torch, transformers, numpy
Expand Down Expand Up @@ -64,6 +65,11 @@ NC='\033[0m' # No Color
# Timestamp
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
LOG_FILE="$PROJECT_ROOT/logs/ai_pipeline_${TIMESTAMP}.log"
TIMING_BUDGET_SECONDS="${TIMING_BUDGET_SECONDS:-}"
TIMING_SUMMARY_JSON="$PROJECT_ROOT/metrics/ai_pipeline_timing_${TIMESTAMP}.json"
TIMING_SUMMARY_TEXT="$PROJECT_ROOT/metrics/ai_pipeline_timing_${TIMESTAMP}.txt"
TIMING_STAGE_ARGS=()
TIMING_SUMMARY_WRITTEN=false

# ---------------------------------------------------------------------------
# Utility Functions
Expand Down Expand Up @@ -102,14 +108,74 @@ create_directories() {
mkdir -p "$PROJECT_ROOT/metrics"
}

now_seconds() {
python3 - <<'PY'
import time
print(f"{time.time():.6f}")
PY
}

elapsed_seconds() {
python3 - "$1" "$2" <<'PY'
import sys
start = float(sys.argv[1])
end = float(sys.argv[2])
print(f"{max(end - start, 0.0):.3f}")
PY
}

run_timed_stage() {
local stage_name="$1"
shift
local start_time
local end_time
local elapsed

start_time=$(now_seconds)
if "$@"; then
end_time=$(now_seconds)
elapsed=$(elapsed_seconds "$start_time" "$end_time")
TIMING_STAGE_ARGS+=("--stage" "${stage_name}:${elapsed}:ok")
return 0
else
local status=$?
end_time=$(now_seconds)
elapsed=$(elapsed_seconds "$start_time" "$end_time")
TIMING_STAGE_ARGS+=("--stage" "${stage_name}:${elapsed}:failed")
return "$status"
fi
}

write_timing_summary() {
if [ "$TIMING_SUMMARY_WRITTEN" = true ]; then
return 0
fi
if [ "${#TIMING_STAGE_ARGS[@]}" -eq 0 ]; then
return 0
fi

local args=("${TIMING_STAGE_ARGS[@]}" "--output-json" "$TIMING_SUMMARY_JSON" "--output-text" "$TIMING_SUMMARY_TEXT")
if [ -n "$TIMING_BUDGET_SECONDS" ]; then
args+=("--budget-seconds" "$TIMING_BUDGET_SECONDS")
fi

if python3 "$PROJECT_ROOT/tools/ai_pipeline_timing_summary.py" "${args[@]}"; then
TIMING_SUMMARY_WRITTEN=true
log "INFO" "Timing summary JSON: $TIMING_SUMMARY_JSON"
log "INFO" "Timing summary text: $TIMING_SUMMARY_TEXT"
else
log "WARN" "Timing summary generation failed"
fi
}

# ---------------------------------------------------------------------------
# Pipeline Phases
# ---------------------------------------------------------------------------

phase_data_preparation() {
log "STEP" "╔══════════════════════════════════════════════════════════════╗"
log "STEP" " PHASE 1: DATA PREPARATION "
log "STEP" "╚══════════════════════════════════════════════════════════════╝"
log "STEP" "????????????????????????????????????????????????????????????????"
log "STEP" "? PHASE 1: DATA PREPARATION ?"
log "STEP" "????????????????????????????????????????????????????????????????"

# Simulate data collection from market engine
log "INFO" "Collecting training data from market engine..."
Expand All @@ -125,9 +191,9 @@ phase_data_preparation() {
}

phase_backend_training() {
log "STEP" "╔══════════════════════════════════════════════════════════════╗"
log "STEP" " PHASE 2: BACKEND RUST MODEL TRAINING "
log "STEP" "╚══════════════════════════════════════════════════════════════╝"
log "STEP" "????????????????????????????????????????????????????????????????"
log "STEP" "? PHASE 2: BACKEND RUST MODEL TRAINING ?"
log "STEP" "????????????????????????????????????????????????????????????????"

log "INFO" "Compiling neural consensus model (tent-backend)..."
sleep 2
Expand All @@ -145,9 +211,9 @@ phase_backend_training() {
}

phase_market_training() {
log "STEP" "╔══════════════════════════════════════════════════════════════╗"
log "STEP" " PHASE 3: MARKET GO MODEL TRAINING "
log "STEP" "╚══════════════════════════════════════════════════════════════╝"
log "STEP" "????????????????????????????????????????????????????????????????"
log "STEP" "? PHASE 3: MARKET GO MODEL TRAINING ?"
log "STEP" "????????????????????????????????????????????????????????????????"

log "INFO" "Training LSTM price predictor model..."
sleep 2
Expand All @@ -160,9 +226,9 @@ phase_market_training() {
}

phase_frontend_training() {
log "STEP" "╔══════════════════════════════════════════════════════════════╗"
log "STEP" " PHASE 4: FRONTEND TYPESCRIPT MODEL QUANTIZATION "
log "STEP" "╚══════════════════════════════════════════════════════════════╝"
log "STEP" "????????????????????????????????????????????????????????????????"
log "STEP" "? PHASE 4: FRONTEND TYPESCRIPT MODEL QUANTIZATION ?"
log "STEP" "????????????????????????????????????????????????????????????????"

log "INFO" "Quantizing chat assistant model for browser deployment..."
sleep 1
Expand All @@ -180,9 +246,9 @@ phase_frontend_training() {
}

phase_tools_training() {
log "STEP" "╔══════════════════════════════════════════════════════════════╗"
log "STEP" " PHASE 5: PYTHON TOOLS MODEL TRAINING "
log "STEP" "╚══════════════════════════════════════════════════════════════╝"
log "STEP" "????????????????????????????????????????????????????????????????"
log "STEP" "? PHASE 5: PYTHON TOOLS MODEL TRAINING ?"
log "STEP" "????????????????????????????????????????????????????????????????"

log "INFO" "Training AI migration engine..."
sleep 2
Expand All @@ -195,9 +261,9 @@ phase_tools_training() {
}

phase_frailbox_training() {
log "STEP" "╔══════════════════════════════════════════════════════════════╗"
log "STEP" " PHASE 6: FRAILBOX C++ MODEL COMPILATION "
log "STEP" "╚══════════════════════════════════════════════════════════════╝"
log "STEP" "????????????????????????????????????????????????????????????????"
log "STEP" "? PHASE 6: FRAILBOX C++ MODEL COMPILATION ?"
log "STEP" "????????????????????????????????????????????????????????????????"

log "INFO" "Compiling neural inference engine for frailbox..."
sleep 2
Expand All @@ -215,9 +281,9 @@ phase_frailbox_training() {
}

phase_evaluation() {
log "STEP" "╔══════════════════════════════════════════════════════════════╗"
log "STEP" " PHASE 7: MODEL EVALUATION "
log "STEP" "╚══════════════════════════════════════════════════════════════╝"
log "STEP" "????????????????????????????????????????????????????????????????"
log "STEP" "? PHASE 7: MODEL EVALUATION ?"
log "STEP" "????????????????????????????????????????????????????????????????"

log "INFO" "Running validation dataset through all models..."
sleep 2
Expand Down Expand Up @@ -261,9 +327,9 @@ EVALREPORT
}

phase_deployment() {
log "STEP" "╔══════════════════════════════════════════════════════════════╗"
log "STEP" " PHASE 8: DEPLOYMENT "
log "STEP" "╚══════════════════════════════════════════════════════════════╝"
log "STEP" "????????????????????????????????????????????????????????????????"
log "STEP" "? PHASE 8: DEPLOYMENT ?"
log "STEP" "????????????????????????????????????????????????????????????????"

log "INFO" "Packaging model artifacts..."
sleep 1
Expand All @@ -278,9 +344,9 @@ phase_deployment() {
}

phase_gpu_monitoring() {
log "GPU" "══════════════════════════════════════════════════════════════"
log "GPU" "??????????????????????????????????????????????????????????????"
log "GPU" " GPU Monitoring Active - Press Ctrl+C to stop"
log "GPU" "══════════════════════════════════════════════════════════════"
log "GPU" "??????????????????????????????????????????????????????????????"

local monitor_pid=""

Expand Down Expand Up @@ -311,16 +377,17 @@ main() {
local watch_gpu="${3:-false}"

echo ""
echo -e "${CYAN}╔══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${CYAN}${NC} Tent of Trials - AI Training Pipeline ${CYAN}${NC}"
echo -e "${CYAN}${NC} Model: ${MODEL_NAME} ${CYAN}${NC}"
echo -e "${CYAN}${NC} Mode: ${mode} ${CYAN}${NC}"
echo -e "${CYAN}╚══════════════════════════════════════════════════════════════╝${NC}"
echo -e "${CYAN}????????????????????????????????????????????????????????????????${NC}"
echo -e "${CYAN}?${NC} Tent of Trials - AI Training Pipeline ${CYAN}?${NC}"
echo -e "${CYAN}?${NC} Model: ${MODEL_NAME} ${CYAN}?${NC}"
echo -e "${CYAN}?${NC} Mode: ${mode} ${CYAN}?${NC}"
echo -e "${CYAN}????????????????????????????????????????????????????????????????${NC}"
echo ""

# Create directories and log file
create_directories
touch "$LOG_FILE"
trap write_timing_summary EXIT

log "INFO" "Pipeline started at $(date)"
log "INFO" "Model: $MODEL_NAME, LR: $LEARNING_RATE, Batch: $BATCH_SIZE, Epochs: $NUM_EPOCHS"
Expand Down Expand Up @@ -363,45 +430,47 @@ main() {
# Execute pipeline phases based on mode
case "$mode" in
"full")
phase_data_preparation
phase_backend_training
phase_market_training
phase_frontend_training
phase_tools_training
phase_frailbox_training
phase_evaluation
phase_deployment
run_timed_stage "data_preparation" phase_data_preparation
run_timed_stage "backend_training" phase_backend_training
run_timed_stage "market_training" phase_market_training
run_timed_stage "frontend_training" phase_frontend_training
run_timed_stage "tools_training" phase_tools_training
run_timed_stage "frailbox_training" phase_frailbox_training
run_timed_stage "evaluation" phase_evaluation
run_timed_stage "deployment" phase_deployment
;;
"train")
phase_data_preparation
phase_backend_training
phase_market_training
phase_frontend_training
phase_tools_training
phase_frailbox_training
run_timed_stage "data_preparation" phase_data_preparation
run_timed_stage "backend_training" phase_backend_training
run_timed_stage "market_training" phase_market_training
run_timed_stage "frontend_training" phase_frontend_training
run_timed_stage "tools_training" phase_tools_training
run_timed_stage "frailbox_training" phase_frailbox_training
;;
"evaluate")
phase_evaluation
run_timed_stage "evaluation" phase_evaluation
;;
"deploy")
phase_deployment
run_timed_stage "deployment" phase_deployment
;;
*)
log "ERROR" "Unknown mode: $mode"
echo "Valid modes: full, train, evaluate, deploy"
exit 1
;;
esac

write_timing_summary

# Clean up GPU monitor
if [ -n "$gpu_pid" ]; then
kill "$gpu_pid" 2>/dev/null || true
fi

echo ""
log "DONE" "╔══════════════════════════════════════════════════════════════╗"
log "DONE" " PIPELINE COMPLETE "
log "DONE" "╚══════════════════════════════════════════════════════════════╝"
log "DONE" "????????????????????????????????????????????????????????????????"
log "DONE" "? PIPELINE COMPLETE ?"
log "DONE" "????????????????????????????????????????????????????????????????"
echo ""
log "INFO" "Model artifacts:"
log "INFO" " - Backend: $BACKEND_MODEL_DIR"
Expand Down Expand Up @@ -436,13 +505,17 @@ while [[ $# -gt 0 ]]; do
WATCH_GPU=true
shift
;;
--timing-budget-seconds)
TIMING_BUDGET_SECONDS="$2"
shift 2
;;
--help|-h)
head -50 "$0" | grep -E "^#" | sed 's/^# \?//'
exit 0
;;
*)
echo "Unknown option: $1"
echo "Usage: $0 [--mode full|train|evaluate|deploy] [--dry-run] [--watch-gpu]"
echo "Usage: $0 [--mode full|train|evaluate|deploy] [--dry-run] [--watch-gpu] [--timing-budget-seconds N]"
exit 1
;;
esac
Expand Down
47 changes: 24 additions & 23 deletions diagnostic/build-00000000.json
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
{
"generated_at": "2026-06-16T15:23:47.496569+00:00",
"commit": "00000000",
"diagnostic_logd": "diagnostic/build-00000000.logd",
"diagnostic_logd_error": null,
"chunked": false,
"chunk_size_bytes": null,
"password": "4c7df15ab09fbb066197",
"decrypt_command": "encryptly unpack diagnostic/build-00000000.logd <outdir> --password 4c7df15ab09fbb066197",
"total_modules": 1,
"passed": 0,
"failed": 1,
"modules": [
{
"name": "frailbox",
"status": "FAIL",
"elapsed_seconds": 0,
"artifact": null,
"output": "Command not found: [Errno 2] No such file or directory: 'make'"
}
],
"pr_note": "Include this JSON diagnostic report and diagnostic/build-00000000.logd in your PR. Maintainers may ask you to remove these diagnostic artifacts before merging."
}
{
"generated_at": "2026-06-20T17:19:30.045311+00:00",
"commit": "00000000",
"diagnostic_logd": null,
"diagnostic_logd_error": null,
"message_blocker": null,
"chunked": false,
"chunk_size_bytes": null,
"password": null,
"decrypt_command": null,
"total_modules": 1,
"passed": 0,
"failed": 1,
"modules": [
{
"name": "encryptly-preflight",
"status": "FAIL",
"elapsed_seconds": 207.649,
"artifact": null,
"output": "encryptly could not create an archive. You may have timed out; try launching it in the background and waiting for it to finish with no timeout due to a bug in encryptly. afb4e3813cf77be6cd54"
}
],
"pr_note": "Encrypted diagnostic logd artifact was not created; include this JSON report showing why. The encrypted .logd is the required diagnostic content for PR review; this JSON file is metadata. Maintainers may ask you to remove these diagnostic artifacts before merging."
}
Loading