| #!/bin/bash |
| set -e |
|
|
| |
| MODEL_DIR="/code/models" |
| MODEL_PATH="$MODEL_DIR/qwen2.5-3b-instruct.Q4_K_M.gguf" |
|
|
| echo "=== ByteAstra Cloud Startup ===" |
|
|
| |
| if [ ! -f "$MODEL_PATH" ]; then |
| echo "Downloading custom GGUF model from Hugging Face Hub using hf..." |
| mkdir -p "$MODEL_DIR" |
| |
| hf download jarnil/byteastra-ayurveda-gguf --include "qwen2.5-3b-instruct.Q4_K_M.gguf" --local-dir "$MODEL_DIR" |
| echo "Model downloaded successfully." |
| else |
| echo "Model already exists at $MODEL_PATH" |
| fi |
|
|
| |
| echo "Starting local llama-cpp-python server on port 8001..." |
| python -m llama_cpp.server \ |
| --model "$MODEL_PATH" \ |
| --port 8001 \ |
| --host 127.0.0.1 \ |
| --n_ctx 4096 \ |
| --n_threads 2 \ |
| --n_threads_batch 2 \ |
| --n_batch 256 \ |
| --chat_format chatml & |
|
|
| |
| echo "Waiting for llama.cpp server to initialize..." |
| until curl -s http://127.0.0.1:8001/v1/models > /dev/null; do |
| sleep 2 |
| echo "Still waiting..." |
| done |
| echo "llama.cpp server is ready!" |
|
|
| |
| export OPENAI_BASE_URL="http://127.0.0.1:8001/v1" |
| export LLM_BASE_URL="http://127.0.0.1:8001/v1" |
| export MODEL_NAME="qwen2.5-3b-instruct.Q4_K_M.gguf" |
| export LLM_MODEL_NAME="qwen2.5-3b-instruct.Q4_K_M.gguf" |
| export LLM_MAX_TOKENS=2048 |
|
|
|
|
| |
| if [ -f "chroma_store.zip" ]; then |
| echo "Extracting pre-built ChromaDB index from zip..." |
| python -c "import zipfile; zipfile.ZipFile('chroma_store.zip').extractall('chroma_store')" |
| echo "Extraction complete." |
| fi |
|
|
| |
| echo "Checking knowledge base..." |
| CHROMA_COUNT=$(python -c " |
| import sys |
| sys.path.insert(0, '.') |
| try: |
| from app.services.rag import get_or_create_collection |
| col = get_or_create_collection('domain_ayurveda') |
| print(col.count()) |
| except Exception as e: |
| print(0) |
| " 2>/dev/null || echo 0) |
| echo "ChromaDB has $CHROMA_COUNT chunks indexed." |
| if [ "$CHROMA_COUNT" -lt "100" ]; then |
| echo "Indexing knowledge base (first run or collection is empty)..." |
| python scripts/ingest.py --domain ayurveda --source-dir ./data/ayurveda || echo "Ingest step done." |
| else |
| echo "Knowledge base already indexed ($CHROMA_COUNT chunks). Skipping ingest." |
| fi |
|
|
| |
| echo "Starting FastAPI backend server on port 7860..." |
| exec uvicorn app.main:app --host 0.0.0.0 --port 7860 |
|
|