|
|
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 |
|
|
|
|
|
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.") |
|
|
|