dutta18 commited on
Commit
dd3032d
·
verified ·
1 Parent(s): 34cc1ba

initial commit

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* 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
 
 
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
36
+ src/full_screenshot.png filter=lfs diff=lfs merge=lfs -text
src/.DS_Store ADDED
Binary file (6.15 kB). View file
 
src/Home.py ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from pathlib import Path
3
+ import json
4
+ import urllib.parse as ul
5
+
6
+ st.set_page_config(page_title="AutoTA | Pause. Ask. Progress.",
7
+ page_icon="🎓",
8
+ layout="centered",
9
+ initial_sidebar_state="collapsed",
10
+ )
11
+
12
+ # -------------- Dummy catalogue --------------
13
+ # Replace with your DB / API
14
+ videos = [
15
+ {
16
+ "id": "intro_algo",
17
+ "title": "Introduction to Algorithms and Analysis – Lec 1: Insertion Sort",
18
+ "summary": "An introduction to the Insertion Sort algorithm and its complexity.",
19
+ "url": "https://www.youtube.com/watch?v=oZgbwa8lvDE", # Corrected YouTube URL
20
+ "thumbnail": "https://i.ytimg.com/vi/oZgbwa8lvDE/hqdefault.jpg",
21
+ "video_file": "videos/oZgbwa8lvDE.mp4",
22
+ "transcript_file": "transcripts/oZgbwa8lvDE.csv"
23
+ },
24
+ {
25
+ "id": "dl_basics",
26
+ "title": "Deep Learning(CS7015): Lec 2.5 Perceptron Learning Algorithm",
27
+ "summary": "An introduction to the perceptron learning algorithm with an example.",
28
+ "url": "https://www.youtube.com/watch?v=VRcixOuG-TU", # Corrected YouTube URL
29
+ "thumbnail": "https://i.ytimg.com/vi/VRcixOuG-TU/hqdefault.jpg",
30
+ "video_file": "videos/VRcixOuG-TU.mp4",
31
+ "transcript_file": "transcripts/VRcixOuG-TU.csv"
32
+ },
33
+ {
34
+ "id": "python_intro",
35
+ "title": "Unit testing | Intro to CS - Python | Khan Academy",
36
+ "summary": "How do teams of programmers continuously write and revise code without breaking things? Unit tests define a function's expected behavior and then enforce that those requirements are met.",
37
+ "url": "https://www.youtube.com/watch?v=3OmfTIf-SOU", # Corrected YouTube URL
38
+ "thumbnail": "https://i.ytimg.com/vi/3OmfTIf-SOU/hqdefault.jpg",
39
+ "video_file": "videos/3OmfTIf-SOU.mp4",
40
+ "transcript_file": "transcripts/3OmfTIf-SOU.csv"
41
+ },
42
+ ]
43
+ # Persists last timestamp per-user per-video
44
+ progress_store = Path(".progress.json")
45
+ if progress_store.exists():
46
+ last_pos = json.loads(progress_store.read_text())
47
+ else:
48
+ last_pos = {}
49
+
50
+ st.markdown(
51
+ """
52
+ <style>
53
+ .autota-style {
54
+ font-family: 'Montserrat', sans-serif; /* Define Montserrat */
55
+ text-align: center; /* Centers the text horizontally */
56
+ font-size: 100px; /* Adjust the font size as desired */
57
+ font-weight: bold; /* Optional: make it bold */
58
+ color: white; /* Optional: change text color */
59
+ padding: 10px; /* Optional: Add some padding around the text */
60
+ }
61
+ </style>
62
+ <div class="autota-style">AutoTA</div>
63
+ """,
64
+ unsafe_allow_html=True
65
+ )
66
+ st.markdown(
67
+ """
68
+ <style>
69
+ .center-desc {
70
+ font-family: 'Montserrat', sans-serif; /* Define Montserrat */
71
+ text-align: center; /* Centers the text horizontally */
72
+ font-size: 30px; /* Adjust the font size as desired */
73
+ font-weight: bold; /* Optional: make it bold */
74
+ color: #555; /* Optional: change text color */
75
+ padding: 10px; /* Optional: Add some padding around the text */
76
+ }
77
+ </style>
78
+ <div class="center-desc">A Virtual TA to interact with lecture videos</div>
79
+ """,
80
+ unsafe_allow_html=True
81
+ )
82
+ st.divider()
83
+
84
+ st.title("Video Gallery")
85
+
86
+ st.markdown("---") # Separator
87
+
88
+ for video in videos:
89
+ with st.container(border=True):
90
+ col1, col2 = st.columns([1, 3]) # Column for thumbnail, column for text
91
+
92
+ with col1:
93
+ # Use Streamlit's markdown to embed HTML for a clickable image link.
94
+ # The 'href' should point to the page name (from the 'pages' folder, without '.py').
95
+ # Query parameters are used to pass data (like video_id).
96
+ st.markdown(
97
+ f"""
98
+ <a href="/VideoViewer?video_id={video['id']}" target="_self">
99
+ <img src="{video['thumbnail']}" width="160" style="border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); display: block; margin: auto;">
100
+ </a>
101
+ """,
102
+ unsafe_allow_html=True
103
+ )
104
+
105
+ with col2:
106
+ st.subheader(video['title'])
107
+ st.write(video['summary'])
108
+ # You can also add a direct Streamlit link button for clarity
109
+ # This is an alternative or supplementary way to navigate
110
+
111
+ st.markdown("---") # Separator between video entries
112
+
src/README.md ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AutoTA
2
+
3
+ AutoTA is an interface for interacting with educational lecture videos.
4
+
5
+ ## Installation
6
+
7
+ Install the required dependencies:
8
+ ```bash
9
+ pip install -r requirements.txt
10
+ ```
11
+
12
+ ## To run locally
13
+
14
+ To run the demo locally:
15
+ ```bash
16
+ streamlit run Home.py
17
+ ```
18
+ ## Some Additional Information
19
+
20
+ Please add your own API key to chatbot/llm_answer.py.
src/full_screenshot.png ADDED

Git LFS Details

  • SHA256: ef8fb91c569e11e118e316dd10975999c956f83d94a576da7f1e3ede41b04954
  • Pointer size: 132 Bytes
  • Size of remote file: 4.76 MB
src/get_transcripts.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ from youtube_transcript_api import YouTubeTranscriptApi
3
+ from pytube import extract
4
+
5
+ ids = ['oZgbwa8lvDE', 'VRcixOuG-TU'] # Example video IDs
6
+ count = 0
7
+ for i in range(len(ids)):
8
+ #url = df['video_url'][0]
9
+ try:
10
+ id = ids[i]
11
+
12
+ transcript = YouTubeTranscriptApi.get_transcript(id)
13
+ #print(transcript[0])
14
+ file_df = pd.DataFrame()
15
+ for j in range(len(transcript)):
16
+ file_df = file_df._append([dict(transcript[j])])
17
+ file_df.reset_index()
18
+ transcript_filename = str(id)+".csv"
19
+ file_path = "/Users/sourjyadip/Desktop/autota/transcripts/" + transcript_filename
20
+ file_df.to_csv(file_path)
21
+ print(i, " done")
22
+ except:
23
+ count += 1
24
+
25
+ print("number of skipped videos: ", count)
src/requirements.txt ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ altair==5.5.0
2
+ attrs==25.3.0
3
+ blinker==1.9.0
4
+ cachetools==6.1.0
5
+ certifi==2025.7.9
6
+ charset-normalizer==3.4.2
7
+ click==8.2.1
8
+ gitdb==4.0.12
9
+ GitPython==3.1.44
10
+ idna==3.10
11
+ Jinja2==3.1.6
12
+ jsonschema==4.24.0
13
+ jsonschema-specifications==2025.4.1
14
+ MarkupSafe==3.0.2
15
+ MouseInfo==0.1.3
16
+ narwhals==1.46.0
17
+ numpy==2.2.6
18
+ opencv-python==4.12.0.88
19
+ packaging==25.0
20
+ pandas==2.3.1
21
+ pillow==11.3.0
22
+ protobuf==6.31.1
23
+ pyarrow==20.0.0
24
+ PyAutoGUI==0.9.54
25
+ pydeck==0.9.1
26
+ PyGetWindow==0.0.9
27
+ PyMsgBox==1.0.9
28
+ pyobjc-core==11.1
29
+ pyobjc-framework-Cocoa==11.1
30
+ pyobjc-framework-Quartz==11.1
31
+ pyperclip==1.9.0
32
+ PyRect==0.2.0
33
+ PyScreeze==1.0.1
34
+ python-dateutil==2.9.0.post0
35
+ pytweening==1.2.0
36
+ pytz==2025.2
37
+ referencing==0.36.2
38
+ requests==2.32.4
39
+ rpds-py==0.26.0
40
+ rubicon-objc==0.5.1
41
+ six==1.17.0
42
+ smmap==5.0.2
43
+ streamlit==1.46.1
44
+ tenacity==9.1.2
45
+ toml==0.10.2
46
+ tornado==6.5.1
47
+ typing_extensions==4.14.1
48
+ tzdata==2025.2
49
+ urllib3==2.5.0