workbykait commited on
Commit
80f4fa8
·
verified ·
1 Parent(s): d8882fa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -8
app.py CHANGED
@@ -5,6 +5,7 @@ import random
5
  from datetime import datetime, timedelta
6
  import plotly.express as px
7
  import re
 
8
 
9
  api_key = os.getenv("CEREBRAS_API_KEY")
10
  url = "https://api.cerebras.ai/v1/chat/completions"
@@ -41,16 +42,31 @@ def generate_random_log():
41
  entries.append(f"{time} | {lat}N, {lon}W | Frequency: {freq} GHz | Signal Strength: {signal}% | Message: {message}")
42
  return "\n".join(entries)
43
 
44
- def analyze_log(log_text):
45
  if not log_text.strip():
46
- return "Error: Please enter a log.", None, None
47
- LOG_HISTORY.append(log_text)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  data = {
49
  "model": "llama-4-scout-17b-16e-instruct",
50
  "messages": [
51
  {
52
  "role": "user",
53
- "content": "Analyze this satellite radio log and summarize in bullet points. Include interference risk scores (0-100, low signal <70% = high risk >80, emergency = 90). Ensure frequencies in issues and details:\n- Issues (e.g., low signal, noise, interference with frequency, risk score)\n- High-priority messages (e.g., emergencies, warnings)\n- Key details (coordinates, times, frequencies, signal strengths)\nLog:\n" + log_text
54
  }
55
  ],
56
  "max_completion_tokens": 500,
@@ -72,7 +88,7 @@ def analyze_log(log_text):
72
  html += "</ul></div>"
73
  signals = []
74
  times = []
75
- for line in log_text.split("\n"):
76
  if "Signal Strength" in line:
77
  match = re.search(r"Signal Strength: (\d+)%", line)
78
  if match:
@@ -81,9 +97,10 @@ def analyze_log(log_text):
81
  if time_match:
82
  times.append(time_match.group(1)[-5:])
83
  fig = px.line(x=times, y=signals, labels={"x": "Time", "y": "Signal (%)"}, title="Signal Trend") if signals and len(signals) == len(times) else None
84
- return summary, html, fig
 
85
  except Exception as e:
86
- return f"Error: API call failed - {str(e)}", None, None
87
 
88
  def generate_alert(log_text):
89
  if not log_text.strip():
@@ -151,6 +168,7 @@ with gr.Blocks(css=css) as interface:
151
  gr.Markdown("# Satellite Signal Log Analyzer", elem_classes="header")
152
  gr.Markdown("Analyze logs for issues, alerts, and trends.", elem_classes="subheader")
153
  log_input = gr.Textbox(lines=5, show_label=False, placeholder="Enter or generate a log...")
 
154
  with gr.Row():
155
  sample_button = gr.Button("Sample Log")
156
  random_button = gr.Button("Random Log")
@@ -159,15 +177,18 @@ with gr.Blocks(css=css) as interface:
159
  analyze_button = gr.Button("Analyze")
160
  alert_button = gr.Button("Alert")
161
  compare_button = gr.Button("Compare Logs")
 
162
  output = gr.HTML(show_label=False)
163
  plot_output = gr.Plot(show_label=False)
164
  alert_output = gr.HTML(show_label=False)
165
  compare_output = gr.HTML(show_label=False)
 
166
  sample_button.click(fn=load_sample_log, outputs=log_input)
167
  random_button.click(fn=generate_random_log, outputs=log_input)
168
  clear_button.click(fn=clear_log, outputs=log_input)
169
- analyze_button.click(fn=analyze_log, inputs=log_input, outputs=[output, output, plot_output])
170
  alert_button.click(fn=generate_alert, inputs=log_input, outputs=alert_output)
171
  compare_button.click(fn=compare_logs, outputs=[compare_output, compare_output])
 
172
 
173
  interface.launch()
 
5
  from datetime import datetime, timedelta
6
  import plotly.express as px
7
  import re
8
+ import io
9
 
10
  api_key = os.getenv("CEREBRAS_API_KEY")
11
  url = "https://api.cerebras.ai/v1/chat/completions"
 
42
  entries.append(f"{time} | {lat}N, {lon}W | Frequency: {freq} GHz | Signal Strength: {signal}% | Message: {message}")
43
  return "\n".join(entries)
44
 
45
+ def filter_log_by_frequency(log_text, min_freq, max_freq):
46
  if not log_text.strip():
47
+ return log_text
48
+ filtered = []
49
+ for line in log_text.split("\n"):
50
+ match = re.search(r"Frequency: (\d+\.\d) GHz", line)
51
+ if match:
52
+ freq = float(match.group(1))
53
+ if min_freq <= freq <= max_freq:
54
+ filtered.append(line)
55
+ else:
56
+ filtered.append(line) # Keep non-frequency lines
57
+ return "\n".join(filtered) if filtered else "No logs in frequency range."
58
+
59
+ def analyze_log(log_text, min_freq, max_freq):
60
+ filtered_log = filter_log_by_frequency(log_text, min_freq, max_freq)
61
+ if not filtered_log.strip() or filtered_log.startswith("No logs"):
62
+ return filtered_log, None, None, None
63
+ LOG_HISTORY.append(filtered_log)
64
  data = {
65
  "model": "llama-4-scout-17b-16e-instruct",
66
  "messages": [
67
  {
68
  "role": "user",
69
+ "content": "Analyze this satellite radio log and summarize in bullet points. Include interference risk scores (0-100, low signal <70% = high risk >80, emergency = 90). Ensure frequencies in issues and details:\n- Issues (e.g., low signal, noise, interference with frequency, risk score)\n- High-priority messages (e.g., emergencies, warnings)\n- Key details (coordinates, times, frequencies, signal strengths)\nLog:\n" + filtered_log
70
  }
71
  ],
72
  "max_completion_tokens": 500,
 
88
  html += "</ul></div>"
89
  signals = []
90
  times = []
91
+ for line in filtered_log.split("\n"):
92
  if "Signal Strength" in line:
93
  match = re.search(r"Signal Strength: (\d+)%", line)
94
  if match:
 
97
  if time_match:
98
  times.append(time_match.group(1)[-5:])
99
  fig = px.line(x=times, y=signals, labels={"x": "Time", "y": "Signal (%)"}, title="Signal Trend") if signals and len(signals) == len(times) else None
100
+ export_file = io.StringIO(summary)
101
+ return summary, html, fig, gr.File(value=export_file, file_name="summary.txt", visible=True)
102
  except Exception as e:
103
+ return f"Error: API call failed - {str(e)}", None, None, None
104
 
105
  def generate_alert(log_text):
106
  if not log_text.strip():
 
168
  gr.Markdown("# Satellite Signal Log Analyzer", elem_classes="header")
169
  gr.Markdown("Analyze logs for issues, alerts, and trends.", elem_classes="subheader")
170
  log_input = gr.Textbox(lines=5, show_label=False, placeholder="Enter or generate a log...")
171
+ freq_slider = gr.Slider(minimum=14.0, maximum=15.0, step=0.1, value=[14.0, 15.0], label="Frequency Range (GHz)")
172
  with gr.Row():
173
  sample_button = gr.Button("Sample Log")
174
  random_button = gr.Button("Random Log")
 
177
  analyze_button = gr.Button("Analyze")
178
  alert_button = gr.Button("Alert")
179
  compare_button = gr.Button("Compare Logs")
180
+ export_button = gr.Button("Export")
181
  output = gr.HTML(show_label=False)
182
  plot_output = gr.Plot(show_label=False)
183
  alert_output = gr.HTML(show_label=False)
184
  compare_output = gr.HTML(show_label=False)
185
+ export_output = gr.File(show_label=False, visible=False)
186
  sample_button.click(fn=load_sample_log, outputs=log_input)
187
  random_button.click(fn=generate_random_log, outputs=log_input)
188
  clear_button.click(fn=clear_log, outputs=log_input)
189
+ analyze_button.click(fn=analyze_log, inputs=[log_input, freq_slider], outputs=[output, output, plot_output, export_output])
190
  alert_button.click(fn=generate_alert, inputs=log_input, outputs=alert_output)
191
  compare_button.click(fn=compare_logs, outputs=[compare_output, compare_output])
192
+ export_button.click(fn=lambda: None, outputs=export_output)
193
 
194
  interface.launch()