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.

fix: clippy errs + new release script for 0.2.0

madclaws 0546690e eb692778

+11 -11
+1 -1
Cargo.lock
··· 1143 1143 1144 1144 [[package]] 1145 1145 name = "tiles" 1146 - version = "0.1.0" 1146 + version = "0.2.0" 1147 1147 dependencies = [ 1148 1148 "anyhow", 1149 1149 "clap",
+1 -1
Cargo.toml
··· 1 1 [package] 2 2 name = "tiles" 3 - version = "0.1.0" 3 + version = "0.2.0" 4 4 edition = "2024" 5 5 6 6 [dependencies]
+2 -2
scripts/install.sh
··· 1 1 #!/usr/bin/env bash 2 2 set -euo pipefail 3 3 4 - ENV="dev" # prod is another env, try taking it from github env 4 + ENV="prod" # prod is another env, try taking it from github env 5 5 REPO="tilesprivacy/tilekit" 6 6 # VERSION="${TILES_VERSION:-latest}" 7 - VERSION="0.1.0" 7 + VERSION="0.2.0" 8 8 INSTALL_DIR="$HOME/.local/bin" # CLI install location 9 9 SERVER_DIR="$HOME/.local/share/tiles/server" # Python server folder 10 10 TMPDIR="$(mktemp -d)"
+2 -2
src/commands/mod.rs
··· 32 32 health::check_health(); 33 33 } 34 34 35 - pub fn start_server() { 36 - let _ = mlx::start_server_daemon(); 35 + pub async fn start_server() { 36 + let _ = mlx::start_server_daemon().await; 37 37 } 38 38 39 39 pub fn stop_server() {
+1 -1
src/main.rs
··· 49 49 commands::check_health(); 50 50 } 51 51 Commands::Server(server) => match server.command { 52 - Some(ServerCommands::Start) => commands::start_server(), 52 + Some(ServerCommands::Start) => commands::start_server().await, 53 53 Some(ServerCommands::Stop) => commands::stop_server(), 54 54 _ => println!("Expected start or stop"), 55 55 },
+4 -4
src/runner/mlx.rs
··· 88 88 // start server as a child process 89 89 // save the pid in a file under ~/.config/tiles/server_pid 90 90 91 - if let Ok(_) = ping().await { 91 + if (ping().await).is_ok() { 92 92 println!("server is already up"); 93 93 return Ok(()); 94 94 } ··· 167 167 let mut python_code: String = "".to_owned(); 168 168 loop { 169 169 if remaining_count > 0 { 170 - let chat_start = if remaining_count == 6 { true } else { false }; 170 + let chat_start = remaining_count == 6; 171 171 if let Ok(response) = chat(input, modelname, chat_start, &python_code).await 172 172 { 173 173 if response.reply.is_empty() { 174 174 if !response.code.is_empty() { 175 175 python_code = response.code; 176 176 } 177 - remaining_count = remaining_count - 1; 177 + remaining_count -= 1; 178 178 } else { 179 179 g_reply = response.reply.clone(); 180 180 println!("\n>> {}", response.reply.trim()); ··· 272 272 let mut accumulated = String::new(); 273 273 // let mut inside_python = false; 274 274 // let mut tag_buffer = String::new(); 275 - print!("\n"); 275 + println!(); 276 276 while let Some(chunk) = stream.next().await { 277 277 let chunk = chunk.unwrap(); 278 278 let s = String::from_utf8_lossy(&chunk);