MSNP1381 commited on
Commit
5e5e2eb
·
1 Parent(s): 5627821
Files changed (3) hide show
  1. api/apis.py +49 -0
  2. app.py +136 -0
  3. requirements.txt +190 -0
api/apis.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import firebase_admin
2
+ from firebase_admin import credentials
3
+ from firebase_admin import firestore
4
+ import os
5
+ # Initialize Firebase
6
+ cred = credentials.Certificate(os.getenv('google_json'))
7
+ firebase_admin.initialize_app(cred)
8
+
9
+ # Initialize Firestore DB
10
+ db = firestore.client()
11
+
12
+ def get_question_by_id(question_id):
13
+ doc_ref = db.collection('questions').document(question_id)
14
+ doc = doc_ref.get()
15
+ if doc.exists:
16
+ return doc.to_dict()
17
+ else:
18
+ return None
19
+
20
+ # Example usage
21
+ question_id = "Mercury_7090615"
22
+ question_data = get_question_by_id(question_id)
23
+ if question_data:
24
+ print(f"Question data for {question_id}: {question_data}")
25
+ else:
26
+ print(f"No data found for question ID: {question_id}")
27
+
28
+
29
+
30
+ def get_question_ids_with_correctness():
31
+ questions_ref = db.collection('questions')
32
+ docs = questions_ref.stream()
33
+
34
+ results = []
35
+ for doc in docs:
36
+ data = doc.to_dict()
37
+ question_id = data['original_question']['question_id']
38
+ correct_answer = data['original_question']['answer']
39
+ generated_answer = data['generated_result']['answer_key_vale']
40
+ correctness = "✅" if correct_answer == generated_answer else '📛'
41
+
42
+ results.append(f"{question_id} {correctness}")
43
+
44
+ return results
45
+
46
+ # Example usage
47
+ correctness_list = get_question_ids_with_correctness()
48
+ for result in correctness_list:
49
+ print(result)
app.py ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import networkx as nx
3
+ from pyvis.network import Network
4
+ import textwrap
5
+
6
+ from api.apis import get_question_by_id, get_question_ids_with_correctness
7
+
8
+ # This function should be implemented to return a list of all question IDs
9
+ def get_question_ids():
10
+ # Placeholder implementation
11
+ return get_question_ids_with_correctness()
12
+ # This function should be implemented to return the context for a given question ID
13
+ def get_question_context(question_id):
14
+ return get_question_by_id(question_id)
15
+
16
+ def create_interactive_graph(reasoning_chain):
17
+ G = nx.DiGraph()
18
+ net = Network(notebook=True, width="100%", height="600px", directed=True)
19
+
20
+ for i, step in enumerate(reasoning_chain):
21
+ wrapped_text = textwrap.fill(step, width=30)
22
+ label = f"Step {i+1}\n\n{wrapped_text}"
23
+ G.add_node(i, title=step, label=label)
24
+ if i > 0:
25
+ G.add_edge(i-1, i)
26
+
27
+ net.from_nx(G)
28
+
29
+ for node in net.nodes:
30
+ node['shape'] = 'box'
31
+ node['color'] = '#97C2FC'
32
+ node['font'] = {'size': 12, 'face': 'arial', 'multi': 'html', 'align': 'center'}
33
+ node['widthConstraint'] = {'minimum': 200, 'maximum': 300}
34
+
35
+ net.set_options('''
36
+ var options = {
37
+ "nodes": {
38
+ "shape": "box",
39
+ "physics": false,
40
+ "margin": 10
41
+ },
42
+ "edges": {
43
+ "smooth": {
44
+ "type": "curvedCW",
45
+ "roundness": 0.2
46
+ },
47
+ "arrows": {
48
+ "to": {
49
+ "enabled": true,
50
+ "scaleFactor": 0.5
51
+ }
52
+ }
53
+ },
54
+ "layout": {
55
+ "hierarchical": {
56
+ "enabled": true,
57
+ "direction": "UD",
58
+ "sortMethod": "directed"
59
+ }
60
+ },
61
+ "interaction": {
62
+ "hover": true,
63
+ "tooltipDelay": 100
64
+ }
65
+ }
66
+ ''')
67
+
68
+ return net
69
+
70
+ def main():
71
+ st.title("Interactive Q&A App with Reasoning Chain Graph")
72
+
73
+ # Get all question IDs
74
+ question_ids = get_question_ids()
75
+
76
+ # Initialize session state for current index
77
+ if 'current_index' not in st.session_state:
78
+ st.session_state.current_index = 0
79
+
80
+ # Navigation buttons
81
+ col1, col2, col3 = st.columns([1,3,1])
82
+ with col1:
83
+ if st.button("Previous"):
84
+ st.session_state.current_index = (st.session_state.current_index - 1) % len(question_ids)
85
+ with col3:
86
+ if st.button("Next"):
87
+ st.session_state.current_index = (st.session_state.current_index + 1) % len(question_ids)
88
+
89
+ # Select a question ID
90
+ selected_question_id = st.selectbox("Select a question ID", question_ids, index=st.session_state.current_index)
91
+
92
+ # Update current_index when selection changes
93
+ st.session_state.current_index = question_ids.index(selected_question_id)
94
+
95
+ # Get the context for the selected question
96
+ data = get_question_context(selected_question_id)
97
+ original_question = data['original_question']
98
+ generated_result = data['generated_result']
99
+
100
+ # Display question
101
+ st.subheader("Question")
102
+ st.write(original_question['question'])
103
+
104
+ # Display choices
105
+ st.subheader("Choices")
106
+ for label, choice in original_question['label_choices'].items():
107
+ st.write(f"{label}: {choice}")
108
+
109
+ # Display correct answer
110
+ st.subheader("Correct Answer")
111
+ correct_answer_label = original_question['answer']
112
+ correct_answer = original_question['label_choices'][correct_answer_label]
113
+ st.write(f"{correct_answer_label}: {correct_answer}")
114
+
115
+ st.subheader("Generated Answer")
116
+ generated_answer_label = generated_result['answer_key_vale']
117
+ generated_answer = original_question['label_choices'][generated_answer_label]
118
+ st.write(f"{generated_answer_label}: {generated_answer}")
119
+
120
+ st.subheader("is it correct ?")
121
+ generated_answer_label = generated_result['answer_key_vale']
122
+ answer_label = original_question['answer']
123
+ is_same=answer_label.lower()==generated_answer_label.lower()
124
+ st.write(f"✅ answers Are the same. answer is {answer_label}"if is_same else f"📛 answers do differ.\n But you can check reasonings.\noriginal answer label : {answer_label}\ngenerated answer label : {generated_answer_label}")
125
+
126
+ # Create and display interactive reasoning chain graph
127
+ net = create_interactive_graph(generated_result['reasoning_chain'])
128
+ net.save_graph("graph.html")
129
+
130
+ # Display the interactive graph
131
+ with open("graph.html", 'r', encoding='utf-8') as f:
132
+ html = f.read()
133
+ st.components.v1.html(html, height=600)
134
+
135
+ if __name__ == "__main__":
136
+ main()
requirements.txt ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ aiofiles==24.1.0 ; python_version >= "3.12" and python_version < "4.0"
2
+ aiohappyeyeballs==2.3.4 ; python_version >= "3.12" and python_version < "4.0"
3
+ aiohttp==3.10.0 ; python_version >= "3.12" and python_version < "4.0"
4
+ aiosignal==1.3.1 ; python_version >= "3.12" and python_version < "4.0"
5
+ altair==5.3.0 ; python_version >= "3.12" and python_version < "4.0"
6
+ annotated-types==0.7.0 ; python_version >= "3.12" and python_version < "4.0"
7
+ anyio==4.4.0 ; python_version >= "3.12" and python_version < "4.0"
8
+ appnope==0.1.4 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Darwin"
9
+ argon2-cffi-bindings==21.2.0 ; python_version >= "3.12" and python_version < "4.0"
10
+ argon2-cffi==23.1.0 ; python_version >= "3.12" and python_version < "4.0"
11
+ arrow==1.3.0 ; python_version >= "3.12" and python_version < "4.0"
12
+ asttokens==2.4.1 ; python_version >= "3.12" and python_version < "4.0"
13
+ async-lru==2.0.4 ; python_version >= "3.12" and python_version < "4.0"
14
+ attrs==24.1.0 ; python_version >= "3.12" and python_version < "4.0"
15
+ babel==2.15.0 ; python_version >= "3.12" and python_version < "4.0"
16
+ beautifulsoup4==4.12.3 ; python_version >= "3.12" and python_version < "4.0"
17
+ bleach==6.1.0 ; python_version >= "3.12" and python_version < "4.0"
18
+ blinker==1.8.2 ; python_version >= "3.12" and python_version < "4.0"
19
+ cachecontrol==0.14.0 ; python_version >= "3.12" and python_version < "4.0"
20
+ cachetools==5.4.0 ; python_version >= "3.12" and python_version < "4.0"
21
+ certifi==2024.7.4 ; python_version >= "3.12" and python_version < "4.0"
22
+ cffi==1.16.0 ; python_version >= "3.12" and python_version < "4.0"
23
+ charset-normalizer==3.3.2 ; python_version >= "3.12" and python_version < "4.0"
24
+ click==8.1.7 ; python_version >= "3.12" and python_version < "4.0"
25
+ colorama==0.4.6 ; python_version >= "3.12" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32")
26
+ comm==0.2.2 ; python_version >= "3.12" and python_version < "4.0"
27
+ contourpy==1.2.1 ; python_version >= "3.12" and python_version < "4.0"
28
+ cryptography==43.0.0 ; python_version >= "3.12" and python_version < "4.0"
29
+ cycler==0.12.1 ; python_version >= "3.12" and python_version < "4.0"
30
+ debugpy==1.8.3 ; python_version >= "3.12" and python_version < "4.0"
31
+ decorator==5.1.1 ; python_version >= "3.12" and python_version < "4.0"
32
+ defusedxml==0.7.1 ; python_version >= "3.12" and python_version < "4.0"
33
+ distro==1.9.0 ; python_version >= "3.12" and python_version < "4.0"
34
+ executing==2.0.1 ; python_version >= "3.12" and python_version < "4.0"
35
+ fastjsonschema==2.20.0 ; python_version >= "3.12" and python_version < "4.0"
36
+ filelock==3.15.4 ; python_version >= "3.12" and python_version < "4.0"
37
+ firebase-admin==6.5.0 ; python_version >= "3.12" and python_version < "4.0"
38
+ fonttools==4.53.1 ; python_version >= "3.12" and python_version < "4.0"
39
+ fqdn==1.5.1 ; python_version >= "3.12" and python_version < "4"
40
+ frozenlist==1.4.1 ; python_version >= "3.12" and python_version < "4.0"
41
+ fsspec==2024.6.1 ; python_version >= "3.12" and python_version < "4.0"
42
+ gitdb==4.0.11 ; python_version >= "3.12" and python_version < "4.0"
43
+ gitpython==3.1.43 ; python_version >= "3.12" and python_version < "4.0"
44
+ google-api-core==2.19.1 ; python_version >= "3.12" and python_version < "4.0"
45
+ google-api-core[grpc]==2.19.1 ; python_version >= "3.12" and python_version < "4.0" and platform_python_implementation != "PyPy"
46
+ google-api-python-client==2.139.0 ; python_version >= "3.12" and python_version < "4.0"
47
+ google-auth-httplib2==0.2.0 ; python_version >= "3.12" and python_version < "4.0"
48
+ google-auth==2.32.0 ; python_version >= "3.12" and python_version < "4.0"
49
+ google-cloud-core==2.4.1 ; python_version >= "3.12" and python_version < "4.0"
50
+ google-cloud-firestore==2.17.0 ; python_version >= "3.12" and python_version < "4.0" and platform_python_implementation != "PyPy"
51
+ google-cloud-storage==2.18.0 ; python_version >= "3.12" and python_version < "4.0"
52
+ google-crc32c==1.5.0 ; python_version >= "3.12" and python_version < "4.0"
53
+ google-resumable-media==2.7.1 ; python_version >= "3.12" and python_version < "4.0"
54
+ googleapis-common-protos==1.63.2 ; python_version >= "3.12" and python_version < "4.0"
55
+ greenlet==3.0.3 ; python_version < "3.13" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and python_version >= "3.12"
56
+ grpcio-status==1.62.2 ; python_version >= "3.12" and python_version < "4.0" and platform_python_implementation != "PyPy"
57
+ grpcio==1.65.4 ; python_version >= "3.12" and python_version < "4.0" and platform_python_implementation != "PyPy"
58
+ h11==0.14.0 ; python_version >= "3.12" and python_version < "4.0"
59
+ httpcore==1.0.5 ; python_version >= "3.12" and python_version < "4.0"
60
+ httplib2==0.22.0 ; python_version >= "3.12" and python_version < "4.0"
61
+ httpx==0.27.0 ; python_version >= "3.12" and python_version < "4.0"
62
+ huggingface-hub==0.24.5 ; python_version >= "3.12" and python_version < "4.0"
63
+ idna==3.7 ; python_version >= "3.12" and python_version < "4.0"
64
+ ipykernel==6.29.5 ; python_version >= "3.12" and python_version < "4.0"
65
+ ipython==8.26.0 ; python_version >= "3.12" and python_version < "4.0"
66
+ ipywidgets==8.1.3 ; python_version >= "3.12" and python_version < "4.0"
67
+ isoduration==20.11.0 ; python_version >= "3.12" and python_version < "4.0"
68
+ jedi==0.19.1 ; python_version >= "3.12" and python_version < "4.0"
69
+ jinja2==3.1.4 ; python_version >= "3.12" and python_version < "4.0"
70
+ json5==0.9.25 ; python_version >= "3.12" and python_version < "4.0"
71
+ jsonpatch==1.33 ; python_version >= "3.12" and python_version < "4.0"
72
+ jsonpickle==3.2.2 ; python_version >= "3.12" and python_version < "4.0"
73
+ jsonpointer==3.0.0 ; python_version >= "3.12" and python_version < "4.0"
74
+ jsonschema-specifications==2023.12.1 ; python_version >= "3.12" and python_version < "4.0"
75
+ jsonschema==4.23.0 ; python_version >= "3.12" and python_version < "4.0"
76
+ jsonschema[format-nongpl]==4.23.0 ; python_version >= "3.12" and python_version < "4.0"
77
+ jupyter-client==8.6.2 ; python_version >= "3.12" and python_version < "4.0"
78
+ jupyter-console==6.6.3 ; python_version >= "3.12" and python_version < "4.0"
79
+ jupyter-core==5.7.2 ; python_version >= "3.12" and python_version < "4.0"
80
+ jupyter-events==0.10.0 ; python_version >= "3.12" and python_version < "4.0"
81
+ jupyter-lsp==2.2.5 ; python_version >= "3.12" and python_version < "4.0"
82
+ jupyter-server-terminals==0.5.3 ; python_version >= "3.12" and python_version < "4.0"
83
+ jupyter-server==2.14.2 ; python_version >= "3.12" and python_version < "4.0"
84
+ jupyter==1.0.0 ; python_version >= "3.12" and python_version < "4.0"
85
+ jupyterlab-pygments==0.3.0 ; python_version >= "3.12" and python_version < "4.0"
86
+ jupyterlab-server==2.27.3 ; python_version >= "3.12" and python_version < "4.0"
87
+ jupyterlab-widgets==3.0.11 ; python_version >= "3.12" and python_version < "4.0"
88
+ jupyterlab==4.2.4 ; python_version >= "3.12" and python_version < "4.0"
89
+ kiwisolver==1.4.5 ; python_version >= "3.12" and python_version < "4.0"
90
+ langchain-core==0.2.28 ; python_version >= "3.12" and python_version < "4.0"
91
+ langchain-openai==0.1.20 ; python_version >= "3.12" and python_version < "4.0"
92
+ langchain-text-splitters==0.2.2 ; python_version >= "3.12" and python_version < "4.0"
93
+ langchain==0.2.12 ; python_version >= "3.12" and python_version < "4.0"
94
+ langgraph==0.1.19 ; python_version >= "3.12" and python_version < "4.0"
95
+ langsmith==0.1.96 ; python_version >= "3.12" and python_version < "4.0"
96
+ markdown-it-py==3.0.0 ; python_version >= "3.12" and python_version < "4.0"
97
+ markupsafe==2.1.5 ; python_version >= "3.12" and python_version < "4.0"
98
+ matplotlib-inline==0.1.7 ; python_version >= "3.12" and python_version < "4.0"
99
+ matplotlib==3.9.0 ; python_version >= "3.12" and python_version < "4.0"
100
+ mdurl==0.1.2 ; python_version >= "3.12" and python_version < "4.0"
101
+ mistune==3.0.2 ; python_version >= "3.12" and python_version < "4.0"
102
+ msgpack==1.0.8 ; python_version >= "3.12" and python_version < "4.0"
103
+ multidict==6.0.5 ; python_version >= "3.12" and python_version < "4.0"
104
+ nbclient==0.10.0 ; python_version >= "3.12" and python_version < "4.0"
105
+ nbconvert==7.16.4 ; python_version >= "3.12" and python_version < "4.0"
106
+ nbformat==5.10.4 ; python_version >= "3.12" and python_version < "4.0"
107
+ nest-asyncio==1.6.0 ; python_version >= "3.12" and python_version < "4.0"
108
+ networkx==3.3 ; python_version >= "3.12" and python_version < "4.0"
109
+ networkx[default]==3.3 ; python_version >= "3.12" and python_version < "4.0"
110
+ notebook-shim==0.2.4 ; python_version >= "3.12" and python_version < "4.0"
111
+ notebook==7.2.1 ; python_version >= "3.12" and python_version < "4.0"
112
+ numpy==1.26.4 ; python_version >= "3.12" and python_version < "4.0"
113
+ openai==1.38.0 ; python_version >= "3.12" and python_version < "4.0"
114
+ orjson==3.10.6 ; python_version >= "3.12" and python_version < "4.0"
115
+ overrides==7.7.0 ; python_version >= "3.12" and python_version < "4.0"
116
+ packaging==24.1 ; python_version >= "3.12" and python_version < "4.0"
117
+ pandas==2.2.2 ; python_version >= "3.12" and python_version < "4.0"
118
+ pandocfilters==1.5.1 ; python_version >= "3.12" and python_version < "4.0"
119
+ parso==0.8.4 ; python_version >= "3.12" and python_version < "4.0"
120
+ pexpect==4.9.0 ; python_version >= "3.12" and python_version < "4.0" and (sys_platform != "win32" and sys_platform != "emscripten")
121
+ pillow==10.4.0 ; python_version >= "3.12" and python_version < "4.0"
122
+ platformdirs==4.2.2 ; python_version >= "3.12" and python_version < "4.0"
123
+ prometheus-client==0.20.0 ; python_version >= "3.12" and python_version < "4.0"
124
+ prompt-toolkit==3.0.47 ; python_version >= "3.12" and python_version < "4.0"
125
+ proto-plus==1.24.0 ; python_version >= "3.12" and python_version < "4.0"
126
+ protobuf==4.25.4 ; python_version >= "3.12" and python_version < "4.0"
127
+ psutil==6.0.0 ; python_version >= "3.12" and python_version < "4.0"
128
+ ptyprocess==0.7.0 ; python_version >= "3.12" and python_version < "4.0" and (sys_platform != "win32" and sys_platform != "emscripten" or os_name != "nt")
129
+ pure-eval==0.2.3 ; python_version >= "3.12" and python_version < "4.0"
130
+ pyarrow==17.0.0 ; python_version >= "3.12" and python_version < "4.0"
131
+ pyasn1-modules==0.4.0 ; python_version >= "3.12" and python_version < "4.0"
132
+ pyasn1==0.6.0 ; python_version >= "3.12" and python_version < "4.0"
133
+ pycparser==2.22 ; python_version >= "3.12" and python_version < "4.0"
134
+ pydantic-core==2.20.1 ; python_version >= "3.12" and python_version < "4.0"
135
+ pydantic==2.8.2 ; python_version >= "3.12" and python_version < "4.0"
136
+ pydeck==0.9.1 ; python_version >= "3.12" and python_version < "4.0"
137
+ pygments==2.18.0 ; python_version >= "3.12" and python_version < "4.0"
138
+ pyjwt[crypto]==2.9.0 ; python_version >= "3.12" and python_version < "4.0"
139
+ pyparsing==3.1.2 ; python_version >= "3.12" and python_version < "4.0"
140
+ python-dateutil==2.9.0.post0 ; python_version >= "3.12" and python_version < "4.0"
141
+ python-dotenv==1.0.1 ; python_version >= "3.12" and python_version < "4.0"
142
+ python-json-logger==2.0.7 ; python_version >= "3.12" and python_version < "4.0"
143
+ pytz==2024.1 ; python_version >= "3.12" and python_version < "4.0"
144
+ pyvis==0.3.2 ; python_version >= "3.12" and python_version < "4.0"
145
+ pywin32==306 ; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.12" and python_version < "4.0"
146
+ pywinpty==2.0.13 ; python_version >= "3.12" and python_version < "4.0" and os_name == "nt"
147
+ pyyaml==6.0.1 ; python_version >= "3.12" and python_version < "4.0"
148
+ pyzmq==26.1.0 ; python_version >= "3.12" and python_version < "4.0"
149
+ qtconsole==5.5.2 ; python_version >= "3.12" and python_version < "4.0"
150
+ qtpy==2.4.1 ; python_version >= "3.12" and python_version < "4.0"
151
+ referencing==0.35.1 ; python_version >= "3.12" and python_version < "4.0"
152
+ regex==2024.7.24 ; python_version >= "3.12" and python_version < "4.0"
153
+ requests==2.32.3 ; python_version >= "3.12" and python_version < "4.0"
154
+ rfc3339-validator==0.1.4 ; python_version >= "3.12" and python_version < "4.0"
155
+ rfc3986-validator==0.1.1 ; python_version >= "3.12" and python_version < "4.0"
156
+ rich==13.7.1 ; python_version >= "3.12" and python_version < "4.0"
157
+ rpds-py==0.19.1 ; python_version >= "3.12" and python_version < "4.0"
158
+ rsa==4.9 ; python_version >= "3.12" and python_version < "4"
159
+ scipy==1.14.0 ; python_version >= "3.12" and python_version < "4.0"
160
+ send2trash==1.8.3 ; python_version >= "3.12" and python_version < "4.0"
161
+ setuptools==72.1.0 ; python_version >= "3.12" and python_version < "4.0"
162
+ six==1.16.0 ; python_version >= "3.12" and python_version < "4.0"
163
+ smmap==5.0.1 ; python_version >= "3.12" and python_version < "4.0"
164
+ sniffio==1.3.1 ; python_version >= "3.12" and python_version < "4.0"
165
+ soupsieve==2.5 ; python_version >= "3.12" and python_version < "4.0"
166
+ sqlalchemy==2.0.31 ; python_version >= "3.12" and python_version < "4.0"
167
+ stack-data==0.6.3 ; python_version >= "3.12" and python_version < "4.0"
168
+ streamlit==1.37.0 ; python_version >= "3.12" and python_version < "4.0"
169
+ tenacity==8.5.0 ; python_version >= "3.12" and python_version < "4.0"
170
+ terminado==0.18.1 ; python_version >= "3.12" and python_version < "4.0"
171
+ tiktoken==0.7.0 ; python_version >= "3.12" and python_version < "4.0"
172
+ tinycss2==1.3.0 ; python_version >= "3.12" and python_version < "4.0"
173
+ toml==0.10.2 ; python_version >= "3.12" and python_version < "4.0"
174
+ toolz==0.12.1 ; python_version >= "3.12" and python_version < "4.0"
175
+ tornado==6.4.1 ; python_version >= "3.12" and python_version < "4.0"
176
+ tqdm==4.66.5 ; python_version >= "3.12" and python_version < "4.0"
177
+ traitlets==5.14.3 ; python_version >= "3.12" and python_version < "4.0"
178
+ types-python-dateutil==2.9.0.20240316 ; python_version >= "3.12" and python_version < "4.0"
179
+ typing-extensions==4.12.2 ; python_version >= "3.12" and python_version < "4.0"
180
+ tzdata==2024.1 ; python_version >= "3.12" and python_version < "4.0"
181
+ uri-template==1.3.0 ; python_version >= "3.12" and python_version < "4.0"
182
+ uritemplate==4.1.1 ; python_version >= "3.12" and python_version < "4.0"
183
+ urllib3==2.2.2 ; python_version >= "3.12" and python_version < "4.0"
184
+ watchdog==4.0.1 ; python_version >= "3.12" and python_version < "4.0" and platform_system != "Darwin"
185
+ wcwidth==0.2.13 ; python_version >= "3.12" and python_version < "4.0"
186
+ webcolors==24.6.0 ; python_version >= "3.12" and python_version < "4.0"
187
+ webencodings==0.5.1 ; python_version >= "3.12" and python_version < "4.0"
188
+ websocket-client==1.8.0 ; python_version >= "3.12" and python_version < "4.0"
189
+ widgetsnbextension==4.0.11 ; python_version >= "3.12" and python_version < "4.0"
190
+ yarl==1.9.4 ; python_version >= "3.12" and python_version < "4.0"