| #!/usr/bin/env bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| set -euo pipefail |
|
|
| MODEL_NAME="${1:-frankenstallm-3b}" |
| PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" |
| MODELFILE="$PROJECT_DIR/Modelfile.3b" |
| GGUF_PATH="$PROJECT_DIR/outputs/gguf/frankenstallm-3b-Q4_K_M.gguf" |
|
|
| cd "$PROJECT_DIR" |
|
|
| |
| |
| |
| if ! command -v ollama &> /dev/null; then |
| echo "ERROR: ollama๊ฐ ์ค์น๋์ด ์์ง ์์ต๋๋ค." |
| echo "์ค์น: curl -fsSL https://ollama.com/install.sh | sh" |
| exit 1 |
| fi |
|
|
| if [[ ! -f "$GGUF_PATH" ]]; then |
| echo "ERROR: GGUF ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค: $GGUF_PATH" |
| echo "๋จผ์ ์คํ: bash scripts/convert_3b_gguf.sh" |
| exit 1 |
| fi |
|
|
| if [[ ! -f "$MODELFILE" ]]; then |
| echo "ERROR: Modelfile.3b ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: $MODELFILE" |
| echo " ํ๋ก์ ํธ ๋ฃจํธ์ Modelfile.3b ๊ฐ ์์ด์ผ ํฉ๋๋ค." |
| exit 1 |
| fi |
|
|
| echo "==================================================================" |
| echo " 3B ๋ชจ๋ธ Ollama ๋ฐฐํฌ" |
| echo " ๋ชจ๋ธ๋ช
: $MODEL_NAME" |
| echo " GGUF : $(du -sh "$GGUF_PATH" | cut -f1) ($GGUF_PATH)" |
| echo " Modelfile: $MODELFILE" |
| echo "==================================================================" |
| echo "" |
|
|
| |
| |
| |
| if ! ollama list &>/dev/null; then |
| echo "[WARN] Ollama ์๋ฒ๊ฐ ์๋ตํ์ง ์์ต๋๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์์ํฉ๋๋ค ..." |
| ollama serve &>/tmp/ollama_serve.log & |
| OLLAMA_PID=$! |
| echo " PID: $OLLAMA_PID (๋ก๊ทธ: /tmp/ollama_serve.log)" |
| |
| for i in $(seq 1 15); do |
| if ollama list &>/dev/null 2>&1; then |
| echo " [OK] Ollama ์๋ฒ ์ค๋น ์๋ฃ (${i}์ด)" |
| break |
| fi |
| sleep 1 |
| done |
| fi |
|
|
| |
| |
| |
| echo "[1/2] Ollama ๋ชจ๋ธ ๋ฑ๋ก ์ค: $MODEL_NAME ..." |
| ollama create "$MODEL_NAME" -f "$MODELFILE" |
| echo " [OK] ๋ฑ๋ก ์๋ฃ" |
|
|
| |
| |
| |
| echo "" |
| echo "[2/2] ์๋ ํ
์คํธ ํ๋กฌํํธ ์คํ (5๊ฐ) ..." |
| echo "" |
|
|
| declare -a TEST_PROMPTS=( |
| "์๋
ํ์ธ์! ๊ฐ๋จํ ์๊ธฐ์๊ฐ๋ฅผ ํด์ฃผ์ธ์." |
| "๋ํ๋ฏผ๊ตญ์ ์๋๋ ์ด๋์ธ๊ฐ์? ๊ทธ ๋์์ ํน์ง์ ์ค๋ช
ํด์ฃผ์ธ์." |
| "ํ์ด์ฌ์ผ๋ก ํผ๋ณด๋์น ์์ด์ ์ถ๋ ฅํ๋ ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์." |
| "์ธ๊ณต์ง๋ฅ์ด ์ฌํ์ ๋ฏธ์น๋ ๊ธ์ ์ ์ธ ์ํฅ 3๊ฐ์ง๋ฅผ ์ค๋ช
ํด์ฃผ์ธ์." |
| "์ค๋ ์ ๋
๋ฉ๋ด๋ก ๋ฌด์์ ์ถ์ฒํด์ฃผ์๊ฒ ์ด์? ์ด์ ๋ ํจ๊ป ๋ง์ํด์ฃผ์ธ์." |
| ) |
|
|
| PASS_COUNT=0 |
| FAIL_COUNT=0 |
| TOTAL=${#TEST_PROMPTS[@]} |
|
|
| for i in "${!TEST_PROMPTS[@]}"; do |
| PROMPT="${TEST_PROMPTS[$i]}" |
| NUM=$((i + 1)) |
| echo "--- ํ
์คํธ $NUM/$TOTAL ---" |
| echo "ํ๋กฌํํธ: $PROMPT" |
| echo "" |
|
|
| |
| if RESPONSE=$(timeout 60 ollama run "$MODEL_NAME" "$PROMPT" 2>&1); then |
| RESP_PREVIEW="${RESPONSE:0:300}" |
| echo "์๋ต: $RESP_PREVIEW" |
| if [[ ${#RESPONSE} -gt 300 ]]; then |
| echo " ... (์ด ${#RESPONSE}์)" |
| fi |
| echo "[OK] ํ
์คํธ $NUM ์ฑ๊ณต" |
| PASS_COUNT=$((PASS_COUNT + 1)) |
| else |
| EXIT_CODE=$? |
| echo "[FAIL] ํ
์คํธ $NUM ์คํจ (exit code: $EXIT_CODE)" |
| FAIL_COUNT=$((FAIL_COUNT + 1)) |
| fi |
| echo "" |
| done |
|
|
| |
| |
| |
| echo "==================================================================" |
| echo " ๋ฐฐํฌ & ํ
์คํธ ์๋ฃ" |
| echo "" |
| echo " ๋ชจ๋ธ๋ช
: $MODEL_NAME" |
| echo " ํ
์คํธ : $PASS_COUNT/$TOTAL ์ฑ๊ณต ($FAIL_COUNT ์คํจ)" |
| echo "" |
| if [[ $FAIL_COUNT -eq 0 ]]; then |
| echo " [PASS] ๋ชจ๋ ํ
์คํธ ํต๊ณผ" |
| else |
| echo " [WARN] ์ผ๋ถ ํ
์คํธ ์คํจ โ ๋ก๊ทธ๋ฅผ ํ์ธํ์ธ์" |
| fi |
| echo "" |
| echo " Ollama ์ฌ์ฉ๋ฒ:" |
| echo " ollama run $MODEL_NAME" |
| echo " ollama run $MODEL_NAME '์ง๋ฌธ์ ์ฌ๊ธฐ์ ์
๋ ฅํ์ธ์'" |
| echo " ollama rm $MODEL_NAME (์ญ์ )" |
| echo "" |
| echo " Quality Gate:" |
| echo " bash scripts/quality_gate.sh deploy" |
| echo "==================================================================" |
|
|
| [[ $FAIL_COUNT -gt 0 ]] && exit 1 || exit 0 |
|
|