--- language: - en license: apache-2.0 base_model: openbmb/MiniCPM5-1B tags: - gguf - llama-cpp - qlora - google-ads - marketing-analytics - local-ai - small-business pipeline_tag: text-generation --- # Advisor MiniCPM Fine-Tuned GGUF This model is a fine-tuned MiniCPM model for **Advisor**, a local-first Google Ads analysis app for small businesses. The model is designed to turn campaign, keyword, and search-term metrics into concise, actionable marketing recommendations. It is used in the Advisor app here: https://huggingface.co/spaces/build-small-hackathon/Advisor Project repository: https://github.com/PoornimaShridhar/Advisor ## Intended Use The model is tuned for short Google Ads advisory outputs, especially: - campaign performance summaries - keyword inspection - search term cleanup - concise action bullets grounded in metrics - small-business-friendly explanations In the app, the LLM is used for explanation-heavy cards: - Ads Analyst - Keyword Inspector - Search Term Cleaner Budget-sensitive decisions are intentionally handled by deterministic rule-based logic in the app, not delegated fully to the model. ## Fine-Tuning Summary The model was fine-tuned from: ```text openbmb/MiniCPM5-1B ``` The training workflow used QLoRA with 4-bit loading, then merged the LoRA adapter into the base model before converting the merged model to GGUF for local inference. High-level process: 1. Prepared instruction-style chat examples in JSONL format. 2. Mixed synthetic Google Ads examples with cleaned campaign-style examples. 3. Trained a LoRA adapter with `transformers`, `peft`, `trl`, and `bitsandbytes`. 4. Merged the LoRA adapter into the base model. 5. Converted the merged model to GGUF with `llama.cpp`. 6. Quantized the GGUF model to `Q4_K_M`. 7. Loaded the final model locally through `llama-cpp-python` in the Advisor app. ## Training Data Format Each training record followed a chat-style JSONL structure: ```json { "messages": [ { "role": "system", "content": "You are a Google Ads analyst. Reply with concise actionable markdown bullets only." }, { "role": "user", "content": "Analyze this Google Ads campaign data..." }, { "role": "assistant", "content": "- Pause weak search terms with spend and no conversions.\n\n- Scale efficient keywords with conversions below target CPA." } ] } ``` The fine-tuning target was not general conversation. The goal was to teach the model to write short, grounded, metric-aware recommendations. ## Training Configuration The project training script uses: ```text Training method: QLoRA Max sequence length: 2048 Epochs: 2 Learning rate: 2e-4 Batch size: 2 Gradient accumulation: 8 LoRA rank: 16 LoRA alpha: 32 LoRA dropout: 0.05 Optimizer: paged_adamw_8bit Quantization during training: 4-bit NF4 ``` LoRA target modules: ```text q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj ``` ## Runtime The Advisor app downloads this GGUF model with `hf_hub_download` and runs it locally with `llama-cpp-python`. Default app configuration: ```text LLAMA_HF_REPO=ps1811/advisor-minicpm-finetuned-gguf LLAMA_HF_FILENAME=advisor-minicpm-q4_k_m.gguf LLAMA_N_CTX=2048 LLAMA_GPU_LAYERS=-1 LLAMA_N_THREADS=4 ``` ## Example Output Style The expected output style is concise markdown bullets: ```text - Treat "preschool near me" as a winning keyword because it produced conversions at an efficient CPA. - Reduce spend on broad, low-intent terms that generated clicks but no leads. - Add irrelevant search terms as negatives to protect budget for higher-intent traffic. ``` ## Limitations - The model is specialized for Google Ads-style campaign analysis and may not perform well as a general assistant. - It should not be used as the only source of truth for financial decisions. - Budget changes in the Advisor app are handled by rule-based logic because spend decisions need predictable behavior. - Outputs should be reviewed by a human before applying recommendations to a live ad account. ## Privacy The public repository does not include private Google Ads credentials or private training exports. Users running the app must provide their own Google Ads API credentials.