SOVYN commited on
Commit
681909f
·
verified ·
1 Parent(s): 1f3f626

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -1,35 +1,4 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
  *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
  *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  *.pt filter=lfs diff=lfs merge=lfs -text
2
+ *.bin filter=lfs diff=lfs merge=lfs -text
 
3
  *.safetensors filter=lfs diff=lfs merge=lfs -text
4
+ sovyn.model filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
README.md ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - ko
4
+ library_name: pytorch
5
+ tags:
6
+ - sovyn
7
+ - korean
8
+ - conversational
9
+ - causal-lm
10
+ - from-scratch
11
+ pipeline_tag: text-generation
12
+ ---
13
+
14
+ # SOVYN-300M-Cortex
15
+
16
+ SOVYN-300M-Cortex is a small Korean conversational model trained from scratch.
17
+ It is not a Transformers-compatible checkpoint yet; it uses the custom PyTorch
18
+ architecture in `src/sovyn`.
19
+
20
+ ## Current Status
21
+
22
+ - Parameters: about 300M
23
+ - Format: custom PyTorch checkpoint
24
+ - Tokenizer: SentencePiece BPE
25
+ - Context length: 512 tokens
26
+ - Weight dtype in checkpoint: bfloat16
27
+ - Main checkpoint: `sovyn_300m_last.pt`
28
+
29
+ This is an early experimental checkpoint. It can handle short Korean dialogue
30
+ patterns, but it is not a broad knowledge model.
31
+
32
+ ## Quick Start
33
+
34
+ ```powershell
35
+ python -m venv .venv
36
+ .\.venv\Scripts\python.exe -m pip install torch sentencepiece pyyaml tqdm
37
+ .\.venv\Scripts\python.exe scripts\chat.py --checkpoint sovyn_300m_last.pt --tokenizer sovyn.model
38
+ ```
39
+
40
+ Example:
41
+
42
+ ```text
43
+ user: 나 오늘 피곤해
44
+ sovyn: 많이 지쳤겠다. 지금은 잠깐 쉬어도 괜찮아.
45
+ ```
46
+
47
+ ## Ollama-Compatible Local API
48
+
49
+ This repository includes an Ollama-compatible bridge, but the model is not a
50
+ native GGUF Ollama model yet.
51
+
52
+ ```powershell
53
+ powershell -ExecutionPolicy Bypass -File scripts\start_ollama_bridge.ps1
54
+ ```
55
+
56
+ Then call:
57
+
58
+ ```text
59
+ POST http://127.0.0.1:11435/api/chat
60
+ ```
61
+
62
+ ## Files
63
+
64
+ - `sovyn_300m_last.pt`: model checkpoint
65
+ - `sovyn.model`, `sovyn.vocab`: SentencePiece tokenizer
66
+ - `config.yaml`: model and training config
67
+ - `src/sovyn`: custom PyTorch architecture and formatting/data helpers
68
+ - `scripts/chat.py`: local chat runner
69
+ - `scripts/ollama_bridge.py`: Ollama-compatible local API bridge
70
+
71
+ ## Notes
72
+
73
+ SOVYN-300M-Cortex was trained for short, natural Korean replies. The next major
74
+ step is converting the architecture to a standard export format or writing a
75
+ GGUF converter so it can be registered as a native Ollama model.
config.yaml ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ model:
2
+ name: SOVYN-300M-Cortex
3
+ vocab_size: 32000
4
+ max_seq_len: 512
5
+ n_layers: 21
6
+ hidden_size: 1024
7
+ n_heads: 16
8
+ n_kv_heads: 8
9
+ ffn_size: 3584
10
+ dropout: 0.0
11
+ rope_theta: 10000.0
12
+ tie_embeddings: true
13
+
14
+ tokenizer:
15
+ path: tokenizer_300m/sovyn.model
16
+
17
+ training:
18
+ train_path: data/sovyn_300m_train.jsonl
19
+ output_dir: checkpoints
20
+ checkpoint_prefix: sovyn_300m
21
+ seed: 43
22
+ device: cuda
23
+ dtype: bf16
24
+ max_steps: 8000
25
+ batch_size: 2
26
+ grad_accum_steps: 16
27
+ learning_rate: 0.00005
28
+ weight_decay: 0.1
29
+ warmup_steps: 800
30
+ max_grad_norm: 1.0
31
+ log_every: 100
32
+ save_every: 1000
33
+ save_total_limit: 1
34
+ save_optimizer: false
35
+ save_dtype: bf16
36
+ save_step_checkpoints: false
37
+ delete_before_save: true
38
+
39
+ generation:
40
+ max_new_tokens: 96
41
+ temperature: 0.75
42
+ top_k: 40
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ torch
2
+ sentencepiece
3
+ pyyaml
4
+ tqdm
scripts/chat.py ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ import re
3
+ import sys
4
+ from pathlib import Path
5
+
6
+ import sentencepiece as spm
7
+ import torch
8
+
9
+ sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
10
+
11
+ from sovyn import SovynConfig, SovynForCausalLM
12
+ from sovyn.formatting import format_prompt
13
+
14
+
15
+ def clean_answer(text: str) -> str:
16
+ answer = text.split("<assistant>")[-1].replace("<eos>", "").strip()
17
+ for marker in ["<system>", "<user>", "<state>", "<plan>", "<memory>", "<reflection>"]:
18
+ answer = answer.split(marker)[0].strip()
19
+ sentences = re.findall(r".+?[.!?。](?=\s|$)", answer)
20
+ if sentences:
21
+ first = sentences[0].strip()
22
+ generic_first = first in {
23
+ "좋아.",
24
+ "응.",
25
+ "알겠어.",
26
+ "가능해.",
27
+ "그럴 수 있어.",
28
+ "불안할 수 있어.",
29
+ "많이 지쳤겠다.",
30
+ }
31
+ if generic_first and len(sentences) > 1:
32
+ answer = " ".join(item.strip() for item in sentences[:2])
33
+ else:
34
+ answer = first
35
+ return answer
36
+
37
+
38
+ def score_answer(user: str, answer: str) -> int:
39
+ text = user.lower()
40
+ score = 0
41
+ groups = [
42
+ (["피곤", "지쳤", "힘들", "기운", "복잡"], ["지쳤", "쉬", "힘들", "숨", "들어줄", "괜찮"]),
43
+ (["누구", "정체", "sovyn"], ["sovyn", "모델", "ai", "학습", "기억"]),
44
+ (["짧", "간단", "핵심", "요약"], ["핵심", "짧", "결론", "간단"]),
45
+ (
46
+ ["1b", "120m", "300m", "모델", "학습", "키울", "저장공간", "저장 공간", "체크포인트", "부족"],
47
+ ["모델", "학습", "120m", "300m", "1b", "키우", "실험", "체크포인트", "저장", "공간"],
48
+ ),
49
+ (["먹", "점심", "저녁", "음식"], ["김밥", "국밥", "덮밥", "샌드위치", "먹"]),
50
+ (["공부", "집중", "미루", "루틴"], ["10분", "타이머", "문제", "시작", "공부"]),
51
+ (["불안", "걱정", "초조"], ["불안", "걱정", "숨", "괜찮", "나눠"]),
52
+ ]
53
+ for user_words, answer_words in groups:
54
+ if any(word in text for word in user_words):
55
+ score += sum(2 for word in answer_words if word.lower() in answer.lower())
56
+ break
57
+ if answer in {"안녕.", "좋아.", "응.", "좋은 생각이야.", "좋은 아침이야."}:
58
+ score -= 3
59
+ if len(answer) < 4:
60
+ score -= 2
61
+ if 8 <= len(answer) <= 80:
62
+ score += 1
63
+ return score
64
+
65
+
66
+ def main():
67
+ parser = argparse.ArgumentParser()
68
+ parser.add_argument("--checkpoint", required=True)
69
+ parser.add_argument("--tokenizer", required=True)
70
+ parser.add_argument("--device", default="cuda")
71
+ parser.add_argument("--max-new-tokens", type=int, default=96)
72
+ parser.add_argument("--temperature", type=float, default=0.0)
73
+ parser.add_argument("--top-k", type=int, default=50)
74
+ parser.add_argument("--best-of", type=int, default=4)
75
+ args = parser.parse_args()
76
+
77
+ device = args.device
78
+ if device == "cuda" and not torch.cuda.is_available():
79
+ device = "cpu"
80
+
81
+ sp = spm.SentencePieceProcessor(model_file=args.tokenizer)
82
+ ckpt = torch.load(args.checkpoint, map_location="cpu")
83
+ model_cfg = ckpt["config"]["model"]
84
+ if model_cfg["vocab_size"] != sp.get_piece_size():
85
+ raise ValueError(
86
+ f"Checkpoint vocab_size={model_cfg['vocab_size']} but tokenizer has "
87
+ f"{sp.get_piece_size()} pieces"
88
+ )
89
+ model = SovynForCausalLM(SovynConfig(**model_cfg))
90
+ model.load_state_dict(ckpt["model"])
91
+ model.to(device)
92
+ model.eval()
93
+
94
+ eos_id = sp.piece_to_id("<eos>")
95
+ stop_ids = [
96
+ sp.piece_to_id(piece)
97
+ for piece in ["<system>", "<user>", "<state>", "<plan>", "<memory>", "<reflection>"]
98
+ if sp.piece_to_id(piece) >= 0
99
+ ]
100
+ suppress_ids = [
101
+ idx
102
+ for idx in [sp.piece_to_id("<pad>"), sp.piece_to_id("<unk>"), sp.piece_to_id("<bos>")]
103
+ if idx >= 0
104
+ ]
105
+ print("SOVYN chat. Type 'exit' to quit.")
106
+
107
+ while True:
108
+ user = input("you> ").strip()
109
+ if user.lower() in {"exit", "quit"}:
110
+ break
111
+ prompt = format_prompt(user)
112
+ ids = torch.tensor([sp.encode(prompt, out_type=int)], dtype=torch.long, device=device)
113
+ candidates = []
114
+ runs = max(1, args.best_of if args.temperature > 0 else 1)
115
+ for _ in range(runs):
116
+ out = model.generate(
117
+ ids,
118
+ max_new_tokens=args.max_new_tokens,
119
+ temperature=args.temperature,
120
+ top_k=args.top_k,
121
+ eos_id=eos_id,
122
+ stop_ids=stop_ids,
123
+ suppress_ids=suppress_ids,
124
+ )
125
+ answer = clean_answer(sp.decode(out[0].tolist()))
126
+ candidates.append(answer)
127
+ answer = max(candidates, key=lambda item: score_answer(user, item))
128
+ print(f"sovyn> {answer}")
129
+
130
+
131
+ if __name__ == "__main__":
132
+ main()
scripts/ollama_bridge.py ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ import json
3
+ import sys
4
+ import time
5
+ from datetime import UTC, datetime
6
+ from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
7
+ from pathlib import Path
8
+
9
+ import sentencepiece as spm
10
+ import torch
11
+
12
+ sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
13
+
14
+ from sovyn import SovynConfig, SovynForCausalLM
15
+ from sovyn.formatting import format_prompt
16
+
17
+ from chat import clean_answer, score_answer
18
+
19
+
20
+ def now_iso():
21
+ return datetime.now(UTC).isoformat(timespec="milliseconds").replace("+00:00", "Z")
22
+
23
+
24
+ class SovynRuntime:
25
+ def __init__(self, args):
26
+ self.model_name = args.model_name
27
+ self.max_new_tokens = args.max_new_tokens
28
+ self.temperature = args.temperature
29
+ self.top_k = args.top_k
30
+ self.best_of = args.best_of
31
+ self.checkpoint_path = Path(args.checkpoint)
32
+
33
+ device = args.device
34
+ if device == "cuda" and not torch.cuda.is_available():
35
+ device = "cpu"
36
+ self.device = device
37
+
38
+ self.tokenizer = spm.SentencePieceProcessor(model_file=args.tokenizer)
39
+ checkpoint = torch.load(self.checkpoint_path, map_location="cpu")
40
+ model_cfg = checkpoint["config"]["model"]
41
+ self.model = SovynForCausalLM(SovynConfig(**model_cfg))
42
+ self.model.load_state_dict(checkpoint["model"])
43
+ dtype = torch.bfloat16 if device == "cuda" else torch.float32
44
+ self.model.to(device=device, dtype=dtype)
45
+ self.model.eval()
46
+
47
+ self.eos_id = self.tokenizer.piece_to_id("<eos>")
48
+ self.stop_ids = [
49
+ self.tokenizer.piece_to_id(piece)
50
+ for piece in ["<system>", "<user>", "<state>", "<plan>", "<memory>", "<reflection>"]
51
+ if self.tokenizer.piece_to_id(piece) >= 0
52
+ ]
53
+ self.suppress_ids = [
54
+ idx
55
+ for idx in [
56
+ self.tokenizer.piece_to_id("<pad>"),
57
+ self.tokenizer.piece_to_id("<unk>"),
58
+ self.tokenizer.piece_to_id("<bos>"),
59
+ ]
60
+ if idx >= 0
61
+ ]
62
+
63
+ @torch.no_grad()
64
+ def reply(self, user: str, system: str | None = None, options: dict | None = None) -> str:
65
+ options = options or {}
66
+ temperature = float(options.get("temperature", self.temperature))
67
+ top_k = int(options.get("top_k", self.top_k))
68
+ max_new_tokens = int(options.get("num_predict", self.max_new_tokens))
69
+ best_of = max(1, int(options.get("best_of", self.best_of)))
70
+ runs = best_of if temperature > 0 else 1
71
+
72
+ prompt = format_prompt(user, system=system)
73
+ ids = torch.tensor(
74
+ [self.tokenizer.encode(prompt, out_type=int)],
75
+ dtype=torch.long,
76
+ device=self.device,
77
+ )
78
+
79
+ candidates = []
80
+ for _ in range(runs):
81
+ out = self.model.generate(
82
+ ids,
83
+ max_new_tokens=max_new_tokens,
84
+ temperature=temperature,
85
+ top_k=top_k,
86
+ eos_id=self.eos_id,
87
+ stop_ids=self.stop_ids,
88
+ suppress_ids=self.suppress_ids,
89
+ )
90
+ answer = clean_answer(self.tokenizer.decode(out[0].tolist()))
91
+ candidates.append(answer)
92
+ return max(candidates, key=lambda answer: score_answer(user, answer))
93
+
94
+ def tags(self):
95
+ size = self.checkpoint_path.stat().st_size if self.checkpoint_path.exists() else 0
96
+ return {
97
+ "models": [
98
+ {
99
+ "name": self.model_name,
100
+ "model": self.model_name,
101
+ "modified_at": now_iso(),
102
+ "size": size,
103
+ "digest": "sovyn-local-pytorch",
104
+ "details": {
105
+ "parent_model": "",
106
+ "format": "pytorch",
107
+ "family": "sovyn",
108
+ "families": ["sovyn"],
109
+ "parameter_size": "300M",
110
+ "quantization_level": "BF16",
111
+ },
112
+ }
113
+ ]
114
+ }
115
+
116
+
117
+ def json_bytes(payload: dict) -> bytes:
118
+ return json.dumps(payload, ensure_ascii=False).encode("utf-8")
119
+
120
+
121
+ def get_last_user_and_system(messages: list[dict]) -> tuple[str, str | None]:
122
+ system = None
123
+ user = ""
124
+ for message in messages:
125
+ role = message.get("role")
126
+ content = message.get("content", "")
127
+ if role == "system" and content:
128
+ system = content
129
+ elif role == "user" and content:
130
+ user = content
131
+ return user, system
132
+
133
+
134
+ def make_handler(runtime: SovynRuntime):
135
+ class Handler(BaseHTTPRequestHandler):
136
+ server_version = "SOVYN-Ollama-Bridge/0.1"
137
+
138
+ def log_message(self, fmt, *args):
139
+ sys.stdout.write("%s - %s\n" % (self.address_string(), fmt % args))
140
+ sys.stdout.flush()
141
+
142
+ def send_json(self, status: int, payload: dict):
143
+ body = json_bytes(payload)
144
+ self.send_response(status)
145
+ self.send_header("Content-Type", "application/json; charset=utf-8")
146
+ self.send_header("Content-Length", str(len(body)))
147
+ self.end_headers()
148
+ self.wfile.write(body)
149
+
150
+ def send_stream_json(self, payload: dict):
151
+ body = json_bytes(payload) + b"\n"
152
+ self.send_response(200)
153
+ self.send_header("Content-Type", "application/x-ndjson; charset=utf-8")
154
+ self.end_headers()
155
+ self.wfile.write(body)
156
+
157
+ def read_payload(self) -> dict:
158
+ length = int(self.headers.get("Content-Length", "0"))
159
+ if length <= 0:
160
+ return {}
161
+ raw = self.rfile.read(length).decode("utf-8")
162
+ return json.loads(raw) if raw else {}
163
+
164
+ def do_GET(self):
165
+ if self.path == "/" or self.path == "/api/version":
166
+ self.send_json(200, {"version": "sovyn-ollama-bridge-0.1"})
167
+ elif self.path == "/api/tags":
168
+ self.send_json(200, runtime.tags())
169
+ else:
170
+ self.send_json(404, {"error": f"unknown route: {self.path}"})
171
+
172
+ def do_POST(self):
173
+ started = time.perf_counter_ns()
174
+ try:
175
+ payload = self.read_payload()
176
+ if self.path == "/api/generate":
177
+ prompt = payload.get("prompt", "")
178
+ options = payload.get("options") or {}
179
+ answer = runtime.reply(prompt, options=options)
180
+ response = {
181
+ "model": runtime.model_name,
182
+ "created_at": now_iso(),
183
+ "response": answer,
184
+ "done": True,
185
+ "total_duration": time.perf_counter_ns() - started,
186
+ }
187
+ if payload.get("stream", True):
188
+ self.send_stream_json(response)
189
+ else:
190
+ self.send_json(200, response)
191
+ elif self.path == "/api/chat":
192
+ user, system = get_last_user_and_system(payload.get("messages", []))
193
+ options = payload.get("options") or {}
194
+ answer = runtime.reply(user, system=system, options=options)
195
+ response = {
196
+ "model": runtime.model_name,
197
+ "created_at": now_iso(),
198
+ "message": {"role": "assistant", "content": answer},
199
+ "done": True,
200
+ "total_duration": time.perf_counter_ns() - started,
201
+ }
202
+ if payload.get("stream", True):
203
+ self.send_stream_json(response)
204
+ else:
205
+ self.send_json(200, response)
206
+ elif self.path == "/api/show":
207
+ self.send_json(
208
+ 200,
209
+ {
210
+ "modelfile": "FROM SOVYN PyTorch checkpoint via local bridge",
211
+ "parameters": "temperature 0.7\ntop_k 20",
212
+ "template": "{{ .Prompt }}",
213
+ "details": runtime.tags()["models"][0]["details"],
214
+ },
215
+ )
216
+ else:
217
+ self.send_json(404, {"error": f"unknown route: {self.path}"})
218
+ except Exception as exc:
219
+ self.send_json(500, {"error": str(exc)})
220
+
221
+ return Handler
222
+
223
+
224
+ def main():
225
+ parser = argparse.ArgumentParser()
226
+ parser.add_argument("--checkpoint", default="checkpoints/sovyn_300m_last.pt")
227
+ parser.add_argument("--tokenizer", default="tokenizer_300m/sovyn.model")
228
+ parser.add_argument("--model-name", default="sovyn:300m")
229
+ parser.add_argument("--host", default="127.0.0.1")
230
+ parser.add_argument("--port", type=int, default=11434)
231
+ parser.add_argument("--device", default="cuda")
232
+ parser.add_argument("--max-new-tokens", type=int, default=64)
233
+ parser.add_argument("--temperature", type=float, default=0.0)
234
+ parser.add_argument("--top-k", type=int, default=0)
235
+ parser.add_argument("--best-of", type=int, default=1)
236
+ args = parser.parse_args()
237
+
238
+ runtime = SovynRuntime(args)
239
+ server = ThreadingHTTPServer((args.host, args.port), make_handler(runtime))
240
+ print(f"SOVYN Ollama-compatible API listening on http://{args.host}:{args.port}")
241
+ print(f"model: {runtime.model_name}, device: {runtime.device}")
242
+ server.serve_forever()
243
+
244
+
245
+ if __name__ == "__main__":
246
+ main()
scripts/start_ollama_bridge.ps1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ $ErrorActionPreference = "Stop"
2
+
3
+ $Root = Split-Path -Parent $PSScriptRoot
4
+ Set-Location $Root
5
+ $env:Path = [Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [Environment]::GetEnvironmentVariable("Path", "User")
6
+
7
+ & .\.venv\Scripts\python.exe scripts\ollama_bridge.py `
8
+ --checkpoint checkpoints\sovyn_300m_last.pt `
9
+ --tokenizer tokenizer_300m\sovyn.model `
10
+ --model-name sovyn:300m `
11
+ --host 127.0.0.1 `
12
+ --port 11435
sovyn.model ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:979996d0ef9b99ce81b0dace8b29bd9fccc9847d212448fcb77c6e592d208785
3
+ size 285791
sovyn.vocab ADDED
@@ -0,0 +1,2740 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <pad> 0
2
+ <unk> 0
3
+ <bos> 0
4
+ <eos> 0
5
+ <system> 0
6
+ <user> 0
7
+ <state> 0
8
+ <plan> 0
9
+ <memory> 0
10
+ <reflection> 0
11
+ <assistant> 0
12
+ 한다 -0
13
+ ▁짧 -1
14
+ ▁대 -2
15
+ ▁대화 -3
16
+ OV -4
17
+ YN -5
18
+ ▁S -6
19
+ OVYN -7
20
+ ▁SOVYN -8
21
+ ▁짧고 -9
22
+ ▁너 -10
23
+ ▁자 -11
24
+ 연스 -12
25
+ ▁자연스 -13
26
+ ▁한 -14
27
+ 럽게 -15
28
+ ▁자연스럽게 -16
29
+ ▁너는 -17
30
+ 국어 -18
31
+ 이다 -19
32
+ 국어로 -20
33
+ ▁대화한다 -21
34
+ ▁한국어로 -22
35
+ ▁사 -23
36
+ 용자 -24
37
+ ▁사용자 -25
38
+ ▁있 -26
39
+ ▁작 -27
40
+ ▁말 -28
41
+ ▁사용자는 -29
42
+ 하고 -30
43
+ ▁정 -31
44
+ ▁좋 -32
45
+ ▁수 -33
46
+ ▁제 -34
47
+ ▁다 -35
48
+ ▁가 -36
49
+ ▁이 -37
50
+ ▁모 -38
51
+ ▁먼 -39
52
+ ▁먼저 -40
53
+ ▁제안 -41
54
+ ▁아 -42
55
+ ▁다음 -43
56
+ ▁작은 -44
57
+ ▁좋아 -45
58
+ ▁제안한다 -46
59
+ ▁있는 -47
60
+ ▁지 -48
61
+ ▁행 -49
62
+ ▁행동 -50
63
+ ▁행동을 -51
64
+ ▁하 -52
65
+ ▁부 -53
66
+ ▁할 -54
67
+ ▁지금 -55
68
+ ▁반 -56
69
+ ▁원 -57
70
+ 하지 -58
71
+ 적인 -59
72
+ ▁않 -60
73
+ ▁반응 -61
74
+ ▁확 -62
75
+ ▁모르 -63
76
+ ▁정확 -64
77
+ ▁척 -65
78
+ ▁척하지 -66
79
+ ▁말에 -67
80
+ ▁아는 -68
81
+ ▁않고 -69
82
+ ▁다음에 -70
83
+ ▁모르면 -71
84
+ ▁정확히 -72
85
+ ▁반응하고 -73
86
+ ▁사용자의 -74
87
+ ▁어 -75
88
+ ▁오 -76
89
+ ▁답 -77
90
+ ▁원한다 -78
91
+ ▁확인 -79
92
+ 보자 -80
93
+ ▁나 -81
94
+ 부터 -82
95
+ ▁해 -83
96
+ ▁돼 -84
97
+ ▁안 -85
98
+ ▁방 -86
99
+ ▁기 -87
100
+ ▁뭐 -88
101
+ ▁있다 -89
102
+ ▁괜 -90
103
+ 하는 -91
104
+ 이나 -92
105
+ 해줘 -93
106
+ ▁오늘 -94
107
+ ▁학 -95
108
+ ▁학습 -96
109
+ ▁있어 -97
110
+ 이야 -98
111
+ ▁작게 -99
112
+ ▁하나 -100
113
+ ▁없 -101
114
+ 했다 -102
115
+ ▁괜찮 -103
116
+ 으로 -104
117
+ ▁고 -105
118
+ ▁간 -106
119
+ ▁간단 -107
120
+ ▁답변 -108
121
+ ▁한다 -109
122
+ ▁안정 -110
123
+ ▁모델 -111
124
+ ▁부담 -112
125
+ ▁불 -113
126
+ ▁데 -114
127
+ ▁지금은 -115
128
+ ▁공 -116
129
+ ▁그 -117
130
+ ▁쉬 -118
131
+ ▁바 -119
132
+ AI -120
133
+ ▁AI -121
134
+ ▁짧은 -122
135
+ ▁바로 -123
136
+ ▁만 -124
137
+ ▁같 -125
138
+ ▁1 -126
139
+ ▁만들 -127
140
+ ▁가능 -128
141
+ ▁이어 -129
142
+ ▁추 -130
143
+ ▁추천 -131
144
+ ▁방향 -132
145
+ ▁핵 -133
146
+ ▁핵심 -134
147
+ ▁도 -135
148
+ ▁짧게 -136
149
+ ▁표 -137
150
+ ▁표현 -138
151
+ ▁표현했다 -139
152
+ ▁소 -140
153
+ ▁인 -141
154
+ ▁간단히 -142
155
+ ▁잡 -143
156
+ ▁개 -144
157
+ ▁음 -145
158
+ ▁게 -146
159
+ ▁가볍 -147
160
+ ▁좀 -148
161
+ ▁맞 -149
162
+ ▁알 -150
163
+ ▁거 -151
164
+ ▁거야 -152
165
+ ▁실 -153
166
+ 정을 -154
167
+ ▁없는 -155
168
+ ▁저 -156
169
+ ▁부분 -157
170
+ ▁긍 -158
171
+ ▁긍정 -159
172
+ ▁대화를 -160
173
+ ▁것 -161
174
+ 벼운 -162
175
+ ▁가벼운 -163
176
+ ▁질 -164
177
+ ▁질문 -165
178
+ ▁개발 -166
179
+ ▁묻 -167
180
+ ▁묻고 -168
181
+ 하게 -169
182
+ 간다 -170
183
+ ▁이어간다 -171
184
+ ▁걱 -172
185
+ ▁쉬운 -173
186
+ 주고 -174
187
+ ▁보 -175
188
+ ▁결 -176
189
+ ▁같이 -177
190
+ ▁공부 -178
191
+ ▁너무 -179
192
+ ▁응 -180
193
+ ▁설 -181
194
+ ▁선 -182
195
+ ▁마 -183
196
+ 디어 -184
197
+ ▁아이 -185
198
+ ▁아이디어 -186
199
+ ▁내 -187
200
+ ▁배 -188
201
+ ▁기억 -189
202
+ ▁괜찮아 -190
203
+ ▁된 -191
204
+ ▁된다 -192
205
+ ▁불안 -193
206
+ ▁설명 -194
207
+ ▁단 -195
208
+ ▁단계 -196
209
+ ▁느 -197
210
+ ▁시 -198
211
+ ▁시작 -199
212
+ ▁일 -200
213
+ ▁상 -201
214
+ 식을 -202
215
+ 움이 -203
216
+ ▁대화는 -204
217
+ ▁도움이 -205
218
+ ▁방식을 -206
219
+ ▁안정적인 -207
220
+ ▁학습하는 -208
221
+ ▁문 -209
222
+ ▁가볍게 -210
223
+ ▁해보자 -211
224
+ ▁하나만 -212
225
+ 하자 -213
226
+ 겠어 -214
227
+ ▁알겠어 -215
228
+ ▁정도 -216
229
+ ▁답변을 -217
230
+ ▁중 -218
231
+ ▁긍정적인 -219
232
+ ▁선택 -220
233
+ 이터 -221
234
+ ▁데이터 -222
235
+ ▁인사 -223
236
+ ▁예 -224
237
+ ▁답한다 -225
238
+ ▁방향을 -226
239
+ 하기 -227
240
+ ▁싶 -228
241
+ ▁추천을 -229
242
+ 탁해 -230
243
+ ▁부탁해 -231
244
+ ▁주고 -232
245
+ ▁질문으로 -233
246
+ ▁어때 -234
247
+ ▁빨 -235
248
+ ▁빨리 -236
249
+ ▁기분 -237
250
+ ▁야 -238
251
+ 빈아 -239
252
+ ▁소빈아 -240
253
+ ▁저기 -241
254
+ ▁구 -242
255
+ ▁생 -243
256
+ ▁생각 -244
257
+ ▁말한다 -245
258
+ ▁좋은 -246
259
+ ▁줄 -247
260
+ 요한 -248
261
+ 필요한 -249
262
+ ▁집 -250
263
+ ▁집중 -251
264
+ ▁정체 -252
265
+ ▁얘 -253
266
+ ▁얘기 -254
267
+ ▁확인하는 -255
268
+ 하면 -256
269
+ ▁성 -257
270
+ ▁마음 -258
271
+ ▁피 -259
272
+ ▁정도면 -260
273
+ ▁고치 -261
274
+ ▁결론 -262
275
+ ▁로 -263
276
+ ▁이름 -264
277
+ ▁먹 -265
278
+ ▁배우 -266
279
+ ▁예시 -267
280
+ ▁문구 -268
281
+ 렵게 -269
282
+ ▁가지 -270
283
+ ▁말자 -271
284
+ ▁어렵게 -272
285
+ ▁흐 -273
286
+ ▁흐름 -274
287
+ 할게 -275
288
+ ▁키 -276
289
+ 성을 -277
290
+ ▁모델이야 -278
291
+ ▁오늘은 -279
292
+ ▁들 -280
293
+ 이고 -281
294
+ ▁잘 -282
295
+ ▁나눠 -283
296
+ ▁추천해줘 -284
297
+ ▁목 -285
298
+ 으면 -286
299
+ ▁하고 -287
300
+ ▁걱정을 -288
301
+ ▁버 -289
302
+ ▁상황 -290
303
+ ▁땐 -291
304
+ ▁직 -292
305
+ ▁직접 -293
306
+ ▁말해 -294
307
+ 였어 -295
308
+ 00 -296
309
+ ▁보자 -297
310
+ ▁더 -298
311
+ ▁설명을 -299
312
+ ▁정리 -300
313
+ ▁만들어 -301
314
+ ▁맞아 -302
315
+ ▁제안을 -303
316
+ ▁감 -304
317
+ ▁감정을 -305
318
+ ▁간단한 -306
319
+ 감을 -307
320
+ ▁불안이나 -308
321
+ ▁안정감을 -309
322
+ ▁돕 -310
323
+ 는다 -311
324
+ ▁돕는다 -312
325
+ ▁가능한 -313
326
+ ▁보면 -314
327
+ ▁제일 -315
328
+ ▁작업 -316
329
+ ▁아이디어를 -317
330
+ ▁안녕 -318
331
+ ▁했다 -319
332
+ ▁인사를 -320
333
+ ▁공감 -321
334
+ ▁부담을 -322
335
+ ▁공감하고 -323
336
+ ▁소개 -324
337
+ ▁받 -325
338
+ ▁받아 -326
339
+ ▁복 -327
340
+ ▁불필요한 -328
341
+ ▁핵심적인 -329
342
+ ▁판 -330
343
+ ▁판단 -331
344
+ ▁부분과 -332
345
+ ▁부분을 -333
346
+ ▁확인을 -334
347
+ ▁확인할 -335
348
+ ▁판단이나 -336
349
+ 끼고 -337
350
+ 려움 -338
351
+ 려움을 -339
352
+ ▁공부나 -340
353
+ ▁느끼고 -341
354
+ ▁시작할 -342
355
+ ▁집중에 -343
356
+ ▁어려움을 -344
357
+ ▁테 -345
358
+ 스트 -346
359
+ ▁테스트 -347
360
+ ▁고르 -348
361
+ ▁뭐야 -349
362
+ ▁재 -350
363
+ ▁쓸 -351
364
+ ▁로그 -352
365
+ ▁구조 -353
366
+ ▁잡아 -354
367
+ ▁나는 -355
368
+ ▁현 -356
369
+ 성과 -357
370
+ 도록 -358
371
+ 하도록 -359
372
+ ▁복잡 -360
373
+ ▁다음은 -361
374
+ ▁샌 -362
375
+ 드위 -363
376
+ 드위치 -364
377
+ ▁샌드위치 -365
378
+ 을까 -366
379
+ ▁그럼 -367
380
+ ▁좁 -368
381
+ ▁걱정 -369
382
+ ▁만들고 -370
383
+ ▁김 -371
384
+ ▁김밥 -372
385
+ ▁가장 -373
386
+ ▁같아 -374
387
+ ▁걸 -375
388
+ ▁먹고 -376
389
+ ▁당 -377
390
+ ▁없어 -378
391
+ ▁품 -379
392
+ ▁품질 -380
393
+ ▁음식 -381
394
+ ▁괜찮은 -382
395
+ ▁컨 -383
396
+ ▁컨셉 -384
397
+ ▁들어 -385
398
+ ▁좋다 -386
399
+ ▁예시로 -387
400
+ ▁확인하고 -388
401
+ ▁인정 -389
402
+ ▁봐 -390
403
+ ▁어디 -391
404
+ ▁초 -392
405
+ ▁초조 -393
406
+ ▁피곤 -394
407
+ ▁숨 -395
408
+ ▁마음이 -396
409
+ ▁실험 -397
410
+ ▁배우는 -398
411
+ ▁미 -399
412
+ ▁일단 -400
413
+ 마워 -401
414
+ ▁고마워 -402
415
+ ▁남 -403
416
+ ▁적 -404
417
+ ▁적게 -405
418
+ ▁어떤 -406
419
+ ▁실제 -407
420
+ ▁계 -408
421
+ ▁해결 -409
422
+ ▁말고 -410
423
+ ▁얘기하자 -411
424
+ ▁싶으면 -412
425
+ ▁편 -413
426
+ ▁결론부터 -414
427
+ ▁성장 -415
428
+ ▁순 -416
429
+ ▁순서 -417
430
+ ▁국 -418
431
+ ▁국밥 -419
432
+ ▁재현 -420
433
+ ▁힘 -421
434
+ 들었 -422
435
+ ▁힘들었 -423
436
+ ▁크 -424
437
+ ▁가면 -425
438
+ ▁싶어 -426
439
+ ▁말해줘 -427
440
+ ▁기운 -428
441
+ ▁아침 -429
442
+ ▁왔 -430
443
+ ▁지쳤 -431
444
+ 인을 -432
445
+ ▁원인을 -433
446
+ ▁오류 -434
447
+ ▁코 -435
448
+ ▁뭐였어 -436
449
+ ▁첫 -437
450
+ ▁버그 -438
451
+ ▁해야 -439
452
+ ▁하는 -440
453
+ ▁때 -441
454
+ ▁때는 -442
455
+ ▁핵심만 -443
456
+ 과를 -444
457
+ ▁결과를 -445
458
+ ▁정해 -446
459
+ ▁심 -447
460
+ ▁심심 -448
461
+ ▁말하면 -449
462
+ ▁기분은 -450
463
+ ▁키우 -451
464
+ ▁중이야 -452
465
+ ▁스 -453
466
+ ▁느낌 -454
467
+ ▁하지 -455
468
+ ▁내가 -456
469
+ ▁말할게 -457
470
+ 리고 -458
471
+ 20 -459
472
+ ▁120 -460
473
+ ▁계속 -461
474
+ ▁편하게 -462
475
+ ▁돌 -463
476
+ ▁많 -464
477
+ ▁상태 -465
478
+ ▁정하고 -466
479
+ ▁도울 -467
480
+ ▁상황을 -468
481
+ ▁준 -469
482
+ ▁준비 -470
483
+ ▁기운이 -471
484
+ ▁설명해줘 -472
485
+ ▁열 -473
486
+ ▁열어 -474
487
+ ▁실행 -475
488
+ ▁줄이고 -476
489
+ 길게 -477
490
+ ▁고치고 -478
491
+ ▁흐름이 -479
492
+ 에서 -480
493
+ ▁뭐해 -481
494
+ 표를 -482
495
+ ▁목표를 -483
496
+ 볼까 -484
497
+ ▁뭐부터 -485
498
+ ▁에 -486
499
+ ▁에러 -487
500
+ ▁그런 -488
501
+ ▁학습하고 -489
502
+ ▁고르는 -490
503
+ 었어 -491
504
+ ▁있었어 -492
505
+ 려줘 -493
506
+ ▁알려줘 -494
507
+ ▁문구를 -495
508
+ ▁이상 -496
509
+ ▁크게 -497
510
+ ▁다만 -498
511
+ ▁쉽 -499
512
+ ▁쉽게 -500
513
+ ▁쉬워 -501
514
+ ▁구조를 -502
515
+ ▁덮 -503
516
+ ▁분 -504
517
+ ▁분명 -505
518
+ 이는 -506
519
+ ▁잡아보자 -507
520
+ ▁잘한 -508
521
+ ▁함 -509
522
+ ▁함께 -510
523
+ ▁많이 -511
524
+ ▁마음에 -512
525
+ 지만 -513
526
+ ▁오래 -514
527
+ ▁식 -515
528
+ ▁고민 -516
529
+ ▁식사 -517
530
+ ▁가볍고 -518
531
+ ▁선택을 -519
532
+ ▁고민하고 -520
533
+ ▁선택하기 -521
534
+ ▁생각을 -522
535
+ ▁정리하도록 -523
536
+ ▁작고 -524
537
+ ▁단계를 -525
538
+ ▁연 -526
539
+ ▁연다 -527
540
+ ▁작업을 -528
541
+ ▁준비를 -529
542
+ 의와 -530
543
+ ▁정의와 -531
544
+ ▁인사하고 -532
545
+ 로와 -533
546
+ ▁질문을 -534
547
+ ▁피로와 -535
548
+ 적을 -536
549
+ ▁있게 -537
550
+ ▁자신 -538
551
+ ▁목적을 -539
552
+ ▁소개한다 -540
553
+ ▁정체성을 -541
554
+ ▁말하고 -542
555
+ ▁가능성을 -543
556
+ ▁단계적인 -544
557
+ 둔다 -545
558
+ 였다 -546
559
+ 들이고 -547
560
+ ▁반응을 -548
561
+ ▁보였다 -549
562
+ ▁열어둔다 -550
563
+ ▁받아들이고 -551
564
+ ▁핵심부터 -552
565
+ 눈다 -553
566
+ ▁긍정할 -554
567
+ ▁나눈다 -555
568
+ ▁인정하고 -556
569
+ 법을 -557
570
+ ▁방법을 -558
571
+ ▁뭐가 -559
572
+ ▁좋을까 -560
573
+ ▁창 -561
574
+ ▁창작 -562
575
+ ▁그럴 -563
576
+ ▁큰 -564
577
+ ▁너와 -565
578
+ 준을 -566
579
+ ▁기준을 -567
580
+ ▁불편 -568
581
+ 아도 -569
582
+ ▁않아도 -570
583
+ ▁3 -571
584
+ ▁300 -572
585
+ 보다 -573
586
+ ▁덮밥 -574
587
+ ▁말해봐 -575
588
+ ▁누 -576
589
+ ▁대화부터 -577
590
+ 하면서 -578
591
+ ▁대화하면서 -579
592
+ ▁파 -580
593
+ ▁루 -581
594
+ ▁루틴 -582
595
+ 기면 -583
596
+ ▁10 -584
597
+ ▁아니 -585
598
+ 구나 -586
599
+ ▁가능해 -587
600
+ ▁솔 -588
601
+ ▁역 -589
602
+ ▁통 -590
603
+ 갑게 -591
604
+ 계를 -592
605
+ 지를 -593
606
+ 직히 -594
607
+ 할을 -595
608
+ 힌다 -596
609
+ ▁구체 -597
610
+ ▁당장 -598
611
+ ▁맞는 -599
612
+ ▁없이 -600
613
+ ▁지친 -601
614
+ ▁통제 -602
615
+ ▁현실 -603
616
+ ▁현재 -604
617
+ 함이나 -605
618
+ ▁반갑게 -606
619
+ ▁상태를 -607
620
+ ▁상황에 -608
621
+ ▁솔직히 -609
622
+ ▁순서�� -610
623
+ ▁역할을 -611
624
+ ▁좁힌다 -612
625
+ ▁줄이는 -613
626
+ ▁하나로 -614
627
+ ▁한계를 -615
628
+ ▁가능성과 -616
629
+ ▁개발이나 -617
630
+ ▁구체적인 -618
631
+ ▁받아주고 -619
632
+ ▁선택지를 -620
633
+ ▁소개하고 -621
634
+ ▁정체성과 -622
635
+ ▁현실적인 -623
636
+ ▁피곤함이나 -624
637
+ ▁동 -625
638
+ 서적 -626
639
+ 행을 -627
640
+ ▁중심 -628
641
+ ▁대화나 -629
642
+ ▁동행을 -630
643
+ ▁로그와 -631
644
+ ▁재현을 -632
645
+ ▁정서적 -633
646
+ ▁해결을 -634
647
+ ▁작업이나 -635
648
+ ▁중심으로 -636
649
+ ▁확인하게 -637
650
+ ▁아이디어나 -638
651
+ ▁하려 -639
652
+ 되는 -640
653
+ ▁문제 -641
654
+ ▁따 -642
655
+ ▁완 -643
656
+ ▁작지만 -644
657
+ ▁배우고 -645
658
+ ▁하이 -646
659
+ ▁힘들었던 -647
660
+ ▁대화하는 -648
661
+ ▁코드 -649
662
+ ▁꽤 -650
663
+ 거웠 -651
664
+ 거웠나 -652
665
+ ▁버거웠나 -653
666
+ ▁것도 -654
667
+ 고픈 -655
668
+ ▁배고픈 -656
669
+ ▁커 -657
670
+ 졌나 -658
671
+ ▁걱정이 -659
672
+ ▁커졌나 -660
673
+ ▁쪽 -661
674
+ ▁불편해 -662
675
+ ▁급 -663
676
+ 리지 -664
677
+ ▁결론을 -665
678
+ ▁급하게 -666
679
+ ▁내리지 -667
680
+ ▁초조할 -668
681
+ ▁조 -669
682
+ ▁확인해줘 -670
683
+ ▁숨부터 -671
684
+ ▁난 -672
685
+ ▁저녁 -673
686
+ ▁답할게 -674
687
+ ▁생각이야 -675
688
+ ▁해도 -676
689
+ ▁키우는 -677
690
+ ▁고르자 -678
691
+ ▁든 -679
692
+ ▁남는 -680
693
+ ▁일은 -681
694
+ ▁걱정돼 -682
695
+ ▁기억에 -683
696
+ ▁심심해 -684
697
+ ▁메 -685
698
+ 시지 -686
699
+ ▁파일 -687
700
+ ▁메시지 -688
701
+ ▁나눠서 -689
702
+ ▁차 -690
703
+ ▁미래 -691
704
+ ▁차분 -692
705
+ ▁미래적인 -693
706
+ ▁괜히 -694
707
+ ▁초조해 -695
708
+ ▁없을 -696
709
+ 루고 -697
710
+ ▁미루고 -698
711
+ ▁하는데 -699
712
+ ▁불안해 -700
713
+ 립트 -701
714
+ ▁스크 -702
715
+ ▁고치자 -703
716
+ ▁스크립트 -704
717
+ ▁타 -705
718
+ 이머 -706
719
+ 추고 -707
720
+ ▁15 -708
721
+ ▁맞추고 -709
722
+ ▁타이머 -710
723
+ ▁샌드위치가 -711
724
+ 구야 -712
725
+ ▁누구야 -713
726
+ ▁짜 -714
727
+ ▁천 -715
728
+ 천히 -716
729
+ ▁짜줘 -717
730
+ ▁불안할 -718
731
+ ▁천천히 -719
732
+ ▁아침이야 -720
733
+ ▁학습되는 -721
734
+ 지고 -722
735
+ ▁잡아줘 -723
736
+ ▁기억하고 -724
737
+ ▁만들어지고 -725
738
+ ▁성장하도록 -726
739
+ ▁왔구나 -727
740
+ ▁다시 -728
741
+ ▁이제 -729
742
+ 분만 -730
743
+ ▁먹을까 -731
744
+ 뜻한 -732
745
+ ▁당기면 -733
746
+ ▁따뜻한 -734
747
+ 해보자 -735
748
+ ▁시작해보자 -736
749
+ ▁방향은 -737
750
+ ▁테스트로 -738
751
+ 체로 -739
752
+ ▁대체로 -740
753
+ ▁얘기부터 -741
754
+ ▁김밥이나 -742
755
+ ▁집중이 -743
756
+ ▁프 -744
757
+ 로젝 -745
758
+ 로젝트 -746
759
+ ▁프로젝트 -747
760
+ ▁가볍게면 -748
761
+ ▁만들면 -749
762
+ 갈게 -750
763
+ ▁이거 -751
764
+ ▁이어갈게 -752
765
+ ▁하루 -753
766
+ ▁하루였어 -754
767
+ ▁잠 -755
768
+ 겠다 -756
769
+ 어도 -757
770
+ ▁잠깐 -758
771
+ ▁쉬어도 -759
772
+ ▁지쳤겠다 -760
773
+ ▁말만 -761
774
+ ▁필요한 -762
775
+ ▁모델로 -763
776
+ ▁싫 -764
777
+ ▁싫어 -765
778
+ ▁공부하기 -766
779
+ ▁점 -767
780
+ ▁점심 -768
781
+ ▁성장하는 -769
782
+ ▁아직 -770
783
+ ▁내줘 -771
784
+ ▁국밥이 -772
785
+ ▁잡으면 -773
786
+ ▁컨셉은 -774
787
+ ▁품질을 -775
788
+ ▁나랑 -776
789
+ ▁완벽 -777
790
+ ▁대화해줘 -778
791
+ ▁완벽하게 -779
792
+ ▁나누 -780
793
+ ▁그냥 -781
794
+ 렇게 -782
795
+ ▁핵심은 -783
796
+ ▁정체가 -784
797
+ ▁만들어줘 -785
798
+ ▁기억한다 -786
799
+ ▁힘들었다 -787
800
+ ▁지쳤어 -788
801
+ ▁요 -789
802
+ ▁길게 -790
803
+ ▁말하지 -791
804
+ ▁왔어 -792
805
+ ▁머 -793
806
+ 리가 -794
807
+ ▁머리가 -795
808
+ ▁복잡해 -796
809
+ ▁피곤해 -797
810
+ ▁코드는 -798
811
+ ▁테스트하는 -799
812
+ 다니 -800
813
+ ▁볼까 -801
814
+ ▁든다니 -802
815
+ ▁어디를 -803
816
+ ▁들면 -804
817
+ ▁예를 -805
818
+ ▁실험부터 -806
819
+ 해서 -807
820
+ ▁정리해서 -808
821
+ ▁들어줘 -809
822
+ 보는 -810
823
+ 해보는 -811
824
+ ▁간단해 -812
825
+ ▁단계는 -813
826
+ ▁대화해보는 -814
827
+ ▁왜 -815
828
+ ▁키울 -816
829
+ ▁덮밥이나 -817
830
+ ▁옆 -818
831
+ 줄게 -819
832
+ ▁옆에서 -820
833
+ ▁들어줄게 -821
834
+ ▁잡을 -822
835
+ ▁정하자 -823
836
+ ▁파일을 -824
837
+ ▁메시지나 -825
838
+ ▁품질부터 -826
839
+ 되면 -827
840
+ 장할 -828
841
+ ▁괜찮게 -829
842
+ ▁구조와 -830
843
+ ▁확장할 -831
844
+ ▁데이터가 -832
845
+ ▁안정되면 -833
846
+ ▁이상으로 -834
847
+ ▁만들어보자 -835
848
+ ▁해볼까 -836
849
+ 히면 -837
850
+ ▁버그면 -838
851
+ ▁좁히면 -839
852
+ ▁해결돼 -840
853
+ ▁로그부터 -841
854
+ ▁코딩 -842
855
+ 려면 -843
856
+ ▁보려면 -844
857
+ ▁복잡할 -845
858
+ ▁정해야 -846
859
+ ▁골 -847
860
+ 리를 -848
861
+ ▁골라 -849
862
+ ▁숨을 -850
863
+ ▁잡고 -851
864
+ ▁원리를 -852
865
+ ▁골라보자 -853
866
+ ▁맞춰 -854
867
+ ▁정도에 -855
868
+ ▁쪽이 -856
869
+ ▁것부터 -857
870
+ ▁이름은 -858
871
+ ▁기억하기 -859
872
+ 았어 -860
873
+ 하지만 -861
874
+ ▁괜찮았어 -862
875
+ ▁느낌으로 -863
876
+ ▁차분하지만 -864
877
+ ▁날 -865
878
+ 스로 -866
879
+ ▁날은 -867
880
+ 해줘도 -868
881
+ ▁스스로 -869
882
+ ▁인정해줘도 -870
883
+ ▁뿌 -871
884
+ 듯해 -872
885
+ 떻게 -873
886
+ ▁뿌듯해 -874
887
+ ▁어떻게 -875
888
+ ▁찾 -876
889
+ ▁충 -877
890
+ 분해 -878
891
+ ▁찾고 -879
892
+ ▁김밥이 -880
893
+ ▁정해도 -881
894
+ ▁충분해 -882
895
+ ▁흐름이�� -883
896
+ ▁채 -884
897
+ 개로 -885
898
+ 000 -886
899
+ ▁채팅 -887
900
+ ▁1000 -888
901
+ ▁검 -889
902
+ ▁별 -890
903
+ ▁검증 -891
904
+ ▁잡기 -892
905
+ ▁심심할 -893
906
+ ▁검증하자 -894
907
+ ▁방향이야 -895
908
+ ▁잡기보다 -896
909
+ ▁조금 -897
910
+ 가보자 -898
911
+ ▁기분을 -899
912
+ ▁흐름이네 -900
913
+ ▁이어가보자 -901
914
+ ▁기분이 -902
915
+ ▁다음엔 -903
916
+ ▁말해도 -904
917
+ ▁늘 -905
918
+ 시키 -906
919
+ ▁이해 -907
920
+ 시키는 -908
921
+ ▁나누면 -909
922
+ ▁늘리고 -910
923
+ ▁복잡한 -911
924
+ ▁쉬워져 -912
925
+ ▁하나야 -913
926
+ ▁데이터를 -914
927
+ ▁이해하기 -915
928
+ ▁안정시키는 -916
929
+ ▁빠 -917
930
+ ▁세 -918
931
+ ▁처 -919
932
+ 공한 -920
933
+ 르게 -921
934
+ 음엔 -922
935
+ ▁개가 -923
936
+ ▁일을 -924
937
+ ▁빠르게 -925
938
+ ▁성공한 -926
939
+ ▁아니라 -927
940
+ ▁처음엔 -928
941
+ ▁실험하고 -929
942
+ ▁의 -930
943
+ 라도 -931
944
+ ▁성취 -932
945
+ ▁의미 -933
946
+ ▁분명히 -934
947
+ ▁잘했다 -935
948
+ ▁정해줘 -936
949
+ ▁성취라도 -937
950
+ 두자 -938
951
+ 해두자 -939
952
+ ▁괜찮다 -940
953
+ ▁키우면 -941
954
+ ▁기억해두자 -942
955
+ ▁훨 -943
956
+ ▁하자 -944
957
+ ▁훨씬 -945
958
+ ▁시작을 -946
959
+ ▁막 -947
960
+ 는지 -948
961
+ ▁막혔 -949
962
+ ▁어디서 -950
963
+ ▁막혔는지 -951
964
+ ▁재현부터 -952
965
+ ▁뭘 -953
966
+ ▁하면 -954
967
+ ▁우 -955
968
+ 아서 -956
969
+ ▁우선 -957
970
+ ▁고치면 -958
971
+ ▁돌리고 -959
972
+ ▁모아서 -960
973
+ ▁이상한 -961
974
+ ▁테스트를 -962
975
+ 려보 -963
976
+ 해질 -964
977
+ 려보면 -965
978
+ ▁실제로 -966
979
+ ▁돌려보면 -967
980
+ ▁분명해질 -968
981
+ ▁남길게 -969
982
+ ▁나름 -970
983
+ ▁흐름으로 -971
984
+ ▁문제만 -972
985
+ ▁저장 -973
986
+ ▁나눠보자 -974
987
+ ▁망 -975
988
+ ▁문구는 -976
989
+ ▁이렇게 -977
990
+ ▁무 -978
991
+ 와줘 -979
992
+ 와줘서 -980
993
+ ▁도와줘서 -981
994
+ ▁괜찮네 -982
995
+ ▁요약 -983
996
+ ▁요약해줘 -984
997
+ 미있 -985
998
+ ▁재미있 -986
999
+ ▁네 -987
1000
+ ▁줄로 -988
1001
+ 호할 -989
1002
+ ▁선호할 -990
1003
+ ▁직접적인 -991
1004
+ 이라 -992
1005
+ ▁전 -993
1006
+ ▁전체 -994
1007
+ ▁에러를 -995
1008
+ 했어 -996
1009
+ ▁키워 -997
1010
+ ▁로컬 -998
1011
+ ▁휴 -999
1012
+ ▁휴식 -1000
1013
+ ▁가자 -1001
1014
+ ▁걸려 -1002
1015
+ ▁체 -1003
1016
+ 인트 -1004
1017
+ 크포 -1005
1018
+ ▁배치 -1006
1019
+ 인트를 -1007
1020
+ ▁체크포 -1008
1021
+ ▁확인하자 -1009
1022
+ ▁체크포인트를 -1010
1023
+ ▁망한 -1011
1024
+ ▁아니야 -1012
1025
+ ▁효 -1013
1026
+ ▁효율 -1014
1027
+ ▁하나씩 -1015
1028
+ 겁지 -1016
1029
+ 아가 -1017
1030
+ ▁않게 -1018
1031
+ ▁무겁지 -1019
1032
+ ▁크기 -1020
1033
+ 여줘 -1021
1034
+ ▁좁힐 -1022
1035
+ ▁보여줘 -1023
1036
+ ▁귀 -1024
1037
+ ▁컵 -1025
1038
+ 까지 -1026
1039
+ 보고 -1027
1040
+ 찮아 -1028
1041
+ ▁네가 -1029
1042
+ ▁요즘 -1030
1043
+ ▁조리 -1031
1044
+ ▁컵밥 -1032
1045
+ ▁귀찮아 -1033
1046
+ ▁얘기가 -1034
1047
+ ▁쪽으로 -1035
1048
+ ▁하나가 -1036
1049
+ ▁배고픈데 -1037
1050
+ ▁어디까지 -1038
1051
+ ▁재미있는 -1039
1052
+ ▁재미있어 -1040
1053
+ ▁키워보고 -1041
1054
+ ▁곁 -1042
1055
+ ▁슬 -1043
1056
+ 로건 -1044
1057
+ ▁곁에서 -1045
1058
+ ▁슬로건 -1046
1059
+ ▁정리할게 -1047
1060
+ ▁진 -1048
1061
+ ▁많아 -1049
1062
+ ▁진짜 -1050
1063
+ 이라는 -1051
1064
+ ▁모르는 -1052
1065
+ ▁아직은 -1053
1066
+ ▁중이라 -1054
1067
+ ▁뒤 -1055
1068
+ ▁고생 -1056
1069
+ ▁가능은 -1057
1070
+ ▁부분만 -1058
1071
+ ▁품질과 -1059
1072
+ ▁확인한 -1060
1073
+ ▁고생했어 -1061
1074
+ ▁안정성을 -1062
1075
+ ▁신 -1063
1076
+ ▁쓰 -1064
1077
+ ▁신경 -1065
1078
+ ▁아무 -1066
1079
+ ▁말부터 -1067
1080
+ ▁쓰이는 -1068
1081
+ ▁물 -1069
1082
+ ▁볼 -1070
1083
+ 시고 -1071
1084
+ ▁모금 -1072
1085
+ ▁마시고 -1073
1086
+ ▁정하면 -1074
1087
+ 볼게 -1075
1088
+ 해볼게 -1076
1089
+ ▁확인해볼게 -1077
1090
+ ▁멈 -1078
1091
+ 땠어 -1079
1092
+ 춰도 -1080
1093
+ ▁기다 -1081
1094
+ ▁된다고 -1082
1095
+ ▁멈춰도 -1083
1096
+ ▁어땠어 -1084
1097
+ ▁기다리고 -1085
1098
+ ▁정해보자 -1086
1099
+ ▁입 -1087
1100
+ ▁출 -1088
1101
+ 력과 -1089
1102
+ 실히 -1090
1103
+ ▁계획 -1091
1104
+ ▁잡는 -1092
1105
+ ▁출력 -1093
1106
+ ▁느낌이 -1094
1107
+ ▁문제를 -1095
1108
+ ▁예시를 -1096
1109
+ ▁이름이 -1097
1110
+ ▁입력과 -1098
1111
+ ▁하려면 -1099
1112
+ ▁확실히 -1100
1113
+ ▁계획보다 -1101
1114
+ ▁차분하고 -1102
1115
+ ▁휴식부터 -1103
1116
+ 25 -1104
1117
+ ▁5 -1105
1118
+ ▁과 -1106
1119
+ 목은 -1107
1120
+ ▁25 -1108
1121
+ ▁걸로 -1109
1122
+ ▁과목은 -1110
1123
+ ▁시작하자 -1111
1124
+ ▁휴식으로 -1112
1125
+ 껴질 -1113
1126
+ 실과 -1114
1127
+ ▁결론은 -1115
1128
+ ▁그렇게 -1116
1129
+ ▁느껴질 -1117
1130
+ ▁사실과 -1118
1131
+ ▁있지만 -1119
1132
+ ▁타이머를 -1120
1133
+ ▁끄 -1121
1134
+ ▁노 -1122
1135
+ ▁옵 -1123
1136
+ ▁움 -1124
1137
+ 간을 -1125
1138
+ 공간 -1126
1139
+ 래도 -1127
1140
+ 마이 -1128
1141
+ 쓰고 -1129
1142
+ 이기 -1130
1143
+ 트북 -1131
1144
+ ▁끄면 -1132
1145
+ ▁누적 -1133
1146
+ ▁덮어 -1134
1147
+ ▁부족 -1135
1148
+ ▁옵티 -1136
1149
+ ▁움직 -1137
1150
+ ▁줄일 -1138
1151
+ ▁편해 -1139
1152
+ 마이저 -1140
1153
+ 에서도 -1141
1154
+ ▁공간을 -1142
1155
+ ▁그래도 -1143
1156
+ ▁노트북 -1144
1157
+ ▁배치와 -1145
1158
+ ▁실험은 -1146
1159
+ ▁저장을 -1147
1160
+ ▁덮어쓰고 -1148
1161
+ ▁부족하면 -1149
1162
+ ▁움직이기 -1150
1163
+ ▁저장공간 -1151
1164
+ ▁학습으로 -1152
1165
+ ▁옵티마이저 -1153
1166
+ ▁노트북에서도 -1154
1167
+ ▁갈 -1155
1168
+ 면서 -1156
1169
+ 지막 -1157
1170
+ ▁가야 -1158
1171
+ ���대신 -1159
1172
+ ▁만든 -1160
1173
+ ▁바꾼 -1161
1174
+ 기면서 -1162
1175
+ ▁대화형 -1163
1176
+ ▁마지막 -1164
1177
+ ▁쉬면서 -1165
1178
+ ▁정확한 -1166
1179
+ ▁크기를 -1167
1180
+ ▁남기면서 -1168
1181
+ ▁메시지와 -1169
1182
+ ▁파일부터 -1170
1183
+ ▁마지막으로 -1171
1184
+ ▁비 -1172
1185
+ ▁새 -1173
1186
+ 교해 -1174
1187
+ 러운 -1175
1188
+ 성은 -1176
1189
+ 일까 -1177
1190
+ ▁새로 -1178
1191
+ ▁이론 -1179
1192
+ 교해야 -1180
1193
+ 적일까 -1181
1194
+ ▁단계만 -1182
1195
+ ▁효율을 -1183
1196
+ ▁가능성은 -1184
1197
+ ▁비교해야 -1185
1198
+ ▁실험으로 -1186
1199
+ ▁열어보자 -1187
1200
+ ▁자연스러운 -1188
1201
+ ▁효율적일까 -1189
1202
+ ▁건 -1190
1203
+ 인지 -1191
1204
+ 전히 -1192
1205
+ ▁너랑 -1193
1206
+ ▁로딩 -1194
1207
+ ▁무슨 -1195
1208
+ ▁복구 -1196
1209
+ ▁설정 -1197
1210
+ ▁할까 -1198
1211
+ ▁대화할 -1199
1212
+ ▁덮밥이 -1200
1213
+ ▁망했어 -1201
1214
+ ▁어디가 -1202
1215
+ ▁완전히 -1203
1216
+ ▁기분이야 -1204
1217
+ ▁문제인지 -1205
1218
+ ▁샌드위치나 -1206
1219
+ ▁번 -1207
1220
+ 라는 -1208
1221
+ ▁번째 -1209
1222
+ ▁돌아가 -1210
1223
+ ▁로그의 -1211
1224
+ ▁코드가 -1212
1225
+ ▁컨셉으로 -1213
1226
+ ▁' -1214
1227
+ ▁억 -1215
1228
+ 명해 -1216
1229
+ 지로 -1217
1230
+ 사용자 -1218
1231
+ ▁불편한 -1219
1232
+ ▁선명해 -1220
1233
+ ▁억지로 -1221
1234
+ 사용자와 -1222
1235
+ ▁상태구나 -1223
1236
+ ▁평 -1224
1237
+ 가를 -1225
1238
+ 가면 -1226
1239
+ 인튜 -1227
1240
+ ▁든든 -1228
1241
+ ▁자체 -1229
1242
+ 인튜닝 -1230
1243
+ 하게면 -1231
1244
+ ▁평가를 -1232
1245
+ ▁키워가면 -1233
1246
+ ▁파인튜닝 -1234
1247
+ ▁든든하게면 -1235
1248
+ ▁꺼 -1236
1249
+ ▁엉 -1237
1250
+ ▁꺼내 -1238
1251
+ ▁따로 -1239
1252
+ ▁엉킨 -1240
1253
+ ▁생각이 -1241
1254
+ ▁꺼내보자 -1242
1255
+ ▁쌓 -1243
1256
+ 아가는 -1244
1257
+ ▁쌓아가는 -1245
1258
+ 능을 -1246
1259
+ ▁기능을 -1247
1260
+ ▁나누고 -1248
1261
+ ▁만들자 -1249
1262
+ ▁상태부터 -1250
1263
+ ▁실행되는 -1251
1264
+ 다음 -1252
1265
+ 다음이 -1253
1266
+ ▁먼저고 -1254
1267
+ ▁크기야 -1255
1268
+ ▁품질이 -1256
1269
+ ▁그다음이 -1257
1270
+ 10 -1258
1271
+ 12 -1259
1272
+ 15 -1260
1273
+ 30 -1261
1274
+ SO -1262
1275
+ VY -1263
1276
+ ▁2 -1264
1277
+ ▁A -1265
1278
+ ▁길 -1266
1279
+ ▁주 -1267
1280
+ ▁필 -1268
1281
+ ▁했 -1269
1282
+ 가는 -1270
1283
+ 가능 -1271
1284
+ 가벼 -1272
1285
+ 가볍 -1273
1286
+ 가보 -1274
1287
+ 가야 -1275
1288
+ 가자 -1276
1289
+ 가장 -1277
1290
+ 가지 -1278
1291
+ 각을 -1279
1292
+ 각이 -1280
1293
+ 간단 -1281
1294
+ 감정 -1282
1295
+ 감하 -1283
1296
+ 같이 -1284
1297
+ 개가 -1285
1298
+ 개발 -1286
1299
+ 개하 -1287
1300
+ 개한 -1288
1301
+ 거야 -1289
1302
+ 걱정 -1290
1303
+ 걸려 -1291
1304
+ 걸로 -1292
1305
+ 검증 -1293
1306
+ 것도 -1294
1307
+ 것부 -1295
1308
+ 게면 -1296
1309
+ 결과 -1297
1310
+ 결돼 -1298
1311
+ 결론 -1299
1312
+ 같아 -1300
1313
+ 결을 -1301
1314
+ 곁에 -1302
1315
+ 계는 -1303
1316
+ 계만 -1304
1317
+ 계속 -1305
1318
+ 계적 -1306
1319
+ 계획 -1307
1320
+ 고르 -1308
1321
+ 고마 -1309
1322
+ 고민 -1310
1323
+ 고생 -1311
1324
+ 고치 -1312
1325
+ 곤함 -1313
1326
+ 곤해 -1314
1327
+ 골라 -1315
1328
+ 공감 -1316
1329
+ 공부 -1317
1330
+ 과목 -1318
1331
+ 괜찮 -1319
1332
+ 괜히 -1320
1333
+ 구는 -1321
1334
+ 구를 -1322
1335
+ 구조 -1323
1336
+ 구체 -1324
1337
+ 국밥 -1325
1338
+ 귀찮 -1326
1339
+ 그냥 -1327
1340
+ 그다 -1328
1341
+ 그래 -1329
1342
+ 그런 -1330
1343
+ 그럴 -1331
1344
+ 그럼 -1332
1345
+ 그렇 -1333
1346
+ 그면 -1334
1347
+ 그부 -1335
1348
+ 그와 -1336
1349
+ 그의 -1337
1350
+ 금은 -1338
1351
+ 급하 -1339
1352
+ 긍정 -1340
1353
+ 기가 -1341
1354
+ 기능 -1342
1355
+ 기다 -1343
1356
+ 기를 -1344
1357
+ 기보 -1345
1358
+ 기부 -1346
1359
+ 기분 -1347
1360
+ 기야 -1348
1361
+ 기억 -1349
1362
+ 기운 -1350
1363
+ 기준 -1351
1364
+ 기하 -1352
1365
+ 김밥 -1353
1366
+ 꺼내 -1354
1367
+ 끄면 -1355
1368
+ 낌으 -1356
1369
+ 낌이 -1357
1370
+ 나가 -1358
1371
+ 나누 -1359
1372
+ 나눈 -1360
1373
+ 나눠 -1361
1374
+ 나는 -1362
1375
+ 나랑 -1363
1376
+ 나로 -1364
1377
+ 나름 -1365
1378
+ 나만 -1366
1379
+ 나씩 -1367
1380
+ 나야 -1368
1381
+ 날은 -1369
1382
+ 남기 -1370
1383
+ 남길 -1371
1384
+ 남는 -1372
1385
+ 내가 -1373
1386
+ 내리 -1374
1387
+ 내보 -1375
1388
+ 내줘 -1376
1389
+ 너는 -1377
1390
+ 너랑 -1378
1391
+ 너무 -1379
1392
+ 너와 -1380
1393
+ 네가 -1381
1394
+ 노트 -1382
1395
+ 누고 -1383
1396
+ 누구 -1384
1397
+ 누면 -1385
1398
+ 누적 -1386
1399
+ 눠보 -1387
1400
+ 눠서 -1388
1401
+ 느껴 -1389
1402
+ 느끼 -1390
1403
+ 느낌 -1391
1404
+ 는데 -1392
1405
+ 늘리 -1393
1406
+ 늘은 -1394
1407
+ 능성 -1395
1408
+ 능은 -1396
1409
+ 능한 -1397
1410
+ 능해 -1398
1411
+ 니라 -1399
1412
+ 니야 -1400
1413
+ 다고 -1401
1414
+ 다리 -1402
1415
+ 다만 -1403
1416
+ 다시 -1404
1417
+ 단계 -1405
1418
+ 단이 -1406
1419
+ 단한 -1407
1420
+ 단해 -1408
1421
+ 단히 -1409
1422
+ 담을 -1410
1423
+ 답변 -1411
1424
+ 답한 -1412
1425
+ 답할 -1413
1426
+ 당기 -1414
1427
+ 당장 -1415
1428
+ 대신 -1416
1429
+ 대체 -1417
1430
+ 대화 -1418
1431
+ 덮밥 -1419
1432
+ 덮어 -1420
1433
+ 데이 -1421
1434
+ 델로 -1422
1435
+ 델이 -1423
1436
+ 도면 -1424
1437
+ 도에 -1425
1438
+ 도와 -1426
1439
+ 도울 -1427
1440
+ 도움 -1428
1441
+ 돌려 -1429
1442
+ 돌리 -1430
1443
+ 돌아 -1431
1444
+ 돕는 -1432
1445
+ 동을 -1433
1446
+ 동행 -1434
1447
+ 된다 -1435
1448
+ 드가 -1436
1449
+ 드는 -1437
1450
+ 든다 -1438
1451
+ 든든 -1439
1452
+ 든하 -1440
1453
+ 들고 -1441
1454
+ 들면 -1442
1455
+ 들어 -1443
1456
+ 들이 -1444
1457
+ 들자 -1445
1458
+ 디가 -1446
1459
+ 디까 -1447
1460
+ 디를 -1448
1461
+ 디서 -1449
1462
+ 따뜻 -1450
1463
+ 따로 -1451
1464
+ 때는 -1452
1465
+ 라보 -1453
1466
+ 래적 -1454
1467
+ 러를 -1455
1468
+ 로그 -1456
1469
+ 로딩 -1457
1470
+ 로컬 -1458
1471
+ 론부 -1459
1472
+ 론은 -1460
1473
+ 론을 -1461
1474
+ 루였 -1462
1475
+ 루틴 -1463
1476
+ 르는 -1464
1477
+ 르면 -1465
1478
+ 르자 -1466
1479
+ 름으 -1467
1480
+ 름은 -1468
1481
+ 름이 -1469
1482
+ 리하 -1470
1483
+ 리할 -1471
1484
+ 리해 -1472
1485
+ 마시 -1473
1486
+ 마음 -1474
1487
+ 마지 -1475
1488
+ 막으 -1476
1489
+ 막혔 -1477
1490
+ 만든 -1478
1491
+ 만들 -1479
1492
+ 많아 -1480
1493
+ 많이 -1481
1494
+ 말고 -1482
1495
+ 말만 -1483
1496
+ 말부 -1484
1497
+ 말에 -1485
1498
+ 말자 -1486
1499
+ 말하 -1487
1500
+ 말한 -1488
1501
+ 말할 -1489
1502
+ 말해 -1490
1503
+ 망한 -1491
1504
+ 망했 -1492
1505
+ 맞는 -1493
1506
+ 맞아 -1494
1507
+ 맞추 -1495
1508
+ 맞춰 -1496
1509
+ 머를 -1497
1510
+ 머리 -1498
1511
+ 먹고 -1499
1512
+ 먹을 -1500
1513
+ 먼저 -1501
1514
+ 멈춰 -1502
1515
+ 메시 -1503
1516
+ 명을 -1504
1517
+ 명히 -1505
1518
+ 모금 -1506
1519
+ 모델 -1507
1520
+ 모르 -1508
1521
+ 모아 -1509
1522
+ 목적 -1510
1523
+ 목표 -1511
1524
+ 무겁 -1512
1525
+ 무슨 -1513
1526
+ 문구 -1514
1527
+ 문으 -1515
1528
+ 문을 -1516
1529
+ 문제 -1517
1530
+ 묻고 -1518
1531
+ 뭐가 -1519
1532
+ 뭐부 -1520
1533
+ 뭐야 -1521
1534
+ 뭐였 -1522
1535
+ 뭐해 -1523
1536
+ 미래 -1524
1537
+ 미루 -1525
1538
+ 민하 -1526
1539
+ 바꾼 -1527
1540
+ 바로 -1528
1541
+ 반갑 -1529
1542
+ 반응 -1530
1543
+ 받아 -1531
1544
+ 발이 -1532
1545
+ 밥이 -1533
1546
+ 방법 -1534
1547
+ 방식 -1535
1548
+ 방향 -1536
1549
+ 배고 -1537
1550
+ 배우 -1538
1551
+ 배치 -1539
1552
+ 버거 -1540
1553
+ 버그 -1541
1554
+ 번째 -1542
1555
+ 벽하 -1543
1556
+ 변을 -1544
1557
+ 볍게 -1545
1558
+ 볍고 -1546
1559
+ 보려 -1547
1560
+ 보면 -1548
1561
+ 보여 -1549
1562
+ 보였 -1550
1563
+ 복구 -1551
1564
+ 복잡 -1552
1565
+ 부나 -1553
1566
+ 부담 -1554
1567
+ 부분 -1555
1568
+ 부족 -1556
1569
+ 부탁 -1557
1570
+ 부하 -1558
1571
+ 북에 -1559
1572
+ 분과 -1560
1573
+ 분명 -1561
1574
+ 분은 -1562
1575
+ 분을 -1563
1576
+ 분이 -1564
1577
+ 분하 -1565
1578
+ 불안 -1566
1579
+ 불편 -1567
1580
+ 불필 -1568
1581
+ 비교 -1569
1582
+ 비를 -1570
1583
+ 빠르 -1571
1584
+ 빨리 -1572
1585
+ 뿌듯 -1573
1586
+ 사를 -1574
1587
+ 사실 -1575
1588
+ 사용 -1576
1589
+ 사하 -1577
1590
+ 상으 -1578
1591
+ 상태 -1579
1592
+ 상한 -1580
1593
+ 상황 -1581
1594
+ 새로 -1582
1595
+ 샌드 -1583
1596
+ 생각 -1584
1597
+ 생했 -1585
1598
+ 서도 -1586
1599
+ 서를 -1587
1600
+ 선명 -1588
1601
+ 선택 -1589
1602
+ 선호 -1590
1603
+ 설명 -1591
1604
+ 설정 -1592
1605
+ 성공 -1593
1606
+ 성장 -1594
1607
+ 성취 -1595
1608
+ 셉으 -1596
1609
+ 셉은 -1597
1610
+ 소개 -1598
1611
+ 소빈 -1599
1612
+ 솔직 -1600
1613
+ 순서 -1601
1614
+ 숨부 -1602
1615
+ 숨을 -1603
1616
+ 쉬면 -1604
1617
+ 쉬어 -1605
1618
+ 쉬운 -1606
1619
+ 쉬워 -1607
1620
+ 쉽게 -1608
1621
+ 스러 -1609
1622
+ 스럽 -1610
1623
+ 스스 -1611
1624
+ 스크 -1612
1625
+ 슬로 -1613
1626
+ 습되 -1614
1627
+ 습으 -1615
1628
+ 습하 -1616
1629
+ 시로 -1617
1630
+ 시를 -1618
1631
+ 시작 -1619
1632
+ 식부 -1620
1633
+ 식사 -1621
1634
+ 식으 -1622
1635
+ 신경 -1623
1636
+ 실적 -1624
1637
+ 실제 -1625
1638
+ 실행 -1626
1639
+ 실험 -1627
1640
+ 싫어 -1628
1641
+ 심만 -1629
1642
+ 심부 -1630
1643
+ 심심 -1631
1644
+ 심으 -1632
1645
+ 심은 -1633
1646
+ 심적 -1634
1647
+ 심할 -1635
1648
+ 심해 -1636
1649
+ 싶어 -1637
1650
+ 싶으 -1638
1651
+ 쌓아 -1639
1652
+ 쓰이 -1640
1653
+ 아는 -1641
1654
+ 아니 -1642
1655
+ 아들 -1643
1656
+ 아무 -1644
1657
+ 아보 -1645
1658
+ 아이 -1646
1659
+ 아주 -1647
1660
+ 아줘 -1648
1661
+ 아직 -1649
1662
+ 아침 -1650
1663
+ 안녕 -1651
1664
+ 안을 -1652
1665
+ 안이 -1653
1666
+ 안정 -1654
1667
+ 안한 -1655
1668
+ 안할 -1656
1669
+ 안해 -1657
1670
+ 않게 -1658
1671
+ 않고 -1659
1672
+ 않아 -1660
1673
+ 알겠 -1661
1674
+ 알려 -1662
1675
+ 약해 -1663
1676
+ 얘기 -1664
1677
+ 어가 -1665
1678
+ 어간 -1666
1679
+ 어갈 -1667
1680
+ 어나 -1668
1681
+ 어둔 -1669
1682
+ 어디 -1670
1683
+ 어때 -1671
1684
+ 어땠 -1672
1685
+ 어떤 -1673
1686
+ 어떻 -1674
1687
+ 어려 -1675
1688
+ 어렵 -1676
1689
+ 어로 -1677
1690
+ 어를 -1678
1691
+ 어보 -1679
1692
+ 어쓰 -1680
1693
+ 어줄 -1681
1694
+ 어줘 -1682
1695
+ 어지 -1683
1696
+ 억에 -1684
1697
+ 억지 -1685
1698
+ 억하 -1686
1699
+ 억한 -1687
1700
+ 억해 -1688
1701
+ 업을 -1689
1702
+ 업이 -1690
1703
+ 없는 -1691
1704
+ 없어 -1692
1705
+ 없을 -1693
1706
+ 없이 -1694
1707
+ 었다 -1695
1708
+ 었던 -1696
1709
+ 엉킨 -1697
1710
+ 에러 -1698
1711
+ 역할 -1699
1712
+ 연다 -1700
1713
+ 열어 -1701
1714
+ 옆에 -1702
1715
+ 예를 -1703
1716
+ 예시 -1704
1717
+ 오늘 -1705
1718
+ 오래 -1706
1719
+ 오류 -1707
1720
+ 옵티 -1708
1721
+ 완벽 -1709
1722
+ 완전 -1710
1723
+ 왔구 -1711
1724
+ 왔어 -1712
1725
+ 요약 -1713
1726
+ 요즘 -1714
1727
+ 우고 -1715
1728
+ 우는 -1716
1729
+ 우면 -1717
1730
+ 우선 -1718
1731
+ 운이 -1719
1732
+ 움을 -1720
1733
+ 움직 -1721
1734
+ 워가 -1722
1735
+ 워보 -1723
1736
+ 워져 -1724
1737
+ 원리 -1725
1738
+ 원인 -1726
1739
+ 원한 -1727
1740
+ 웠나 -1728
1741
+ 위치 -1729
1742
+ 율을 -1730
1743
+ 율적 -1731
1744
+ 음식 -1732
1745
+ 음에 -1733
1746
+ 음은 -1734
1747
+ 음이 -1735
1748
+ 응을 -1736
1749
+ 응하 -1737
1750
+ 의미 -1738
1751
+ 이거 -1739
1752
+ 이네 -1740
1753
+ 이디 -1741
1754
+ 이렇 -1742
1755
+ 이론 -1743
1756
+ 이름 -1744
1757
+ 이상 -1745
1758
+ 이어 -1746
1759
+ 이저 -1747
1760
+ 이제 -1748
1761
+ 이해 -1749
1762
+ 인사 -1750
1763
+ 인정 -1751
1764
+ 인하 -1752
1765
+ 인한 -1753
1766
+ 인할 -1754
1767
+ 인해 -1755
1768
+ 일단 -1756
1769
+ 일부 -1757
1770
+ 일은 -1758
1771
+ 일을 -1759
1772
+ 입력 -1760
1773
+ 있게 -1761
1774
+ 있는 -1762
1775
+ 있다 -1763
1776
+ 있어 -1764
1777
+ 있었 -1765
1778
+ 있지 -1766
1779
+ 자는 -1767
1780
+ 자신 -1768
1781
+ 자연 -1769
1782
+ 자와 -1770
1783
+ 자의 -1771
1784
+ 자체 -1772
1785
+ 작게 -1773
1786
+ 작고 -1774
1787
+ 작업 -1775
1788
+ 작은 -1776
1789
+ 작을 -1777
1790
+ 작지 -1778
1791
+ 작하 -1779
1792
+ 작할 -1780
1793
+ 작해 -1781
1794
+ 잘한 -1782
1795
+ 잘했 -1783
1796
+ 잠깐 -1784
1797
+ 잡고 -1785
1798
+ 잡기 -1786
1799
+ 잡는 -1787
1800
+ 잡아 -1788
1801
+ 잡으 -1789
1802
+ 잡을 -1790
1803
+ 잡한 -1791
1804
+ 잡할 -1792
1805
+ 잡해 -1793
1806
+ 장공 -1794
1807
+ 장을 -1795
1808
+ 장하 -1796
1809
+ 재미 -1797
1810
+ 재현 -1798
1811
+ 저고 -1799
1812
+ 저기 -1800
1813
+ 저녁 -1801
1814
+ 저장 -1802
1815
+ 적게 -1803
1816
+ 적일 -1804
1817
+ 전체 -1805
1818
+ 점심 -1806
1819
+ 접적 -1807
1820
+ 정감 -1808
1821
+ 정도 -1809
1822
+ 정돼 -1810
1823
+ 정되 -1811
1824
+ 정리 -1812
1825
+ ��서 -1813
1826
+ 정성 -1814
1827
+ 정시 -1815
1828
+ 정의 -1816
1829
+ 정이 -1817
1830
+ 정적 -1818
1831
+ 정체 -1819
1832
+ 정하 -1820
1833
+ 정할 -1821
1834
+ 정해 -1822
1835
+ 정확 -1823
1836
+ 제로 -1824
1837
+ 제를 -1825
1838
+ 제만 -1826
1839
+ 제안 -1827
1840
+ 제인 -1828
1841
+ 제일 -1829
1842
+ 젝트 -1830
1843
+ 조금 -1831
1844
+ 조를 -1832
1845
+ 조리 -1833
1846
+ 조와 -1834
1847
+ 조할 -1835
1848
+ 조해 -1836
1849
+ 족하 -1837
1850
+ 좁히 -1838
1851
+ 좁힌 -1839
1852
+ 좁힐 -1840
1853
+ 좋다 -1841
1854
+ 좋아 -1842
1855
+ 좋은 -1843
1856
+ 좋을 -1844
1857
+ 준비 -1845
1858
+ 줄로 -1846
1859
+ 줄이 -1847
1860
+ 줄일 -1848
1861
+ 중심 -1849
1862
+ 중에 -1850
1863
+ 중이 -1851
1864
+ 줘도 -1852
1865
+ 줘서 -1853
1866
+ 증하 -1854
1867
+ 지금 -1855
1868
+ 지나 -1856
1869
+ 지와 -1857
1870
+ 지쳤 -1858
1871
+ 지친 -1859
1872
+ 직은 -1860
1873
+ 직이 -1861
1874
+ 직접 -1862
1875
+ 진짜 -1863
1876
+ 질과 -1864
1877
+ 질문 -1865
1878
+ 질부 -1866
1879
+ 질을 -1867
1880
+ 질이 -1868
1881
+ 집중 -1869
1882
+ 짜줘 -1870
1883
+ 짧게 -1871
1884
+ 짧고 -1872
1885
+ 짧은 -1873
1886
+ 쪽으 -1874
1887
+ 쪽이 -1875
1888
+ 차분 -1876
1889
+ 찮게 -1877
1890
+ 찮네 -1878
1891
+ 찮다 -1879
1892
+ 찮았 -1880
1893
+ 찮은 -1881
1894
+ 창작 -1882
1895
+ 찾고 -1883
1896
+ 채팅 -1884
1897
+ 처음 -1885
1898
+ 척하 -1886
1899
+ 천을 -1887
1900
+ 천천 -1888
1901
+ 천해 -1889
1902
+ 체가 -1890
1903
+ 체성 -1891
1904
+ 체적 -1892
1905
+ 체크 -1893
1906
+ 쳤겠 -1894
1907
+ 쳤어 -1895
1908
+ 초조 -1896
1909
+ 추천 -1897
1910
+ 출력 -1898
1911
+ 충분 -1899
1912
+ 취라 -1900
1913
+ 치가 -1901
1914
+ 치고 -1902
1915
+ 치나 -1903
1916
+ 치면 -1904
1917
+ 치와 -1905
1918
+ 치자 -1906
1919
+ 침이 -1907
1920
+ 커졌 -1908
1921
+ 컨셉 -1909
1922
+ 컵밥 -1910
1923
+ 코드 -1911
1924
+ 코딩 -1912
1925
+ 크게 -1913
1926
+ 크기 -1914
1927
+ 크립 -1915
1928
+ 키는 -1916
1929
+ 키우 -1917
1930
+ 키울 -1918
1931
+ 키워 -1919
1932
+ 타이 -1920
1933
+ 태구 -1921
1934
+ 태를 -1922
1935
+ 태부 -1923
1936
+ 택을 -1924
1937
+ 택지 -1925
1938
+ 택하 -1926
1939
+ 터가 -1927
1940
+ 터를 -1928
1941
+ 테스 -1929
1942
+ 통제 -1930
1943
+ 튜닝 -1931
1944
+ 트로 -1932
1945
+ 트를 -1933
1946
+ 트하 -1934
1947
+ 티마 -1935
1948
+ 파인 -1936
1949
+ 파일 -1937
1950
+ 판단 -1938
1951
+ 편하 -1939
1952
+ 편한 -1940
1953
+ 편해 -1941
1954
+ 평가 -1942
1955
+ 포인 -1943
1956
+ 표현 -1944
1957
+ 품질 -1945
1958
+ 프로 -1946
1959
+ 픈데 -1947
1960
+ 피곤 -1948
1961
+ 피로 -1949
1962
+ 필요 -1950
1963
+ 하나 -1951
1964
+ 하도 -1952
1965
+ 하려 -1953
1966
+ 하루 -1954
1967
+ 하이 -1955
1968
+ 학습 -1956
1969
+ 한계 -1957
1970
+ 한국 -1958
1971
+ 할까 -1959
1972
+ 함께 -1960
1973
+ 함이 -1961
1974
+ 해결 -1962
1975
+ 해도 -1963
1976
+ 해두 -1964
1977
+ 해보 -1965
1978
+ 해볼 -1966
1979
+ 해봐 -1967
1980
+ 해야 -1968
1981
+ 해하 -1969
1982
+ 핵심 -1970
1983
+ 행동 -1971
1984
+ 행되 -1972
1985
+ 향은 -1973
1986
+ 향을 -1974
1987
+ 향이 -1975
1988
+ 험부 -1976
1989
+ 험으 -1977
1990
+ 험은 -1978
1991
+ 험하 -1979
1992
+ 현부 -1980
1993
+ 현실 -1981
1994
+ 현을 -1982
1995
+ 현재 -1983
1996
+ 현했 -1984
1997
+ 혔는 -1985
1998
+ 화나 -1986
1999
+ 화는 -1987
2000
+ 화를 -1988
2001
+ 화부 -1989
2002
+ 화하 -1990
2003
+ 화한 -1991
2004
+ 화할 -1992
2005
+ 화해 -1993
2006
+ 화형 -1994
2007
+ 확실 -1995
2008
+ 확인 -1996
2009
+ 확장 -1997
2010
+ 확한 -1998
2011
+ 확히 -1999
2012
+ 황에 -2000
2013
+ 황을 -2001
2014
+ 획보 -2002
2015
+ 효율 -2003
2016
+ 훨씬 -2004
2017
+ 휴식 -2005
2018
+ 흐름 -2006
2019
+ 힘들 -2007
2020
+ 300 -2008
2021
+ OVY -2009
2022
+ SOV -2010
2023
+ ▁12 -2011
2024
+ ▁가벼 -2012
2025
+ ▁결과 -2013
2026
+ ▁고마 -2014
2027
+ ▁공간 -2015
2028
+ ▁과목 -2016
2029
+ ▁귀찮 -2017
2030
+ ▁그다 -2018
2031
+ ▁그래 -2019
2032
+ ▁그렇 -2020
2033
+ ▁기능 -2021
2034
+ ▁기준 -2022
2035
+ ▁나눈 -2023
2036
+ ▁남기 -2024
2037
+ ▁남길 -2025
2038
+ ▁내리 -2026
2039
+ ▁노트 -2027
2040
+ ▁누구 -2028
2041
+ ▁느껴 -2029
2042
+ ▁느끼 -2030
2043
+ ▁답할 -2031
2044
+ ▁당기 -2032
2045
+ ▁대체 -2033
2046
+ ▁데이 -2034
2047
+ ▁도와 -2035
2048
+ ▁도움 -2036
2049
+ ▁돌려 -2037
2050
+ ▁돌아 -2038
2051
+ ▁돕는 -2039
2052
+ ▁동행 -2040
2053
+ ▁든다 -2041
2054
+ ▁따뜻 -2042
2055
+ ▁마시 -2043
2056
+ ▁마지 -2044
2057
+ ▁말부 -2045
2058
+ ▁말하 -2046
2059
+ ▁말할 -2047
2060
+ ▁망했 -2048
2061
+ ▁맞추 -2049
2062
+ ▁머리 -2050
2063
+ ▁먹을 -2051
2064
+ ▁멈춰 -2052
2065
+ ▁메시 -2053
2066
+ ▁모아 -2054
2067
+ ▁목적 -2055
2068
+ ▁목표 -2056
2069
+ ▁무겁 -2057
2070
+ ▁뭐였 -2058
2071
+ ▁미루 -2059
2072
+ ▁반갑 -2060
2073
+ ▁방법 -2061
2074
+ ▁방식 -2062
2075
+ ▁배고 -2063
2076
+ ▁버거 -2064
2077
+ ▁보려 -2065
2078
+ ▁보여 -2066
2079
+ ▁보였 -2067
2080
+ ▁부탁 -2068
2081
+ ▁불필 -2069
2082
+ ▁비교 -2070
2083
+ ▁빠르 -2071
2084
+ ▁뿌듯 -2072
2085
+ ▁사실 -2073
2086
+ ▁사용 -2074
2087
+ ▁샌드 -2075
2088
+ ▁선명 -2076
2089
+ ▁선호 -2077
2090
+ ▁성공 -2078
2091
+ ▁소빈 -2079
2092
+ ▁솔직 -2080
2093
+ ▁쉬면 -2081
2094
+ ▁쉬어 -2082
2095
+ ▁스스 -2083
2096
+ ▁슬로 -2084
2097
+ ▁싶으 -2085
2098
+ ▁않아 -2086
2099
+ ▁알겠 -2087
2100
+ ▁알려 -2088
2101
+ ▁어땠 -2089
2102
+ ▁어떻 -2090
2103
+ ▁어려 -2091
2104
+ ▁어렵 -2092
2105
+ ▁억지 -2093
2106
+ ▁역할 -2094
2107
+ ▁완전 -2095
2108
+ ▁왔구 -2096
2109
+ ▁원리 -2097
2110
+ ▁원인 -2098
2111
+ ▁이렇 -2099
2112
+ ▁입력 -2100
2113
+ ▁있었 -2101
2114
+ ▁있지 -2102
2115
+ ▁자연 -2103
2116
+ ▁작지 -2104
2117
+ ▁잡으 -2105
2118
+ ▁재미 -2106
2119
+ ▁정서 -2107
2120
+ ▁정의 -2108
2121
+ ▁정하 -2109
2122
+ ▁좁히 -2110
2123
+ ▁좁힌 -2111
2124
+ ▁좋을 -2112
2125
+ ▁줄이 -2113
2126
+ ▁중이 -2114
2127
+ ▁처음 -2115
2128
+ ▁천천 -2116
2129
+ ▁체크 -2117
2130
+ ▁충분 -2118
2131
+ ▁커졌 -2119
2132
+ ▁타이 -2120
2133
+ ▁테스 -2121
2134
+ ▁파인 -2122
2135
+ ▁평가 -2123
2136
+ ▁프로 -2124
2137
+ ▁피로 -2125
2138
+ ▁한계 -2126
2139
+ ▁한국 -2127
2140
+ ▁해볼 -2128
2141
+ ▁확실 -2129
2142
+ ▁확장 -2130
2143
+ ▁��들 -2131
2144
+ 각이야 -2132
2145
+ 감정을 -2133
2146
+ 감하고 -2134
2147
+ 개하고 -2135
2148
+ 개한다 -2136
2149
+ 걱정을 -2137
2150
+ 것부터 -2138
2151
+ 곁에서 -2139
2152
+ 계적인 -2140
2153
+ 고픈데 -2141
2154
+ 그부터 -2142
2155
+ 급하게 -2143
2156
+ 기보다 -2144
2157
+ 기부터 -2145
2158
+ 기하자 -2146
2159
+ 낌으로 -2147
2160
+ 내보자 -2148
2161
+ 눠보자 -2149
2162
+ 늘리고 -2150
2163
+ 다리고 -2151
2164
+ 단이나 -2152
2165
+ 답한다 -2153
2166
+ 델이야 -2154
2167
+ 돌리고 -2155
2168
+ 든하게 -2156
2169
+ 들었다 -2157
2170
+ 들었던 -2158
2171
+ 디어나 -2159
2172
+ 디어를 -2160
2173
+ 라보자 -2161
2174
+ 래적인 -2162
2175
+ 론부터 -2163
2176
+ 루였어 -2164
2177
+ 름으로 -2165
2178
+ 름이야 -2166
2179
+ 리할게 -2167
2180
+ 막으로 -2168
2181
+ 말한다 -2169
2182
+ 명해줘 -2170
2183
+ 문으로 -2171
2184
+ 뭐부터 -2172
2185
+ 미있는 -2173
2186
+ 미있어 -2174
2187
+ 민하고 -2175
2188
+ 발이나 -2176
2189
+ 밥이나 -2177
2190
+ 벽하게 -2178
2191
+ 북에서 -2179
2192
+ 분이야 -2180
2193
+ 분하고 -2181
2194
+ 분하지 -2182
2195
+ 사하고 -2183
2196
+ 상으로 -2184
2197
+ 생했어 -2185
2198
+ 셉으로 -2186
2199
+ 숨부터 -2187
2200
+ 스트로 -2188
2201
+ 스트를 -2189
2202
+ 습하고 -2190
2203
+ 습하는 -2191
2204
+ 시지나 -2192
2205
+ 시지와 -2193
2206
+ 식부터 -2194
2207
+ 식으로 -2195
2208
+ 실적인 -2196
2209
+ 심부터 -2197
2210
+ 심으로 -2198
2211
+ 심적인 -2199
2212
+ 쌓아가 -2200
2213
+ 쓰이는 -2201
2214
+ 아보자 -2202
2215
+ 아주고 -2203
2216
+ 안이나 -2204
2217
+ 안한다 -2205
2218
+ 약해줘 -2206
2219
+ 어보자 -2207
2220
+ 어쓰고 -2208
2221
+ 억하고 -2209
2222
+ 억한다 -2210
2223
+ 업이나 -2211
2224
+ 연스러 -2212
2225
+ 연스럽 -2213
2226
+ 옆에서 -2214
2227
+ 용자는 -2215
2228
+ 용자와 -2216
2229
+ 용자의 -2217
2230
+ 원한다 -2218
2231
+ 응하고 -2219
2232
+ 이디어 -2220
2233
+ 이머를 -2221
2234
+ 이터가 -2222
2235
+ 이터를 -2223
2236
+ 인하고 -2224
2237
+ 일부터 -2225
2238
+ 잘했다 -2226
2239
+ 장하는 -2227
2240
+ 접적인 -2228
2241
+ 정적인 -2229
2242
+ 정하고 -2230
2243
+ 정해줘 -2231
2244
+ 족하면 -2232
2245
+ 중이야 -2233
2246
+ 증하자 -2234
2247
+ 직이기 -2235
2248
+ 질부터 -2236
2249
+ 쪽으로 -2237
2250
+ 척하지 -2238
2251
+ 천해줘 -2239
2252
+ 체적인 -2240
2253
+ 취라도 -2241
2254
+ 침이야 -2242
2255
+ 크립트 -2243
2256
+ 태부터 -2244
2257
+ 트하는 -2245
2258
+ 티마이 -2246
2259
+ 편하게 -2247
2260
+ 포인트 -2248
2261
+ 해하기 -2249
2262
+ 향이야 -2250
2263
+ 험부터 -2251
2264
+ 험으로 -2252
2265
+ 험하고 -2253
2266
+ 현부터 -2254
2267
+ 현했다 -2255
2268
+ 혔는지 -2256
2269
+ 화한다 -2257
2270
+ 획보다 -2258
2271
+ ▁100 -2259
2272
+ ▁SOV -2260
2273
+ ▁가능성 -2261
2274
+ ▁공부하 -2262
2275
+ ▁괜찮았 -2263
2276
+ ▁그다음 -2264
2277
+ ▁기억하 -2265
2278
+ ▁기억해 -2266
2279
+ ▁남기면 -2267
2280
+ ▁대화부 -2268
2281
+ ▁대화하 -2269
2282
+ ▁대화해 -2270
2283
+ ▁도와줘 -2271
2284
+ ▁돌려보 -2272
2285
+ ▁들어줄 -2273
2286
+ ▁문제인 -2274
2287
+ ▁받아들 -2275
2288
+ ▁버거웠 -2276
2289
+ ▁분명해 -2277
2290
+ ▁비교해 -2278
2291
+ ▁상태구 -2279
2292
+ ▁샌드위 -2280
2293
+ ▁선택지 -2281
2294
+ ▁선택하 -2282
2295
+ ▁시작하 -2283
2296
+ ▁시작해 -2284
2297
+ ▁실행되 -2285
2298
+ ▁쌓아가 -2286
2299
+ ▁안정감 -2287
2300
+ ▁안정되 -2288
2301
+ ▁안정성 -2289
2302
+ ▁안정시 -2290
2303
+ ▁어디까 -2291
2304
+ ▁어려움 -2292
2305
+ ▁열어둔 -2293
2306
+ ▁이어가 -2294
2307
+ ▁이어간 -2295
2308
+ ▁이어갈 -2296
2309
+ ▁저장공 -2297
2310
+ ▁정리하 -2298
2311
+ ▁정리해 -2299
2312
+ ▁정체성 -2300
2313
+ ▁지쳤겠 -2301
2314
+ ▁키워가 -2302
2315
+ ▁키워보 -2303
2316
+ ▁파인튜 -2304
2317
+ ▁프로젝 -2305
2318
+ ▁피곤함 -2306
2319
+ ▁학습되 -2307
2320
+ ▁학습으 -2308
2321
+ ▁한국어 -2309
2322
+ ▁확인하 -2310
2323
+ ▁확인해 -2311
2324
+ ▁효율적 -2312
2325
+ 드위치가 -2313
2326
+ 드위치나 -2314
2327
+ 스트하는 -2315
2328
+ 장하도록 -2316
2329
+ 지막으로 -2317
2330
+ 크포인트 -2318
2331
+ 트북에서 -2319
2332
+ ▁대화하면 -2320
2333
+ ▁든든하게 -2321
2334
+ ▁만들어지 -2322
2335
+ ▁안정시키 -2323
2336
+ ▁옵티마이 -2324
2337
+ ▁인정해줘 -2325
2338
+ ▁자연스러 -2326
2339
+ ▁자연스럽 -2327
2340
+ ▁차분하지 -2328
2341
+ 크포인트를 -2329
2342
+ 트북에서도 -2330
2343
+ ▁ -2331
2344
+ . -2332
2345
+ 다 -2333
2346
+ 한 -2334
2347
+ 는 -2335
2348
+ 고 -2336
2349
+ 이 -2337
2350
+ 자 -2338
2351
+ 어 -2339
2352
+ 게 -2340
2353
+ 하 -2341
2354
+ 로 -2342
2355
+ 을 -2343
2356
+ 짧 -2344
2357
+ 대 -2345
2358
+ 화 -2346
2359
+ N -2347
2360
+ O -2348
2361
+ S -2349
2362
+ V -2350
2363
+ Y -2351
2364
+ 너 -2352
2365
+ 스 -2353
2366
+ 연 -2354
2367
+ 아 -2355
2368
+ 럽 -2356
2369
+ 국 -2357
2370
+ 은 -2358
2371
+ 사 -2359
2372
+ 정 -2360
2373
+ 용 -2361
2374
+ 지 -2362
2375
+ , -2363
2376
+ 해 -2364
2377
+ 있 -2365
2378
+ 작 -2366
2379
+ 나 -2367
2380
+ 안 -2368
2381
+ 면 -2369
2382
+ 에 -2370
2383
+ 인 -2371
2384
+ 말 -2372
2385
+ 가 -2373
2386
+ 부 -2374
2387
+ 음 -2375
2388
+ 할 -2376
2389
+ 제 -2377
2390
+ 를 -2378
2391
+ 저 -2379
2392
+ 확 -2380
2393
+ 좋 -2381
2394
+ 야 -2382
2395
+ 수 -2383
2396
+ ? -2384
2397
+ 기 -2385
2398
+ 히 -2386
2399
+ 모 -2387
2400
+ 먼 -2388
2401
+ 행 -2389
2402
+ 적 -2390
2403
+ 보 -2391
2404
+ 동 -2392
2405
+ 도 -2393
2406
+ 의 -2394
2407
+ 응 -2395
2408
+ 만 -2396
2409
+ 금 -2397
2410
+ 단 -2398
2411
+ 르 -2399
2412
+ 줘 -2400
2413
+ 반 -2401
2414
+ 터 -2402
2415
+ 원 -2403
2416
+ 않 -2404
2417
+ 분 -2405
2418
+ 간 -2406
2419
+ 척 -2407
2420
+ 돼 -2408
2421
+ 오 -2409
2422
+ 답 -2410
2423
+ 들 -2411
2424
+ 으 -2412
2425
+ 방 -2413
2426
+ 심 -2414
2427
+ 운 -2415
2428
+ 그 -2416
2429
+ 뭐 -2417
2430
+ 늘 -2418
2431
+ 리 -2419
2432
+ 현 -2420
2433
+ 괜 -2421
2434
+ 시 -2422
2435
+ 습 -2423
2436
+ 학 -2424
2437
+ 했 -2425
2438
+ 서 -2426
2439
+ 찮 -2427
2440
+ 없 -2428
2441
+ 데 -2429
2442
+ 문 -2430
2443
+ 구 -2431
2444
+ 개 -2432
2445
+ 변 -2433
2446
+ 성 -2434
2447
+ 공 -2435
2448
+ 천 -2436
2449
+ 델 -2437
2450
+ 일 -2438
2451
+ 담 -2439
2452
+ 식 -2440
2453
+ 불 -2441
2454
+ 질 -2442
2455
+ 잡 -2443
2456
+ 표 -2444
2457
+ 감 -2445
2458
+ 과 -2446
2459
+ 추 -2447
2460
+ 계 -2448
2461
+ 쉬 -2449
2462
+ 바 -2450
2463
+ 0 -2451
2464
+ A -2452
2465
+ I -2453
2466
+ 거 -2454
2467
+ 중 -2455
2468
+ 와 -2456
2469
+ 실 -2457
2470
+ 려 -2458
2471
+ 같 -2459
2472
+ 1 -2460
2473
+ 움 -2461
2474
+ 능 -2462
2475
+ 마 -2463
2476
+ 결 -2464
2477
+ 름 -2465
2478
+ 체 -2466
2479
+ 장 -2467
2480
+ 디 -2468
2481
+ 향 -2469
2482
+ 핵 -2470
2483
+ 명 -2471
2484
+ 소 -2472
2485
+ 치 -2473
2486
+ 상 -2474
2487
+ 무 -2475
2488
+ 볍 -2476
2489
+ 밥 -2477
2490
+ 우 -2478
2491
+ 좀 -2479
2492
+ 맞 -2480
2493
+ 알 -2481
2494
+ 때 -2482
2495
+ 조 -2483
2496
+ 선 -2484
2497
+ 긍 -2485
2498
+ 것 -2486
2499
+ 트 -2487
2500
+ 직 -2488
2501
+ 벼 -2489
2502
+ 발 -2490
2503
+ 묻 -2491
2504
+ 걱 -2492
2505
+ 겠 -2493
2506
+ 주 -2494
2507
+ 내 -2495
2508
+ 억 -2496
2509
+ 설 -2497
2510
+ 배 -2498
2511
+ 된 -2499
2512
+ 까 -2500
2513
+ 느 -2501
2514
+ 요 -2502
2515
+ 줄 -2503
2516
+ 였 -2504
2517
+ 택 -2505
2518
+ 워 -2506
2519
+ 예 -2507
2520
+ 생 -2508
2521
+ 싶 -2509
2522
+ 탁 -2510
2523
+ 키 -2511
2524
+ 빨 -2512
2525
+ 재 -2513
2526
+ 빈 -2514
2527
+ 각 -2515
2528
+ 필 -2516
2529
+ 집 -2517
2530
+ 얘 -2518
2531
+ 론 -2519
2532
+ 었 -2520
2533
+ 크 -2521
2534
+ 피 -2522
2535
+ 드 -2523
2536
+ 봐 -2524
2537
+ 미 -2525
2538
+ 편 -2526
2539
+ 루 -2527
2540
+ 먹 -2528
2541
+ 목 -2529
2542
+ 렵 -2530
2543
+ 흐 -2531
2544
+ 라 -2532
2545
+ M -2533
2546
+ 잘 -2534
2547
+ 눠 -2535
2548
+ 준 -2536
2549
+ 버 -2537
2550
+ 황 -2538
2551
+ 땐 -2539
2552
+ 접 -2540
2553
+ 더 -2541
2554
+ 래 -2542
2555
+ 함 -2543
2556
+ 돕 -2544
2557
+ 업 -2545
2558
+ 녕 -2546
2559
+ 받 -2547
2560
+ 복 -2548
2561
+ 판 -2549
2562
+ 끼 -2550
2563
+ 테 -2551
2564
+ B -2552
2565
+ 쓸 -2553
2566
+ 울 -2554
2567
+ 록 -2555
2568
+ 샌 -2556
2569
+ 위 -2557
2570
+ 럼 -2558
2571
+ 좁 -2559
2572
+ 김 -2560
2573
+ 걸 -2561
2574
+ 당 -2562
2575
+ 품 -2563
2576
+ 누 -2564
2577
+ 셉 -2565
2578
+ 컨 -2566
2579
+ 볼 -2567
2580
+ 초 -2568
2581
+ 곤 -2569
2582
+ 숨 -2570
2583
+ 니 -2571
2584
+ 험 -2572
2585
+ 남 -2573
2586
+ 떤 -2574
2587
+ 2 -2575
2588
+ 되 -2576
2589
+ 순 -2577
2590
+ 힘 -2578
2591
+ 네 -2579
2592
+ 신 -2580
2593
+ 비 -2581
2594
+ 침 -2582
2595
+ 왔 -2583
2596
+ 쳤 -2584
2597
+ 머 -2585
2598
+ 류 -2586
2599
+ 코 -2587
2600
+ 첫 -2588
2601
+ 러 -2589
2602
+ 낌 -2590
2603
+ 속 -2591
2604
+ 돌 -2592
2605
+ 많 -2593
2606
+ 태 -2594
2607
+ 열 -2595
2608
+ 길 -2596
2609
+ 런 -2597
2610
+ 엔 -2598
2611
+ 쉽 -2599
2612
+ 5 -2600
2613
+ 덮 -2601
2614
+ 든 -2602
2615
+ 께 -2603
2616
+ 민 -2604
2617
+ 둔 -2605
2618
+ 눈 -2606
2619
+ 법 -2607
2620
+ 창 -2608
2621
+ 럴 -2609
2622
+ 큰 -2610
2623
+ 짜 -2611
2624
+ 3 -2612
2625
+ 파 -2613
2626
+ 틴 -2614
2627
+ 갑 -2615
2628
+ 솔 -2616
2629
+ 역 -2617
2630
+ 친 -2618
2631
+ 통 -2619
2632
+ 힌 -2620
2633
+ 갈 -2621
2634
+ 따 -2622
2635
+ 랑 -2623
2636
+ 완 -2624
2637
+ 던 -2625
2638
+ 꽤 -2626
2639
+ 웠 -2627
2640
+ 픈 -2628
2641
+ 졌 -2629
2642
+ 커 -2630
2643
+ 쪽 -2631
2644
+ 급 -2632
2645
+ 난 -2633
2646
+ 녁 -2634
2647
+ 춰 -2635
2648
+ 메 -2636
2649
+ 차 -2637
2650
+ 립 -2638
2651
+ 타 -2639
2652
+ 딩 -2640
2653
+ 뜻 -2641
2654
+ 젝 -2642
2655
+ 프 -2643
2656
+ 막 -2644
2657
+ 깐 -2645
2658
+ 잠 -2646
2659
+ 싫 -2647
2660
+ 점 -2648
2661
+ 벽 -2649
2662
+ 냥 -2650
2663
+ 렇 -2651
2664
+ 왜 -2652
2665
+ 옆 -2653
2666
+ 전 -2654
2667
+ 골 -2655
2668
+ 았 -2656
2669
+ 날 -2657
2670
+ 듯 -2658
2671
+ 떻 -2659
2672
+ 뿌 -2660
2673
+ 찾 -2661
2674
+ 충 -2662
2675
+ 채 -2663
2676
+ 팅 -2664
2677
+ 검 -2665
2678
+ 별 -2666
2679
+ 증 -2667
2680
+ 져 -2668
2681
+ 빠 -2669
2682
+ 세 -2670
2683
+ 처 -2671
2684
+ 취 -2672
2685
+ 두 -2673
2686
+ 씬 -2674
2687
+ 훨 -2675
2688
+ 혔 -2676
2689
+ 뭘 -2677
2690
+ 망 -2678
2691
+ 약 -2679
2692
+ 호 -2680
2693
+ 건 -2681
2694
+ 쓰 -2682
2695
+ 력 -2683
2696
+ 컬 -2684
2697
+ 휴 -2685
2698
+ 포 -2686
2699
+ 율 -2687
2700
+ 효 -2688
2701
+ 씩 -2689
2702
+ ' -2690
2703
+ 겁 -2691
2704
+ 여 -2692
2705
+ 힐 -2693
2706
+ 귀 -2694
2707
+ 즘 -2695
2708
+ 컵 -2696
2709
+ 곁 -2697
2710
+ 슬 -2698
2711
+ 진 -2699
2712
+ 뒤 -2700
2713
+ 경 -2701
2714
+ 물 -2702
2715
+ 땠 -2703
2716
+ 멈 -2704
2717
+ 입 -2705
2718
+ 출 -2706
2719
+ 획 -2707
2720
+ 껴 -2708
2721
+ 끄 -2709
2722
+ 노 -2710
2723
+ 북 -2711
2724
+ 옵 -2712
2725
+ 족 -2713
2726
+ 티 -2714
2727
+ 꾼 -2715
2728
+ 형 -2716
2729
+ 교 -2717
2730
+ 새 -2718
2731
+ 슨 -2719
2732
+ 번 -2720
2733
+ 째 -2721
2734
+ 닝 -2722
2735
+ 튜 -2723
2736
+ 평 -2724
2737
+ 꺼 -2725
2738
+ 엉 -2726
2739
+ 킨 -2727
2740
+ 쌓 -2728
sovyn_300m_last.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:859aac989b5fc3925c69436702ab04f9135701c02a61a2c1dc262357fc825135
3
+ size 605916225
src/sovyn/__init__.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ from .model import SovynConfig, SovynForCausalLM
2
+
3
+ __all__ = ["SovynConfig", "SovynForCausalLM"]
src/sovyn/data.py ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ from pathlib import Path
3
+
4
+ import torch
5
+ from torch.utils.data import Dataset
6
+
7
+ from .formatting import format_example
8
+
9
+
10
+ class DialogueDataset(Dataset):
11
+ def __init__(self, path: str, tokenizer, max_seq_len: int):
12
+ self.path = Path(path)
13
+ self.tokenizer = tokenizer
14
+ self.max_seq_len = max_seq_len
15
+ self.assistant_id = tokenizer.piece_to_id("<assistant>")
16
+ self.examples = []
17
+
18
+ with self.path.open("r", encoding="utf-8") as f:
19
+ for line in f:
20
+ line = line.strip()
21
+ if not line:
22
+ continue
23
+ self.examples.append(json.loads(line))
24
+
25
+ if not self.examples:
26
+ raise ValueError(f"No examples found in {self.path}")
27
+
28
+ def __len__(self):
29
+ return len(self.examples)
30
+
31
+ def __getitem__(self, index: int):
32
+ text = format_example(self.examples[index])
33
+ ids = self.tokenizer.encode(text, out_type=int)
34
+ ids = ids[: self.max_seq_len]
35
+ input_ids = torch.tensor(ids[:-1], dtype=torch.long)
36
+ labels = torch.tensor(ids[1:], dtype=torch.long)
37
+ if self.assistant_id in ids:
38
+ assistant_pos = ids.index(self.assistant_id)
39
+ labels[:assistant_pos] = -100
40
+ return input_ids, labels
41
+
42
+
43
+ def collate_batch(batch, pad_id: int):
44
+ max_len = max(x[0].numel() for x in batch)
45
+ input_ids = torch.full((len(batch), max_len), pad_id, dtype=torch.long)
46
+ labels = torch.full((len(batch), max_len), -100, dtype=torch.long)
47
+
48
+ for i, (x, y) in enumerate(batch):
49
+ input_ids[i, : x.numel()] = x
50
+ labels[i, : y.numel()] = y
51
+
52
+ return input_ids, labels
src/sovyn/formatting.py ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ SPECIAL_TOKENS = [
2
+ "<pad>",
3
+ "<bos>",
4
+ "<eos>",
5
+ "<system>",
6
+ "<user>",
7
+ "<state>",
8
+ "<plan>",
9
+ "<memory>",
10
+ "<reflection>",
11
+ "<assistant>",
12
+ ]
13
+
14
+
15
+ def format_example(example: dict) -> str:
16
+ system = example.get("system", "")
17
+ user = example.get("user", "")
18
+ state = example.get("state", "")
19
+ plan = example.get("plan", "")
20
+ memory = example.get("memory", "")
21
+ reflection = example.get("reflection", "")
22
+ assistant = example.get("assistant", "")
23
+
24
+ parts = [
25
+ "<system>",
26
+ system,
27
+ "<user>",
28
+ user,
29
+ "<state>",
30
+ state,
31
+ "<plan>",
32
+ plan,
33
+ ]
34
+ if memory:
35
+ parts.extend(["<memory>", memory])
36
+ if reflection:
37
+ parts.extend(["<reflection>", reflection])
38
+ parts.extend(["<assistant>", assistant, "<eos>"])
39
+ return "\n".join(parts)
40
+
41
+
42
+ def format_prompt(user: str, system: str | None = None) -> str:
43
+ if system is None:
44
+ system = (
45
+ "너는 SOVYN이다. 사용자의 말에 먼저 정확히 반응하고, 짧고 자연스럽게 한국어로 대화한다. "
46
+ "모르면 아는 척하지 않고, 다음에 할 수 있는 작은 행동을 제안한다."
47
+ )
48
+ state, plan = infer_state_plan(user)
49
+ return "\n".join(
50
+ [
51
+ "<system>",
52
+ system,
53
+ "<user>",
54
+ user,
55
+ "<state>",
56
+ state,
57
+ "<plan>",
58
+ plan,
59
+ "<assistant>",
60
+ ]
61
+ )
62
+
63
+
64
+ def infer_state_plan(user: str) -> tuple[str, str]:
65
+ text = user.strip().lower()
66
+ if any(word in text for word in ["피곤", "지쳤", "힘들", "기운", "복잡"]):
67
+ return (
68
+ "사용자는 피로와 부담을 표현했다.",
69
+ "먼저 공감하고, 부담 없는 질문을 한다.",
70
+ )
71
+ if any(word in text for word in ["짧", "간단", "핵심", "요약", "길게"]):
72
+ return (
73
+ "사용자는 짧고 핵심적인 답변을 원한다.",
74
+ "불필요한 설명을 줄이고 핵심부터 답한다.",
75
+ )
76
+ if any(word in text for word in ["누구", "정체", "sovyn", "ai야"]):
77
+ return (
78
+ "사용자는 SOVYN의 정체성을 묻고 있다.",
79
+ "SOVYN의 목적을 짧고 자신 있게 소개한다.",
80
+ )
81
+ if any(
82
+ word in text
83
+ for word in [
84
+ "1b",
85
+ "120m",
86
+ "300m",
87
+ "모델",
88
+ "학습",
89
+ "키울",
90
+ "저장공간",
91
+ "저장 공간",
92
+ "체크포인트",
93
+ "부족",
94
+ ]
95
+ ):
96
+ return (
97
+ "사용자는 AI 모델 개발 방향을 묻고 있다.",
98
+ "가능성을 말하고 단계적인 방향을 제안한다.",
99
+ )
100
+ if any(word in text for word in ["고마워", "좋다", "괜찮", "마음"]):
101
+ return (
102
+ "사용자는 긍정적인 반응을 보였다.",
103
+ "가볍게 받아들이고 다음 행동을 열어둔다.",
104
+ )
105
+ if any(word in text for word in ["뭐부터", "다음", "순서"]):
106
+ return (
107
+ "사용자는 다음 행동을 정하고 싶어 한다.",
108
+ "작고 실행 가능한 다음 단계를 제안한다.",
109
+ )
110
+ if any(word in text for word in ["코딩", "프로젝트", "스크립트", "버그", "에러"]):
111
+ return (
112
+ "사용자는 개발 작업을 하고 있다.",
113
+ "상황을 확인하고 바로 도울 준비를 한다.",
114
+ )
115
+ if any(word in text for word in ["먹", "점심", "저녁", "음식"]):
116
+ return (
117
+ "사용자는 식사 선택을 고민하고 있다.",
118
+ "가볍고 선택하기 쉬운 추천을 한다.",
119
+ )
120
+ if any(word in text for word in ["공부", "집중", "미루", "루틴"]):
121
+ return (
122
+ "사용자는 공부나 집중에 어려움을 느끼고 있다.",
123
+ "작게 시작할 수 있는 방법을 제안한다.",
124
+ )
125
+ if any(word in text for word in ["좋아", "괜찮았", "잘한", "뿌듯"]):
126
+ return (
127
+ "사용자는 긍정적인 감정을 표현했다.",
128
+ "긍정적인 감정을 인정하고 이어간다.",
129
+ )
130
+ if any(word in text for word in ["불안", "걱정", "불편", "초조"]):
131
+ return (
132
+ "사용자는 불안이나 걱정을 표현했다.",
133
+ "안정감을 주고 생각을 정리하도록 돕는다.",
134
+ )
135
+ if any(word in text for word in ["아이디어", "이름", "컨셉", "문구"]):
136
+ return (
137
+ "사용자는 창작 아이디어를 원한다.",
138
+ "짧고 바로 쓸 수 있는 아이디어를 제안한다.",
139
+ )
140
+ if any(word in text for word in ["맞아", "확인", "생각 어때", "방향"]):
141
+ return (
142
+ "사용자는 판단이나 확인을 원한다.",
143
+ "긍정할 부분과 확���할 부분을 짧게 나눈다.",
144
+ )
145
+ if any(word in text for word in ["대화", "심심", "할 말", "얘기"]):
146
+ return (
147
+ "사용자는 가벼운 대화를 원한다.",
148
+ "부담 없는 질문으로 대화를 연다.",
149
+ )
150
+ if any(word in text for word in ["설명", "왜", "쉽게", "예시"]):
151
+ return (
152
+ "사용자는 쉬운 설명을 원한다.",
153
+ "짧은 정의와 간단한 예시로 답한다.",
154
+ )
155
+ return (
156
+ "사용자는 가벼운 인사를 했다.",
157
+ "짧게 인사하고 자연스럽게 대화를 이어간다.",
158
+ )
src/sovyn/model.py ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dataclasses import dataclass
2
+
3
+ import torch
4
+ import torch.nn as nn
5
+ import torch.nn.functional as F
6
+
7
+
8
+ @dataclass
9
+ class SovynConfig:
10
+ name: str = "SOVYN-120M-Cortex"
11
+ vocab_size: int = 32000
12
+ max_seq_len: int = 1024
13
+ n_layers: int = 12
14
+ hidden_size: int = 768
15
+ n_heads: int = 12
16
+ n_kv_heads: int = 4
17
+ ffn_size: int = 2688
18
+ dropout: float = 0.0
19
+ rope_theta: float = 10000.0
20
+ tie_embeddings: bool = True
21
+
22
+
23
+ class RMSNorm(nn.Module):
24
+ def __init__(self, dim: int, eps: float = 1e-6):
25
+ super().__init__()
26
+ self.weight = nn.Parameter(torch.ones(dim))
27
+ self.eps = eps
28
+
29
+ def forward(self, x):
30
+ normed = x * torch.rsqrt(x.pow(2).mean(dim=-1, keepdim=True) + self.eps)
31
+ return normed * self.weight
32
+
33
+
34
+ def precompute_rope(head_dim: int, max_seq_len: int, theta: float):
35
+ inv_freq = 1.0 / (theta ** (torch.arange(0, head_dim, 2).float() / head_dim))
36
+ t = torch.arange(max_seq_len).float()
37
+ freqs = torch.outer(t, inv_freq)
38
+ return torch.cos(freqs), torch.sin(freqs)
39
+
40
+
41
+ def apply_rope(x, cos, sin):
42
+ cos = cos[None, :, None, :]
43
+ sin = sin[None, :, None, :]
44
+ x_even = x[..., 0::2]
45
+ x_odd = x[..., 1::2]
46
+ out = torch.empty_like(x)
47
+ out[..., 0::2] = x_even * cos - x_odd * sin
48
+ out[..., 1::2] = x_even * sin + x_odd * cos
49
+ return out
50
+
51
+
52
+ class Attention(nn.Module):
53
+ def __init__(self, cfg: SovynConfig):
54
+ super().__init__()
55
+ if cfg.n_heads % cfg.n_kv_heads != 0:
56
+ raise ValueError("n_heads must be divisible by n_kv_heads")
57
+ self.n_heads = cfg.n_heads
58
+ self.n_kv_heads = cfg.n_kv_heads
59
+ self.head_dim = cfg.hidden_size // cfg.n_heads
60
+ self.repeat = cfg.n_heads // cfg.n_kv_heads
61
+
62
+ kv_dim = cfg.n_kv_heads * self.head_dim
63
+ self.q_proj = nn.Linear(cfg.hidden_size, cfg.hidden_size, bias=False)
64
+ self.k_proj = nn.Linear(cfg.hidden_size, kv_dim, bias=False)
65
+ self.v_proj = nn.Linear(cfg.hidden_size, kv_dim, bias=False)
66
+ self.o_proj = nn.Linear(cfg.hidden_size, cfg.hidden_size, bias=False)
67
+ self.dropout = cfg.dropout
68
+
69
+ def forward(self, x, cos, sin):
70
+ bsz, seq_len, hidden = x.shape
71
+ q = self.q_proj(x).view(bsz, seq_len, self.n_heads, self.head_dim)
72
+ k = self.k_proj(x).view(bsz, seq_len, self.n_kv_heads, self.head_dim)
73
+ v = self.v_proj(x).view(bsz, seq_len, self.n_kv_heads, self.head_dim)
74
+
75
+ q = apply_rope(q, cos[:seq_len], sin[:seq_len])
76
+ k = apply_rope(k, cos[:seq_len], sin[:seq_len])
77
+
78
+ k = k.repeat_interleave(self.repeat, dim=2)
79
+ v = v.repeat_interleave(self.repeat, dim=2)
80
+
81
+ q = q.transpose(1, 2)
82
+ k = k.transpose(1, 2)
83
+ v = v.transpose(1, 2)
84
+
85
+ y = F.scaled_dot_product_attention(
86
+ q,
87
+ k,
88
+ v,
89
+ attn_mask=None,
90
+ dropout_p=self.dropout if self.training else 0.0,
91
+ is_causal=True,
92
+ )
93
+ y = y.transpose(1, 2).contiguous().view(bsz, seq_len, hidden)
94
+ return self.o_proj(y)
95
+
96
+
97
+ class SwiGLU(nn.Module):
98
+ def __init__(self, cfg: SovynConfig):
99
+ super().__init__()
100
+ self.gate = nn.Linear(cfg.hidden_size, cfg.ffn_size, bias=False)
101
+ self.up = nn.Linear(cfg.hidden_size, cfg.ffn_size, bias=False)
102
+ self.down = nn.Linear(cfg.ffn_size, cfg.hidden_size, bias=False)
103
+
104
+ def forward(self, x):
105
+ return self.down(F.silu(self.gate(x)) * self.up(x))
106
+
107
+
108
+ class Block(nn.Module):
109
+ def __init__(self, cfg: SovynConfig):
110
+ super().__init__()
111
+ self.attn_norm = RMSNorm(cfg.hidden_size)
112
+ self.attn = Attention(cfg)
113
+ self.ffn_norm = RMSNorm(cfg.hidden_size)
114
+ self.ffn = SwiGLU(cfg)
115
+
116
+ def forward(self, x, cos, sin):
117
+ x = x + self.attn(self.attn_norm(x), cos, sin)
118
+ x = x + self.ffn(self.ffn_norm(x))
119
+ return x
120
+
121
+
122
+ class SovynForCausalLM(nn.Module):
123
+ def __init__(self, cfg: SovynConfig):
124
+ super().__init__()
125
+ self.cfg = cfg
126
+ self.embed = nn.Embedding(cfg.vocab_size, cfg.hidden_size)
127
+ self.blocks = nn.ModuleList([Block(cfg) for _ in range(cfg.n_layers)])
128
+ self.norm = RMSNorm(cfg.hidden_size)
129
+ self.lm_head = nn.Linear(cfg.hidden_size, cfg.vocab_size, bias=False)
130
+ if cfg.tie_embeddings:
131
+ self.lm_head.weight = self.embed.weight
132
+
133
+ cos, sin = precompute_rope(
134
+ cfg.hidden_size // cfg.n_heads,
135
+ cfg.max_seq_len,
136
+ cfg.rope_theta,
137
+ )
138
+ self.register_buffer("rope_cos", cos, persistent=False)
139
+ self.register_buffer("rope_sin", sin, persistent=False)
140
+ self.apply(self._init_weights)
141
+
142
+ def _init_weights(self, module):
143
+ if isinstance(module, nn.Linear):
144
+ nn.init.normal_(module.weight, mean=0.0, std=0.02)
145
+ elif isinstance(module, nn.Embedding):
146
+ nn.init.normal_(module.weight, mean=0.0, std=0.02)
147
+
148
+ def forward(self, input_ids, labels=None):
149
+ if input_ids.size(1) > self.cfg.max_seq_len:
150
+ raise ValueError("Sequence length exceeds max_seq_len")
151
+
152
+ x = self.embed(input_ids)
153
+ for block in self.blocks:
154
+ x = block(x, self.rope_cos, self.rope_sin)
155
+ x = self.norm(x)
156
+ logits = self.lm_head(x)
157
+
158
+ loss = None
159
+ if labels is not None:
160
+ loss = F.cross_entropy(
161
+ logits.view(-1, logits.size(-1)),
162
+ labels.view(-1),
163
+ ignore_index=-100,
164
+ )
165
+ return {"loss": loss, "logits": logits}
166
+
167
+ @torch.no_grad()
168
+ def generate(
169
+ self,
170
+ input_ids,
171
+ max_new_tokens=96,
172
+ temperature=0.8,
173
+ top_k=50,
174
+ eos_id=None,
175
+ stop_ids=None,
176
+ suppress_ids=None,
177
+ ):
178
+ self.eval()
179
+ stop_ids = set(stop_ids or [])
180
+ suppress_ids = list(suppress_ids or [])
181
+ for _ in range(max_new_tokens):
182
+ x = input_ids[:, -self.cfg.max_seq_len :]
183
+ logits = self(x)["logits"][:, -1, :]
184
+ if suppress_ids:
185
+ logits[:, suppress_ids] = -float("inf")
186
+ if temperature <= 0:
187
+ next_id = torch.argmax(logits, dim=-1, keepdim=True)
188
+ else:
189
+ logits = logits / temperature
190
+ if top_k > 0:
191
+ values, _ = torch.topk(logits, min(top_k, logits.size(-1)))
192
+ logits[logits < values[:, [-1]]] = -float("inf")
193
+ probs = F.softmax(logits, dim=-1)
194
+ next_id = torch.multinomial(probs, num_samples=1)
195
+ input_ids = torch.cat([input_ids, next_id], dim=1)
196
+ token_id = next_id.item()
197
+ if eos_id is not None and token_id == eos_id:
198
+ break
199
+ if token_id in stop_ids:
200
+ break
201
+ return input_ids
upload.ps1 ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ $ErrorActionPreference = "Stop"
2
+
3
+ $Root = Split-Path -Parent $MyInvocation.MyCommand.Path
4
+ Set-Location $Root
5
+
6
+ ..\..\.venv\Scripts\hf.exe upload SOVYN/sovyn-300m-cortex . . --repo-type model