Spaces:
Running
on
Zero
Running
on
Zero
Update app.py
Browse files
app.py
CHANGED
@@ -12,9 +12,17 @@ import gradio as gr
|
|
12 |
import spaces
|
13 |
import torch
|
14 |
from loguru import logger
|
15 |
-
from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
|
16 |
from peft import PeftModel
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
# CSV/TXT ๋ถ์
|
19 |
import pandas as pd
|
20 |
# PDF ํ
์คํธ ์ถ์ถ
|
@@ -56,9 +64,19 @@ def extract_keywords(text: str, top_k: int = 5) -> str:
|
|
56 |
2) ๊ณต๋ฐฑ ๊ธฐ์ค ํ ํฐ ๋ถ๋ฆฌ
|
57 |
3) ์ต๋ top_k๊ฐ๋ง
|
58 |
"""
|
59 |
-
|
|
|
60 |
tokens = text.split()
|
61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
return " ".join(key_tokens)
|
63 |
|
64 |
##############################################################################
|
@@ -128,12 +146,15 @@ def do_web_search(query: str) -> str:
|
|
128 |
)
|
129 |
|
130 |
instructions = """
|
131 |
-
# ์น ๊ฒ์ ๊ฒฐ๊ณผ
|
|
|
132 |
์๋๋ ๊ฒ์ ๊ฒฐ๊ณผ์
๋๋ค. ์ง๋ฌธ์ ๋ต๋ณํ ๋ ์ด ์ ๋ณด๋ฅผ ํ์ฉํ์ธ์:
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
|
|
|
|
137 |
"""
|
138 |
|
139 |
search_results = instructions + "\n".join(summary_lines)
|
@@ -158,24 +179,52 @@ def load_model(model_name="VIDraft/Gemma-3-R1984-1B", adapter_name="openfree/Gem
|
|
158 |
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
159 |
logger.info(f"Using device: {device}")
|
160 |
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
|
176 |
# ํ ํฌ๋์ด์ ๋ก๋ (๋ฒ ์ด์ค ๋ชจ๋ธ๊ณผ ๋์ผํ ํ ํฌ๏ฟฝ๏ฟฝ์ด์ ์ฌ์ฉ)
|
177 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
178 |
tokenizer.pad_token = tokenizer.eos_token
|
|
|
|
|
|
|
179 |
|
180 |
# PEFT ์ด๋ํฐ ๋ก๋ ๋ฐ ๋ฒ ์ด์ค ๋ชจ๋ธ์ ๋ณํฉ
|
181 |
try:
|
@@ -186,6 +235,10 @@ def load_model(model_name="VIDraft/Gemma-3-R1984-1B", adapter_name="openfree/Gem
|
|
186 |
logger.warning("์ด๋ํฐ ๋ก๋ฉ์ ์คํจํ์ต๋๋ค. ๋ฒ ์ด์ค ๋ชจ๋ธ๋ก ์งํํฉ๋๋ค.")
|
187 |
|
188 |
model.eval() # ์ถ๋ก ๋ชจ๋๋ก ์ค์
|
|
|
|
|
|
|
|
|
189 |
|
190 |
logger.info("๋ชจ๋ธ ๋ฐ ํ ํฌ๋์ด์ ๋ก๋ฉ ์๋ฃ")
|
191 |
return model, tokenizer
|
@@ -351,7 +404,12 @@ def run(
|
|
351 |
logger.info(f"[Auto WebSearch Keyword] {ws_query!r}")
|
352 |
ws_result = do_web_search(ws_query)
|
353 |
full_prompt += f"[Web Search Results]\n{ws_result}\n\n"
|
354 |
-
|
|
|
|
|
|
|
|
|
|
|
355 |
|
356 |
# ๋ํ ํ์คํ ๋ฆฌ
|
357 |
if history:
|
@@ -360,7 +418,20 @@ def run(
|
|
360 |
|
361 |
# ํ์ฌ ์ฌ์ฉ์ ๋ฉ์์ง
|
362 |
user_content = process_new_user_message(message)
|
363 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
364 |
|
365 |
# ํ ํฐํ
|
366 |
inputs = tokenizer(
|
@@ -382,8 +453,10 @@ def run(
|
|
382 |
inputs,
|
383 |
streamer=streamer,
|
384 |
max_new_tokens=max_new_tokens,
|
385 |
-
temperature=0.7
|
386 |
-
top_p=0.9
|
|
|
|
|
387 |
do_sample=True,
|
388 |
)
|
389 |
|
@@ -393,8 +466,15 @@ def run(
|
|
393 |
|
394 |
# ์คํธ๋ฆฌ๋ฐ ์ถ๋ ฅ
|
395 |
output = ""
|
|
|
396 |
for new_text in streamer:
|
397 |
output += new_text
|
|
|
|
|
|
|
|
|
|
|
|
|
398 |
yield output
|
399 |
|
400 |
except Exception as e:
|
@@ -415,17 +495,17 @@ def run(
|
|
415 |
examples = [
|
416 |
[
|
417 |
{
|
418 |
-
"text": "
|
419 |
-
"files": [
|
420 |
-
"assets/additional-examples/before.pdf",
|
421 |
-
"assets/additional-examples/after.pdf",
|
422 |
-
],
|
423 |
}
|
424 |
],
|
425 |
[
|
426 |
{
|
427 |
-
"text": "
|
428 |
-
"files": [
|
|
|
|
|
|
|
429 |
}
|
430 |
],
|
431 |
[
|
@@ -436,13 +516,13 @@ examples = [
|
|
436 |
],
|
437 |
[
|
438 |
{
|
439 |
-
"text": "
|
440 |
"files": ["assets/additional-examples/data.csv"],
|
441 |
}
|
442 |
],
|
443 |
[
|
444 |
{
|
445 |
-
"text": "
|
446 |
"files": ["assets/additional-examples/document.txt"],
|
447 |
}
|
448 |
],
|
@@ -486,37 +566,44 @@ button:hover, .btn:hover {
|
|
486 |
"""
|
487 |
|
488 |
title_html = """
|
489 |
-
<h1 align="center" style="margin-bottom: 0.2em; font-size: 1.6em;"> ๐ค Gemma3-R1984-1B (
|
490 |
<p align="center" style="font-size:1.1em; color:#555;">
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
</p>
|
496 |
"""
|
497 |
|
498 |
with gr.Blocks(css=css, title="Gemma3-R1984-1B") as demo:
|
499 |
gr.Markdown(title_html)
|
500 |
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
520 |
|
521 |
web_search_text = gr.Textbox(
|
522 |
lines=1,
|
@@ -552,7 +639,7 @@ with gr.Blocks(css=css, title="Gemma3-R1984-1B") as demo:
|
|
552 |
|
553 |
with gr.Row(elem_id="examples_row"):
|
554 |
with gr.Column(scale=12, elem_id="examples_container"):
|
555 |
-
gr.Markdown("###
|
556 |
|
557 |
if __name__ == "__main__":
|
558 |
demo.launch()
|
|
|
12 |
import spaces
|
13 |
import torch
|
14 |
from loguru import logger
|
15 |
+
from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
|
16 |
from peft import PeftModel
|
17 |
|
18 |
+
# BitsAndBytesConfig๋ ์กฐ๊ฑด๋ถ๋ก import
|
19 |
+
try:
|
20 |
+
from transformers import BitsAndBytesConfig
|
21 |
+
BITSANDBYTES_AVAILABLE = True
|
22 |
+
except ImportError:
|
23 |
+
logger.warning("BitsAndBytesConfig๋ฅผ importํ ์ ์์ต๋๋ค. ์์ํ ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋ฉ๋๋ค.")
|
24 |
+
BITSANDBYTES_AVAILABLE = False
|
25 |
+
|
26 |
# CSV/TXT ๋ถ์
|
27 |
import pandas as pd
|
28 |
# PDF ํ
์คํธ ์ถ์ถ
|
|
|
64 |
2) ๊ณต๋ฐฑ ๊ธฐ์ค ํ ํฐ ๋ถ๋ฆฌ
|
65 |
3) ์ต๋ top_k๊ฐ๋ง
|
66 |
"""
|
67 |
+
# ํน์๋ฌธ์ ์ ๊ฑฐํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ฅ ๋ถํธ๋ ์ ์ง
|
68 |
+
text = re.sub(r"[^a-zA-Z0-9๊ฐ-ํฃ\s\.\,\?\!]", "", text)
|
69 |
tokens = text.split()
|
70 |
+
|
71 |
+
# ์ค๋ณต ์ ๊ฑฐํ๋ฉด์ ์์ ์ ์ง
|
72 |
+
seen = set()
|
73 |
+
unique_tokens = []
|
74 |
+
for token in tokens:
|
75 |
+
if token not in seen and len(token) > 1: # 1๊ธ์ ๋จ์ด ์ ์ธ
|
76 |
+
seen.add(token)
|
77 |
+
unique_tokens.append(token)
|
78 |
+
|
79 |
+
key_tokens = unique_tokens[:top_k]
|
80 |
return " ".join(key_tokens)
|
81 |
|
82 |
##############################################################################
|
|
|
146 |
)
|
147 |
|
148 |
instructions = """
|
149 |
+
# ์น ๊ฒ์ ๊ฒฐ๊ณผ / Web Search Results
|
150 |
+
|
151 |
์๋๋ ๊ฒ์ ๊ฒฐ๊ณผ์
๋๋ค. ์ง๋ฌธ์ ๋ต๋ณํ ๋ ์ด ์ ๋ณด๋ฅผ ํ์ฉํ์ธ์:
|
152 |
+
Below are the search results. Use this information when answering the question:
|
153 |
+
|
154 |
+
1. ๊ฐ ๊ฒฐ๊ณผ์ ์ ๋ชฉ, ๋ด์ฉ, ์ถ์ฒ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ธ์ / Reference the title, content, and source links
|
155 |
+
2. ๋ต๋ณ์ ๊ด๋ จ ์ ๋ณด์ ์ถ์ฒ๋ฅผ ๋ช
์์ ์ผ๋ก ์ธ์ฉํ์ธ์ / Explicitly cite relevant sources
|
156 |
+
3. ์๋ต์ ์ค์ ์ถ์ฒ ๋งํฌ๋ฅผ ํฌํจํ์ธ์ / Include actual source links in response
|
157 |
+
4. ์ฌ๋ฌ ์ถ์ฒ์ ์ ๋ณด๋ฅผ ์ข
ํฉํ์ฌ ๋ต๋ณํ์ธ์ / Synthesize information from multiple sources
|
158 |
"""
|
159 |
|
160 |
search_results = instructions + "\n".join(summary_lines)
|
|
|
179 |
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
180 |
logger.info(f"Using device: {device}")
|
181 |
|
182 |
+
# ์์ํ ์ค์ ์ ์๋ํ๋, ์คํจํ๋ฉด ์ผ๋ฐ ๋ก๋
|
183 |
+
if BITSANDBYTES_AVAILABLE:
|
184 |
+
try:
|
185 |
+
# bitsandbytes๊ฐ ์ค์น๋์ด ์๋์ง ์ถ๊ฐ ํ์ธ
|
186 |
+
import bitsandbytes
|
187 |
+
bnb_config = BitsAndBytesConfig(
|
188 |
+
load_in_4bit=True,
|
189 |
+
bnb_4bit_use_double_quant=True,
|
190 |
+
bnb_4bit_quant_type="nf4",
|
191 |
+
bnb_4bit_compute_dtype=torch.bfloat16,
|
192 |
+
)
|
193 |
+
|
194 |
+
# ๋ฒ ์ด์ค ๋ชจ๋ธ ๋ก๋ (์์ํ ์ ์ฉ)
|
195 |
+
model = AutoModelForCausalLM.from_pretrained(
|
196 |
+
model_name,
|
197 |
+
quantization_config=bnb_config,
|
198 |
+
device_map="auto",
|
199 |
+
trust_remote_code=False,
|
200 |
+
)
|
201 |
+
logger.info("4-bit ์์ํ๋ก ๋ชจ๋ธ ๋ก๋ ์๋ฃ")
|
202 |
+
|
203 |
+
except ImportError:
|
204 |
+
logger.warning("bitsandbytes๊ฐ ์ค์น๋์ง ์์์ต๋๋ค. ์์ํ ์์ด ๋ชจ๋ธ์ ๋ก๋ํฉ๋๋ค.")
|
205 |
+
# ๋ฒ ์ด์ค ๋ชจ๋ธ ๋ก๋ (์์ํ ์์ด)
|
206 |
+
model = AutoModelForCausalLM.from_pretrained(
|
207 |
+
model_name,
|
208 |
+
torch_dtype=torch.float16, # GPU ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ์ํด float16 ์ฌ์ฉ
|
209 |
+
device_map="auto",
|
210 |
+
trust_remote_code=False,
|
211 |
+
)
|
212 |
+
else:
|
213 |
+
logger.info("BitsAndBytesConfig๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ผ๋ฐ ๋ชจ๋๋ก ๋ชจ๋ธ์ ๋ก๋ํฉ๋๋ค.")
|
214 |
+
# ๋ฒ ์ด์ค ๋ชจ๋ธ ๋ก๋ (์์ํ ์์ด)
|
215 |
+
model = AutoModelForCausalLM.from_pretrained(
|
216 |
+
model_name,
|
217 |
+
torch_dtype=torch.float16, # GPU ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ์ํด float16 ์ฌ์ฉ
|
218 |
+
device_map="auto",
|
219 |
+
trust_remote_code=False,
|
220 |
+
)
|
221 |
|
222 |
# ํ ํฌ๋์ด์ ๋ก๋ (๋ฒ ์ด์ค ๋ชจ๋ธ๊ณผ ๋์ผํ ํ ํฌ๏ฟฝ๏ฟฝ์ด์ ์ฌ์ฉ)
|
223 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
224 |
tokenizer.pad_token = tokenizer.eos_token
|
225 |
+
|
226 |
+
# ํ๊ธ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ถ๊ฐ ์ค์
|
227 |
+
tokenizer.model_max_length = MAX_INPUT_LENGTH
|
228 |
|
229 |
# PEFT ์ด๋ํฐ ๋ก๋ ๋ฐ ๋ฒ ์ด์ค ๋ชจ๋ธ์ ๋ณํฉ
|
230 |
try:
|
|
|
235 |
logger.warning("์ด๋ํฐ ๋ก๋ฉ์ ์คํจํ์ต๋๋ค. ๋ฒ ์ด์ค ๋ชจ๋ธ๋ก ์งํํฉ๋๋ค.")
|
236 |
|
237 |
model.eval() # ์ถ๋ก ๋ชจ๋๋ก ์ค์
|
238 |
+
|
239 |
+
# ๋ชจ๋ธ ์ค์ ๋ก๊น
|
240 |
+
logger.info(f"๋ชจ๋ธ ์ค์ - device: {device}, dtype: {model.dtype}")
|
241 |
+
logger.info(f"ํ ํฌ๋์ด์ ์ค์ - vocab_size: {tokenizer.vocab_size}, max_length: {tokenizer.model_max_length}")
|
242 |
|
243 |
logger.info("๋ชจ๋ธ ๋ฐ ํ ํฌ๋์ด์ ๋ก๋ฉ ์๋ฃ")
|
244 |
return model, tokenizer
|
|
|
404 |
logger.info(f"[Auto WebSearch Keyword] {ws_query!r}")
|
405 |
ws_result = do_web_search(ws_query)
|
406 |
full_prompt += f"[Web Search Results]\n{ws_result}\n\n"
|
407 |
+
|
408 |
+
# ์ธ์ด์ ๋ฐ๋ฅธ ์ง์์ฌํญ
|
409 |
+
if any(ord('๊ฐ') <= ord(char) <= ord('ํฃ') for char in user_text):
|
410 |
+
full_prompt += "[์ค์: ์ ๊ฒ์๊ฒฐ๊ณผ์ ์ถ์ฒ๋ฅผ ํ๊ธ๋ก ์ธ์ฉํ์ฌ ๋ต๋ณํด ์ฃผ์ธ์.]\n\n"
|
411 |
+
else:
|
412 |
+
full_prompt += "[Important: Please cite the sources from the search results above.]\n\n"
|
413 |
|
414 |
# ๋ํ ํ์คํ ๋ฆฌ
|
415 |
if history:
|
|
|
418 |
|
419 |
# ํ์ฌ ์ฌ์ฉ์ ๋ฉ์์ง
|
420 |
user_content = process_new_user_message(message)
|
421 |
+
|
422 |
+
# ์ธ์ด ๊ฐ์ง ๋ฐ ์ถ๊ฐ ์ง์์ฌํญ
|
423 |
+
has_korean = any(ord('๊ฐ') <= ord(char) <= ord('ํฃ') for char in user_content)
|
424 |
+
if has_korean:
|
425 |
+
lang_instruction = "\n[์ค์: ๋ฐ๋์ ํ๊ธ๋ก ๋ต๋ณํ์ธ์. ์์ด๋ก ๋ต๋ณํ์ง ๋ง์ธ์.]\n"
|
426 |
+
logger.info("ํ๊ธ ์ง๋ฌธ ๊ฐ์ง - ํ๊ธ ๋ต๋ณ ๋ชจ๋")
|
427 |
+
else:
|
428 |
+
lang_instruction = ""
|
429 |
+
logger.info("์์ด ์ง๋ฌธ ๊ฐ์ง - ์์ด ๋ต๋ณ ๋ชจ๋")
|
430 |
+
|
431 |
+
full_prompt += f"\nUser: {user_content}{lang_instruction}\nAssistant:"
|
432 |
+
|
433 |
+
# ํ๋กฌํํธ ๊ธธ์ด ๋ก๊น
|
434 |
+
logger.info(f"ํ๋กฌํํธ ๊ธธ์ด: {len(full_prompt)} ๋ฌธ์")
|
435 |
|
436 |
# ํ ํฐํ
|
437 |
inputs = tokenizer(
|
|
|
453 |
inputs,
|
454 |
streamer=streamer,
|
455 |
max_new_tokens=max_new_tokens,
|
456 |
+
temperature=0.8, # 0.7์์ 0.8๋ก ์ฆ๊ฐ
|
457 |
+
top_p=0.95, # 0.9์์ 0.95๋ก ์ฆ๊ฐ
|
458 |
+
top_k=50, # top_k ์ถ๊ฐ
|
459 |
+
repetition_penalty=1.1, # ๋ฐ๋ณต ๋ฐฉ์ง ์ถ๊ฐ
|
460 |
do_sample=True,
|
461 |
)
|
462 |
|
|
|
466 |
|
467 |
# ์คํธ๋ฆฌ๋ฐ ์ถ๋ ฅ
|
468 |
output = ""
|
469 |
+
chunk_count = 0
|
470 |
for new_text in streamer:
|
471 |
output += new_text
|
472 |
+
chunk_count += 1
|
473 |
+
|
474 |
+
# ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ
|
475 |
+
if chunk_count % 100 == 0:
|
476 |
+
gc.collect()
|
477 |
+
|
478 |
yield output
|
479 |
|
480 |
except Exception as e:
|
|
|
495 |
examples = [
|
496 |
[
|
497 |
{
|
498 |
+
"text": "์ด CSV ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ์ฃผ์ ์ธ์ฌ์ดํธ๋ฅผ ํ๊ธ๋ก ์ค๋ช
ํด์ฃผ์ธ์.",
|
499 |
+
"files": ["assets/additional-examples/sample-csv.csv"],
|
|
|
|
|
|
|
500 |
}
|
501 |
],
|
502 |
[
|
503 |
{
|
504 |
+
"text": "๋ PDF ํ์ผ์ ๋ด์ฉ์ ๋น๊ต ๋ถ์ํด์ฃผ์ธ์.",
|
505 |
+
"files": [
|
506 |
+
"assets/additional-examples/before.pdf",
|
507 |
+
"assets/additional-examples/after.pdf",
|
508 |
+
],
|
509 |
}
|
510 |
],
|
511 |
[
|
|
|
516 |
],
|
517 |
[
|
518 |
{
|
519 |
+
"text": "์ด ๋ฐ์ดํฐ์ ์ถ์ธ๋ฅผ ๋ถ์ํ๊ณ ํฅํ ์์ธก์ ์ ์ํด์ฃผ์ธ์.",
|
520 |
"files": ["assets/additional-examples/data.csv"],
|
521 |
}
|
522 |
],
|
523 |
[
|
524 |
{
|
525 |
+
"text": "ํ
์คํธ ๋ฌธ์์ ํต์ฌ ๋ด์ฉ์ ์์ฝํ๊ณ ์ค์ํ ํฌ์ธํธ๋ฅผ ์ ๋ฆฌํด์ฃผ์ธ์.",
|
526 |
"files": ["assets/additional-examples/document.txt"],
|
527 |
}
|
528 |
],
|
|
|
566 |
"""
|
567 |
|
568 |
title_html = """
|
569 |
+
<h1 align="center" style="margin-bottom: 0.2em; font-size: 1.6em;"> ๐ค Gemma3-R1984-1B (ํ
์คํธ ์ ์ฉ) </h1>
|
570 |
<p align="center" style="font-size:1.1em; color:#555;">
|
571 |
+
โ
์์ด์ ํฑ AI ํ๋ซํผ โ
์ถ๋ก ๋ฐ ๋ถ์ โ
ํ
์คํธ ๋ถ์ โ
์ฌ์ธต ์ฐ๊ตฌ & RAG <br>
|
572 |
+
โ
๋ฌธ์ ์ฒ๋ฆฌ (PDF, CSV, TXT) โ
์น ๊ฒ์ ํตํฉ โ
ํ๊ธ/์์ด ์ง์<br>
|
573 |
+
โ
'NVIDIA L40s / A100(ZeroGPU) GPU'์์ ๋
๋ฆฝ ๋ก์ปฌ ์๋ฒ๋ก ์๋<br>
|
574 |
+
@๋ชจ๋ธ ์ ์ฅ์: VIDraft/Gemma-3-R1984-1B, @๊ธฐ๋ฐ: 'Google Gemma-3-1b'
|
575 |
</p>
|
576 |
"""
|
577 |
|
578 |
with gr.Blocks(css=css, title="Gemma3-R1984-1B") as demo:
|
579 |
gr.Markdown(title_html)
|
580 |
|
581 |
+
with gr.Accordion("๊ณ ๊ธ ์ค์ ", open=False):
|
582 |
+
web_search_checkbox = gr.Checkbox(
|
583 |
+
label="Deep Research (์น ๊ฒ์ ํ์ฑํ)",
|
584 |
+
value=False
|
585 |
+
)
|
586 |
+
|
587 |
+
max_tokens_slider = gr.Slider(
|
588 |
+
label="์ต๋ ํ ํฐ ์ (๋ต๋ณ ๊ธธ์ด)",
|
589 |
+
minimum=100,
|
590 |
+
maximum=8000,
|
591 |
+
step=50,
|
592 |
+
value=2048,
|
593 |
+
info="๋ ๊ธด ๋ต๋ณ์ ์ํ์๋ฉด ์ด ๊ฐ์ ๋๋ ค์ฃผ์ธ์"
|
594 |
+
)
|
595 |
+
|
596 |
+
system_prompt_box = gr.Textbox(
|
597 |
+
lines=5,
|
598 |
+
label="์์คํ
ํ๋กฌํํธ",
|
599 |
+
value="""๋น์ ์ ์ฌ์ธต์ ์ธ ์ฌ๊ณ ๋ฅผ ํ๋ AI ์ด์์คํดํธ์
๋๋ค. ๋ค์ ์ง์นจ์ ๋ฐ๋ผ์ฃผ์ธ์:
|
600 |
+
|
601 |
+
1. **์ธ์ด**: ์ฌ์ฉ์๊ฐ ํ๊ธ๋ก ์ง๋ฌธํ๋ฉด ๋ฐ๋์ ํ๊ธ๋ก ๋ต๋ณํ์ธ์. ์์ด๋ก ์ง๋ฌธํ๋ฉด ์์ด๋ก ๋ต๋ณํ์ธ์.
|
602 |
+
2. **๋ต๋ณ ๊ธธ์ด**: ์ถฉ๋ถํ ์์ธํ๊ณ ํ๋ถํ ๋ต๋ณ์ ์ ๊ณตํ์ธ์. ์ต์ 3-5๊ฐ ๋ฌธ๋จ์ผ๋ก ๊ตฌ์ฑ๋ ๋ต๋ณ์ ์์ฑํ์ธ์.
|
603 |
+
3. **๋ถ์ ๋ฐฉ์**: ๋ฌธ์ ๋ฅผ ์ฒ ์ ํ ๋ถ์ํ๊ณ , ์ฒด๊ณ์ ์ธ ์ถ๋ก ๊ณผ์ ์ ๊ฑฐ์ณ ์ ํํ ํด๋ต์ ์ ์ํ์ธ์.
|
604 |
+
4. **๊ตฌ์กฐ**: ๋ต๋ณ์ ๋ช
ํํ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ๊ณ , ํ์์ ๋ฒํธ๋ ๋ถ๋ฆฟ ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ์ธ์.
|
605 |
+
5. **์์์ ์ค๋ช
**: ๊ฐ๋ฅํ ํ ๊ตฌ์ฒด์ ์ธ ์์์ ์์ธํ ์ค๋ช
์ ํฌํจํ์ธ์."""
|
606 |
+
)
|
607 |
|
608 |
web_search_text = gr.Textbox(
|
609 |
lines=1,
|
|
|
639 |
|
640 |
with gr.Row(elem_id="examples_row"):
|
641 |
with gr.Column(scale=12, elem_id="examples_container"):
|
642 |
+
gr.Markdown("### ์์ ์
๋ ฅ (ํด๋ฆญํ์ฌ ๋ก๋)")
|
643 |
|
644 |
if __name__ == "__main__":
|
645 |
demo.launch()
|