Markdown Viewer =============== :: import os import streamlit as st from md_utils import save_html Print banner. :: st.set_page_config( page_title="MD-View", ) @st.cache_data def print_banner(): print(""" d s sb d ss d b d d sss d d b S S S S S ~o S S S S S S S S S S S b S S S S S S S S S S S sSSs S S S S sSSs S S S S S S P S S S S S S S S S S S S S S S S S S P P P ss\" \"ssS P P sSSss \"ss\"S """) return 1 print_banner() We can show ``.q.md`` files only. :: if st.sidebar.toggle("Questions only"): md_files = [f for f in os.listdir('.') if f.endswith('.q.md')] else: Find all files in the current directory with a ``.md`` extension (these may contain LLM-generated text). Exclude any question files with the ``.q.md`` suffix. If a response file corresponds to a specific question, that question will be stored separately in a file sharing the same base name and ending in ``.q.md``; do not include those ``.q.md`` files in the final list. :: md_files = [f for f in os.listdir('.') if f.endswith('.md') and not f.endswith('.q.md')] Sort files based on their modification time :: md_files.sort(key=os.path.getmtime, reverse=True) Create radio buttons to select a file :: selected_file = st.sidebar.radio("Markdown file:", md_files) Adds a prefix to each line of a multi-line string. :: def prefix_lines(query, prefix): lines = query.splitlines() prefixed_lines = [prefix + line for line in lines] return "\n".join(prefixed_lines) Check if query file exists. :: query_file_path = selected_file[:-3] + ".q.md" if os.path.exists(query_file_path): with open(query_file_path, 'r', encoding='utf-8') as file: query = file.read() st.write("### Query") st.write(prefix_lines(query, "> ")) st.write("---"); Check if summary file exists. :: summary_file_path = f".md-view/{selected_file[:-3]}.summary.md" if os.path.exists(summary_file_path): with open(summary_file_path, 'r', encoding='utf-8') as file: summary = file.read() st.write("### Summary") st.write(prefix_lines(summary, "> ")) st.write("---"); Read the contents of selected file :: with open(selected_file, 'r', encoding='utf-8') as file: md_text = file.read() Display the contents of the file that has been selected. :: st.write(md_text) html_format = st.sidebar.radio("Output HTML:", options=["Tailwind", "Bootstrap"], horizontal=True) Add a button to save the markdown text as an HTML file :: if st.sidebar.button("Save HTML", use_container_width=True): save_html(md_text, selected_file[:-3], html_format) st.toast(f"HTML file saved") Summarize :: prompt_summarize = """You will be provided with statements in markdown, and your task is to summarize the content you are provided. """ from openai import OpenAI class OpenAI_Helper: def __init__(self): self.client = OpenAI() self.llm_model = "gpt-5-mini" def call_llm(self, input_text, prompt): response = self.client.responses.create( model=self.llm_model, instructions=prompt, input=input_text ) return response.output_text openai_helper = OpenAI_Helper() def summarize(md_text, filename): summary = openai_helper.call_llm(md_text, prompt_summarize) print(summary) if st.sidebar.button("Summarize", use_container_width=True): summarize(md_text, selected_file[:-3])