From b7e1bdf1fd717c3ef1d7c508822002fff965640e Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 16 Apr 2026 14:23:45 -0400 Subject: [PATCH] feat: add sampling param CLI flags to populate_knowledge binary Adds --temperature, --top-p, --top-k, --min-p flags so batch runs can tune the same sampling params now supported by the API endpoints. Co-Authored-By: Claude Opus 4.6 --- src/bin/populate_knowledge.rs | 43 +++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/src/bin/populate_knowledge.rs b/src/bin/populate_knowledge.rs index 2c53fdc..f9373ad 100644 --- a/src/bin/populate_knowledge.rs +++ b/src/bin/populate_knowledge.rs @@ -39,6 +39,22 @@ struct Args { #[arg(long)] num_ctx: Option, + /// Sampling temperature (e.g. 0.8). Omit for model default + #[arg(long)] + temperature: Option, + + /// Top-p (nucleus) sampling (e.g. 0.9). Omit for model default + #[arg(long)] + top_p: Option, + + /// Top-k sampling (e.g. 40). Omit for model default + #[arg(long)] + top_k: Option, + + /// Min-p sampling (e.g. 0.05). Omit for model default + #[arg(long)] + min_p: Option, + /// Re-process files that already have an insight stored #[arg(long, default_value_t = false)] reprocess: bool, @@ -78,6 +94,13 @@ async fn main() -> anyhow::Result<()> { if let Some(ctx) = args.num_ctx { ollama.set_num_ctx(Some(ctx)); } + if args.temperature.is_some() + || args.top_p.is_some() + || args.top_k.is_some() + || args.min_p.is_some() + { + ollama.set_sampling_params(args.temperature, args.top_p, args.top_k, args.min_p); + } let sms_api_url = std::env::var("SMS_API_URL").unwrap_or_else(|_| "http://localhost:8000".to_string()); @@ -125,6 +148,18 @@ async fn main() -> anyhow::Result<()> { if let Some(ctx) = args.num_ctx { println!("Num ctx: {}", ctx); } + if let Some(t) = args.temperature { + println!("Temperature: {}", t); + } + if let Some(p) = args.top_p { + println!("Top P: {}", p); + } + if let Some(k) = args.top_k { + println!("Top K: {}", k); + } + if let Some(m) = args.min_p { + println!("Min P: {}", m); + } println!( "Mode: {}", if args.reprocess { @@ -202,10 +237,10 @@ async fn main() -> anyhow::Result<()> { args.model.clone(), None, args.num_ctx, - None, - None, - None, - None, + args.temperature, + args.top_p, + args.top_k, + args.min_p, args.max_iterations, ) .await