kofdai commited on
Commit
b4d91f0
ยท
verified ยท
1 Parent(s): fdcb8e2

Upload start_null_ai.sh with huggingface_hub

Browse files
Files changed (1) hide show
  1. start_null_ai.sh +355 -0
start_null_ai.sh ADDED
@@ -0,0 +1,355 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ #
3
+ # NullAI ่ตทๅ‹•ใ‚นใ‚ฏใƒชใƒ—ใƒˆ
4
+ #
5
+ # ไฝฟ็”จๆ–นๆณ•:
6
+ # ./start_null_ai.sh # ๅ…จใ‚ตใƒผใƒ“ใ‚น่ตทๅ‹•
7
+ # ./start_null_ai.sh backend # ใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰ใฎใฟ
8
+ # ./start_null_ai.sh frontend # ใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰ใฎใฟ
9
+ # ./start_null_ai.sh ollama # Ollamaใฎใฟ
10
+ # ./start_null_ai.sh stop # ๅ…จใ‚ตใƒผใƒ“ใ‚นๅœๆญข
11
+
12
+ set -e
13
+
14
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
15
+ cd "$SCRIPT_DIR"
16
+
17
+ # ่‰ฒไป˜ใๅ‡บๅŠ›
18
+ RED='\033[0;31m'
19
+ GREEN='\033[0;32m'
20
+ YELLOW='\033[1;33m'
21
+ BLUE='\033[0;34m'
22
+ NC='\033[0m' # No Color
23
+
24
+ log_info() {
25
+ echo -e "${BLUE}[INFO]${NC} $1"
26
+ }
27
+
28
+ log_success() {
29
+ echo -e "${GREEN}[SUCCESS]${NC} $1"
30
+ }
31
+
32
+ log_warn() {
33
+ echo -e "${YELLOW}[WARN]${NC} $1"
34
+ }
35
+
36
+ log_error() {
37
+ echo -e "${RED}[ERROR]${NC} $1"
38
+ }
39
+
40
+ # ใƒใƒŠใƒผ่กจ็คบ
41
+ show_banner() {
42
+ echo ""
43
+ echo -e "${BLUE}"
44
+ echo " โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—"
45
+ echo " โ•‘ โ•‘"
46
+ echo " โ•‘ โ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•— โ•‘"
47
+ echo " โ•‘ โ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•‘ โ•‘"
48
+ echo " โ•‘ โ–ˆโ–ˆโ•”โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ•‘"
49
+ echo " โ•‘ โ–ˆโ–ˆโ•‘โ•šโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ•‘"
50
+ echo " โ•‘ โ–ˆโ–ˆโ•‘ โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ•‘โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ•‘"
51
+ echo " โ•‘ โ•šโ•โ• โ•šโ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ•โ•โ•šโ•โ•โ•โ•โ•โ•โ• โ•šโ•โ• โ•šโ•โ•โ•šโ•โ• โ•‘"
52
+ echo " โ•‘ โ•‘"
53
+ echo " โ•‘ โ•‘"
54
+ echo " โ•‘ Multi-Domain Knowledge Reasoning System โ•‘"
55
+ echo " โ•‘ Version 1.0.0 โ•‘"
56
+ echo " โ•‘ โ•‘"
57
+ echo " โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•"
58
+ echo -e "${NC}"
59
+ echo ""
60
+ }
61
+
62
+ # ไพๅญ˜้–ขไฟ‚ใƒใ‚งใƒƒใ‚ฏ
63
+ check_dependencies() {
64
+ log_info "Checking dependencies..."
65
+
66
+ # Python
67
+ if ! command -v python3 &> /dev/null; then
68
+ log_error "Python 3 is not installed"
69
+ exit 1
70
+ fi
71
+ log_success "Python 3: $(python3 --version)"
72
+
73
+ # Node.js
74
+ if ! command -v node &> /dev/null; then
75
+ log_error "Node.js is not installed"
76
+ exit 1
77
+ fi
78
+ log_success "Node.js: $(node --version)"
79
+
80
+ # Ollama (ใ‚ชใƒ—ใ‚ทใƒงใƒณ)
81
+ if command -v ollama &> /dev/null; then
82
+ log_success "Ollama: installed"
83
+ else
84
+ log_warn "Ollama is not installed (required for local LLM)"
85
+ fi
86
+
87
+ echo ""
88
+ }
89
+
90
+ # ไปฎๆƒณ็’ฐๅขƒใฎใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ™ใƒผใƒˆใจPythonไพๅญ˜้–ขไฟ‚ใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซ
91
+ activate_venv() {
92
+ log_info "Activating virtual environment and installing Python dependencies..."
93
+ if [ ! -d "venv" ]; then
94
+ log_info "Creating virtual environment..."
95
+ python3 -m venv venv
96
+ fi
97
+ source venv/bin/activate
98
+ log_success "Virtual environment activated."
99
+
100
+ if [ -f "requirements.txt" ]; then
101
+ log_info "Installing/Upgrading Python dependencies from requirements.txt..."
102
+ pip install -r requirements.txt
103
+ log_success "Python dependencies from requirements.txt installed."
104
+ else
105
+ log_warn "requirements.txt not found. Skipping Python dependency installation."
106
+ fi
107
+
108
+ if [ -f "requirements-huggingface.txt" ]; then
109
+ log_info "Installing/Upgrading Python dependencies from requirements-huggingface.txt..."
110
+ pip install -r requirements-huggingface.txt
111
+ log_success "Python dependencies from requirements-huggingface.txt installed."
112
+ else
113
+ log_warn "requirements-huggingface.txt not found. Skipping HuggingFace dependency installation."
114
+ fi
115
+
116
+ # llama-cpp-pythonใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซใ‚’ๆ˜Ž็คบ็š„ใซ็ขบ่ช (ใƒ“ใƒซใƒ‰ใซๆ™‚้–“ใŒใ‹ใ‹ใ‚‹ใŸใ‚)
117
+ if ! python -c "import llama_cpp" &> /dev/null; then
118
+ log_info "llama-cpp-python not found. Installing..."
119
+ # ็‰นๅฎšใฎ็’ฐๅขƒ่จญๅฎšใŒๅฟ…่ฆใชๅ ดๅˆใŒใ‚ใ‚‹ใŸใ‚ใ€ใ“ใ“ใงใฏไธ€่ˆฌ็š„ใชใ‚คใƒณใ‚นใƒˆใƒผใƒซ
120
+ pip install llama-cpp-python
121
+ log_success "llama-cpp-python installed."
122
+ else
123
+ log_success "llama-cpp-python is already installed."
124
+ fi
125
+ }
126
+
127
+ # Ollamaใฎ่ตทๅ‹•
128
+ start_ollama() {
129
+ log_info "Starting Ollama..."
130
+
131
+ if ! command -v ollama &> /dev/null; then
132
+ log_error "Ollama is not installed. Please install Ollama from https://ollama.com/download to use Ollama models."
133
+ return 1
134
+ fi
135
+
136
+ # ๆ—ขใซ่ตทๅ‹•ใ—ใฆใ„ใ‚‹ใ‹็ขบ่ช
137
+ if curl -s http://localhost:11434/api/tags &> /dev/null; then
138
+ log_success "Ollama is already running."
139
+ return 0
140
+ fi
141
+
142
+ # ใƒใƒƒใ‚ฏใ‚ฐใƒฉใ‚ฆใƒณใƒ‰ใง่ตทๅ‹•
143
+ ollama serve &> /tmp/ollama.log &
144
+ OLLAMA_PID=$!
145
+ echo $OLLAMA_PID > /tmp/ollama.pid
146
+
147
+ # ่ตทๅ‹•ๅพ…ใก
148
+ log_info "Waiting for Ollama to start (max 30 seconds)..."
149
+ for i in $(seq 1 30); do
150
+ if curl -s http://localhost:11434/api/tags &> /dev/null; then
151
+ log_success "Ollama started (PID: $OLLAMA_PID)."
152
+ return 0
153
+ fi
154
+ sleep 1
155
+ done
156
+ log_error "Failed to start Ollama after 30 seconds."
157
+ return 1
158
+ }
159
+
160
+ # ใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰ใฎ่ตทๅ‹•
161
+ start_backend() {
162
+ log_info "Starting Backend API..."
163
+
164
+ activate_venv
165
+
166
+ # ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นๅˆๆœŸๅŒ–๏ผˆๅฟ…่ฆใชๅ ดๅˆ๏ผ‰
167
+ if [ ! -f "sql_app.db" ]; then
168
+ log_info "Initializing database (sql_app.db not found)..."
169
+ if [ -f "init_db.py" ]; then
170
+ "$SCRIPT_DIR/venv/bin/python" init_db.py
171
+ log_success "Database initialized."
172
+ else
173
+ log_warn "init_db.py not found. Skipping database initialization."
174
+ fi
175
+ else
176
+ log_success "Database (sql_app.db) already exists."
177
+ fi
178
+
179
+ # .iathใƒ•ใ‚กใ‚คใƒซใฎ็ขบ่ช๏ผˆๆจนๆœจๅž‹็ฉบ้–“่จ˜ๆ†ถ๏ผ‰
180
+ IATH_PATH="${IATH_DB_PATH:-knowledge_base.iath}"
181
+ if [ ! -f "$IATH_PATH" ]; then
182
+ log_warn ".iath file not found at: $IATH_PATH"
183
+ log_info "NullAI will start with empty memory."
184
+ log_info "To use dendritic memory, copy .iath file from dendritic-memory-editor:"
185
+ log_info " cp /path/to/exported_db.iath knowledge_base.iath"
186
+ else
187
+ log_success "Dendritic memory loaded from: $IATH_PATH"
188
+ fi
189
+
190
+ # uvicornใง่ตทๅ‹•๏ผˆไปฎๆƒณ็’ฐๅขƒใฎPythonใ‚’ๆ˜Ž็คบ็š„ใซไฝฟ็”จ๏ผ‰
191
+ cd "$SCRIPT_DIR"
192
+ # Uvicornใ‚’็›ดๆŽฅ่ตทๅ‹•ใ™ใ‚‹ใฎใงใฏใชใใ€main.pyใ‚’็›ดๆŽฅๅฎŸ่กŒ
193
+ log_info "Starting Uvicorn server..."
194
+ "$SCRIPT_DIR/venv/bin/python" -m uvicorn backend.app.main:app --host 0.0.0.0 --port 8000 &> /tmp/backend.log &
195
+ BACKEND_PID=$!
196
+ echo $BACKEND_PID > /tmp/backend.pid
197
+
198
+ log_info "Waiting for Backend API to respond (max 30 seconds)..."
199
+ for i in $(seq 1 30); do
200
+ if curl -s http://localhost:8000/health &> /dev/null; then
201
+ log_success "Backend started (PID: $BACKEND_PID)."
202
+ log_info "API Docs: http://localhost:8000/docs"
203
+ return 0
204
+ fi
205
+ sleep 1
206
+ done
207
+ log_error "Backend API did not respond after 30 seconds."
208
+ return 1
209
+ }
210
+
211
+ # ใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰ใฎ่ตทๅ‹•
212
+ start_frontend() {
213
+ log_info "Starting Frontend..."
214
+
215
+ cd "$SCRIPT_DIR/frontend"
216
+
217
+ # ไพๅญ˜้–ขไฟ‚ใ‚คใƒณใ‚นใƒˆใƒผใƒซ
218
+ if [ ! -d "node_modules" ]; then
219
+ log_info "Installing frontend dependencies (npm install)..."
220
+ npm install
221
+ log_success "Frontend dependencies installed."
222
+ else
223
+ log_success "Frontend dependencies (node_modules) already exist."
224
+ fi
225
+
226
+ # Vite้–‹็™บใ‚ตใƒผใƒใƒผ่ตทๅ‹•
227
+ log_info "Starting Vite development server..."
228
+ npm run dev &> /tmp/frontend.log &
229
+ FRONTEND_PID=$!
230
+ echo $FRONTEND_PID > /tmp/frontend.pid
231
+
232
+ cd "$SCRIPT_DIR"
233
+
234
+ log_info "Waiting for Frontend to be accessible (max 30 seconds)..."
235
+ for i in $(seq 1 30); do
236
+ if curl -s http://localhost:5173 &> /dev/null; then
237
+ log_success "Frontend started (PID: $FRONTEND_PID)."
238
+ log_info "Frontend: http://localhost:5173"
239
+ return 0
240
+ fi
241
+ sleep 1
242
+ done
243
+ log_error "Frontend did not become accessible after 30 seconds."
244
+ return 1
245
+ }
246
+
247
+ # ๅ…จใ‚ตใƒผใƒ“ใ‚นๅœๆญข
248
+ stop_all() {
249
+ log_info "Stopping all services..."
250
+
251
+ # Backend
252
+ if [ -f /tmp/backend.pid ]; then
253
+ kill $(cat /tmp/backend.pid) 2>/dev/null || true
254
+ rm /tmp/backend.pid
255
+ log_success "Backend stopped"
256
+ fi
257
+
258
+ # Frontend
259
+ if [ -f /tmp/frontend.pid ]; then
260
+ kill $(cat /tmp/frontend.pid) 2>/dev/null || true
261
+ rm /tmp/frontend.pid
262
+ log_success "Frontend stopped"
263
+ fi
264
+
265
+ # Ollama
266
+ if [ -f /tmp/ollama.pid ]; then
267
+ kill $(cat /tmp/ollama.pid) 2>/dev/null || true
268
+ rm /tmp/ollama.pid
269
+ log_success "Ollama stopped"
270
+ fi
271
+
272
+ log_success "All services stopped"
273
+ }
274
+
275
+ # ใ‚นใƒ†ใƒผใ‚ฟใ‚น่กจ็คบ
276
+ show_status() {
277
+ echo ""
278
+ echo "โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—"
279
+ echo "โ•‘ NullAI Status โ•‘"
280
+ echo "โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•๏ฟฝ๏ฟฝ๏ฟฝโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ"
281
+
282
+ # Ollama
283
+ if curl -s http://localhost:11434/api/tags &> /dev/null; then
284
+ echo -e "โ•‘ Ollama: ${GREEN}Running${NC} http://localhost:11434 โ•‘"
285
+ else
286
+ echo -e "โ•‘ Ollama: ${RED}Stopped${NC} โ•‘"
287
+ fi
288
+
289
+ # Backend
290
+ if curl -s http://localhost:8000/health &> /dev/null; then
291
+ echo -e "โ•‘ Backend: ${GREEN}Running${NC} http://localhost:8000 โ•‘"
292
+ else
293
+ echo -e "โ•‘ Backend: ${RED}Stopped${NC} โ•‘"
294
+ fi
295
+
296
+ # Frontend
297
+ if curl -s http://localhost:5173 &> /dev/null; then
298
+ echo -e "โ•‘ Frontend: ${GREEN}Running${NC} http://localhost:5173 โ•‘"
299
+ else
300
+ echo -e "โ•‘ Frontend: ${RED}Stopped${NC} โ•‘"
301
+ fi
302
+
303
+ echo "โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•"
304
+ echo ""
305
+ }
306
+
307
+ # ใƒกใ‚คใƒณๅ‡ฆ็†
308
+ main() {
309
+ show_banner
310
+
311
+ case "${1:-all}" in
312
+ all)
313
+ check_dependencies
314
+ activate_venv # Venv activation and Python deps first
315
+ start_ollama
316
+ start_backend
317
+ log_info "Waiting 5 seconds for all backend routes to be ready..."
318
+ sleep 5
319
+ start_frontend
320
+ show_status
321
+ log_success "NullAI is ready!"
322
+ echo ""
323
+ echo "Press Ctrl+C to stop watching logs, or run './start_null_ai.sh stop' to stop all services"
324
+ echo ""
325
+ # ใƒญใ‚ฐใ‚’่กจ็คบ
326
+ tail -f /tmp/backend.log /tmp/frontend.log 2>/dev/null
327
+ ;;
328
+ backend)
329
+ check_dependencies
330
+ start_backend
331
+ show_status
332
+ tail -f /tmp/backend.log 2>/dev/null
333
+ ;;
334
+ frontend)
335
+ start_frontend
336
+ show_status
337
+ tail -f /tmp/frontend.log 2>/dev/null
338
+ ;;
339
+ ollama)
340
+ start_ollama
341
+ ;;
342
+ stop)
343
+ stop_all
344
+ ;;
345
+ status)
346
+ show_status
347
+ ;;
348
+ *)
349
+ echo "Usage: $0 {all|backend|frontend|ollama|stop|status}"
350
+ exit 1
351
+ ;;
352
+ esac
353
+ }
354
+
355
+ main "$@"