import json
from typing import Dict
def read_text_file(file_path: str) -> str:
with open(file_path, 'r', encoding='utf-8') as file:
return file.read()
def read_json_file(file_path: str) -> Dict:
with open(file_path, 'r', encoding='utf-8') as file:
return json.load(file)
def write_text_file(file_path: str, content: str):
with open(file_path, 'w', encoding='utf-8') as file:
file.write(content)
def write_json_file(file_path: str, data:dict) -> Dict:
with open(file_path, "w", encoding="utf-8") as json_file:
json_file.write(json.dumps(data, indent=4, ensure_ascii=False))
def parse_llm_output_to_json(output_text: str) -> dict:
"""
Safely parse LLM output text into a Python dictionary.
"""
start = output_text.find("{")
end = output_text.rfind("}") + 1
json_str = output_text[start:end]
try:
data = json.loads(json_str)
except:
raise
data = {}
return data
def json_to_markdown(paper):
"""
Converts a paper dictionary to a Markdown string with multi-level headlines.
Args:
paper (dict): The paper dictionary containing problem details and tasks.
Returns:
str: A Markdown-formatted string representing the paper.
"""
markdown_lines = []
# Problem Background
markdown_lines.append("## Problem Background")
markdown_lines.append(paper.get('problem_background', 'No background provided.') + "\n")
# Problem Requirement
markdown_lines.append("## Problem Requirement")
markdown_lines.append(paper.get('problem_requirement', 'No requirements provided.') + "\n")
# Problem Analysis
markdown_lines.append("## Problem Analysis")
markdown_lines.append(paper.get('problem_analysis', 'No analysis provided.') + "\n")
# Problem Modeling
if 'problem_modeling' in paper:
markdown_lines.append("## Problem Modeling")
markdown_lines.append(paper.get('problem_modeling', 'No modeling provided.') + "\n")
# Tasks
tasks = paper.get('tasks', [])
if tasks:
markdown_lines.append("## Tasks\n")
for idx, task in enumerate(tasks, start=1):
markdown_lines.append(f"### Task {idx}")
task_description = task.get('task_description', 'No description provided.')
markdown_lines.append("#### Task Description")
markdown_lines.append(task_description + "\n")
# Task Analysis
task_analysis = task.get('task_analysis', 'No analysis provided.')
markdown_lines.append("#### Task Analysis")
markdown_lines.append(task_analysis + "\n")
# Mathematical Formulas
task_formulas = task.get('mathematical_formulas', 'No formulas provided.')
markdown_lines.append("#### Mathematical Formulas")
if isinstance(task_formulas, list):
for formula in task_formulas:
markdown_lines.append(f"$${formula}$$")
else:
markdown_lines.append(f"$${task_formulas}$$")
markdown_lines.append("") # Add an empty line
# Mathematical Modeling Process
task_modeling = task.get('mathematical_modeling_process', 'No modeling process provided.')
markdown_lines.append("#### Mathematical Modeling Process")
markdown_lines.append(task_modeling + "\n")
# Result
task_result = task.get('result', 'No result provided.')
markdown_lines.append("#### Result")
markdown_lines.append(task_result + "\n")
# Answer
task_answer = task.get('answer', 'No answer provided.')
markdown_lines.append("#### Answer")
markdown_lines.append(task_answer + "\n")
# Charts
charts = task.get('charts', [])
if charts:
markdown_lines.append("#### Charts")
for i, chart in enumerate(charts, start=1):
markdown_lines.append(f"##### Chart {i}")
markdown_lines.append(chart + "\n")
# # Usage Information
# if 'usage' in paper:
# markdown_lines.append("## Usage Information")
# markdown_lines.append(paper.get('usage', 'No usage information provided.') + "\n")
# Combine all lines into a single string
markdown_str = "\n".join(markdown_lines)
return markdown_str
def json_to_markdown_general(json_data):
"""
Convert a JSON object to a markdown format.
Args:
- json_data (str or dict): The JSON data to convert. It can be a JSON string or a dictionary.
Returns:
- str: The markdown formatted string.
"""
if isinstance(json_data, str):
json_data = json.loads(json_data) # If input is a JSON string, parse it.
def recursive_markdown(data, indent=0):
markdown_str = ""
indent_space = " " * indent
if isinstance(data, dict):
for key, value in data.items():
markdown_str += f"### {key}\n"
markdown_str += recursive_markdown(value, indent + 1)
elif isinstance(data, list):
for index, item in enumerate(data):
markdown_str += f"- **Item {index + 1}**\n"
markdown_str += recursive_markdown(item, indent + 1)
else:
markdown_str += f"- {data}\n"
return markdown_str
markdown = recursive_markdown(json_data)
return markdown