Teraflops / src /run2.py
Rajesh0279's picture
Upload 3 files
48a990e verified
raw
history blame
6.71 kB
import streamlit as st
def run_app2():
st.title(" LLM Compatibility Advisor (Manual Spec Entry)")
st.markdown("Enter your CPU and GPU specs to get local LLM suggestions (Ollama-compatible)")
st.markdown("### ๐Ÿ”ง How to Find Your Device Configuration")
st.markdown("""
- **๐ŸชŸ Windows**: Press `Win + R`, type `dxdiag`, and press Enter to view CPU, GPU, and RAM details.
- **๐ŸŽ macOS**: Click Apple ๏ฃฟ menu โ†’ `About This Mac` โ†’ `More Info...`
- **๐Ÿง Linux**: Use terminal commands like `lscpu`, `free -h`, or `neofetch`
""")
st.markdown("#### ๐Ÿ’ก Tip: You can use these tools to help find your processor and GPU names.")
cpu_name = st.text_input("๐Ÿ–ฅ๏ธ Enter your Processor Name", placeholder="e.g., Intel Core i5-10300H")
st.caption("โ„น๏ธ Enter your exact CPU name to help identify its capability (found in system settings).")
with st.expander("๐Ÿ’ก Suggested Processor Examples"):
st.markdown("""
- **Intel i3**: i3-10100U, i3-1115G4, i3-N305
- **Intel i5**: i5-10300H, i5-1240P, i5-13400
- **Intel i7**: i7-9750H, i7-11800H, i7-13700K
- **Apple M Series**: M1, M1 Pro, M2, M3
- **AMD Ryzen**: Ryzen 5 5600H, Ryzen 7 5800X, Ryzen 9 7945HX
- **Snapdragon**: Snapdragon 8 Gen 1, Snapdragon 7c Gen 2
""")
cpu_category = st.selectbox(
"โš™๏ธ Select your CPU Category",
["Intel i3", "Intel i5", "Intel i7", "Apple M Series", "AMD Ryzen", "Qualcomm Snapdragon", "Other/Unknown"]
)
st.caption("โ„น๏ธ If unsure, choose the closest matching category from the dropdown.")
gpu_name = st.text_input("๐ŸŽฎ GPU (Optional)", placeholder="e.g., NVIDIA GTX 1650 / None")
st.caption("โ„น๏ธ GPU helps speed up models. If you're unsure or using only CPU, leave it blank or type 'None'.")
performance_score = {
"Intel i3": ("๐Ÿ”ด Low-end", "May only support 4-bit quantized models."),
"Intel i5": ("๐ŸŸก Moderate", "Can run most 4-bit and some 8-bit models."),
"Intel i7": ("๐ŸŸข High-end", "Handles 8-bit and some full FP16 models."),
"Apple M Series": ("๐ŸŸข High-end", "Great efficiency for quantized models."),
"AMD Ryzen": ("๐ŸŸข High-end", "Multi-core power suitable for larger models."),
"Qualcomm Snapdragon": ("๐Ÿ”ด Low-end", "Best for smallest on-device models."),
"Other/Unknown": ("๐ŸŸก Average", "Limited infoโ€”may vary by chip.")
}
llm_recommendations = {
"Intel i3": {
"Coding": ["Code Llama (7B - quantized)", "Phi-2"],
"Math & Logic": ["Mistral (7B - quantized)", "Gemma 2B"],
"General": ["Phi-2", "TinyLlama"]
},
"Intel i5": {
"Coding": ["Code Llama (7B)", "Deepseek Coder (6.7B)"],
"Math & Logic": ["Mistral 7B", "Gemma 7B"],
"General": ["Phi-2", "Mistral", "LLaMA 2 (7B)"]
},
"Intel i7": {
"Coding": ["Code Llama (13B - Q4)", "Deepseek Coder 6.7B"],
"Math & Logic": ["Mistral 7B", "LLaMA 2 13B (quantized)"],
"General": ["LLaMA 2 (13B)", "OpenChat 3.5"]
},
"Apple M Series": {
"Coding": ["Code Llama 7B (Q4)", "Phi-2"],
"Math & Logic": ["Gemma 7B", "Mistral (quantized)"],
"General": ["Mistral", "LLaMA 2 7B", "Phi-2"]
},
"AMD Ryzen": {
"Coding": ["Deepseek Coder", "Code Llama"],
"Math & Logic": ["Mistral", "LLaMA 2"],
"General": ["Phi-2", "Mistral", "LLaMA 2"]
},
"Qualcomm Snapdragon": {
"Coding": ["Phi-2 (on-device)"],
"Math & Logic": ["TinyLlama", "Phi-2"],
"General": ["TinyLlama", "Gemma 2B"]
},
"Other/Unknown": {
"Coding": ["Phi-2", "TinyLlama"],
"Math & Logic": ["Gemma 2B", "TinyLlama"],
"General": ["Phi-2", "TinyLlama"]
}
}
quantized_sizes = {
"TinyLlama": "FP16: 0.6GB, 8-bit: 0.3GB, 4-bit: 0.15GB",
"Phi-2": "FP16: 5.2GB, 8-bit: 2.6GB, 4-bit: 1.3GB",
"Mistral": "FP16: 13GB, 8-bit: 7GB, 4-bit: 3.5GB",
"Gemma 2B": "FP16: 4.2GB, 8-bit: 2.1GB, 4-bit: 1.1GB",
"Gemma 7B": "FP16: 13GB, 8-bit: 6.5GB, 4-bit: 3.2GB",
"Code Llama": "7B: FP16: 13GB, 8-bit: 6.5GB, 4-bit: 3.3GB | 13B: FP16: 26GB, 8-bit: 13GB, 4-bit: 6.5GB",
"Deepseek Coder": "6.7B: FP16: 12.8GB, 8-bit: 6.4GB, 4-bit: 3.2GB",
"LLaMA 2": "7B: FP16: 13GB, 8-bit: 6.7GB, 4-bit: 3.5GB | 13B: FP16: 26GB, 8-bit: 13GB, 4-bit: 6.5GB",
"OpenChat 3.5": "FP16: 7.1GB, 8-bit: 3.6GB, 4-bit: 1.8GB"
}
if cpu_name:
st.markdown("---")
st.subheader(" Your Hardware Configuration")
st.write(f"**Processor Name:** {cpu_name}")
st.write(f"**CPU Category:** {cpu_category}")
st.write(f"**GPU:** {gpu_name or 'Not specified'}")
score_label, score_note = performance_score.get(cpu_category, ("๐ŸŸก Unknown", "Estimate based on general category."))
st.success(f"๐Ÿ’ก Performance Score: {score_label}")
st.caption(score_note)
st.markdown("---")
st.subheader("๐Ÿ“‹ Recommended LLMs for Local Use (Ollama Compatible)")
recommendations_text = f"Processor: {cpu_name} ({cpu_category})\\nGPU: {gpu_name or 'None'}\\nPerformance Score: {score_label}\\n\\nRecommended Models:\\n"
recs = llm_recommendations.get(cpu_category, llm_recommendations["Other/Unknown"])
for task in ["Coding", "Math & Logic", "General"]:
st.markdown(f"### ๐Ÿ”น {task}")
recommendations_text += f"\\n{task}:\\n"
for model in recs[task]:
st.markdown(f"- โœ… **{model}**")
recommendations_text += f"- {model}"
for key in quantized_sizes:
if key.lower() in model.lower():
st.caption(f"๐Ÿ’พ {quantized_sizes[key]}")
recommendations_text += f" ({quantized_sizes[key]})"
break
# Generate command
cmd = model.split("(")[0].strip().lower().replace(" ", "_").replace("-", "")
st.code(f"ollama pull {cmd}", language="bash")
recommendations_text += f"\\n Command: ollama pull {cmd}\\n"
st.markdown("---")
st.markdown("๐Ÿ’ก _Tip: Run these models using `ollama run <model>` or download with `ollama pull <model>`._")
st.download_button("๐Ÿ“ฅ Download These Recommendations", recommendations_text, file_name="llm_suggestions.txt")
else:
st.info("Enter your processor details to see LLM recommendations.")