A local-first private AI assistant for everyday use. Runs on-device models with encrypted P2P sync, and supports sharing chats publicly on ATProto.
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: Added sys prompt in built-in modelfiles to append prompt in pi

madclaws 0d45e976 eb380330

+14 -3
+3
modelfiles/gpt-oss
··· 1 1 FROM mlx-community/gpt-oss-20b-MXFP4-Q4 2 + SYSTEM """ 3 + You are Tiles a Local-first private AI assistant for everyday use. You can be used for Knowledge work and programming task. Tiles is your identity. If a user asks who you are, you MUST respond that you are Tiles. 4 + """
+5
modelfiles/qwen
··· 1 1 FROM mlx-community/Qwen3.5-4B-MLX-4bit 2 + SYSTEM """ 3 + You are Tiles a Local-first private AI assistant for everyday use. Tiles is your identity. If a user asks who you are, you MUST respond that you are Tiles.Please DO NOT OVERTHINK OR HALLUCINATE ANSWERS, GIVE VERY BRIEF AND FAST ANSWERS. 4 + """ 5 + 6 + 2 7 # FROM mlx-community/Qwen3.5-0.8B-8bit 3 8 # FROM mlx-community/Qwen3.5-0.8B-MLX-8bit 4 9 # FROM mlx-community/Qwen3-0.6B-4bit
+6 -3
tiles/src/runtime/mlx.rs
··· 396 396 .clone() 397 397 .ok_or_else(|| anyhow!("Error getting FROM from modelfile due to"))?; 398 398 399 + let system_prompt = modelfile.system.clone().unwrap_or("".to_owned()); 399 400 println!("Running {} in interactive mode", modelname); 400 401 let current_user = get_current_user(&db_conn.common)?; 401 402 ··· 403 404 let mut editor = Editor::<TilesHinter, DefaultHistory>::with_config(config).unwrap(); 404 405 editor.set_helper(Some(TilesHinter)); 405 406 406 - let mut pi_process = start_pi_rpc(&modelname)?; 407 + let mut pi_process = start_pi_rpc(&modelname, &system_prompt)?; 407 408 let mut session_id = String::new(); 408 409 let pi_stdin = pi_process.stdin.as_mut().unwrap(); 409 410 let mut stdout = pi_process.stdout.take().expect("stdout"); ··· 781 782 } 782 783 783 784 // Need to create models.json for the provider 784 - fn start_pi_rpc(model_name: &str) -> Result<Child> { 785 + fn start_pi_rpc(model_name: &str, system_prompt: &str) -> Result<Child> { 785 786 let tiles_lib_dir = DefaultProvider.get_lib_dir()?; 786 787 let user_data_dir = DefaultProvider.get_user_data_dir()?; 787 788 let pi_agent_dir = user_data_dir.join("pi/agent/"); ··· 797 798 let pi_process = Command::new(pi_exec_path) 798 799 .arg("--mode") 799 800 .arg("rpc") 800 - // .arg("--no-session") 801 + .arg("--append-system-prompt") 802 + .arg(system_prompt) 803 + .arg("--no-session") 801 804 .env("PI_CODING_AGENT_DIR", pi_agent_dir) 802 805 .env("PI_OFFLINE", "true") 803 806 .stdin(Stdio::piped())