aiqcamp commited on
Commit
3a56ec4
ยท
verified ยท
1 Parent(s): 7fa8b10

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +84 -60
app.py CHANGED
@@ -909,10 +909,21 @@ def update_protein_display(chat_response):
909
  }
910
  return None
911
 
912
-
913
-
914
  def process_chat_and_generate(message, history):
915
  try:
 
 
 
 
 
 
 
 
 
 
 
 
 
916
  # 1. ํ”„๋กฌํ”„ํŠธ ๋ถ„์„ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
917
  analysis = analyze_prompt(message)
918
  similar_structures = search_protein_data(analysis, ds)
@@ -978,32 +989,43 @@ def process_chat_and_generate(message, history):
978
 
979
  output_seq, output_pdb, structure_view, plddt_plot = final_result
980
 
981
- # 5. ์ตœ์ข… ์„ค๋ช… ์ƒ์„ฑ
982
- explanation = f"""
983
- ์š”์ฒญํ•˜์‹  ๊ธฐ๋Šฅ์— ๋งž๋Š” ๋‹จ๋ฐฑ์งˆ์„ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค:
984
 
985
- ๋ถ„์„๋œ ์š”๊ตฌ์‚ฌํ•ญ:
 
 
 
 
 
986
  {analysis}
987
-
988
- ์„ค๊ณ„๋œ ๊ตฌ์กฐ์  ํŠน์ง•:
989
  - ๊ธธ์ด: {params['sequence_length']} ์•„๋ฏธ๋…ธ์‚ฐ
990
  - ์•ŒํŒŒ ํ—ฌ๋ฆญ์Šค ๋น„์œจ: {params['helix_bias']*100:.1f}%
991
  - ๋ฒ ํƒ€ ์‹œํŠธ ๋น„์œจ: {params['strand_bias']*100:.1f}%
992
  - ๋ฃจํ”„ ๊ตฌ์กฐ ๋น„์œจ: {params['loop_bias']*100:.1f}%
993
  - ์†Œ์ˆ˜์„ฑ ์ ์ˆ˜: {params['hydrophobic_target_score']}
994
-
995
- ์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด {len(plddt_data)}๋‹จ๊ณ„์˜ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
996
- ์ตœ์ข… ์•ˆ์ •์„ฑ ์ ์ˆ˜: {np.mean(plddt_data) if plddt_data else 0:.2f}
 
 
 
 
 
 
 
 
 
997
  """
998
 
999
- # 6. ์ตœ์ข… ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
1000
  return (
1001
  history + [
1002
  {"role": "user", "content": message},
1003
- {"role": "assistant", "content": explanation}
1004
  ],
1005
  create_radar_chart(stats),
1006
- explanation,
1007
  output_seq,
1008
  output_pdb,
1009
  structure_view,
@@ -1012,7 +1034,7 @@ def process_chat_and_generate(message, history):
1012
 
1013
  except Exception as e:
1014
  print(f"Error in process_chat_and_generate: {str(e)}")
1015
- traceback.print_exc() # ์ƒ์„ธํ•œ ์—๋Ÿฌ ์ •๋ณด ์ถœ๋ ฅ
1016
  return (
1017
  history + [
1018
  {"role": "user", "content": message},
@@ -1021,6 +1043,8 @@ def process_chat_and_generate(message, history):
1021
  None, None, None, None, None, None
1022
  )
1023
 
 
 
1024
  def extract_keywords(analysis):
1025
  """๋ถ„์„ ํ…์ŠคํŠธ์—์„œ ํ‚ค์›Œ๋“œ ์ถ”์ถœ"""
1026
  try:
@@ -1145,8 +1169,8 @@ with gr.Blocks(theme='ParityError/Interstellar') as demo:
1145
  )
1146
  max_tokens = gr.Slider(
1147
  minimum=1,
1148
- maximum=2048,
1149
- value=512,
1150
  step=1,
1151
  label="์ตœ๋Œ€ ํ† ํฐ ์ˆ˜"
1152
  )
@@ -1168,21 +1192,21 @@ with gr.Blocks(theme='ParityError/Interstellar') as demo:
1168
 
1169
  # ํƒญ ์ธํ„ฐํŽ˜์ด์Šค
1170
  with gr.Tabs():
1171
- with gr.TabItem("๐Ÿฆธโ€โ™‚๏ธ ํžˆ์–ด๋กœ ๋””์ž์ธ"):
1172
  gr.Markdown("""
1173
- ### โœจ ๋‹น์‹ ๋งŒ์˜ ํŠน๋ณ„ํ•œ ํžˆ์–ด๋กœ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”!
1174
- ๊ฐ ๋Šฅ๋ ฅ์น˜๋ฅผ ์กฐ์ ˆํ•˜๋ฉด ํžˆ์–ด๋กœ์˜ DNA๊ฐ€ ์ž๋™์œผ๋กœ ์„ค๊ณ„๋ฉ๋‹ˆ๋‹ค.
1175
  """)
1176
 
1177
  # ํžˆ์–ด๋กœ ๊ธฐ๋ณธ ์ •๋ณด
1178
  hero_name = gr.Textbox(
1179
- label="ํžˆ์–ด๋กœ ์ด๋ฆ„",
1180
- placeholder="๋‹น์‹ ์˜ ํžˆ์–ด๋กœ ์ด๋ฆ„์„ ์ง€์–ด์ฃผ์„ธ์š”!",
1181
- info="ํžˆ์–ด๋กœ์˜ ์ •์ฒด์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”"
1182
  )
1183
 
1184
  # ๋Šฅ๋ ฅ์น˜ ์„ค์ •
1185
- gr.Markdown("### ๐Ÿ’ช ํžˆ์–ด๋กœ ๋Šฅ๋ ฅ์น˜ ์„ค์ •")
1186
  with gr.Row():
1187
  strength = gr.Slider(
1188
  minimum=0.0, maximum=0.05,
@@ -1214,15 +1238,15 @@ with gr.Blocks(theme='ParityError/Interstellar') as demo:
1214
  # ํžˆ์–ด๋กœ ํฌ๊ธฐ ์„ค์ •
1215
  hero_size = gr.Slider(
1216
  minimum=50, maximum=200,
1217
- label="๐Ÿ“ ํžˆ์–ด๋กœ ํฌ๊ธฐ",
1218
  value=100,
1219
- info="ํžˆ์–ด๋กœ์˜ ์ „์ฒด์ ์ธ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค"
1220
  )
1221
 
1222
  # ํŠน์ˆ˜ ๋Šฅ๋ ฅ ์„ค์ •
1223
  with gr.Accordion("๐ŸŒŸ ํŠน์ˆ˜ ๋Šฅ๋ ฅ", open=False):
1224
  gr.Markdown("""
1225
- ํŠน์ˆ˜ ๋Šฅ๋ ฅ์„ ์„ ํƒํ•˜๋ฉด ํžˆ์–ด๋กœ์˜ DNA์— ํŠน๋ณ„ํ•œ ๊ตฌ์กฐ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
1226
  - ์ž๊ฐ€ ํšŒ๋ณต: ๋‹จ๋ฐฑ์งˆ ๊ตฌ์กฐ ๋ณต๊ตฌ ๋Šฅ๋ ฅ ๊ฐ•ํ™”
1227
  - ์›๊ฑฐ๋ฆฌ ๊ณต๊ฒฉ: ํŠน์ˆ˜ํ•œ ๊ตฌ์กฐ์  ๋Œ์ถœ๋ถ€ ํ˜•์„ฑ
1228
  - ๋ฐฉ์–ด๋ง‰ ์ƒ์„ฑ: ์•ˆ์ •์ ์ธ ๋ณดํ˜ธ์ธต ๊ตฌ์กฐ ์ƒ์„ฑ
@@ -1233,12 +1257,12 @@ with gr.Blocks(theme='ParityError/Interstellar') as demo:
1233
  )
1234
 
1235
  # ์ƒ์„ฑ ๋ฒ„ํŠผ
1236
- create_btn = gr.Button("๐Ÿงฌ ํžˆ์–ด๋กœ ์ƒ์„ฑ!", variant="primary", scale=2)
1237
 
1238
- with gr.TabItem("๐Ÿงฌ ํžˆ์–ด๋กœ DNA ์„ค๊ณ„"):
1239
  gr.Markdown("""
1240
- ### ๐Ÿงช ํžˆ์–ด๋กœ DNA ๊ณ ๊ธ‰ ์„ค์ •
1241
- ํžˆ์–ด๋กœ์˜ ์œ ์ „์ž ๊ตฌ์กฐ๋ฅผ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
1242
  """)
1243
 
1244
  seq_opt = gr.Radio(
@@ -1248,7 +1272,7 @@ with gr.Blocks(theme='ParityError/Interstellar') as demo:
1248
  )
1249
 
1250
  sequence = gr.Textbox(
1251
- label="DNA ์‹œํ€€์Šค",
1252
  lines=1,
1253
  placeholder='์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์•„๋ฏธ๋…ธ์‚ฐ: A,C,D,E,F,G,H,I,K,L,M,N,P,Q,R,S,T,V,W,Y (X๋Š” ๋ฌด์ž‘์œ„)',
1254
  visible=False
@@ -1262,7 +1286,7 @@ with gr.Blocks(theme='ParityError/Interstellar') as demo:
1262
 
1263
  with gr.Accordion(label='๐Ÿฆด ๊ณจ๊ฒฉ ๊ตฌ์กฐ ์„ค์ •', open=True):
1264
  gr.Markdown("""
1265
- ํžˆ์–ด๋กœ์˜ ๊ธฐ๋ณธ ๊ณจ๊ฒฉ ๊ตฌ์กฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
1266
  - ๋‚˜์„ ํ˜• ๊ตฌ์กฐ: ์œ ์—ฐํ•˜๊ณ  ํƒ„๋ ฅ์žˆ๋Š” ์›€์ง์ž„
1267
  - ๋ณ‘ํ’ํ˜• ๊ตฌ์กฐ: ๋‹จ๋‹จํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ํž˜
1268
  - ๊ณ ๋ฆฌํ˜• ๊ตฌ์กฐ: ๋น ๋ฅด๊ณ  ๋ฏผ์ฒฉํ•œ ์›€์ง์ž„
@@ -1297,9 +1321,9 @@ with gr.Blocks(theme='ParityError/Interstellar') as demo:
1297
  visible=True
1298
  )
1299
 
1300
- with gr.Accordion(label='๐Ÿงฌ DNA ๊ตฌ์„ฑ ์„ค์ •', open=False):
1301
  gr.Markdown("""
1302
- ํŠน์ • ์•„๋ฏธ๋…ธ์‚ฐ์˜ ๋น„์œจ์„ ์กฐ์ ˆํ•˜์—ฌ ํžˆ์–ด๋กœ์˜ ํŠน์„ฑ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
1303
  ์˜ˆ์‹œ: W0.2,E0.1 (ํŠธ๋ฆฝํ† ํŒ 20%, ๊ธ€๋ฃจํƒ์‚ฐ 10%)
1304
  """)
1305
  with gr.Row():
@@ -1316,7 +1340,7 @@ with gr.Blocks(theme='ParityError/Interstellar') as demo:
1316
 
1317
  with gr.Accordion(label='๐ŸŒ ํ™˜๊ฒฝ ์ ์‘๋ ฅ ์„ค์ •', open=False):
1318
  gr.Markdown("""
1319
- ํžˆ์–ด๋กœ์˜ ํ™˜๊ฒฝ ์ ์‘๋ ฅ์„ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.
1320
  ์Œ์ˆ˜: ์ˆ˜์ค‘ ํ™œ๋™์— ํŠนํ™”, ์–‘์ˆ˜: ์ง€์ƒ ํ™œ๋™์— ํŠนํ™”
1321
  """)
1322
  with gr.Row():
@@ -1347,24 +1371,24 @@ with gr.Blocks(theme='ParityError/Interstellar') as demo:
1347
  value='normal'
1348
  )
1349
 
1350
- design_btn = gr.Button("๐Ÿงฌ DNA ์„ค๊ณ„ ์ƒ์„ฑ!", variant="primary", scale=2)
1351
 
1352
- with gr.TabItem("๐Ÿงช ํžˆ์–ด๋กœ ์œ ์ „์ž ๊ฐ•ํ™”"):
1353
  gr.Markdown("""
1354
- ### โšก ๊ธฐ์กด ํžˆ์–ด๋กœ์˜ DNA ํ™œ์šฉ
1355
- ๊ฐ•๋ ฅํ•œ ํžˆ์–ด๋กœ์˜ DNA ์ผ๋ถ€๋ฅผ ์ƒˆ๋กœ์šด ํžˆ์–ด๋กœ์—๊ฒŒ ์ด์‹ํ•ฉ๋‹ˆ๋‹ค.
1356
  """)
1357
 
1358
- gr.Markdown("๊ณต๊ฐœ๋œ ํžˆ์–ด๋กœ DNA ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค")
1359
  pdb_id_code = gr.Textbox(
1360
- label="ํžˆ์–ด๋กœ DNA ์ฝ”๋“œ",
1361
  lines=1,
1362
- placeholder='๊ธฐ์กด ํžˆ์–ด๋กœ์˜ DNA ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” (์˜ˆ: 1DPX)'
1363
  )
1364
 
1365
- gr.Markdown("์ด์‹ํ•˜๊ณ  ์‹ถ์€ DNA ์˜์—ญ์„ ์„ ํƒํ•˜๊ณ  ์ƒˆ๋กœ์šด DNA๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค")
1366
  contigs = gr.Textbox(
1367
- label="์ด์‹ํ•  DNA ์˜์—ญ",
1368
  lines=1,
1369
  placeholder='์˜ˆ์‹œ: 15,A3-10,20-30'
1370
  )
@@ -1382,19 +1406,19 @@ with gr.Blocks(theme='ParityError/Interstellar') as demo:
1382
  )
1383
 
1384
  preview_viewer = gr.HTML()
1385
- rewrite_pdb = gr.File(label='ํžˆ์–ด๋กœ DNA ํŒŒ์ผ')
1386
  preview_btn = gr.Button("๐Ÿ” ๋ฏธ๋ฆฌ๋ณด๊ธฐ", variant="secondary")
1387
- enhance_btn = gr.Button("โšก ๊ฐ•ํ™”๋œ ํžˆ์–ด๋กœ ์ƒ์„ฑ!", variant="primary", scale=2)
1388
 
1389
- with gr.TabItem("๐Ÿ‘‘ ํžˆ์–ด๋กœ ๊ฐ€๋ฌธ"):
1390
  gr.Markdown("""
1391
- ### ๐Ÿฐ ์œ„๋Œ€ํ•œ ํžˆ์–ด๋กœ ๊ฐ€๋ฌธ์˜ ์œ ์‚ฐ
1392
- ๊ฐ•๋ ฅํ•œ ํžˆ์–ด๋กœ ๊ฐ€๋ฌธ์˜ ํŠน์„ฑ์„ ๊ณ„์Šนํ•˜์—ฌ ์ƒˆ๋กœ์šด ํžˆ์–ด๋กœ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
1393
  """)
1394
 
1395
  with gr.Row():
1396
  with gr.Column():
1397
- gr.Markdown("ํžˆ์–ด๋กœ ๊ฐ€๋ฌธ์˜ DNA ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์„ธ์š”")
1398
  fasta_msa = gr.File(label='๊ฐ€๋ฌธ DNA ๋ฐ์ดํ„ฐ')
1399
  with gr.Column():
1400
  gr.Markdown("์ด๋ฏธ ๋ถ„์„๋œ ๊ฐ€๋ฌธ ํŠน์„ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ์—…๋กœ๋“œํ•˜์„ธ์š”")
@@ -1407,18 +1431,18 @@ with gr.Blocks(theme='ParityError/Interstellar') as demo:
1407
 
1408
  # ์˜ค๋ฅธ์ชฝ ์—ด: ๊ฒฐ๊ณผ ํ‘œ์‹œ
1409
  with gr.Column(scale=1):
1410
- gr.Markdown("## ๐Ÿฆธโ€โ™‚๏ธ ํžˆ์–ด๋กœ ํ”„๋กœํ•„")
1411
  hero_stats = gr.Plot(label="๋Šฅ๋ ฅ์น˜ ๋ถ„์„")
1412
- hero_description = gr.Textbox(label="ํžˆ์–ด๋กœ ํŠน์„ฑ", lines=3)
1413
 
1414
- gr.Markdown("## ๐Ÿงฌ ํžˆ์–ด๋กœ DNA ๋ถ„์„ ๊ฒฐ๊ณผ")
1415
- gr.Markdown("#### โšก DNA ์•ˆ์ •์„ฑ ์ ์ˆ˜")
1416
  plddt_plot = gr.Plot(label='์•ˆ์ •์„ฑ ๋ถ„์„')
1417
- gr.Markdown("#### ๐Ÿ“ DNA ์‹œํ€€์Šค")
1418
- output_seq = gr.Textbox(label="DNA ์„œ์—ด")
1419
- gr.Markdown("#### ๐Ÿ’พ DNA ๋ฐ์ดํ„ฐ")
1420
- output_pdb = gr.File(label="DNA ํŒŒ์ผ")
1421
- gr.Markdown("#### ๐Ÿ”ฌ DNA ๊ตฌ์กฐ")
1422
  output_viewer = gr.HTML()
1423
 
1424
  # ์ด๋ฒคํŠธ ์—ฐ๊ฒฐ
 
909
  }
910
  return None
911
 
 
 
912
  def process_chat_and_generate(message, history):
913
  try:
914
+ # ์ดˆ๊ธฐ ์‘๋‹ต ์ƒ์„ฑ
915
+ initial_response = "๋‹จ๋ฐฑ์งˆ ์„ค๊ณ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ž ์‹œ๋งŒ ๊ธฐ๋‹ค๋ ค์ฃผ์„ธ์š”..."
916
+
917
+ # ์ดˆ๊ธฐ ์‘๋‹ต ํ‘œ์‹œ
918
+ yield (
919
+ history + [
920
+ {"role": "user", "content": message},
921
+ {"role": "assistant", "content": initial_response}
922
+ ],
923
+ None, None, None, None, None, None
924
+ )
925
+
926
+
927
  # 1. ํ”„๋กฌํ”„ํŠธ ๋ถ„์„ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
928
  analysis = analyze_prompt(message)
929
  similar_structures = search_protein_data(analysis, ds)
 
989
 
990
  output_seq, output_pdb, structure_view, plddt_plot = final_result
991
 
992
+
 
 
993
 
994
+
995
+ # ์ƒ์„ฑ ์™„๋ฃŒ ํ›„ ์ƒ์„ธ ์„ค๋ช… ์ถ”๊ฐ€
996
+ final_explanation = f"""
997
+ ๋‹จ๋ฐฑ์งˆ ์„ค๊ณ„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
998
+
999
+ [๋ถ„์„ ๊ฒฐ๊ณผ]
1000
  {analysis}
1001
+
1002
+ [๊ตฌ์กฐ์  ํŠน์ง•]
1003
  - ๊ธธ์ด: {params['sequence_length']} ์•„๋ฏธ๋…ธ์‚ฐ
1004
  - ์•ŒํŒŒ ํ—ฌ๋ฆญ์Šค ๋น„์œจ: {params['helix_bias']*100:.1f}%
1005
  - ๋ฒ ํƒ€ ์‹œํŠธ ๋น„์œจ: {params['strand_bias']*100:.1f}%
1006
  - ๋ฃจํ”„ ๊ตฌ์กฐ ๋น„์œจ: {params['loop_bias']*100:.1f}%
1007
  - ์†Œ์ˆ˜์„ฑ ์ ์ˆ˜: {params['hydrophobic_target_score']}
1008
+
1009
+ [์ƒ์„ฑ ๊ณผ์ •]
1010
+ - ์ด {len(plddt_data)}๋‹จ๊ณ„์˜ ์ตœ์ ํ™” ์ˆ˜ํ–‰
1011
+ - ์ตœ์ข… ์•ˆ์ •์„ฑ ์ ์ˆ˜: {np.mean(plddt_data) if plddt_data else 0:.2f}
1012
+ - ์ฐธ์กฐ๋œ ์œ ์‚ฌ ๊ตฌ์กฐ: {len(similar_structures)}๊ฐœ
1013
+
1014
+ [๊ธฐ๋Šฅ์  ํŠน์„ฑ]
1015
+ - ์ฃผ์š” ํ™œ์„ฑ ๋ถ€์œ„: {analyze_active_sites(output_seq)}
1016
+ - ์˜ˆ์ƒ๋˜๋Š” ์ƒํ˜ธ์ž‘์šฉ: {predict_interactions(params)}
1017
+ - ์•ˆ์ •์„ฑ ํ‰๊ฐ€: {evaluate_stability(plddt_data)}
1018
+
1019
+ 3D ๊ตฌ์กฐ์™€ ์ƒ์„ธ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
1020
  """
1021
 
 
1022
  return (
1023
  history + [
1024
  {"role": "user", "content": message},
1025
+ {"role": "assistant", "content": final_explanation}
1026
  ],
1027
  create_radar_chart(stats),
1028
+ final_explanation,
1029
  output_seq,
1030
  output_pdb,
1031
  structure_view,
 
1034
 
1035
  except Exception as e:
1036
  print(f"Error in process_chat_and_generate: {str(e)}")
1037
+ traceback.print_exc()
1038
  return (
1039
  history + [
1040
  {"role": "user", "content": message},
 
1043
  None, None, None, None, None, None
1044
  )
1045
 
1046
+
1047
+
1048
  def extract_keywords(analysis):
1049
  """๋ถ„์„ ํ…์ŠคํŠธ์—์„œ ํ‚ค์›Œ๋“œ ์ถ”์ถœ"""
1050
  try:
 
1169
  )
1170
  max_tokens = gr.Slider(
1171
  minimum=1,
1172
+ maximum=3800,
1173
+ value=3800,
1174
  step=1,
1175
  label="์ตœ๋Œ€ ํ† ํฐ ์ˆ˜"
1176
  )
 
1192
 
1193
  # ํƒญ ์ธํ„ฐํŽ˜์ด์Šค
1194
  with gr.Tabs():
1195
+ with gr.TabItem("๐Ÿฆธโ€โ™‚๏ธ ์ปค์Šคํ…€ ๋””์ž์ธ"):
1196
  gr.Markdown("""
1197
+ ### โœจ ๋‹น์‹ ๋งŒ์˜ ํŠน๋ณ„ํ•œ ์ปค์Šคํ…€์„ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”!
1198
+ ๊ฐ ๋Šฅ๋ ฅ์น˜๋ฅผ ์กฐ์ ˆํ•˜๋ฉด ์ปค์Šคํ…€๋œ ๋‹จ๋ฐฑ์งˆ์ด ์ž๋™์œผ๋กœ ์„ค๊ณ„๋ฉ๋‹ˆ๋‹ค.
1199
  """)
1200
 
1201
  # ํžˆ์–ด๋กœ ๊ธฐ๋ณธ ์ •๋ณด
1202
  hero_name = gr.Textbox(
1203
+ label="์ปค์Šคํ…€ ์ด๋ฆ„",
1204
+ placeholder="๋‹น์‹ ์˜ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ์ด๋ฆ„์„ ์ง€์–ด๏ฟฝ๏ฟฝ์„ธ์š”!",
1205
+ info="๋‹น์‹ ๋งŒ์˜ ์ •์ฒด์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”"
1206
  )
1207
 
1208
  # ๋Šฅ๋ ฅ์น˜ ์„ค์ •
1209
+ gr.Markdown("### ๐Ÿ’ช ์ปค์Šคํ…€ ๋Šฅ๋ ฅ์น˜ ์„ค์ •")
1210
  with gr.Row():
1211
  strength = gr.Slider(
1212
  minimum=0.0, maximum=0.05,
 
1238
  # ํžˆ์–ด๋กœ ํฌ๊ธฐ ์„ค์ •
1239
  hero_size = gr.Slider(
1240
  minimum=50, maximum=200,
1241
+ label="๐Ÿ“ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ํฌ๊ธฐ",
1242
  value=100,
1243
+ info="์ „์ฒด์ ์ธ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค"
1244
  )
1245
 
1246
  # ํŠน์ˆ˜ ๋Šฅ๋ ฅ ์„ค์ •
1247
  with gr.Accordion("๐ŸŒŸ ํŠน์ˆ˜ ๋Šฅ๋ ฅ", open=False):
1248
  gr.Markdown("""
1249
+ ํŠน์ˆ˜ ๋Šฅ๋ ฅ์„ ์„ ํƒํ•˜๋ฉด ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ์งˆ์— ํŠน๋ณ„ํ•œ ๊ตฌ์กฐ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
1250
  - ์ž๊ฐ€ ํšŒ๋ณต: ๋‹จ๋ฐฑ์งˆ ๊ตฌ์กฐ ๋ณต๊ตฌ ๋Šฅ๋ ฅ ๊ฐ•ํ™”
1251
  - ์›๊ฑฐ๋ฆฌ ๊ณต๊ฒฉ: ํŠน์ˆ˜ํ•œ ๊ตฌ์กฐ์  ๋Œ์ถœ๋ถ€ ํ˜•์„ฑ
1252
  - ๋ฐฉ์–ด๋ง‰ ์ƒ์„ฑ: ์•ˆ์ •์ ์ธ ๋ณดํ˜ธ์ธต ๊ตฌ์กฐ ์ƒ์„ฑ
 
1257
  )
1258
 
1259
  # ์ƒ์„ฑ ๋ฒ„ํŠผ
1260
+ create_btn = gr.Button("๐Ÿงฌ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ์ƒ์„ฑ!", variant="primary", scale=2)
1261
 
1262
+ with gr.TabItem("๐Ÿงฌ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ์„ค๊ณ„"):
1263
  gr.Markdown("""
1264
+ ### ๐Ÿงช ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ๊ณ ๊ธ‰ ์„ค์ •
1265
+ ์œ ์ „์ž ๊ตฌ์กฐ๋ฅผ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
1266
  """)
1267
 
1268
  seq_opt = gr.Radio(
 
1272
  )
1273
 
1274
  sequence = gr.Textbox(
1275
+ label="๋‹จ๋ฐฑ์งˆ ์‹œํ€€์Šค",
1276
  lines=1,
1277
  placeholder='์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์•„๋ฏธ๋…ธ์‚ฐ: A,C,D,E,F,G,H,I,K,L,M,N,P,Q,R,S,T,V,W,Y (X๋Š” ๋ฌด์ž‘์œ„)',
1278
  visible=False
 
1286
 
1287
  with gr.Accordion(label='๐Ÿฆด ๊ณจ๊ฒฉ ๊ตฌ์กฐ ์„ค์ •', open=True):
1288
  gr.Markdown("""
1289
+ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ๊ธฐ๋ณธ ๊ณจ๊ฒฉ ๊ตฌ์กฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
1290
  - ๋‚˜์„ ํ˜• ๊ตฌ์กฐ: ์œ ์—ฐํ•˜๊ณ  ํƒ„๋ ฅ์žˆ๋Š” ์›€์ง์ž„
1291
  - ๋ณ‘ํ’ํ˜• ๊ตฌ์กฐ: ๋‹จ๋‹จํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ํž˜
1292
  - ๊ณ ๋ฆฌํ˜• ๊ตฌ์กฐ: ๋น ๋ฅด๊ณ  ๋ฏผ์ฒฉํ•œ ์›€์ง์ž„
 
1321
  visible=True
1322
  )
1323
 
1324
+ with gr.Accordion(label='๐Ÿงฌ ๋‹จ๋ฐฑ์งˆ ๊ตฌ์„ฑ ์„ค์ •', open=False):
1325
  gr.Markdown("""
1326
+ ํŠน์ • ์•„๋ฏธ๋…ธ์‚ฐ์˜ ๋น„์œจ์„ ์กฐ์ ˆํ•˜์—ฌ ํŠน์„ฑ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
1327
  ์˜ˆ์‹œ: W0.2,E0.1 (ํŠธ๋ฆฝํ† ํŒ 20%, ๊ธ€๋ฃจํƒ์‚ฐ 10%)
1328
  """)
1329
  with gr.Row():
 
1340
 
1341
  with gr.Accordion(label='๐ŸŒ ํ™˜๊ฒฝ ์ ์‘๋ ฅ ์„ค์ •', open=False):
1342
  gr.Markdown("""
1343
+ ํ™˜๊ฒฝ ์ ์‘๋ ฅ์„ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.
1344
  ์Œ์ˆ˜: ์ˆ˜์ค‘ ํ™œ๋™์— ํŠนํ™”, ์–‘์ˆ˜: ์ง€์ƒ ํ™œ๋™์— ํŠนํ™”
1345
  """)
1346
  with gr.Row():
 
1371
  value='normal'
1372
  )
1373
 
1374
+ design_btn = gr.Button("๐Ÿงฌ ๋‹จ๋ฐฑ์งˆ ์„ค๊ณ„ ์ƒ์„ฑ!", variant="primary", scale=2)
1375
 
1376
+ with gr.TabItem("๐Ÿงช ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ๊ฐ•ํ™”"):
1377
  gr.Markdown("""
1378
+ ### โšก ๊ธฐ์กด ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ํ™œ์šฉ
1379
+ ๊ธฐ์กด ๋‹จ๋ฐฑ์งˆ ์ผ๋ถ€๋ฅผ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€์—๊ฒŒ ์ด์‹ํ•ฉ๋‹ˆ๋‹ค.
1380
  """)
1381
 
1382
+ gr.Markdown("๊ณต๊ฐœ๋œ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค")
1383
  pdb_id_code = gr.Textbox(
1384
+ label="์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ์ฝ”๋“œ",
1385
  lines=1,
1386
+ placeholder='๊ธฐ์กด ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” (์˜ˆ: 1DPX)'
1387
  )
1388
 
1389
+ gr.Markdown("์ด์‹ํ•˜๊ณ  ์‹ถ์€ ๋‹จ๋ฐฑ์งˆ ์˜์—ญ์„ ์„ ํƒํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋‹จ๋ฐฑ์งˆ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค")
1390
  contigs = gr.Textbox(
1391
+ label="์ด์‹ํ•  ๋‹จ๋ฐฑ์งˆ ์˜์—ญ",
1392
  lines=1,
1393
  placeholder='์˜ˆ์‹œ: 15,A3-10,20-30'
1394
  )
 
1406
  )
1407
 
1408
  preview_viewer = gr.HTML()
1409
+ rewrite_pdb = gr.File(label='์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ํŒŒ์ผ')
1410
  preview_btn = gr.Button("๐Ÿ” ๋ฏธ๋ฆฌ๋ณด๊ธฐ", variant="secondary")
1411
+ enhance_btn = gr.Button("โšก ๊ฐ•ํ™”๋œ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ์ƒ์„ฑ!", variant="primary", scale=2)
1412
 
1413
+ with gr.TabItem("๐Ÿ‘‘ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ์กฑ๋ณด"):
1414
  gr.Markdown("""
1415
+ ### ๐Ÿฐ ์œ„๋Œ€ํ•œ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ๊ฐ€๋ฌธ์˜ ์œ ์‚ฐ
1416
+ ๊ฐ•๋ ฅํ•œ ํŠน์„ฑ์„ ๊ณ„์Šนํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
1417
  """)
1418
 
1419
  with gr.Row():
1420
  with gr.Column():
1421
+ gr.Markdown("์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์„ธ์š”")
1422
  fasta_msa = gr.File(label='๊ฐ€๋ฌธ DNA ๋ฐ์ดํ„ฐ')
1423
  with gr.Column():
1424
  gr.Markdown("์ด๋ฏธ ๋ถ„์„๋œ ๊ฐ€๋ฌธ ํŠน์„ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ์—…๋กœ๋“œํ•˜์„ธ์š”")
 
1431
 
1432
  # ์˜ค๋ฅธ์ชฝ ์—ด: ๊ฒฐ๊ณผ ํ‘œ์‹œ
1433
  with gr.Column(scale=1):
1434
+ gr.Markdown("## ๐Ÿฆธโ€โ™‚๏ธ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ํ”„๋กœํ•„")
1435
  hero_stats = gr.Plot(label="๋Šฅ๋ ฅ์น˜ ๋ถ„์„")
1436
+ hero_description = gr.Textbox(label="์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ํŠน์„ฑ", lines=3)
1437
 
1438
+ gr.Markdown("## ๐Ÿงฌ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ๋ถ„์„ ๊ฒฐ๊ณผ")
1439
+ gr.Markdown("#### โšก ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ์•ˆ์ •์„ฑ ์ ์ˆ˜")
1440
  plddt_plot = gr.Plot(label='์•ˆ์ •์„ฑ ๋ถ„์„')
1441
+ gr.Markdown("#### ๐Ÿ“ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ์‹œํ€€์Šค")
1442
+ output_seq = gr.Textbox(label="์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ์„œ์—ด")
1443
+ gr.Markdown("#### ๐Ÿ’พ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ๋ฐ์ดํ„ฐ")
1444
+ output_pdb = gr.File(label="์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ํŒŒ์ผ")
1445
+ gr.Markdown("#### ๐Ÿ”ฌ ์ปค์Šคํ…€ ๋‹จ๋ฐฑ์งˆ ๊ตฌ์กฐ")
1446
  output_viewer = gr.HTML()
1447
 
1448
  # ์ด๋ฒคํŠธ ์—ฐ๊ฒฐ