Text Generation
Transformers
Safetensors
GGUF
llama-cpp-python
MLX
Korean
English
qwen2
finance
korean
stock-analysis
reasoning
dpo
llama-cpp
apple-silicon
4bit
quantized
vllm
ollama
conversational
text-generation-inference
Instructions to use intrect/VELA with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use intrect/VELA with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="intrect/VELA") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("intrect/VELA") model = AutoModelForCausalLM.from_pretrained("intrect/VELA", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - llama-cpp-python
How to use intrect/VELA with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="intrect/VELA", filename="vela-dpo-v6-q4_k_m.gguf", )
llm.create_chat_completion( messages = [ { "role": "user", "content": "What is the capital of France?" } ] ) - MLX
How to use intrect/VELA with MLX:
# Make sure mlx-lm is installed # pip install --upgrade mlx-lm # Generate text with mlx-lm from mlx_lm import load, generate model, tokenizer = load("intrect/VELA") prompt = "Write a story about Einstein" messages = [{"role": "user", "content": prompt}] prompt = tokenizer.apply_chat_template( messages, add_generation_prompt=True ) text = generate(model, tokenizer, prompt=prompt, verbose=True) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use intrect/VELA with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf intrect/VELA:Q4_K_M # Run inference directly in the terminal: llama cli -hf intrect/VELA:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf intrect/VELA:Q4_K_M # Run inference directly in the terminal: llama cli -hf intrect/VELA:Q4_K_M
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf intrect/VELA:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf intrect/VELA:Q4_K_M
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf intrect/VELA:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf intrect/VELA:Q4_K_M
Use Docker
docker model run hf.co/intrect/VELA:Q4_K_M
- LM Studio
- Jan
- vLLM
How to use intrect/VELA with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "intrect/VELA" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "intrect/VELA", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/intrect/VELA:Q4_K_M
- SGLang
How to use intrect/VELA with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "intrect/VELA" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "intrect/VELA", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "intrect/VELA" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "intrect/VELA", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Ollama
How to use intrect/VELA with Ollama:
ollama run hf.co/intrect/VELA:Q4_K_M
- Unsloth Studio
How to use intrect/VELA with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for intrect/VELA to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for intrect/VELA to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for intrect/VELA to start chatting
- Pi
How to use intrect/VELA with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "intrect/VELA"
Configure the model in Pi
# Install Pi: npm install -g @mariozechner/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "mlx-lm": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "intrect/VELA" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent new
How to use intrect/VELA with Hermes Agent:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "intrect/VELA"
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default intrect/VELA
Run Hermes
hermes
- OpenClaw new
How to use intrect/VELA with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "intrect/VELA"
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "intrect/VELA" \ --custom-provider-id mlx-lm \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
- MLX LM
How to use intrect/VELA with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Interactive chat REPL mlx_lm.chat --model "intrect/VELA"
Run an OpenAI-compatible server
# Install MLX LM uv tool install mlx-lm # Start the server mlx_lm.server --model "intrect/VELA" # Calling the OpenAI-compatible server with curl curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "intrect/VELA", "messages": [ {"role": "user", "content": "Hello"} ] }' - Docker Model Runner
How to use intrect/VELA with Docker Model Runner:
docker model run hf.co/intrect/VELA:Q4_K_M
- Lemonade
How to use intrect/VELA with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull intrect/VELA:Q4_K_M
Run and chat with the model
lemonade run user.VELA-Q4_K_M
List all available models
lemonade list
- Atomic Chat
docs: update model card with v3 training data (58K SFT, 26K DPO), MLX benchmark, Markdown RT format
Browse files
README.md
CHANGED
|
@@ -12,6 +12,7 @@ tags:
|
|
| 12 |
- dpo
|
| 13 |
- gguf
|
| 14 |
- llama-cpp
|
|
|
|
| 15 |
base_model: Qwen/Qwen2.5-7B-Instruct
|
| 16 |
pipeline_tag: text-generation
|
| 17 |
---
|
|
@@ -21,16 +22,23 @@ pipeline_tag: text-generation
|
|
| 21 |
**한국 주식시장 전문 AI 애널리스트**
|
| 22 |
|
| 23 |
VELA는 한국 주식시장 뉴스 분석 및 투자 리서치를 위해 특화된 7B 파라미터 언어 모델입니다.
|
| 24 |
-
2,135개 종목에 대한 뉴스 영향 분석, 증권사 리포트 해석,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
|
| 26 |
## Model Details
|
| 27 |
|
| 28 |
| 항목 | 내용 |
|
| 29 |
|------|------|
|
| 30 |
-
| **Base Model** | Qwen/Qwen2.5-7B-Instruct |
|
| 31 |
-
| **Training** | SFT (
|
| 32 |
| **Parameters** | 7.6B |
|
| 33 |
| **Context Length** | 8,192 tokens |
|
|
|
|
| 34 |
| **Stock Coverage** | 2,135 종목 (KOSPI + KOSDAQ) |
|
| 35 |
| **License** | Apache 2.0 |
|
| 36 |
|
|
@@ -42,77 +50,176 @@ VELA는 한국 주식시장 뉴스 분석 및 투자 리서치를 위해 특화
|
|
| 42 |
| **GGUF Q8_0** | `vela-q8_0.gguf` | 7.6 GB | High quality quantized, GPU/CPU |
|
| 43 |
| **GGUF Q4_K_M** | `vela-q4_k_m.gguf` | 4.4 GB | Fast & lightweight, GPU/CPU |
|
| 44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
## Training Pipeline
|
| 46 |
|
| 47 |
```
|
| 48 |
-
Qwen2.5-7B-Instruct
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
```
|
| 67 |
|
| 68 |
-
|
|
|
|
|
|
|
| 69 |
|
| 70 |
-
### SFT (
|
| 71 |
|
| 72 |
| Source | Samples | Ratio | Description |
|
| 73 |
|--------|---------|-------|-------------|
|
| 74 |
-
|
|
| 75 |
-
|
|
| 76 |
-
|
|
| 77 |
-
|
|
| 78 |
-
|
|
| 79 |
-
|
|
| 80 |
-
| **
|
| 81 |
-
|
|
| 82 |
-
| **
|
| 83 |
-
| **
|
| 84 |
-
| **
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
|
| 86 |
-
|
| 87 |
|
| 88 |
-
##
|
| 89 |
|
| 90 |
-
|
| 91 |
-
|--------|-------|-------|-------------|
|
| 92 |
-
| **dpo_dedup** | 12,000 | 48.4% | 중복 제거된 기본 DPO 페어 |
|
| 93 |
-
| **multilingual_aug** | 5,997 | 24.2% | 중국어/영어 leak 보강 (rejected에 leak 삽입) |
|
| 94 |
-
| **vela_chatml** | 5,000 | 20.2% | VELA 시스템 프롬프트 정렬 |
|
| 95 |
-
| **chinese_leak_v2** | 1,216 | 4.9% | 중국어 leak 집중 교정 |
|
| 96 |
-
| **reasoning_trace_2k** | 566 | 2.3% | Reasoning Trace 형식 정렬 |
|
| 97 |
|
| 98 |
-
|
| 99 |
|
| 100 |
-
|
| 101 |
-
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
- **다중 소스 종합**: 뉴스, 시세, 수급 데이터 통합 분석
|
| 105 |
|
| 106 |
-
|
| 107 |
|
| 108 |
-
|
| 109 |
|
| 110 |
-
|
| 111 |
-
|--------|--------------|--------------|---------|
|
| 112 |
-
| **Q4_K_M** | **36 tok/s** | 0/5 CLEAN | Reasoning Trace + Report OK |
|
| 113 |
-
| **Q8_0** | 25 tok/s | 0/5 CLEAN | Reasoning Trace + Report OK |
|
| 114 |
|
| 115 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
|
| 117 |
## Usage
|
| 118 |
|
|
@@ -124,7 +231,7 @@ from llama_cpp import Llama
|
|
| 124 |
model = Llama(
|
| 125 |
model_path="vela-q4_k_m.gguf", # or vela-q8_0.gguf
|
| 126 |
n_ctx=4096,
|
| 127 |
-
n_gpu_layers=-1,
|
| 128 |
chat_format="chatml",
|
| 129 |
)
|
| 130 |
|
|
@@ -148,13 +255,13 @@ import torch
|
|
| 148 |
model = AutoModelForCausalLM.from_pretrained(
|
| 149 |
"intrect/VELA",
|
| 150 |
torch_dtype=torch.bfloat16,
|
| 151 |
-
device_map="auto"
|
| 152 |
)
|
| 153 |
tokenizer = AutoTokenizer.from_pretrained("intrect/VELA")
|
| 154 |
|
| 155 |
messages = [
|
| 156 |
{"role": "system", "content": "당신은 한국 주식 전문 애널리스트입니다."},
|
| 157 |
-
{"role": "user", "content": "삼성전자 HBM 사업 전망을 분석해주세요."}
|
| 158 |
]
|
| 159 |
|
| 160 |
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
|
@@ -164,7 +271,7 @@ outputs = model.generate(
|
|
| 164 |
**inputs,
|
| 165 |
max_new_tokens=1024,
|
| 166 |
temperature=0.7,
|
| 167 |
-
do_sample=True
|
| 168 |
)
|
| 169 |
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
|
| 170 |
```
|
|
@@ -177,8 +284,27 @@ from vllm import LLM, SamplingParams
|
|
| 177 |
llm = LLM(model="intrect/VELA", dtype="bfloat16")
|
| 178 |
params = SamplingParams(temperature=0.7, max_tokens=1024)
|
| 179 |
|
| 180 |
-
|
| 181 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 182 |
```
|
| 183 |
|
| 184 |
### Ollama
|
|
@@ -196,26 +322,40 @@ PARAMETER temperature 0.7
|
|
| 196 |
PARAMETER num_ctx 4096
|
| 197 |
```
|
| 198 |
|
|
|
|
|
|
|
| 199 |
## Output Format
|
| 200 |
|
| 201 |
-
VELA는 두 가지 출력 모드를 지원합니다
|
| 202 |
|
| 203 |
### 1. Reasoning Trace (분석 과정)
|
| 204 |
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 213 |
```
|
| 214 |
|
| 215 |
### 2. Synthesis Report (최종 리포트)
|
| 216 |
|
|
|
|
|
|
|
| 217 |
```markdown
|
| 218 |
-
#
|
| 219 |
|
| 220 |
## Executive Summary
|
| 221 |
[2-3문장 핵심 요약]
|
|
@@ -223,6 +363,9 @@ VELA는 두 가지 출력 모드를 지원합니다:
|
|
| 223 |
## Key Metrics
|
| 224 |
| 지표 | 수치 |
|
| 225 |
|------|------|
|
|
|
|
|
|
|
|
|
|
| 226 |
|
| 227 |
## 시장 동향 분석
|
| 228 |
## 수급 분석
|
|
@@ -231,19 +374,40 @@ VELA는 두 가지 출력 모드를 지원합니다:
|
|
| 231 |
## 투자 의견
|
| 232 |
```
|
| 233 |
|
| 234 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 235 |
|
| 236 |
-
-
|
| 237 |
-
- ✅ **영어 leak 감소**: 불필요한 영어 사용 최소화
|
| 238 |
-
- ✅ **형식 준수**: Reasoning Trace JSON + 7-section Report
|
| 239 |
-
- ✅ **한국어 품질**: 자연스러운 한국어 표현
|
| 240 |
|
| 241 |
## Limitations
|
| 242 |
|
| 243 |
-
- 실시간 시세 데이터 접근
|
| 244 |
-
-
|
| 245 |
-
-
|
| 246 |
-
-
|
|
|
|
|
|
|
| 247 |
|
| 248 |
## Citation
|
| 249 |
|
|
@@ -257,11 +421,14 @@ VELA는 두 가지 출력 모드를 지원합니다:
|
|
| 257 |
}
|
| 258 |
```
|
| 259 |
|
|
|
|
|
|
|
| 260 |
## Version History
|
| 261 |
|
| 262 |
-
|
|
| 263 |
-
|------|------|---------
|
| 264 |
-
| v1.
|
|
|
|
| 265 |
| v1.0 | 2026-01-28 | DPO 병합, 중국어/영어 leak 해결 |
|
| 266 |
| v0.9 | 2026-01-15 | SFT 베이스 모델 공개 |
|
| 267 |
|
|
|
|
| 12 |
- dpo
|
| 13 |
- gguf
|
| 14 |
- llama-cpp
|
| 15 |
+
- mlx
|
| 16 |
base_model: Qwen/Qwen2.5-7B-Instruct
|
| 17 |
pipeline_tag: text-generation
|
| 18 |
---
|
|
|
|
| 22 |
**한국 주식시장 전문 AI 애널리스트**
|
| 23 |
|
| 24 |
VELA는 한국 주식시장 뉴스 분석 및 투자 리서치를 위해 특화된 7B 파라미터 언어 모델입니다.
|
| 25 |
+
KOSPI/KOSDAQ 2,135개 종목에 대한 뉴스 영향 분석, 증권사 리포트 해석,
|
| 26 |
+
Reasoning Trace 기반 구조화된 투자 분석을 수행합니다.
|
| 27 |
+
|
| 28 |
+
> **58K+ SFT 샘플**과 **26K+ DPO 페어**로 학습하여,
|
| 29 |
+
> 한국어 금융 도메인에서 정확하고 구조화된 분석을 제공합니다.
|
| 30 |
+
|
| 31 |
+
---
|
| 32 |
|
| 33 |
## Model Details
|
| 34 |
|
| 35 |
| 항목 | 내용 |
|
| 36 |
|------|------|
|
| 37 |
+
| **Base Model** | [Qwen/Qwen2.5-7B-Instruct](https://huggingface.co/Qwen/Qwen2.5-7B-Instruct) |
|
| 38 |
+
| **Training** | SFT (58,206 samples) + DPO (26,421 pairs) |
|
| 39 |
| **Parameters** | 7.6B |
|
| 40 |
| **Context Length** | 8,192 tokens |
|
| 41 |
+
| **RT Format** | Markdown Reasoning Trace |
|
| 42 |
| **Stock Coverage** | 2,135 종목 (KOSPI + KOSDAQ) |
|
| 43 |
| **License** | Apache 2.0 |
|
| 44 |
|
|
|
|
| 50 |
| **GGUF Q8_0** | `vela-q8_0.gguf` | 7.6 GB | High quality quantized, GPU/CPU |
|
| 51 |
| **GGUF Q4_K_M** | `vela-q4_k_m.gguf` | 4.4 GB | Fast & lightweight, GPU/CPU |
|
| 52 |
|
| 53 |
+
> MLX 4-bit 양자화 모델도 별도 제공 예정 (Apple Silicon 최적화)
|
| 54 |
+
|
| 55 |
+
---
|
| 56 |
+
|
| 57 |
+
## What Can VELA Do?
|
| 58 |
+
|
| 59 |
+
### 1. 뉴스 영향 분석
|
| 60 |
+
주식 관련 뉴스가 주가에 미치는 영향을 단계적으로 추론합니다.
|
| 61 |
+
|
| 62 |
+
### 2. Reasoning Trace (단계별 사고 과정)
|
| 63 |
+
분석 과정을 투명하게 보여주는 Markdown Reasoning Trace를 생성합니다:
|
| 64 |
+
|
| 65 |
+
```
|
| 66 |
+
**Step 1**:
|
| 67 |
+
**Thought**: 삼성전자 3나노 양산 성공 뉴스의 기술적 의미를 파악해야 합니다.
|
| 68 |
+
**Action**: search
|
| 69 |
+
**Query**: 삼성전자 3나노 파운드리 수율 경쟁력 TSMC
|
| 70 |
+
**Confidence**: 35%
|
| 71 |
+
|
| 72 |
+
**Step 2**:
|
| 73 |
+
**Thought**: TSMC 대비 수율 격차가 핵심 변수이며, 양산 성공은 기술력 입증이나 수율 안정화까지 시간 필요.
|
| 74 |
+
**Action**: analyze
|
| 75 |
+
**Confidence**: 65%
|
| 76 |
+
|
| 77 |
+
**Step 3**:
|
| 78 |
+
**Thought**: 3나노 양산 성공은 중장기 긍정 시그널이나, 단기적으로 수율 이슈 리스크가 존재합니다.
|
| 79 |
+
**Action**: conclude
|
| 80 |
+
**Confidence**: 80%
|
| 81 |
+
```
|
| 82 |
+
|
| 83 |
+
### 3. 증권사 리포트 해석
|
| 84 |
+
애널리스트 리포트를 기반으로 핵심 포인트와 투자 시사점을 도출합니다.
|
| 85 |
+
|
| 86 |
+
### 4. 투자 리서치 리포트
|
| 87 |
+
7개 섹션으로 구조화된 투자 분석 보고서를 생성합니다:
|
| 88 |
+
Executive Summary / Key Metrics / 시장 동향 / 수급 분석 / 뉴스 영향 / 리스크 / 투자 의견
|
| 89 |
+
|
| 90 |
+
### 5. 도구 호출 (Tool Calling)
|
| 91 |
+
Search, Price, Investor 등 외부 도구와 연동하는 분석을 수행합니다.
|
| 92 |
+
|
| 93 |
+
---
|
| 94 |
+
|
| 95 |
## Training Pipeline
|
| 96 |
|
| 97 |
```
|
| 98 |
+
Qwen/Qwen2.5-7B-Instruct
|
| 99 |
+
|
|
| 100 |
+
v
|
| 101 |
+
SFT (58,206 samples)
|
| 102 |
+
├── 뉴스 분류 분석 10,830 (18.6%)
|
| 103 |
+
├── 극단 시그널 분석 9,603 (16.5%)
|
| 104 |
+
├── 증권사 리포트 (GPT-4o) 5,117 (8.8%)
|
| 105 |
+
├── 뉴스 영향 분석 4,839 (8.3%)
|
| 106 |
+
├── 멀티턴 대화 8,000 (13.8%)
|
| 107 |
+
├── Gap Fill (12 카테고리) 12,635 (21.7%)
|
| 108 |
+
│ ├── 밸류에이션 분석 2,000
|
| 109 |
+
│ ├── 수급/리스크/EOD 3,000
|
| 110 |
+
│ ├── 거절/유보 응답 1,000
|
| 111 |
+
│ ├── 간결 분석 1,000
|
| 112 |
+
│ ├── 심층 추론 (5+ steps) 1,000
|
| 113 |
+
│ └── 기타 (매크로, 섹터 등) 4,635
|
| 114 |
+
└── 기타 7,182 (12.3%)
|
| 115 |
+
|
|
| 116 |
+
v
|
| 117 |
+
DPO (26,421 pairs)
|
| 118 |
+
├── 중복 제거 기본 페어 12,000 (45.4%)
|
| 119 |
+
├── 다국어 leak 보강 5,997 (22.7%)
|
| 120 |
+
├── VELA ChatML 정렬 5,000 (18.9%)
|
| 121 |
+
├── 불충분 분석 교정 1,642 (6.2%)
|
| 122 |
+
├── 중국어 leak 교정 v2 1,216 (4.6%)
|
| 123 |
+
└── Reasoning Trace 정렬 566 (2.1%)
|
| 124 |
+
|
|
| 125 |
+
v
|
| 126 |
+
VELA v1.2
|
| 127 |
```
|
| 128 |
|
| 129 |
+
---
|
| 130 |
+
|
| 131 |
+
## Training Data Details
|
| 132 |
|
| 133 |
+
### SFT v3 (58,206 samples)
|
| 134 |
|
| 135 |
| Source | Samples | Ratio | Description |
|
| 136 |
|--------|---------|-------|-------------|
|
| 137 |
+
| `classified_news` | 10,830 | 18.6% | GPT-4o 분류된 뉴스 Reasoning Trace |
|
| 138 |
+
| `extreme_signals` | 9,603 | 16.5% | 급등/급락 시그널 뉴스 분석 |
|
| 139 |
+
| `securities_report_gpt4o` | 5,117 | 8.8% | 증권사 리포트 GPT-4o 재구성 |
|
| 140 |
+
| `analysis_news` | 4,839 | 8.3% | 일반 뉴스 영향 분석 |
|
| 141 |
+
| `multi_turn_2t` | 4,000 | 6.9% | 단일 턴 다양 종목 분석 |
|
| 142 |
+
| `multi_turn_4t` | 4,000 | 6.9% | 2턴 follow-up 대화 |
|
| 143 |
+
| **`valuation`** | **2,000** | **3.4%** | 밸류에이션 분석 (v3 Gap Fill) |
|
| 144 |
+
| `tool_calling` | 1,965 | 3.4% | Search/Price/Investor 도구 호출 |
|
| 145 |
+
| **`supply_demand_ext`** | **1,000** | **1.7%** | 수급 확장 분석 (v3) |
|
| 146 |
+
| **`risk`** | **1,000** | **1.7%** | 리스크 분석 (v3) |
|
| 147 |
+
| **`eod_report`** | **1,000** | **1.7%** | EOD 시황 리포트 (v3) |
|
| 148 |
+
| **`refusal`** | **1,000** | **1.7%** | 거절/유보 응답 (v3) |
|
| 149 |
+
| **`short_analysis`** | **1,000** | **1.7%** | 간결 분석 <500자 (v3) |
|
| 150 |
+
| **`deep_reasoning`** | **1,000** | **1.7%** | 심층 추론 5+ steps (v3) |
|
| 151 |
+
| **`low_confidence`** | **1,000** | **1.7%** | 저확신도 분석 (v3) |
|
| 152 |
+
| **`macro_impact_ext`** | **1,000** | **1.7%** | 거시경제 확장 (v3) |
|
| 153 |
+
| **`sector_theme`** | **1,000** | **1.7%** | 섹터/테마 분석 (v3) |
|
| 154 |
+
| `multi_stock_comparison` | 981 | 1.7% | 복수 종목 비교 분석 |
|
| 155 |
+
| `earnings_impact` | 971 | 1.7% | 실적 발표 영향 분석 |
|
| 156 |
+
| `risk_alert` | 948 | 1.6% | 리스크 경고 분석 |
|
| 157 |
+
| **`null_impact`** | **900** | **1.5%** | 주가 무영향 응답 (v3) |
|
| 158 |
+
| Other | 2,050 | 3.5% | batch5 fallback, 기존 수급/섹터/매크로 |
|
| 159 |
+
|
| 160 |
+
> v3에서 12개 카테고리 12,635개 샘플을 추가하여 데이터 갭을 보강했습니다.
|
| 161 |
+
> 생성 비용: Perplexity Sonar 2K ($4.60) + OpenAI gpt-4o-mini Batch API 10.6K ($2.76) = **~$7.36**
|
| 162 |
+
|
| 163 |
+
### DPO v2 (26,421 pairs)
|
| 164 |
+
|
| 165 |
+
| Source | Pairs | Ratio | Rejection Type |
|
| 166 |
+
|--------|-------|-------|----------------|
|
| 167 |
+
| `dpo_dedup` | 12,000 | 45.4% | 짧은/저품질 응답 vs 상세 분석 |
|
| 168 |
+
| `multilingual_aug` | 5,997 | 22.7% | 중국어/영어 leak, 짧은 응답, 저확신 |
|
| 169 |
+
| `vela_chatml` | 5,000 | 18.9% | 형식 오류, 짧은 응답 |
|
| 170 |
+
| `batch5_insuf_dpo` | 1,642 | 6.2% | 불충분 분석 품질 교정 |
|
| 171 |
+
| `chinese_leak_v2` | 1,216 | 4.6% | 중국어 문자 leak 집중 교정 |
|
| 172 |
+
| `reasoning_trace_2k` | 566 | 2.1% | 영어 leak, RT 형식 오류 |
|
| 173 |
+
|
| 174 |
+
### Data Version History
|
| 175 |
+
|
| 176 |
+
| Version | SFT Samples | DPO Pairs | Changes |
|
| 177 |
+
|---------|-------------|-----------|---------|
|
| 178 |
+
| v1.0 | 36,713 | 24,779 | 초기 학습 데이터 (JSON RT) |
|
| 179 |
+
| v1.1 | 36,713 | 24,779 | RT JSON → Markdown 변환 |
|
| 180 |
+
| v2.0 | 45,571 | 26,421 | +멀티턴 8K, +batch5 불충분 DPO |
|
| 181 |
+
| **v3.0** | **58,206** | **26,421** | **+Gap Fill 12개 카테고리 12,635** |
|
| 182 |
|
| 183 |
+
---
|
| 184 |
|
| 185 |
+
## Benchmarks
|
| 186 |
|
| 187 |
+
### Quantization Benchmark (GGUF)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
|
| 189 |
+
RTX 3060 12GB, llama-cpp-python, `n_gpu_layers=-1`, `n_ctx=4096`
|
| 190 |
|
| 191 |
+
| Format | Speed | Chinese Leak | Quality |
|
| 192 |
+
|--------|-------|--------------|---------|
|
| 193 |
+
| **Q4_K_M** | **36 tok/s** | 0/5 CLEAN | RT + Report OK |
|
| 194 |
+
| **Q8_0** | 25 tok/s | 0/5 CLEAN | RT + Report OK |
|
|
|
|
| 195 |
|
| 196 |
+
> Stress test 5회: Synthesis + 3K Reasoning Trace 교대 — 양쪽 모두 **Chinese leak 제로**
|
| 197 |
|
| 198 |
+
### MLX Benchmark (Apple Silicon)
|
| 199 |
|
| 200 |
+
M1 Max 32GB, MLX 4-bit 양자화
|
|
|
|
|
|
|
|
|
|
| 201 |
|
| 202 |
+
| Config | Quantization | Load Time | Speed | Memory |
|
| 203 |
+
|--------|-------------|-----------|-------|--------|
|
| 204 |
+
| **MLX 4-bit** | 4-bit (4.5 bpw) | 0.59s | **15.93 tok/s** | 4.4 GB |
|
| 205 |
+
| PyTorch (CPU) | BF16 | 0.10s | 4.93 tok/s | 0.3 GB |
|
| 206 |
+
| PyTorch + LoRA (CPU) | BF16 | 1.64s | 4.22 tok/s | 14.1 GB |
|
| 207 |
+
|
| 208 |
+
MLX 4-bit vs PyTorch CPU:
|
| 209 |
+
- **3.2x** faster inference (15.93 vs 4.93 tok/s)
|
| 210 |
+
- **73%** smaller model size (4 GB vs 15 GB)
|
| 211 |
+
- **68%** less memory (4.4 vs 14.1 GB)
|
| 212 |
+
|
| 213 |
+
### DPO Quality Improvements
|
| 214 |
+
|
| 215 |
+
| Metric | Before DPO | After DPO |
|
| 216 |
+
|--------|-----------|-----------|
|
| 217 |
+
| Chinese leak | Frequent | **0/10 CLEAN** |
|
| 218 |
+
| English leak | Occasional | Minimal |
|
| 219 |
+
| RT format compliance | ~80% | **~98%** |
|
| 220 |
+
| Korean fluency | Good | **Excellent** |
|
| 221 |
+
|
| 222 |
+
---
|
| 223 |
|
| 224 |
## Usage
|
| 225 |
|
|
|
|
| 231 |
model = Llama(
|
| 232 |
model_path="vela-q4_k_m.gguf", # or vela-q8_0.gguf
|
| 233 |
n_ctx=4096,
|
| 234 |
+
n_gpu_layers=-1,
|
| 235 |
chat_format="chatml",
|
| 236 |
)
|
| 237 |
|
|
|
|
| 255 |
model = AutoModelForCausalLM.from_pretrained(
|
| 256 |
"intrect/VELA",
|
| 257 |
torch_dtype=torch.bfloat16,
|
| 258 |
+
device_map="auto",
|
| 259 |
)
|
| 260 |
tokenizer = AutoTokenizer.from_pretrained("intrect/VELA")
|
| 261 |
|
| 262 |
messages = [
|
| 263 |
{"role": "system", "content": "당신은 한국 주식 전문 애널리스트입니다."},
|
| 264 |
+
{"role": "user", "content": "삼성전자 HBM 사업 전망을 분석해주세요."},
|
| 265 |
]
|
| 266 |
|
| 267 |
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
|
|
|
| 271 |
**inputs,
|
| 272 |
max_new_tokens=1024,
|
| 273 |
temperature=0.7,
|
| 274 |
+
do_sample=True,
|
| 275 |
)
|
| 276 |
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
|
| 277 |
```
|
|
|
|
| 284 |
llm = LLM(model="intrect/VELA", dtype="bfloat16")
|
| 285 |
params = SamplingParams(temperature=0.7, max_tokens=1024)
|
| 286 |
|
| 287 |
+
outputs = llm.generate(
|
| 288 |
+
["삼성전자 HBM 시장 전망을 분석해주세요."],
|
| 289 |
+
params,
|
| 290 |
+
)
|
| 291 |
+
print(outputs[0].outputs[0].text)
|
| 292 |
+
```
|
| 293 |
+
|
| 294 |
+
### MLX (Apple Silicon)
|
| 295 |
+
|
| 296 |
+
```python
|
| 297 |
+
from mlx_lm import load, generate
|
| 298 |
+
|
| 299 |
+
model, tokenizer = load("intrect/VELA") # or local MLX 4-bit path
|
| 300 |
+
|
| 301 |
+
response = generate(
|
| 302 |
+
model,
|
| 303 |
+
tokenizer,
|
| 304 |
+
prompt="삼성전자 3나노 양산 뉴스 분석",
|
| 305 |
+
max_tokens=1024,
|
| 306 |
+
)
|
| 307 |
+
print(response)
|
| 308 |
```
|
| 309 |
|
| 310 |
### Ollama
|
|
|
|
| 322 |
PARAMETER num_ctx 4096
|
| 323 |
```
|
| 324 |
|
| 325 |
+
---
|
| 326 |
+
|
| 327 |
## Output Format
|
| 328 |
|
| 329 |
+
VELA는 두 가지 출력 모드를 지원합니다.
|
| 330 |
|
| 331 |
### 1. Reasoning Trace (분석 과정)
|
| 332 |
|
| 333 |
+
Markdown 형식으로 단계별 사고 과정을 투명하게 보여줍니다:
|
| 334 |
+
|
| 335 |
+
```markdown
|
| 336 |
+
**Step 1**:
|
| 337 |
+
**Thought**: 삼성전자 HBM3E 12단 양산 관련 뉴스를 확인합니다. 수주 현황과 시장 점유율 파악이 필요합니다.
|
| 338 |
+
**Action**: search
|
| 339 |
+
**Query**: 삼성전자 HBM3E 12단 수주 시장점유율
|
| 340 |
+
**Confidence**: 45%
|
| 341 |
+
|
| 342 |
+
**Step 2**:
|
| 343 |
+
**Thought**: SK하이닉스 대비 삼성전자의 HBM 시장 점유율 확대 추세를 분석합니다.
|
| 344 |
+
**Action**: analyze
|
| 345 |
+
**Confidence**: 70%
|
| 346 |
+
|
| 347 |
+
**Step 3**:
|
| 348 |
+
**Thought**: HBM3E 양산 성공은 긍정적이나, NVIDIA 인증 지연 리스크가 존재합니다.
|
| 349 |
+
**Action**: conclude
|
| 350 |
+
**Confidence**: 82%
|
| 351 |
```
|
| 352 |
|
| 353 |
### 2. Synthesis Report (최종 리포트)
|
| 354 |
|
| 355 |
+
7개 섹션으로 구조화된 투자 분석 보고서:
|
| 356 |
+
|
| 357 |
```markdown
|
| 358 |
+
# 분석 리포트: 삼성전자 (005930.KS)
|
| 359 |
|
| 360 |
## Executive Summary
|
| 361 |
[2-3문장 핵심 요약]
|
|
|
|
| 363 |
## Key Metrics
|
| 364 |
| 지표 | 수치 |
|
| 365 |
|------|------|
|
| 366 |
+
| 현재가 | 181,200원 |
|
| 367 |
+
| 12M FWD PER | 15.4배 |
|
| 368 |
+
| PBR | 3.13배 |
|
| 369 |
|
| 370 |
## 시장 동향 분석
|
| 371 |
## 수급 분석
|
|
|
|
| 374 |
## 투자 의견
|
| 375 |
```
|
| 376 |
|
| 377 |
+
---
|
| 378 |
+
|
| 379 |
+
## Architecture
|
| 380 |
+
|
| 381 |
+
VELA는 단독 LLM으로도 동작하지만, 에이전트 시스템과 결합하면 실시간 데이터 기반 분석이 가능합니다:
|
| 382 |
+
|
| 383 |
+
```
|
| 384 |
+
[사용자 쿼리]
|
| 385 |
+
|
|
| 386 |
+
v
|
| 387 |
+
[멀티소스 검색] ──�� DuckDuckGo (최신 뉴스)
|
| 388 |
+
| ├── 한국투자증권 KIS (현재가, PER, PBR, EPS, 수급)
|
| 389 |
+
| ├── FnGuide (사업개요, 재무정보)
|
| 390 |
+
| └── FAISS 317K (과거 유사 뉴스 + 주가 반응)
|
| 391 |
+
v
|
| 392 |
+
[컨텍스트 주입] → System Prompt + 검색 결과
|
| 393 |
+
|
|
| 394 |
+
v
|
| 395 |
+
[VELA LLM] → Reasoning Trace (Step-by-Step)
|
| 396 |
+
|
|
| 397 |
+
v
|
| 398 |
+
[리서치 리포트]
|
| 399 |
+
```
|
| 400 |
|
| 401 |
+
---
|
|
|
|
|
|
|
|
|
|
| 402 |
|
| 403 |
## Limitations
|
| 404 |
|
| 405 |
+
- **실시간 시세**: 모델 자체는 실시간 데이터에 접근하지 못합니다 (에이전트 시스템 필요)
|
| 406 |
+
- **수치 할루시네이션**: 구체적 수치(주가, PER 등)는 외부 검증이 필요합니다
|
| 407 |
+
- **컨텍스트**: 8K 토큰 제한으로 긴 문서 처리에 한계가 있습니다
|
| 408 |
+
- **투자 조언 아님**: 정보 제공 목적이며, 투자 결정은 본인의 판단과 책임입니다
|
| 409 |
+
|
| 410 |
+
---
|
| 411 |
|
| 412 |
## Citation
|
| 413 |
|
|
|
|
| 421 |
}
|
| 422 |
```
|
| 423 |
|
| 424 |
+
---
|
| 425 |
+
|
| 426 |
## Version History
|
| 427 |
|
| 428 |
+
| Version | Date | Changes |
|
| 429 |
+
|---------|------|---------|
|
| 430 |
+
| **v1.2** | **2026-02-16** | **SFT v3 (58K) Gap Fill 12카테고리, Markdown RT, 벤치마크 추가** |
|
| 431 |
+
| v1.1 | 2026-02-12 | GGUF 양자화 모델 추가 (Q4_K_M, Q8_0) |
|
| 432 |
| v1.0 | 2026-01-28 | DPO 병합, 중국어/영어 leak 해결 |
|
| 433 |
| v0.9 | 2026-01-15 | SFT 베이스 모델 공개 |
|
| 434 |
|