ive harnessed the harness
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

scripts and add url flag

dawn 4db061a5 1d363750

+148 -4
+9 -4
klbr-tui/src/main.rs
··· 16 16 widgets::{Block, Borders, Paragraph, Wrap}, 17 17 Terminal, 18 18 }; 19 - use std::{io, ops::Not, time::Instant}; 19 + use std::{env, io, ops::Not, time::Instant}; 20 20 use tokio::net::TcpStream; 21 21 use tokio_tungstenite::{connect_async, tungstenite::Message, MaybeTlsStream, WebSocketStream}; 22 22 use tui_scrollview::{ScrollView, ScrollViewState}; ··· 592 592 593 593 // ── main ───────────────────────────────────────────────────────────────────── 594 594 595 - pub async fn run() -> Result<()> { 596 - let (ws, _) = match connect_async(ws_url()).await { 595 + pub async fn run(url: &str) -> Result<()> { 596 + let (ws, _) = match connect_async(url).await { 597 597 Ok(ok) => ok, 598 598 Err(e) => { 599 599 tracing::error!("daemon not running, start it with `klbr daemon`"); ··· 931 931 } 932 932 #[tokio::main] 933 933 async fn main() -> Result<()> { 934 - run().await 934 + let url = env::args() 935 + .skip(1) 936 + .find_map(|arg| arg.strip_prefix("--url=").map(str::to_owned)) 937 + .unwrap_or_else(|| ws_url().to_owned()); 938 + 939 + run(&url).await 935 940 }
+139
scripts/start-models.sh
··· 1 + #!/usr/bin/env bash 2 + set -euo pipefail 3 + 4 + MODELS_DIR="${MODELS_DIR:-$HOME/models}" 5 + LOG_DIR="${LOG_DIR:-/tmp/klbr-models}" 6 + WAIT_TIMEOUT="${WAIT_TIMEOUT:-900}" 7 + 8 + LLM_SCRIPT="${LLM_SCRIPT:-run.sh}" 9 + EMBED_SCRIPT="${EMBED_SCRIPT:-embeddings.sh}" 10 + RERANK_SCRIPT="${RERANK_SCRIPT:-reranker.sh}" 11 + 12 + LLM_PORT="${LLM_PORT:-8001}" 13 + EMBED_PORT="${EMBED_PORT:-8002}" 14 + RERANK_PORT="${RERANK_PORT:-8003}" 15 + 16 + if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then 17 + cat <<'USAGE' 18 + usage: scripts/start-models.sh 19 + 20 + Starts the KLBR chat LLM, embedder, and reranker by running the existing 21 + scripts in ~/models: 22 + 23 + run.sh -> port 8001 24 + embeddings.sh -> port 8002 25 + reranker.sh -> port 8003 26 + 27 + Useful overrides: 28 + MODELS_DIR=/path/to/models 29 + LOG_DIR=/tmp/klbr-models 30 + LLM_SCRIPT=run-qwen.sh 31 + EMBED_SCRIPT=embeddings.sh 32 + RERANK_SCRIPT=reranker.sh 33 + WAIT_TIMEOUT=900 34 + USAGE 35 + exit 0 36 + fi 37 + 38 + mkdir -p "$LOG_DIR" 39 + 40 + pids=() 41 + names=() 42 + 43 + log() { 44 + printf '[klbr-models] %s\n' "$*" 45 + } 46 + 47 + port_is_open() { 48 + local port="$1" 49 + (echo >"/dev/tcp/127.0.0.1/$port") >/dev/null 2>&1 50 + } 51 + 52 + models_endpoint_ready() { 53 + local port="$1" 54 + curl -fsS "http://127.0.0.1:${port}/v1/models" >/dev/null 2>&1 55 + } 56 + 57 + start_service() { 58 + local name="$1" 59 + local script="$2" 60 + local port="$3" 61 + local log_file="${LOG_DIR}/${name}.log" 62 + 63 + if port_is_open "$port"; then 64 + log "$name already listening on port $port; leaving it alone" 65 + return 66 + fi 67 + 68 + if [[ ! -f "${MODELS_DIR}/${script}" ]]; then 69 + log "missing ${MODELS_DIR}/${script}" 70 + exit 1 71 + fi 72 + 73 + log "starting $name on port $port -> $log_file" 74 + ( 75 + cd "$MODELS_DIR" 76 + exec bash "$script" 77 + ) >"$log_file" 2>&1 & 78 + 79 + pids+=("$!") 80 + names+=("$name") 81 + } 82 + 83 + wait_ready() { 84 + local name="$1" 85 + local port="$2" 86 + local deadline=$((SECONDS + WAIT_TIMEOUT)) 87 + 88 + log "waiting for $name on http://127.0.0.1:$port" 89 + while (( SECONDS < deadline )); do 90 + if models_endpoint_ready "$port"; then 91 + log "$name ready" 92 + return 93 + fi 94 + sleep 2 95 + done 96 + 97 + log "$name did not become ready within ${WAIT_TIMEOUT}s" 98 + return 1 99 + } 100 + 101 + cleanup() { 102 + if ((${#pids[@]} == 0)); then 103 + return 104 + fi 105 + 106 + log "stopping launched model servers" 107 + for pid in "${pids[@]}"; do 108 + if kill -0 "$pid" >/dev/null 2>&1; then 109 + kill "$pid" >/dev/null 2>&1 || true 110 + fi 111 + done 112 + wait "${pids[@]}" >/dev/null 2>&1 || true 113 + } 114 + 115 + trap cleanup INT TERM EXIT 116 + 117 + start_service "llm" "$LLM_SCRIPT" "$LLM_PORT" 118 + start_service "embedder" "$EMBED_SCRIPT" "$EMBED_PORT" 119 + start_service "reranker" "$RERANK_SCRIPT" "$RERANK_PORT" 120 + 121 + wait_ready "llm" "$LLM_PORT" 122 + wait_ready "embedder" "$EMBED_PORT" 123 + wait_ready "reranker" "$RERANK_PORT" 124 + 125 + if ((${#pids[@]} == 0)); then 126 + log "all services were already running" 127 + exit 0 128 + fi 129 + 130 + log "all model servers are ready; logs are in $LOG_DIR" 131 + log "press ctrl-c to stop servers launched by this script" 132 + 133 + set +e 134 + wait -n "${pids[@]}" 135 + status="$?" 136 + set -e 137 + 138 + log "a launched model server exited with status $status; stopping the rest" 139 + exit "$status"