Kyle commited on
Commit
cf76c85
·
1 Parent(s): 469e9cf
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +1 -0
  2. app.py +338 -0
  3. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:0.json +3 -0
  4. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:10.json +3 -0
  5. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:13.json +3 -0
  6. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:15.json +3 -0
  7. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:16.json +3 -0
  8. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:18.json +3 -0
  9. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:19.json +3 -0
  10. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:2.json +3 -0
  11. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:20.json +3 -0
  12. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:22.json +3 -0
  13. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:23.json +3 -0
  14. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:24.json +3 -0
  15. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:25.json +3 -0
  16. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:27.json +3 -0
  17. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:28.json +3 -0
  18. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:29.json +3 -0
  19. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:3.json +3 -0
  20. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:30.json +3 -0
  21. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:32.json +3 -0
  22. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:34.json +3 -0
  23. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:35.json +3 -0
  24. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:36.json +3 -0
  25. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:37.json +3 -0
  26. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:39.json +3 -0
  27. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:4.json +3 -0
  28. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:40.json +3 -0
  29. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:42.json +3 -0
  30. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:46.json +3 -0
  31. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:5.json +3 -0
  32. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:6.json +3 -0
  33. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:7.json +3 -0
  34. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:80.json +3 -0
  35. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:9.json +3 -0
  36. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:12.json +3 -0
  37. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:126.json +3 -0
  38. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:2.json +3 -0
  39. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:32.json +3 -0
  40. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:4.json +3 -0
  41. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:5.json +3 -0
  42. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:63.json +3 -0
  43. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:71.json +3 -0
  44. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:84.json +3 -0
  45. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-3:34.json +3 -0
  46. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-4:26.json +3 -0
  47. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-4:29.json +3 -0
  48. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-5:12.json +3 -0
  49. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-5:2.json +3 -0
  50. data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-5:6.json +3 -0
.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
+ *.json filter=lfs diff=lfs merge=lfs -text
app.py ADDED
@@ -0,0 +1,338 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import html
2
+ import json
3
+ import os
4
+ import re
5
+ from glob import glob
6
+ from typing import Any, Dict, List
7
+
8
+ import gradio as gr
9
+
10
+
11
+ # Regex to capture common LaTeX math delimiters
12
+ MATH_PATTERN = re.compile(
13
+ r"(\$\$(.*?)\$\$)" # $$block$$
14
+ r"|(\$([^\$\n]+?)\$)" # $inline$
15
+ r"|(\\\[(.*?)\\\])" # \[block\]
16
+ r"|(\\\(([^\n]+?)\\\))", # \(inline\)
17
+ re.DOTALL,
18
+ )
19
+
20
+
21
+ def format_step_content(content: str) -> str:
22
+ """Render content to simple HTML with basic LaTeX handling.
23
+
24
+ This keeps things lightweight: escape non-math parts and preserve
25
+ math segments literally so the viewer can copy/read the LaTeX.
26
+
27
+ Args:
28
+ content: Raw text content possibly containing LaTeX snippets.
29
+
30
+ Returns:
31
+ Safe HTML string for display.
32
+ """
33
+ if not content:
34
+ return ""
35
+
36
+ text = content
37
+ rendered_parts: list[str] = []
38
+ last_idx = 0
39
+
40
+ for m in MATH_PATTERN.finditer(text):
41
+ # Non-math prefix
42
+ prefix = text[last_idx : m.start()]
43
+ if prefix:
44
+ rendered_parts.append(html.escape(prefix).replace("\n", "<br>"))
45
+
46
+ # Math segment (kept as-is, escaped for HTML visibility)
47
+ rendered_parts.append(html.escape(m.group(0)).replace("\n", "<br>"))
48
+ last_idx = m.end()
49
+
50
+ # Trailing non-math
51
+ tail = text[last_idx:]
52
+ if tail:
53
+ rendered_parts.append(html.escape(tail).replace("\n", "<br>"))
54
+
55
+ return "".join(rendered_parts)
56
+
57
+
58
+ def create_step_html(step: Dict[str, Any], step_num: int, border_color: str) -> str:
59
+ """Create HTML for a single step (no token counting).
60
+
61
+ Args:
62
+ step: The step dictionary to render.
63
+ step_num: 1-based step index.
64
+ border_color: CSS color for the step border.
65
+
66
+ Returns:
67
+ HTML string for the step.
68
+ """
69
+ html_out = f"""
70
+ <details style="margin: 8px 0;">
71
+ <summary style="cursor: pointer; color: {border_color}; font-weight: bold;">
72
+ Step {step_num}
73
+ </summary>
74
+ <div style="
75
+ background-color: white;
76
+ border-radius: 6px;
77
+ padding: 12px;
78
+ margin: 8px 0;
79
+ border-left: 4px solid {border_color};
80
+ ">
81
+ """
82
+
83
+ observation_text = str(step.get("observation", "")) if step.get("observation") else "None"
84
+ html_out += f"""
85
+ <details style="margin: 8px 0;">
86
+ <summary style="cursor: pointer; color: #666; font-size: 0.9em;">Observation</summary>
87
+ <div style="background-color: #f8f9fa; padding: 8px; border-radius: 4px; margin-top: 4px; color: #333;">
88
+ {format_step_content(observation_text)}
89
+ </div>
90
+ </details>
91
+ """
92
+
93
+ thought_text = step.get("thought", "") if step.get("thought") else "None"
94
+ html_out += f"""
95
+ <details style="margin: 8px 0;">
96
+ <summary style="cursor: pointer; color: #666; font-size: 0.9em;">Thought</summary>
97
+ <div style="background-color: #f8f9fa; padding: 8px; border-radius: 4px; margin-top: 4px; color: #333;">
98
+ {format_step_content(thought_text)}
99
+ </div>
100
+ </details>
101
+ """
102
+
103
+ action_text = ""
104
+ action = step.get("action")
105
+ if action:
106
+ if isinstance(action, dict) and "action" in action:
107
+ action_text = action["action"]
108
+ else:
109
+ action_text = str(action)
110
+
111
+ html_out += f"""
112
+ <div style="margin: 8px 0;">
113
+ <strong style="color: #333;">Action:</strong>
114
+ <div style="background-color: #f8f9fa; padding: 8px; border-radius: 4px; margin-top: 4px; color: #333;">
115
+ {format_step_content(action_text)}
116
+ </div>
117
+ </div>
118
+ """
119
+
120
+ reward = step.get("reward", 0.0)
121
+ html_out += f"""
122
+ <div style="margin: 8px 0;">
123
+ <strong style="color: #333;">Reward:</strong> <span style="color: #333;">{reward}</span>
124
+ </div>
125
+ """
126
+
127
+ html_out += "</div></details>"
128
+ return html_out
129
+
130
+
131
+ def get_agent_color(agent_name: str) -> tuple[str, str]:
132
+ """Assign a stable color pair to an agent name.
133
+
134
+ Args:
135
+ agent_name: Agent identifier string.
136
+
137
+ Returns:
138
+ Tuple of (background_color, border_color).
139
+ """
140
+ # Simple stable hash -> hue
141
+ hue = (abs(hash(agent_name)) % 360)
142
+ bg_color = f"hsl({hue}, 40%, 92%)"
143
+ border_color = f"hsl({hue}, 60%, 40%)"
144
+ return bg_color, border_color
145
+
146
+
147
+ def create_trajectory_html(agent_name: str, trajectory: Dict[str, Any]) -> str:
148
+ """Create HTML for a trajectory (no tokenization or chat rendering)."""
149
+ bg_color, border_color = get_agent_color(agent_name)
150
+
151
+ agent_display = agent_name
152
+
153
+ html_out = f"""
154
+ <div style="
155
+ background-color: {bg_color};
156
+ border-radius: 8px;
157
+ padding: 16px;
158
+ margin: 10px 0;
159
+ border-left: 4px solid {border_color};
160
+ ">
161
+ <div style="font-weight: bold; color: {border_color}; margin-bottom: 10px;">{agent_display}</div>
162
+ """
163
+
164
+ steps = trajectory.get("steps", [])
165
+ for i, step in enumerate(steps):
166
+ html_out += create_step_html(step, i + 1, border_color)
167
+
168
+ html_out += "</div>"
169
+ return html_out
170
+
171
+
172
+ def create_episode_view(episode: Dict[str, Any]) -> str:
173
+ """Create HTML view for an episode (lightweight).
174
+
175
+ Args:
176
+ episode: Episode dictionary to render.
177
+
178
+ Returns:
179
+ HTML string.
180
+ """
181
+ episode_id = episode.get("id", "")
182
+ termination_reason = episode.get("termination_reason", "")
183
+
184
+ html_out = f"""
185
+ <div style="max-width: 1200px; margin: 0 auto; font-family: Arial, sans-serif;">
186
+ <div style="
187
+ background-color: #f8f9fa;
188
+ border-radius: 8px;
189
+ padding: 20px;
190
+ margin-bottom: 20px;
191
+ border-left: 4px solid #007bff;
192
+ ">
193
+ <h2 style="margin: 0 0 12px 0; color: #333;">
194
+ Episode: {episode_id}
195
+ </h2>
196
+ <div style="color:#333; margin-bottom: 16px;">
197
+ <strong>Termination:</strong> <span>{termination_reason}</span>
198
+ </div>
199
+ </div>
200
+ """
201
+
202
+ task = episode.get("task", {})
203
+ if task and "question" in task:
204
+ html_out += f"""
205
+ <div style="
206
+ background-color: #e3f2fd;
207
+ border-radius: 8px;
208
+ padding: 16px;
209
+ margin-bottom: 20px;
210
+ border-left: 4px solid #1976d2;
211
+ ">
212
+ <h3 style="margin: 0 0 12px 0; color: #1976d2;">Problem Statement</h3>
213
+ <div style="background-color: white; padding: 12px; border-radius: 4px; color: #333;">
214
+ {format_step_content(task["question"])}
215
+ </div>
216
+ </div>
217
+ """
218
+
219
+ html_out += """
220
+ <div style="
221
+ border: 2px solid #ddd;
222
+ border-radius: 8px;
223
+ padding: 20px;
224
+ background-color: white;
225
+ ">
226
+ <h3 style="margin: 0 0 16px 0; color: #333;">Trajectories</h3>
227
+ """
228
+
229
+ trajectories = episode.get("trajectories", [])
230
+ for agent_name, trajectory in trajectories:
231
+ html_out += create_trajectory_html(agent_name, trajectory)
232
+
233
+ html_out += "</div></div>"
234
+ return html_out
235
+
236
+
237
+ def list_runs(data_dir: str) -> list[str]:
238
+ """List subdirectories inside the data directory.
239
+
240
+ Args:
241
+ data_dir: Path to the parent data directory.
242
+
243
+ Returns:
244
+ Sorted list of subdirectory names (runs).
245
+ """
246
+ if not data_dir or not os.path.isdir(data_dir):
247
+ return []
248
+ entries = [name for name in os.listdir(data_dir) if os.path.isdir(os.path.join(data_dir, name))]
249
+ return sorted(entries)
250
+
251
+
252
+ def list_episode_files(run_dir: str) -> list[str]:
253
+ """List episode JSON files inside a run directory.
254
+
255
+ Args:
256
+ run_dir: Absolute path to a run directory.
257
+
258
+ Returns:
259
+ Sorted list of file basenames.
260
+ """
261
+ if not run_dir or not os.path.isdir(run_dir):
262
+ return []
263
+ files = sorted(glob(os.path.join(run_dir, "*.json")))
264
+ return [os.path.basename(p) for p in files]
265
+
266
+
267
+ def load_episode_from_file(file_path: str) -> Dict[str, Any]:
268
+ """Load a single-episode JSON file into a dictionary.
269
+
270
+ Args:
271
+ file_path: Absolute path to JSON file containing one episode dict.
272
+
273
+ Returns:
274
+ Episode dictionary.
275
+ """
276
+ with open(file_path) as f:
277
+ data = json.load(f)
278
+ # If file accidentally contains a list, take first element
279
+ if isinstance(data, list):
280
+ data = data[0] if data else {}
281
+ return data
282
+
283
+
284
+ def create_gradio_interface(data_dir: str):
285
+ """Create the lightweight viewer with two dropdowns.
286
+
287
+ Args:
288
+ data_dir: Parent directory that contains run subdirectories.
289
+
290
+ Returns:
291
+ Gradio Blocks app.
292
+ """
293
+ runs = list_runs(data_dir)
294
+
295
+ with gr.Blocks(title="Simple Episode Viewer") as demo:
296
+ with gr.Group():
297
+ with gr.Row():
298
+ run_dropdown = gr.Dropdown(choices=runs, value=None, label="Run (subdirectory)")
299
+ episode_dropdown = gr.Dropdown(choices=[], value=None, label="Episode (file)")
300
+
301
+ display_area = gr.HTML(label="Episode View", value="<p>Select a run and episode.</p>")
302
+
303
+ def update_runs(dir_value: str):
304
+ available_runs = list_runs(dir_value)
305
+ # Start with no run selected by default
306
+ return (
307
+ gr.Dropdown(choices=available_runs, value=None),
308
+ gr.Dropdown(choices=[], value=None),
309
+ "<p>Select a run and episode.</p>",
310
+ )
311
+
312
+ def on_run_change(selected_run: str):
313
+ run_path = os.path.join(data_dir, selected_run) if selected_run else None
314
+ episodes = list_episode_files(run_path) if run_path else []
315
+ return gr.Dropdown(choices=episodes, value=(episodes[0] if episodes else None)), "<p>Select an episode.</p>"
316
+
317
+ def on_episode_change(selected_episode: str, selected_run: str):
318
+ if not selected_episode or not selected_run:
319
+ return "<p>Select a run and episode.</p>"
320
+ file_path = os.path.join(data_dir, selected_run, selected_episode)
321
+ try:
322
+ episode = load_episode_from_file(file_path)
323
+ return create_episode_view(episode)
324
+ except Exception as e:
325
+ return f"<p>Error loading episode: {html.escape(str(e))}</p>"
326
+
327
+ # Wire events
328
+ run_dropdown.change(on_run_change, inputs=[run_dropdown], outputs=[episode_dropdown, display_area])
329
+ episode_dropdown.change(on_episode_change, inputs=[episode_dropdown, run_dropdown], outputs=[display_area])
330
+
331
+ return demo
332
+
333
+
334
+ if __name__ == "__main__":
335
+ demo = create_gradio_interface("./data")
336
+ demo.launch()
337
+
338
+
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:0.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bf9b4b294750fa8b3c92e04983f90d89ba57b4eb9f37a0a908611a4326ba9384
3
+ size 10486367
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:10.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:94befd39e1a2569f9d586711ea1ca9831d0e0adb9a8537774a47a9b3cc4bd8ac
3
+ size 10421562
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:13.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fe6718d2f94f88ff114c4e2a77c7220b5205cbf1150216f68141d53830211419
3
+ size 9943046
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:15.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:68531341de4e4d860a1b792fb7cb79ad42779a1dd2763f87e1042f5710331294
3
+ size 10344811
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:16.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b445137e1fcc9f0a87335964d9b5b3c0b8969d49e2102d62d8e3ffbff14b9848
3
+ size 10687113
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:18.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1b0d85c90f45a258a9350b7529771028162bb80f21274f7e81c9003d703fcf2e
3
+ size 9452477
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:19.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cf0aa08f665d0df87e74ed773bc53174160b7c917e52cca8d88d39a058b0533a
3
+ size 11188617
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:2.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5838420427e9b02b6abeb5894269895cd27b616cdc6fdd3dcdbc0608800bdab2
3
+ size 10879355
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:20.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5a7fe58b0f4bcd6ccbe20bd3f2adf3f56c6e3ff6c44a632228d1cf6eb75ab6cb
3
+ size 9746168
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:22.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b1583aba82852ce258cd5dd38d04daab9ce99239ca0c5641240b2e8883b48a0d
3
+ size 10692119
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:23.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d9b3374f5dac1cc770d8ede3850b9a851d3b24f97f32bb7969689d1bffd818fa
3
+ size 11053855
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:24.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6987654a6662caf5ea0fa366ef835d0564eafe25d86a2c416841da2a165e6f73
3
+ size 8097252
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:25.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5fb0cd9bcee28d82e832c49619c5637eaaced370f564a8f34436388aac22bb47
3
+ size 9340956
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:27.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ed11d88773b3c6bd28d83bde7da5da01013cdfbce235aa7b60c701c0b39ebcba
3
+ size 10638893
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:28.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7f970e45878a78f6af3e162c09ec210d28c3a0344872ac68b8f7c86e742b0a5c
3
+ size 10918467
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:29.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c54c754f3e010b1f1d7bfd1529b2d07dbe73556aa126452b6cf3922c31ec1f90
3
+ size 10969519
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:3.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:64087d32674c0b0d937cd608f371ec4d2e53466513c535e6b8340b9dec97a285
3
+ size 10482133
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:30.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0b265205f8942103a49ab26e0f19f2a8604adf33119c61f37da96439c7b7b485
3
+ size 10044106
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:32.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e8d8d1f4b5640637db033a61aad8257bf1ab45496b06f285767589536d6b1a90
3
+ size 10330372
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:34.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1ab5181f248266b2ba160fb1fb539d5e71935e2126f5ab425951573f163c8a70
3
+ size 10835535
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:35.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7718447c57f7edda30cfed6e95b86ede6948aa805d002455356b3da8f86fba95
3
+ size 11024069
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:36.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1a53bb09c62acc9300cb6069fbf11ee52c9e549b518b90fc9f2469456bdd26ea
3
+ size 10103394
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:37.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:847edf4d677599b3deb6a234c3a8e62dc32aa067d2b06876f09b8f2bef3ac302
3
+ size 10504399
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:39.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f5e2ca66d9b700a02480552f19836452a0f53412e623eac707e5405e9f82b4c6
3
+ size 10813348
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:4.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:424c3d13a4d3a7e5f1d3f67f5800aaeb0a83a40a3201315b58c484320ba79fe9
3
+ size 11524209
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:40.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ef02c0af83e22c773843ae4219f07ba8436ab52a38a763e3c05bcb57addb32d0
3
+ size 9893212
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:42.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:12a5341f8ed0db6cb94b7b51b673894063a3af74b4fe9e2719b6493518d6b652
3
+ size 8225547
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:46.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:82706606ddc16a01d48948830a84feaee5e4eeb6a843d239610528b5c8092f27
3
+ size 6703011
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:5.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7ed8b875bdb54fe00d4cec0daf2fb80807f551cd7415b747cee301040f12290b
3
+ size 10353720
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:6.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:80785d4a856ce2ff33cd782a847a05141d9f2af4c1e95472c658904ca143c486
3
+ size 9599675
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:7.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9cd0271811f6bc3c3ad5652c16297188750810090a29300ab09a598e496e3d1c
3
+ size 10738487
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:80.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:68e1702db4f5377cd589722e8ab2b8525712d353237736ab8140c9fadd53399f
3
+ size 7950215
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-1:9.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:324d637e578ecdd96fd4365b575f701dc9e9c6ca04d33311662f47294e2ab08f
3
+ size 11333180
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:12.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8ffc30ace3d8e5aa0b7fe4c2046712862f8647c1efe465fbe1ce51ef614ac253
3
+ size 5596267
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:126.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:330c0e7f070f7129d8f0c2ba3fce68a35e24ce2040b732abb4d31ac1863515eb
3
+ size 2643848
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:2.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:06448ccd9a6d9efd32a8ef5116e1af1ec239a58f36c8c6e126050db289df79c5
3
+ size 907208
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:32.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:651c2c5326c8594d9383274aaa6467201d6f167448c47d80dd7f7729ddb329c8
3
+ size 6750006
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:4.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ad96beeac8a15f4e955d1799297986a64cfa124027c4e3c272ac20323f8f3ac2
3
+ size 5805877
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:5.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b80d0692ffd893ee515a0ffb73ae22dc241aa83d9b875d7eb8f5e5b9f27fe527
3
+ size 6532641
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:63.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:89ffb9b635df50f27ccf4c07d8dde66854221cad2d35862402850d8a8468bc91
3
+ size 4510478
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:71.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e5b727dd8db717cd18385cfd7ba0d4c21cb08d37c698ad3c184ed32fb34be983
3
+ size 2630821
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-2:84.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4d23e6c01f7821f8adbe9ef774d3585b7a0fc8e7be4da217b330d28fd3a02a31
3
+ size 3647616
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-3:34.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:244b52efd7a6552876540e26dfb1971f2bb6c0aaa764b1d7a3eaa8286bcc7129
3
+ size 3779706
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-4:26.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b986dfcb32f5f2fb88179ce985511fa93a88e1c8e6755dee690f3ab8a2257833
3
+ size 3255900
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-4:29.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:85c09714cdb2225cc6158a73135fc7c24a34f12c863b40bc07e42589d1cb40a5
3
+ size 3596615
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-5:12.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a766eb7ed7146bd5ab1e783ba0450b601ce8eb0ddf3ef81bdc475eb1138631c3
3
+ size 1829229
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-5:2.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9243427b2285c6e2db53dc105ae6b88722376bc734a0e8825e779c97da61e012
3
+ size 1802961
data/imo-simple-gps-oss-120b-0908-lr-dynamic_20250914_141156/IMO-2025-5:6.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0395fe2d413f92e3b87d2cfbd87d6b79c600b190db467ad47b0a8ce3c294f4a7
3
+ size 2243962