Naz786 commited on
Commit
e805de7
·
verified ·
1 Parent(s): 1ba6c2b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +111 -3
app.py CHANGED
@@ -1,8 +1,23 @@
1
  import streamlit as st
 
 
 
 
 
 
2
  import difflib
 
3
  import requests
4
  import datetime
5
  import streamlit.components.v1 as components
 
 
 
 
 
 
 
 
6
 
7
  # --- CONFIG ---
8
  # Place your API keys here
@@ -103,6 +118,14 @@ def get_explanation_prompt(code, programming_language, skill_level, user_role, e
103
  f"Explain this {programming_language} code for a {skill_level} {user_role}.{lang_instruction}\n{code}"
104
  )
105
 
 
 
 
 
 
 
 
 
106
  # --- STREAMLIT APP ---
107
  st.set_page_config(page_title="Code Workflows", layout="wide")
108
  st.title("Code Genie")
@@ -113,7 +136,7 @@ page = st.sidebar.radio("Navigate", ["Home", "Code Workflows", "Semantic Search"
113
  if page == "Home":
114
  st.header("Welcome to the Code Genie!")
115
  st.markdown("""
116
- - **Full Code Workflow:** Complete code analysis pipeline with explanation, refactoring, review, and testing
117
  - **Semantic Search:** Ask natural language questions about your code and get intelligent answers
118
  - **Code Comment Generator:** Helps you add helpful comments to your code for better readability
119
  """)
@@ -170,6 +193,32 @@ elif page == "Code Workflows":
170
  for t in timeline:
171
  report += f"## {t['step']}\n{t['output']}\n\n---\n\n"
172
  st.download_button("Download Report", report, file_name="ai_workflow_report.txt")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
 
174
  elif page == "Semantic Search":
175
  st.header("Semantic Search")
@@ -191,7 +240,7 @@ elif page == "Semantic Search":
191
  st.caption("Example questions:")
192
  st.write(", ".join(EXAMPLE_QUESTIONS))
193
 
194
- # Single input field for question (typed only)
195
  question = st.text_input("Ask a question about your code", key="sem_question")
196
 
197
  # Run Semantic Search button
@@ -206,6 +255,29 @@ elif page == "Semantic Search":
206
  answer = call_groq_api(prompt)
207
  st.success("Answer:")
208
  st.write(answer)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
209
 
210
  elif page == "Code Comment Generator":
211
  st.header("Code Comment Generator")
@@ -234,4 +306,40 @@ elif page == "Code Comment Generator":
234
  ])
235
  st.success("Commented code generated!")
236
  st.code(commented_code, language=programming_language.lower())
237
- st.download_button("Download Commented Code", commented_code, file_name="commented_code.txt")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
+ from PIL import Image
3
+ import tempfile
4
+ import os
5
+ import numpy as np
6
+ import cv2
7
+ import torch
8
  import difflib
9
+ import re
10
  import requests
11
  import datetime
12
  import streamlit.components.v1 as components
13
+ import io
14
+
15
+ from diffusers import DiffusionPipeline
16
+ from moviepy.editor import ImageSequenceClip
17
+
18
+ import insightface
19
+ from insightface.app import FaceAnalysis
20
+ from insightface.utils import face_align
21
 
22
  # --- CONFIG ---
23
  # Place your API keys here
 
118
  f"Explain this {programming_language} code for a {skill_level} {user_role}.{lang_instruction}\n{code}"
119
  )
120
 
121
+ # --- SESSION STATE FOR CHAT HISTORY ---
122
+ if "workflow_history" not in st.session_state:
123
+ st.session_state.workflow_history = []
124
+ if "semantic_history" not in st.session_state:
125
+ st.session_state.semantic_history = []
126
+ if "comment_history" not in st.session_state:
127
+ st.session_state.comment_history = []
128
+
129
  # --- STREAMLIT APP ---
130
  st.set_page_config(page_title="Code Workflows", layout="wide")
131
  st.title("Code Genie")
 
136
  if page == "Home":
137
  st.header("Welcome to the Code Genie!")
138
  st.markdown("""
139
+ - **Full Code Workflow:** Complete code analysis pipeline with explanation, refactoring, review, and testing (powered by Groq/Blackbox)
140
  - **Semantic Search:** Ask natural language questions about your code and get intelligent answers
141
  - **Code Comment Generator:** Helps you add helpful comments to your code for better readability
142
  """)
 
193
  for t in timeline:
194
  report += f"## {t['step']}\n{t['output']}\n\n---\n\n"
195
  st.download_button("Download Report", report, file_name="ai_workflow_report.txt")
196
+ # Save to chat history
197
+ st.session_state.workflow_history.append({
198
+ "timestamp": str(datetime.datetime.now()),
199
+ "user_code": code_input,
200
+ "params": {
201
+ "language": programming_language,
202
+ "skill": skill_level,
203
+ "role": user_role,
204
+ "explanation_language": explanation_language
205
+ },
206
+ "timeline": timeline,
207
+ "refactored_code": refactored_code
208
+ })
209
+ # Show chat history for workflows
210
+ st.markdown("### Workflow Chat History")
211
+ if st.button("Clear Workflow History"):
212
+ st.session_state.workflow_history = []
213
+ for entry in reversed(st.session_state.workflow_history):
214
+ st.markdown(f"**[{entry['timestamp']}]**")
215
+ st.code(entry["user_code"], language=entry["params"]["language"].lower())
216
+ for t in entry["timeline"]:
217
+ st.subheader(t["step"])
218
+ st.write(t["output"])
219
+ st.subheader("Code Diff (Original vs Refactored)")
220
+ st.code(get_inline_diff(entry["user_code"], entry["refactored_code"]), language=entry["params"]["language"].lower())
221
+ st.markdown("---")
222
 
223
  elif page == "Semantic Search":
224
  st.header("Semantic Search")
 
240
  st.caption("Example questions:")
241
  st.write(", ".join(EXAMPLE_QUESTIONS))
242
 
243
+ # Only text input for question
244
  question = st.text_input("Ask a question about your code", key="sem_question")
245
 
246
  # Run Semantic Search button
 
255
  answer = call_groq_api(prompt)
256
  st.success("Answer:")
257
  st.write(answer)
258
+ # Save to chat history
259
+ st.session_state.semantic_history.append({
260
+ "timestamp": str(datetime.datetime.now()),
261
+ "user_code": code_input,
262
+ "question": question,
263
+ "params": {
264
+ "language": programming_language,
265
+ "skill": skill_level,
266
+ "role": user_role,
267
+ "explanation_language": explanation_language
268
+ },
269
+ "answer": answer
270
+ })
271
+ # Show chat history for semantic search
272
+ st.markdown("### Semantic Search Chat History")
273
+ if st.button("Clear Semantic History"):
274
+ st.session_state.semantic_history = []
275
+ for entry in reversed(st.session_state.semantic_history):
276
+ st.markdown(f"**[{entry['timestamp']}]**")
277
+ st.code(entry["user_code"], language=entry["params"]["language"].lower())
278
+ st.markdown(f"**Q:** {entry['question']}")
279
+ st.markdown(f"**A:** {entry['answer']}")
280
+ st.markdown("---")
281
 
282
  elif page == "Code Comment Generator":
283
  st.header("Code Comment Generator")
 
306
  ])
307
  st.success("Commented code generated!")
308
  st.code(commented_code, language=programming_language.lower())
309
+ st.download_button("Download Commented Code", commented_code, file_name="commented_code.txt")
310
+ # Save to chat history
311
+ st.session_state.comment_history.append({
312
+ "timestamp": str(datetime.datetime.now()),
313
+ "user_code": code_input,
314
+ "params": {
315
+ "language": programming_language
316
+ },
317
+ "commented_code": commented_code
318
+ })
319
+ # Show chat history for code comments
320
+ st.markdown("### Code Comment Chat History")
321
+ if st.button("Clear Comment History"):
322
+ st.session_state.comment_history = []
323
+ for entry in reversed(st.session_state.comment_history):
324
+ st.markdown(f"**[{entry['timestamp']}]**")
325
+ st.code(entry["user_code"], language=entry["params"]["language"].lower())
326
+ st.markdown("**Commented Code:**")
327
+ st.code(entry["commented_code"], language=entry["params"]["language"].lower())
328
+ st.markdown("---")
329
+
330
+ st.markdown("---")
331
+ st.write("Powered by AnimateDiff (zeroscope), InsightFace, and moviepy.")
332
+
333
+ def split_code_into_chunks(code, lang):
334
+ if lang.lower() == "python":
335
+ # Corrected regex pattern for Python code splitting
336
+ pattern = r'(def\s+\w+\(.*?\):|class\s+\w+\(.*?\)?:)'
337
+ splits = re.split(pattern, code)
338
+ chunks = []
339
+ for i in range(1, len(splits), 2):
340
+ header = splits[i]
341
+ body = splits[i+1] if (i+1) < len(splits) else ""
342
+ chunks.append(header + body)
343
+ return chunks if chunks else [code]
344
+ else:
345
+ return [code]