Add native self-hosted instance connection to fluxer_desktop

Trimmed monorepo checkout (fluxer_desktop + packages/voice_engine_v2 +
tools/ci) with a "Connect to a Different Server" menu item and popout
that lets the desktop app switch to any self-hosted Fluxer instance,
plus fixes for well-known discovery on single-domain self-hosted
deployments and a false-positive ERR_ABORTED on same-origin client
redirects during the switch. Defaults to chat.fluxr.chat and uses an
isolated userData directory from the official build.
This commit is contained in:
2026-07-01 18:22:43 -04:00
commit 682afacd30
1763 changed files with 613720 additions and 0 deletions
@@ -0,0 +1,126 @@
#![allow(dead_code)]
use criterion::*;
use tract_data::internal::*;
use tract_linalg::mmm::{FusedSpec, MMMInputValue, MatMatMul};
use DatumType::*;
use tract_linalg::mmm::AsInputValue;
pub fn packed_packed(c: &mut Criterion, name: &str, m: usize, k: usize, n: usize) {
let mut group = c.benchmark_group(format!("{name}/packed_packed"));
group.throughput(Throughput::Elements((m * k * n) as u64));
let id = format!("{m}x{k}x{n}");
group.bench_with_input(
BenchmarkId::new("f32/cold", &id),
&(F32, m, k, n, true),
mat_mat,
);
group.bench_with_input(
BenchmarkId::new("f32/hot", &id),
&(F32, m, k, n, false),
mat_mat,
);
group.bench_with_input(
BenchmarkId::new("i8/cold", &id),
&(I8, m, k, n, true),
mat_mat,
);
group.bench_with_input(
BenchmarkId::new("i8/hot", &id),
&(I8, m, k, n, false),
mat_mat,
);
}
pub fn packed_vec(c: &mut Criterion, name: &str, m: usize, k: usize, n: usize) {
assert_eq!(n, 1);
let mut group = c.benchmark_group(format!("{name}/packed_vec"));
group.throughput(Throughput::Elements((m * k * n) as u64));
let id = format!("{m}x{k}x{n}");
group.bench_with_input(
BenchmarkId::new("f32/cold", &id),
&(F32, m, k, n, true),
mat_mat,
);
group.bench_with_input(
BenchmarkId::new("f32/hot", &id),
&(F32, m, k, n, false),
mat_mat,
);
group.bench_with_input(
BenchmarkId::new("i8/cold", &id),
&(I8, m, k, n, true),
mat_mat,
);
group.bench_with_input(
BenchmarkId::new("i8/hot", &id),
&(I8, m, k, n, false),
mat_mat,
);
}
pub fn ruin_cache() {
let _a = (0..1000000).collect::<Vec<i32>>();
}
#[allow(clippy::too_many_arguments)]
unsafe fn run(
m: usize,
_k: usize,
n: usize,
be: &mut Bencher,
mmm: &dyn MatMatMul,
a: &dyn MMMInputValue,
b: &dyn MMMInputValue,
cold: bool,
) {
let mut scratch = unsafe { mmm.allocate_scratch_space() };
be.iter_custom(move |iters| {
let mut dur = std::time::Duration::default();
for _ in 0..iters {
if cold {
ruin_cache();
}
let instant = std::time::Instant::now();
unsafe {
mmm.run_with_scratch_space(
m,
n,
scratch.as_mut(),
&[FusedSpec::AddMatMul {
a: AsInputValue::Borrowed(a),
b: AsInputValue::Borrowed(b),
packing: 0,
}],
)
.unwrap()
};
let time = instant.elapsed();
dur += time;
}
dur
});
}
fn mat_mat(be: &mut Bencher, params: &(DatumType, usize, usize, usize, bool)) {
let (dt, m, k, n, _) = *params;
let mm = tract_linalg::ops()
.mmm(dt, Some(m), Some(k), Some(n))
.unwrap();
mat_mat_with_mm(be, &*mm, params)
}
pub fn mat_mat_with_mm(
be: &mut Bencher,
mmm: &dyn MatMatMul,
&(dt, m, k, n, cold): &(DatumType, usize, usize, usize, bool),
) {
let a = Tensor::zero_dt(dt, &[m, k]).unwrap();
let b = Tensor::zero_dt(dt, &[k, n]).unwrap();
let packing = &mmm.packings()[0];
let pa = packing.0.prepare_one(&a, 1, 0).unwrap();
let pb = packing.1.prepare_one(&b, 0, 1).unwrap();
unsafe {
run(m, k, n, be, mmm, &*pa, &*pb, cold);
}
}