awacke1's picture
Update app.py
6d17d44 verified
raw
history blame
4.84 kB
import streamlit as st
import base64
import pdfkit
import io
import os
# Define the 12-point ML outline with emojis
ml_outline = [
"🌟 1. Mixture of Experts (MoE)",
"πŸ”₯ 2. Supervised Fine-Tuning (SFT) using PyTorch",
"πŸ€– 3. Large Language Models (LLM) using Transformers",
"πŸ“Š 4. Self-Rewarding Learning using NPS 0-10 and Verbatims",
"πŸ‘ 5. Reinforcement Learning from Human Feedback (RLHF)",
"πŸ”— 6. MergeKit: Merging Models to Same Embedding Space",
"πŸ“ 7. DistillKit: Model Size Reduction with Spectrum Analysis",
"🧠 8. Agentic RAG Agents using Document Inputs",
"⏳ 9. Longitudinal Data Summarization from Multiple Docs",
"πŸ“‘ 10. Knowledge Extraction using Markdown Knowledge Graphs",
"πŸ—ΊοΈ 11. Knowledge Mapping with Mermaid Diagrams",
"πŸ’» 12. ML Code Generation with Streamlit/Gradio/HTML5+JS"
]
def create_pdf_with_pdfkit(outline_items):
# Create HTML content with two columns
html_content = """
<html>
<head>
<meta charset="UTF-8">
<style>
body {
font-family: Arial, sans-serif;
font-size: 12pt;
margin: 20px;
}
.container {
display: flex;
width: 100%;
}
.column {
width: 50%;
padding: 20px;
}
h2 {
color: #2c3e50;
font-size: 16pt;
}
ul {
list-style-type: none;
padding-left: 0;
}
li {
margin: 10px 0;
}
</style>
</head>
<body>
<div class="container">
<div class="column">
<h2>Cutting-Edge ML Areas (1-6)</h2>
<ul>
"""
# Add items 1-6
for item in outline_items[:6]:
html_content += f"<li>{item}</li>"
html_content += """
</ul>
</div>
<div class="column">
<h2>Cutting-Edge ML Areas (7-12)</h2>
<ul>
"""
# Add items 7-12
for item in outline_items[6:]:
html_content += f"<li>{item}</li>"
html_content += """
</ul>
</div>
</div>
</body>
</html>
"""
# Convert HTML to PDF with pdfkit
options = {
'page-size': 'A4',
'orientation': 'Landscape',
'encoding': 'UTF-8',
'margin-top': '0.5in',
'margin-right': '0.5in',
'margin-bottom': '0.5in',
'margin-left': '0.5in',
}
# Create PDF in memory
pdf_bytes = pdfkit.from_string(html_content, False, options=options)
return pdf_bytes
def get_binary_file_downloader_html(bin_data, file_label='File'):
bin_str = base64.b64encode(bin_data).decode()
href = f'<a href="data:application/octet-stream;base64,{bin_str}" download="{file_label}">Download {file_label}</a>'
return href
# Streamlit UI
st.title("πŸš€ Cutting-Edge ML Outline Generator")
col1, col2 = st.columns(2)
with col1:
st.header("πŸ“ Markdown Outline")
outline_text = "\n".join(ml_outline)
st.markdown(outline_text)
md_file = "ml_outline.md"
with open(md_file, "w", encoding='utf-8') as f:
f.write(outline_text)
st.markdown(get_binary_file_downloader_html(outline_text.encode('utf-8'), "ml_outline.md"), unsafe_allow_html=True)
with col2:
st.header("πŸ“‘ PDF Preview")
if st.button("Generate PDF"):
with st.spinner("Generating PDF..."):
try:
pdf_bytes = create_pdf_with_pdfkit(ml_outline)
# Save to file for download
with open("ml_outline.pdf", "wb") as f:
f.write(pdf_bytes)
# Download button
st.download_button(
label="Download PDF",
data=pdf_bytes,
file_name="ml_outline.pdf",
mime="application/pdf"
)
# Fix PDF viewer
base64_pdf = base64.b64encode(pdf_bytes).decode('utf-8')
pdf_display = f'''
<embed
src="data:application/pdf;base64,{base64_pdf}"
width="100%"
height="400px"
type="application/pdf">
'''
st.markdown(pdf_display, unsafe_allow_html=True)
except Exception as e:
st.error(f"Error generating PDF: {str(e)}")
st.markdown("""
<style>
.stButton>button {
background-color: #4CAF50;
color: white;
}
</style>
""", unsafe_allow_html=True)