MalikShehram commited on
Commit
bea0568
Β·
verified Β·
1 Parent(s): 27a0a07

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -68
app.py CHANGED
@@ -4,57 +4,57 @@ import requests
4
  from dotenv import load_dotenv
5
  import nltk
6
  from nltk.tokenize import sent_tokenize
7
- import numpy as np
8
  import pandas as pd
9
- from tqdm import tqdm
10
 
11
- # Initialize NLTK (download punkt if needed)
12
  nltk.download('punkt', quiet=True)
13
 
14
  # Load environment variables
15
  load_dotenv()
16
  BLACKBOX_API_KEY = os.getenv("BLACKBOX_API_KEY")
 
 
17
 
18
  class CodeCopilot:
19
  def __init__(self):
20
  self.chat_history = []
21
- self.context_window = 5
22
 
23
  def get_blackbox_response(self, prompt, max_tokens=300, temperature=0.7):
24
- """Get response from Blackbox AI API"""
25
  headers = {
26
- "Authorization": f"Bearer {BLACKBOX_API_KEY}",
27
- "Content-Type": "application/json"
28
- }
29
- data = {
30
- "prompt": prompt,
31
- "max_tokens": max_tokens,
32
- "temperature": temperature
33
  }
34
 
35
  try:
 
36
  response = requests.post(
37
- "https://api.blackbox.ai/generate",
38
  headers=headers,
39
- json=data,
 
 
 
 
 
40
  timeout=30
41
  )
42
  response.raise_for_status()
43
- return response.json().get("text", "No response text found.")
 
 
44
  except Exception as e:
45
- return f"Error: {str(e)}"
46
 
47
  def analyze_code_patterns(self, text):
48
  """Analyze text for coding patterns"""
49
  sentences = sent_tokenize(text)
50
- # Simple pattern detection (can be expanded)
51
  patterns = {
52
  'function_def': sum(1 for s in sentences if 'def ' in s),
53
  'class_def': sum(1 for s in sentences if 'class ' in s),
54
- 'loop': sum(1 for s in sentences if any(
55
- word in s for word in ['for ', 'while ', 'loop'])),
56
- 'conditional': sum(1 for s in sentences if any(
57
- word in s for word in ['if ', 'else ', 'elif ']))
58
  }
59
  return patterns
60
 
@@ -62,92 +62,86 @@ class CodeCopilot:
62
  """Generate suggestions based on detected patterns"""
63
  suggestions = []
64
  if patterns['function_def'] > 3:
65
- suggestions.append("Consider breaking down into smaller functions or using a class structure.")
66
  if patterns['loop'] > 2:
67
- suggestions.append("You might benefit from using list comprehensions or map/filter functions.")
68
  if patterns['conditional'] > 3:
69
- suggestions.append("Complex conditionals might be simplified using polymorphism or strategy pattern.")
70
  return "\n".join(suggestions) if suggestions else "No specific suggestions at this time."
71
 
72
- def process_input(self, user_input, history=None):
73
  """Process user input and generate response"""
74
  # Analyze patterns
75
  patterns = self.analyze_code_patterns(user_input)
76
- suggestions = self.generate_suggestions(patterns)
77
 
78
  # Create context-aware prompt
79
- context = "\n".join([f"User: {h[0]}\nAI: {h[1]}" for h in self.chat_history[-self.context_window:]])
80
- prompt = f"""
81
- Context:
 
 
82
  {context}
83
 
84
- User Input:
85
  {user_input}
86
-
87
- Respond as a helpful coding assistant that also provides suggestions for improvement.
88
- Suggestions to consider:
89
- {suggestions}
90
  """
91
 
92
- # Get response from Blackbox AI
93
  response = self.get_blackbox_response(prompt)
 
94
 
95
  # Update chat history
96
  self.chat_history.append((user_input, response))
97
 
98
- # Format full response with suggestions
99
- full_response = f"{response}\n\n=== Suggestions ===\n{suggestions}"
100
- return full_response
101
 
102
  # Initialize copilot
103
  copilot = CodeCopilot()
104
 
105
  # Gradio interface
106
- with gr.Blocks(title="AI Code Copilot") as demo:
107
- gr.Markdown("""
108
- # AI Code Copilot
109
- Your intelligent assistant for coding tasks that learns patterns and provides proactive suggestions.
110
- """)
111
 
112
  with gr.Row():
113
- with gr.Column():
114
  input_text = gr.Textbox(
115
- label="Your code or question",
116
  placeholder="Paste your code or ask a question...",
117
- lines=5
118
  )
119
- submit_btn = gr.Button("Generate")
120
 
121
- with gr.Column():
122
- output_text = gr.Textbox(
123
- label="Copilot Response",
124
- lines=10,
125
- interactive=False
126
- )
 
 
 
 
 
127
 
128
- with gr.Accordion("Pattern Analysis", open=False):
129
- pattern_display = gr.Dataframe(
130
- headers=["Pattern", "Count"],
131
- datatype=["str", "number"],
132
- interactive=False
133
- )
134
-
135
- def process_and_analyze(input_text):
136
- response = copilot.process_input(input_text)
137
- patterns = copilot.analyze_code_patterns(input_text)
138
  pattern_df = pd.DataFrame({
139
  "Pattern": list(patterns.keys()),
140
  "Count": list(patterns.values())
141
  })
142
- return response, pattern_df
143
 
144
  submit_btn.click(
145
- fn=process_and_analyze,
146
  inputs=input_text,
147
- outputs=[output_text, pattern_display]
 
 
 
 
 
 
148
  )
149
-
150
- demo.launch()
151
 
152
  if __name__ == "__main__":
153
  demo.launch()
 
4
  from dotenv import load_dotenv
5
  import nltk
6
  from nltk.tokenize import sent_tokenize
 
7
  import pandas as pd
 
8
 
9
+ # Initialize NLTK
10
  nltk.download('punkt', quiet=True)
11
 
12
  # Load environment variables
13
  load_dotenv()
14
  BLACKBOX_API_KEY = os.getenv("BLACKBOX_API_KEY")
15
+ if not BLACKBOX_API_KEY:
16
+ BLACKBOX_API_KEY = os.environ.get('BLACKBOX_API_KEY')
17
 
18
  class CodeCopilot:
19
  def __init__(self):
20
  self.chat_history = []
21
+ self.context_window = 3
22
 
23
  def get_blackbox_response(self, prompt, max_tokens=300, temperature=0.7):
24
+ """Get response using Blackbox's API"""
25
  headers = {
26
+ "Content-Type": "application/json",
27
+ "Authorization": f"Bearer {BLACKBOX_API_KEY}"
 
 
 
 
 
28
  }
29
 
30
  try:
31
+ # Correct API endpoint based on Blackbox documentation
32
  response = requests.post(
33
+ "https://developer.blackbox.ai/api/v1/chat/completions",
34
  headers=headers,
35
+ json={
36
+ "messages": [{"role": "user", "content": prompt}],
37
+ "max_tokens": max_tokens,
38
+ "temperature": temperature,
39
+ "model": "blackbox-code"
40
+ },
41
  timeout=30
42
  )
43
  response.raise_for_status()
44
+ return response.json()["choices"][0]["message"]["content"]
45
+ except requests.exceptions.RequestException as e:
46
+ return f"API Error: {str(e)}"
47
  except Exception as e:
48
+ return f"Processing Error: {str(e)}"
49
 
50
  def analyze_code_patterns(self, text):
51
  """Analyze text for coding patterns"""
52
  sentences = sent_tokenize(text)
 
53
  patterns = {
54
  'function_def': sum(1 for s in sentences if 'def ' in s),
55
  'class_def': sum(1 for s in sentences if 'class ' in s),
56
+ 'loop': sum(1 for s in sentences if any(word in s for word in ['for ', 'while ', 'loop'])),
57
+ 'conditional': sum(1 for s in sentences if any(word in s for word in ['if ', 'else ', 'elif ']))
 
 
58
  }
59
  return patterns
60
 
 
62
  """Generate suggestions based on detected patterns"""
63
  suggestions = []
64
  if patterns['function_def'] > 3:
65
+ suggestions.append("πŸ” Consider breaking down into smaller functions or using a class structure.")
66
  if patterns['loop'] > 2:
67
+ suggestions.append("πŸ”„ You might benefit from list comprehensions or map/filter functions.")
68
  if patterns['conditional'] > 3:
69
+ suggestions.append("βš– Complex conditionals might be simplified using polymorphism or strategy pattern.")
70
  return "\n".join(suggestions) if suggestions else "No specific suggestions at this time."
71
 
72
+ def process_input(self, user_input):
73
  """Process user input and generate response"""
74
  # Analyze patterns
75
  patterns = self.analyze_code_patterns(user_input)
 
76
 
77
  # Create context-aware prompt
78
+ context = "\nPrevious conversation:\n" + "\n".join(
79
+ [f"User: {h[0]}\nAI: {h[1]}" for h in self.chat_history[-self.context_window:]])
80
+
81
+ prompt = f"""You are an expert coding assistant. Analyze this code and provide helpful suggestions:
82
+
83
  {context}
84
 
85
+ New input:
86
  {user_input}
 
 
 
 
87
  """
88
 
89
+ # Get response
90
  response = self.get_blackbox_response(prompt)
91
+ suggestions = self.generate_suggestions(patterns)
92
 
93
  # Update chat history
94
  self.chat_history.append((user_input, response))
95
 
96
+ return response, patterns, suggestions
 
 
97
 
98
  # Initialize copilot
99
  copilot = CodeCopilot()
100
 
101
  # Gradio interface
102
+ with gr.Blocks(theme=gr.themes.Soft(), title="AI Code Copilot") as demo:
103
+ gr.Markdown("""<h1 style="text-align: center">πŸ€– AI Code Copilot</h1>""")
 
 
 
104
 
105
  with gr.Row():
106
+ with gr.Column(scale=3):
107
  input_text = gr.Textbox(
108
+ label="Your Code or Question",
109
  placeholder="Paste your code or ask a question...",
110
+ lines=7
111
  )
112
+ submit_btn = gr.Button("Generate", variant="primary")
113
 
114
+ with gr.Column(scale=7):
115
+ with gr.Tab("Assistant Response"):
116
+ output_text = gr.Markdown()
117
+ with gr.Tab("Suggestions"):
118
+ suggestions = gr.Markdown()
119
+ with gr.Tab("Pattern Analysis"):
120
+ pattern_display = gr.Dataframe(
121
+ headers=["Pattern", "Count"],
122
+ datatype=["str", "number"],
123
+ interactive=False
124
+ )
125
 
126
+ def process_input(user_input):
127
+ response, patterns, sugg = copilot.process_input(user_input)
 
 
 
 
 
 
 
 
128
  pattern_df = pd.DataFrame({
129
  "Pattern": list(patterns.keys()),
130
  "Count": list(patterns.values())
131
  })
132
+ return response, sugg, pattern_df
133
 
134
  submit_btn.click(
135
+ fn=process_input,
136
  inputs=input_text,
137
+ outputs=[output_text, suggestions, pattern_display]
138
+ )
139
+
140
+ input_text.submit(
141
+ fn=process_input,
142
+ inputs=input_text,
143
+ outputs=[output_text, suggestions, pattern_display]
144
  )
 
 
145
 
146
  if __name__ == "__main__":
147
  demo.launch()