vikramvasudevan commited on
Commit
9133ff3
·
verified ·
1 Parent(s): e63f83d

Upload folder using huggingface_hub

Browse files
Files changed (2) hide show
  1. app.py +23 -35
  2. modules/answerer.py +1 -1
app.py CHANGED
@@ -24,6 +24,10 @@ load_dotenv()
24
  # -------------------------------
25
  # Utility functions
26
  # -------------------------------
 
 
 
 
27
  def show_component():
28
  return gr.update(visible=True)
29
 
@@ -52,8 +56,8 @@ def clear_component():
52
  return gr.update(value="")
53
 
54
 
55
- def show_loading():
56
- return gr.update(value="⏳Fetching ...")
57
 
58
 
59
  def enable_if_not_none(question):
@@ -78,13 +82,14 @@ def index_channels(channel_urls: str):
78
  # final UI update
79
  yield (
80
  f"✅ Indexed {total_videos} videos from {len(urls)} channels.",
81
- gr.update(choices=list_channels_radio()),
82
  list_channels_radio(),
83
  )
84
 
 
85
  def init(progress: gr.Progress = None):
86
  channels = "https://www.youtube.com/@onedayonepasuram6126,https://www.youtube.com/@srisookthi,https://www.youtube.com/@learn-aksharam,https://www.youtube.com/@SriYadugiriYathirajaMutt,https://www.youtube.com/@akivasudev"
87
- for (msg,upd,upd) in index_channels(channels):
88
  # print(resp)
89
  yield msg
90
 
@@ -94,7 +99,7 @@ def refresh_all_channels():
94
  channels = get_indexed_channels(get_collection())
95
 
96
  if not channels:
97
- return "⚠️ No channels available to refresh.", list_channels_radio()
98
 
99
  # build list of URLs
100
  urls = []
@@ -108,7 +113,7 @@ def refresh_all_channels():
108
 
109
  return (
110
  f"🔄 Refreshed {len(urls)} channels, re-indexed {total_videos} videos.",
111
- list_channels_radio(),
112
  )
113
 
114
 
@@ -201,7 +206,7 @@ def fetch_channel_html(channel_id: str, page: int = 1, page_size: int = 10):
201
  def delete_channel(channel_url: str):
202
  delete_channel_from_collection(channel_url)
203
  # Return updated radio choices
204
- return gr.update(choices=list_channels_radio())
205
 
206
 
207
  # -------------------------------
@@ -361,9 +366,6 @@ with gr.Blocks() as demo:
361
  outputs=[refresh_status, channel_radio],
362
  )
363
 
364
- def refresh_channel_list():
365
- return gr.update(choices=list_channels_radio())
366
-
367
  refresh_btn.click(fn=refresh_channel_list, outputs=[channel_radio]).then(
368
  fn=list_channels_radio, outputs=[channel_list_state]
369
  )
@@ -437,16 +439,9 @@ with gr.Blocks() as demo:
437
  question = gr.Textbox(
438
  label="Ask a Question",
439
  placeholder="e.g., What topics did they cover on AI ethics?",
 
440
  )
441
- with gr.Column():
442
- ask_btn = gr.Button(
443
- "💡 Get Answer",
444
- size="sm",
445
- scale=0,
446
- variant="primary",
447
- interactive=False,
448
- )
449
- ask_status = gr.Markdown()
450
 
451
  gr.Examples(
452
  [
@@ -459,30 +454,23 @@ with gr.Blocks() as demo:
459
  inputs=question,
460
  )
461
 
 
 
462
  answer = gr.Markdown()
463
  video_embed = gr.HTML() # iframe embeds
464
 
465
- ask_btn.click(show_loading, outputs=[ask_status]).then(
466
- disable_component, outputs=[ask_btn]
467
- ).then(
468
- handle_query,
469
- inputs=[question, search_channel],
470
- outputs=[answer, video_embed],
471
- ).then(
472
- enable_component, outputs=[ask_btn]
473
- ).then(
474
- clear_component, outputs=[ask_status]
475
- )
476
 
477
- question.change(enable_if_not_none, inputs=[question], outputs=[ask_btn])
478
- question.submit(show_loading, outputs=[ask_status]).then(
479
- disable_component, outputs=[ask_btn]
480
- ).then(
481
  handle_query,
482
  inputs=[question, search_channel],
483
  outputs=[answer, video_embed],
484
  ).then(
485
- enable_component, outputs=[ask_btn]
486
  ).then(
487
  clear_component, outputs=[ask_status]
488
  )
 
24
  # -------------------------------
25
  # Utility functions
26
  # -------------------------------
27
+ def refresh_channel_list():
28
+ return gr.update(choices=list_channels_radio())
29
+
30
+
31
  def show_component():
32
  return gr.update(visible=True)
33
 
 
56
  return gr.update(value="")
57
 
58
 
59
+ def show_loading(question):
60
+ return gr.update(value=f"⏳Fetching details on [{question}]...")
61
 
62
 
63
  def enable_if_not_none(question):
 
82
  # final UI update
83
  yield (
84
  f"✅ Indexed {total_videos} videos from {len(urls)} channels.",
85
+ refresh_channel_list(),
86
  list_channels_radio(),
87
  )
88
 
89
+
90
  def init(progress: gr.Progress = None):
91
  channels = "https://www.youtube.com/@onedayonepasuram6126,https://www.youtube.com/@srisookthi,https://www.youtube.com/@learn-aksharam,https://www.youtube.com/@SriYadugiriYathirajaMutt,https://www.youtube.com/@akivasudev"
92
+ for msg, upd, upd in index_channels(channels):
93
  # print(resp)
94
  yield msg
95
 
 
99
  channels = get_indexed_channels(get_collection())
100
 
101
  if not channels:
102
+ return "⚠️ No channels available to refresh.", refresh_channel_list()
103
 
104
  # build list of URLs
105
  urls = []
 
113
 
114
  return (
115
  f"🔄 Refreshed {len(urls)} channels, re-indexed {total_videos} videos.",
116
+ refresh_channel_list(),
117
  )
118
 
119
 
 
206
  def delete_channel(channel_url: str):
207
  delete_channel_from_collection(channel_url)
208
  # Return updated radio choices
209
+ return refresh_channel_list()
210
 
211
 
212
  # -------------------------------
 
366
  outputs=[refresh_status, channel_radio],
367
  )
368
 
 
 
 
369
  refresh_btn.click(fn=refresh_channel_list, outputs=[channel_radio]).then(
370
  fn=list_channels_radio, outputs=[channel_list_state]
371
  )
 
439
  question = gr.Textbox(
440
  label="Ask a Question",
441
  placeholder="e.g., What topics did they cover on AI ethics?",
442
+ submit_btn=True,
443
  )
444
+ gr.Column(scale=2)
 
 
 
 
 
 
 
 
445
 
446
  gr.Examples(
447
  [
 
454
  inputs=question,
455
  )
456
 
457
+ submitted_question = gr.Markdown()
458
+ ask_status = gr.Markdown()
459
  answer = gr.Markdown()
460
  video_embed = gr.HTML() # iframe embeds
461
 
462
+ def get_question(q):
463
+ return f"## You asked : {q}\n---"
 
 
 
 
 
 
 
 
 
464
 
465
+ # question.change(enable_if_not_none, inputs=[question], outputs=[question])
466
+ question.submit(show_loading, inputs=[question], outputs=[ask_status]).then(
467
+ get_question, inputs=[question], outputs=[submitted_question]
468
+ ).then(disable_component, outputs=[question]).then(
469
  handle_query,
470
  inputs=[question, search_channel],
471
  outputs=[answer, video_embed],
472
  ).then(
473
+ enable_component, outputs=[question]
474
  ).then(
475
  clear_component, outputs=[ask_status]
476
  )
modules/answerer.py CHANGED
@@ -76,7 +76,7 @@ def answer_query(
76
  )
77
 
78
  llm_answer = response.choices[0].message.parsed
79
- answer_text = llm_answer.answer_text
80
  video_html = build_video_html(llm_answer.top_videos)
81
  return answer_text, video_html
82
 
 
76
  )
77
 
78
  llm_answer = response.choices[0].message.parsed
79
+ answer_text = "\n## Answer : \n" + llm_answer.answer_text
80
  video_html = build_video_html(llm_answer.top_videos)
81
  return answer_text, video_html
82