DanielSwift commited on
Commit
8992f8c
·
1 Parent(s): 6d67071

Refactor UI: Remove LogicBench tab, adapt Proof tab for external JSON

Browse files
Files changed (1) hide show
  1. app.py +45 -156
app.py CHANGED
@@ -2,7 +2,7 @@
2
  Gradio application for SFOSR (Semantic Formal Ontology Structure Representation) System.
3
 
4
  Provides an interface to analyze, verify, and construct proofs using the SFOSR framework.
5
- Includes a tab for integrating with LogicBench tasks (requires LLM for text-to-SFOSR conversion).
6
  """
7
 
8
  import gradio as gr
@@ -110,6 +110,10 @@ def run_proof_construction(input_json_str, source_concept, target_concept):
110
  return "Source and Target concepts cannot be empty.", ""
111
 
112
  # Add the proof query to the input data
 
 
 
 
113
  input_data["proof_query"] = {
114
  "source": source_concept,
115
  "target": target_concept
@@ -139,72 +143,6 @@ def run_proof_construction(input_json_str, source_concept, target_concept):
139
  print(f"Error during SFOSR proof: {e}\n{error_trace}") # Log for debugging
140
  return f"An error occurred: {e}", ""
141
 
142
- # --- Placeholder for LogicBench Integration ---
143
- def run_logicbench_task(logicbench_context, logicbench_question):
144
- """Placeholder function for LogicBench task processing."""
145
- print(f"Received LogicBench Context: {logicbench_context[:100]}...")
146
- print(f"Received LogicBench Question: {logicbench_question}")
147
-
148
- # --- Stage 1: Text-to-SFOSR Conversion (using LLM - TO BE IMPLEMENTED) ---
149
- generated_sfosr_json = {
150
- "text": logicbench_context,
151
- "vectors": [
152
- {"id": "placeholder", "source": "PlaceholderSource", "target": "PlaceholderTarget",
153
- "type": "PlaceholderType", "axis": "placeholder", "justification": "LLM Step Not Implemented"}
154
- ]
155
- }
156
- generated_sfosr_str = json.dumps(generated_sfosr_json, indent=2, ensure_ascii=False)
157
-
158
- # --- Stage 2: SFOSR Processing (using the generated JSON) ---
159
- if sfosr_instance is None:
160
- final_answer = "Error: SFOSR System not available."
161
- sfosr_proof_status = ""
162
- sfosr_proof_details = ""
163
- else:
164
- try:
165
- # Determine source/target for proof based on the question (requires logic)
166
- # For now, let's use placeholder source/target from the generated JSON
167
- # This part needs significant refinement based on how questions are mapped
168
- source_concept_lb = generated_sfosr_json["vectors"][0]["source"]
169
- target_concept_lb = generated_sfosr_json["vectors"][0]["target"]
170
-
171
- logicbench_input_data = generated_sfosr_json
172
- logicbench_input_data["proof_query"] = {
173
- "source": source_concept_lb,
174
- "target": target_concept_lb
175
- }
176
-
177
- # Call the main process method
178
- sfosr_result = sfosr_instance.process(logicbench_input_data)
179
- sfosr_proof_result = sfosr_result.get("proof")
180
-
181
- # --- Stage 3: Interpret SFOSR Result as LogicBench Answer (TO BE IMPLEMENTED) ---
182
- if sfosr_proof_result and sfosr_proof_result.get("is_valid"):
183
- final_answer = "Answer: Yes (Placeholder - based on successful SFOSR proof)"
184
- else:
185
- final_answer = "Answer: No/Unknown (Placeholder - SFOSR proof failed or invalid)"
186
-
187
- # Format proof output for display
188
- if sfosr_proof_result:
189
- sfosr_proof_status = f"**Proof Status:** {sfosr_proof_result.get('status', 'N/A')}\n" \
190
- f"**Is Valid:** {sfosr_proof_result.get('is_valid', 'N/A')}"
191
- if sfosr_proof_result.get('reason'):
192
- sfosr_proof_status += f"\n**Reason:** {sfosr_proof_result.get('reason')}"
193
- sfosr_proof_details = sfosr_proof_result
194
- else:
195
- sfosr_proof_status = "SFOSR Proof was not generated or failed."
196
- sfosr_proof_details = {}
197
-
198
- except Exception as e:
199
- error_trace = traceback.format_exc()
200
- print(f"Error during LogicBench task processing: {e}\n{error_trace}")
201
- final_answer = f"Error processing task: {e}"
202
- sfosr_proof_status = "Error during processing"
203
- sfosr_proof_details = {}
204
-
205
- return final_answer, generated_sfosr_str, sfosr_proof_status, sfosr_proof_details
206
-
207
-
208
  # --- Example Input Formats ---
209
  example_verify_json = '''{
210
  "text": "Загрязнение воздуха вызывает респираторные заболевания. Загрязнение происходит из-за выбросов заводов.",
@@ -228,30 +166,31 @@ example_verify_json = '''{
228
  ]
229
  }'''
230
 
231
- example_proof_json = '''{
 
 
232
  "vectors": [
233
  {
234
- "id": "V1",
235
- "source": "ВыбросыЗаводов",
236
- "target": "ЗагрязнениеВоздуха",
237
- "type": "Causality",
238
- "axis": "relationship",
239
- "justification": "Промышленные выбросы содержат вредные вещества."
240
  },
241
  {
242
- "id": "V2",
243
- "source": "ЗагрязнениеВоздуха",
244
- "target": "РеспираторныеЗаболевания",
245
- "type": "Causality",
246
- "axis": "relationship",
247
- "justification": "Вредные частицы попадают в дыхательную систему."
248
  }
249
  ]
250
  }'''
 
 
251
 
252
- # Example for LogicBench (replace with actual examples)
253
- example_logicbench_context = "If it rains, the ground gets wet. The ground is not wet."
254
- example_logicbench_question = "Did it rain?"
255
 
256
  # --- Gradio Interface Definition ---
257
 
@@ -333,41 +272,46 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
333
  label="Примеры входных данных"
334
  )
335
 
336
- with gr.TabItem("Построение Доказательств"):
337
  gr.Markdown(
338
  """
339
  ### Как пользоваться:
340
 
341
- 1. **Введите JSON** с векторами-посылками (см. пример)
342
- 2. **Укажите исходный концепт** (от которого начинается доказательство)
343
- 3. **Укажите целевой концепт** (к которому нужно построить доказательство)
344
- 4. **Нажмите кнопку** "Найти Доказательство"
345
- 5. **Посмотрите результат** справа - система попытается найти цепочку рассуждений
 
 
 
 
 
346
 
347
  #### Что такое доказательство?
348
  Доказательство - это цепочка логических шагов, которая показывает, как от исходного концепта можно
349
  прийти к целевому, используя имеющиеся векторы и правила вывода. Например, если у вас есть
350
- векторы "A вызывает B" и "B вызывает C", система может вывести "A вызывает C".
351
  """
352
  )
353
  with gr.Row():
354
  with gr.Column(scale=1):
355
  gr.Markdown("### Входные Данные и Запрос")
356
  input_json_p = gr.Textbox(
357
- lines=10,
358
  label="SFOSR JSON с Векторами",
359
- info="Введите JSON с векторами, которые будут использованы как посылки для доказательства",
360
- placeholder='{\n "vectors": [\n {\n "id": "V1", "source": "ВыбросыЗаводов", "target": "ЗагрязнениеВоздуха", "type": "Causality", "axis": "relationship" \n },\n {\n "id": "V2", "source": "ЗагрязнениеВоздуха", "target": "РеспираторныеЗаболевания", "type": "Causality", "axis": "relationship" \n }\n ]\n}'
361
  )
362
  source_concept_input = gr.Textbox(
363
  label="Исходный Концепт",
364
  info="Введите имя концепта, от которого начинается доказательство",
365
- placeholder="ВыбросыЗаводов"
366
  )
367
  target_concept_input = gr.Textbox(
368
  label="Целевой Концепт",
369
  info="Введите имя концепта, к которому нужно построить доказательство",
370
- placeholder="РеспираторныеЗаболевания"
371
  )
372
  p_button = gr.Button("Найти Доказательство", variant="primary")
373
  with gr.Column(scale=1):
@@ -378,63 +322,13 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
378
 
379
  gr.Examples(
380
  examples=[
381
- [example_proof_json, "ВыбросыЗаводов", "РеспираторныеЗаболевания"]
 
 
 
382
  ],
383
  inputs=[input_json_p, source_concept_input, target_concept_input],
384
- label="Пример построения доказательства"
385
- )
386
-
387
- with gr.TabItem("Интеграция с LogicBench"):
388
- gr.Markdown(
389
- """
390
- ### Решение Задач LogicBench (Экспериментально)
391
-
392
- Эта вкладка демонстрирует гибридный подход:
393
- 1. **LLM** преобразует текстовую задачу из LogicBench в структурированные SFOSR векторы (JSON).
394
- 2. **SFOSR** система анализирует и пытается доказать ответ на вопрос задачи, используя сгенерированные векторы.
395
-
396
- **Внимание:** Шаг 1 (LLM преобразование) еще не реализован. Сейчас используется placeholder.
397
-
398
- #### Как пользоваться (когда будет реализовано):
399
- 1. Вставьте **Контекст/Посылки** из задачи LogicBench.
400
- 2. Вставьте **Вопрос** из задачи LogicBench.
401
- 3. Нажмите кнопку "Решить Задачу LogicBench".
402
- 4. Посмотрите **Финальный Ответ** и детали работы SFOSR.
403
- """
404
- )
405
- with gr.Row():
406
- with gr.Column(scale=1):
407
- gr.Markdown("### Входные данные из LogicBench")
408
- lb_context_input = gr.Textbox(
409
- lines=10,
410
- label="Контекст / Посылки",
411
- info="Вставьте текст контекста или посылок из задачи LogicBench",
412
- placeholder="Пример: Если идет дождь, трава мокрая. Трава сухая."
413
- )
414
- lb_question_input = gr.Textbox(
415
- lines=2,
416
- label="Вопрос",
417
- info="Вставьте вопрос из задачи LogicBench",
418
- placeholder="Пример: Идет ли дождь?"
419
- )
420
- lb_button = gr.Button("Решить Задачу LogicBench", variant="primary")
421
-
422
- with gr.Column(scale=1):
423
- gr.Markdown("### Результат Решения")
424
- lb_final_answer_output = gr.Markdown(label="Финальный Ответ")
425
- with gr.Accordion("Детали Обработки SFOSR", open=False):
426
- gr.Markdown("#### Сгенерированный SFOSR JSON (LLM Шаг - Placeholder)")
427
- lb_sfosr_json_output = gr.Code(language="json", label="SFOSR JSON")
428
- gr.Markdown("#### Результат Доказательства SFOSR")
429
- lb_proof_status_output = gr.Markdown(label="Статус Доказательства SFOSR")
430
- lb_proof_details_output = gr.JSON(label="Структура Доказательства SFOSR")
431
-
432
- gr.Examples(
433
- examples=[
434
- [example_logicbench_context, example_logicbench_question]
435
- ],
436
- inputs=[lb_context_input, lb_question_input],
437
- label="Пример Задачи LogicBench"
438
  )
439
 
440
  with gr.TabItem("Справка"):
@@ -504,12 +398,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
504
  outputs=[proof_status_output, proof_details_output]
505
  )
506
 
507
- # LogicBench Integration Tab
508
- lb_button.click(
509
- fn=run_logicbench_task,
510
- inputs=[lb_context_input, lb_question_input],
511
- outputs=[lb_final_answer_output, lb_sfosr_json_output, lb_proof_status_output, lb_proof_details_output]
512
- )
513
 
514
  else:
515
  # Display a persistent error if the system couldn't load
 
2
  Gradio application for SFOSR (Semantic Formal Ontology Structure Representation) System.
3
 
4
  Provides an interface to analyze, verify, and construct proofs using the SFOSR framework.
5
+ Users can input SFOSR JSON directly or use the proof tab with JSON generated externally (e.g., from LogicBench tasks via LLM).
6
  """
7
 
8
  import gradio as gr
 
110
  return "Source and Target concepts cannot be empty.", ""
111
 
112
  # Add the proof query to the input data
113
+ # If input_data doesn't exist yet (e.g., empty string), create it.
114
+ if input_data is None:
115
+ input_data = {}
116
+
117
  input_data["proof_query"] = {
118
  "source": source_concept,
119
  "target": target_concept
 
143
  print(f"Error during SFOSR proof: {e}\n{error_trace}") # Log for debugging
144
  return f"An error occurred: {e}", ""
145
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  # --- Example Input Formats ---
147
  example_verify_json = '''{
148
  "text": "Загрязнение воздуха вызывает респираторные заболевания. Загрязнение происходит из-за выбросов заводов.",
 
166
  ]
167
  }'''
168
 
169
+ # Example JSON potentially generated from LogicBench task: "If it rains, the ground gets wet. The ground is not wet. Question: Did it rain?"
170
+ # We might want to prove: Rain -> False or check consistency
171
+ example_logicbench_proof_json = '''{
172
  "vectors": [
173
  {
174
+ "id": "LB1",
175
+ "source": "Rain",
176
+ "target": "GroundWet",
177
+ "type": "Implication",
178
+ "axis": "logic",
179
+ "justification": "If it rains, the ground gets wet."
180
  },
181
  {
182
+ "id": "LB2",
183
+ "source": "GroundWet",
184
+ "target": "False",
185
+ "type": "IsA",
186
+ "axis": "logic",
187
+ "justification": "The ground is not wet."
188
  }
189
  ]
190
  }'''
191
+ example_logicbench_source = "Rain"
192
+ example_logicbench_target = "False" # Target to prove based on the question "Did it rain?"
193
 
 
 
 
194
 
195
  # --- Gradio Interface Definition ---
196
 
 
272
  label="Примеры входных данных"
273
  )
274
 
275
+ with gr.TabItem("Построение Доказательств / Задачи Логики"):
276
  gr.Markdown(
277
  """
278
  ### Как пользоваться:
279
 
280
+ 1. **Подготовьте SFOSR JSON:**
281
+ - Для обычных задач: Создайте JSON с векторами-посылками.
282
+ - Для задач типа LogicBench: Используйте внешнюю LLM (например, спросите в чате), чтобы преобразовать текстовый контекст задачи в SFOSR JSON формат.
283
+ 2. **Вставьте JSON** с векторами в поле ниже.
284
+ 3. **Определите цель доказательства:** Исходя из вопроса задачи, определите, какую связь между концептами нужно доказать.
285
+ Например, для вопроса "Идет ли дождь?" и контекста "Если идет дождь, земля мокрая. Земля сухая.",
286
+ возможно, нужно доказать связь от "Rain" к "False".
287
+ 4. **Укажите Исходный и Целевой концепты** в соответствующие поля.
288
+ 5. **Нажмите кнопку** "Найти Доказательство".
289
+ 6. **Интерпретируйте результат:** Успешное доказательство (Valid: True) или его отсутствие поможет ответить на исходный вопрос задачи.
290
 
291
  #### Что такое доказательство?
292
  Доказательство - это цепочка логических шагов, которая показывает, как от исходного концепта можно
293
  прийти к целевому, используя имеющиеся векторы и правила вывода. Например, если у вас есть
294
+ векторы "A B" и "B C", система может вывести "A C".
295
  """
296
  )
297
  with gr.Row():
298
  with gr.Column(scale=1):
299
  gr.Markdown("### Входные Данные и Запрос")
300
  input_json_p = gr.Textbox(
301
+ lines=15, # Increased lines for potentially larger JSON
302
  label="SFOSR JSON с Векторами",
303
+ info="Введите JSON с векторами, которые будут использованы как посылки для доказательства (можно сгенерировать из текста через LLM)",
304
+ placeholder='{\n "vectors": [\n {\n "id": "V1", "source": "КонцептА", "target": "КонцептБ", "type": "Implication", "axis": "logic" \n }\n // ... другие векторы ...\n ]\n}'
305
  )
306
  source_concept_input = gr.Textbox(
307
  label="Исходный Концепт",
308
  info="Введите имя концепта, от которого начинается доказательство",
309
+ placeholder="Например: Rain"
310
  )
311
  target_concept_input = gr.Textbox(
312
  label="Целевой Концепт",
313
  info="Введите имя концепта, к которому нужно построить доказательство",
314
+ placeholder="Например: False"
315
  )
316
  p_button = gr.Button("Найти Доказательство", variant="primary")
317
  with gr.Column(scale=1):
 
322
 
323
  gr.Examples(
324
  examples=[
325
+ # Example with manually created proof vectors
326
+ # [example_proof_json, "ВыбросыЗаводов", "РеспираторныеЗаболевания"],
327
+ # Example potentially derived from LogicBench task
328
+ [example_logicbench_proof_json, example_logicbench_source, example_logicbench_target]
329
  ],
330
  inputs=[input_json_p, source_concept_input, target_concept_input],
331
+ label="Примеры для Построения Доказательств"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
332
  )
333
 
334
  with gr.TabItem("Справка"):
 
398
  outputs=[proof_status_output, proof_details_output]
399
  )
400
 
401
+ # REMOVED LogicBench Integration Tab Handler
 
 
 
 
 
402
 
403
  else:
404
  # Display a persistent error if the system couldn't load