Skip to content
View kairwang01's full-sized avatar
🎯
Focusing
🎯
Focusing

Highlights

  • Pro

Block or report kairwang01

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
kairwang01/README.md

Kair Wang

Grad student at the University of Ottawa. I build AI that runs on the device instead of behind an API, and I keep the state on disk so I can go back and check what it did.

The thing that keeps pulling me back is one specific annoyance: an answer arrives in a chat window, the tab closes, and next week I'm asking the same question from scratch. Most of what's below is some attempt at that. A correction I can replay. A tool call that either validates or fails loudly. A log I can open the next morning.

I'm in Ottawa. Email is bwang105@uottawa.ca.

Repos I'm still working on

kAir (iPhone app, on-device routing)

A chat-first iPhone app. A fine-tuned on-device model reads what you said, picks exactly one of five capabilities (music, messaging, navigation, web search, a direct answer), and puts the result back in the conversation. The routing decision never leaves the phone.

The model lives in kAir-models: Qwen3.5-0.8B with a LoRA adapter trained on Apple Silicon via MLX-LM, a closed catalog of five tools, and a frozen JSON schema, so a malformed call fails validation instead of failing quietly. Artifacts are meant to go out in three layers (HF → GGUF → Core ML / ONNX); the Core ML export is scaffolded and I haven't exercised it yet.

The eval is 22 examples. That shows the pipeline runs end to end and nothing more, and the README says not to deploy it.

The main interface is a correction box, not a dashboard. When the assistant gets something wrong you fix it, and the fix stays as local evidence instead of disappearing into chat history.

State sits in local JSON: conversations, memory, tasks, review queue. Retrieval is a BM25 variant with IDF, document-length normalization, Chinese bigrams and recency weighting. With no API key it still runs on deterministic fallback replies; with one, the key stays server-side.

Regmark takes a product and checks whether the shop tells the same story about it in four places: the page, its JSON-LD, the merchant feed, and the AI-agent endpoints. When price, stock or shipping disagree, it says which surface is wrong and by how much.

The checkout probe is a separate, opt-in step. Putting an item in a cart writes to the shop, so it only runs with --checkout and proof that the shop is yours.

17 rules. npx regmark demo runs it against a shop with known problems; in CI it fails when a rule goes over budget and writes SARIF, JUnit, JSON, Markdown or a single self-contained HTML report.

CERT r4.2: 330,285 user-day windows, 1,364 of them malicious. Stage one is an XGBoost screener that cuts the queue to the top 3% of ranked windows while keeping 89.74% of the malicious ones, about a 30× reduction in what a person has to read. Stage two writes graph-informed narratives and scores them with TF-IDF, rules and an LLM.

Best fusion run: 0.81 recall at F1 0.43. Plain TF-IDF plus logistic regression was still the strongest single model, which is why the LLM only scores stage two. Course project for CSI 5388, Group 8.

小虾 / QQ Claw

A Tencent PCG QQ-track hackathon prototype. It reads a group chat where everyone wants a different dinner, turns the scattered constraints into an editable vote card, and waits for you to approve it. It doesn't post on your behalf unless you say so, and it leaves a memory trail afterwards.

Six directional interviews sit behind it, all with university students who use QQ groups. Four raised AI overreach or monitoring concerns, and the permission step exists because of that.

The public repo is a sanitized showcase. The local project has a MaaS key and competition material in it, so it stays private.

Other repos, including team work

Revo Trade-in marketplace for second-hand electronics: cart, checkout, multi-city pricing, order tracking. The FastAPI + PostgreSQL backend and the storefront are mirrored under my account.
Career CoPilot uOttawa ELG/DTI/GNG 5902, Team 8. An AI-powered career platform: resume rewrite with ATS checks, an interview simulator, verified profiles. The repo holds the plan for taking an existing MVP to production, not the app code.
Go!Gosling Pre-launch site for a desktop-first open-source agent. No build step, English / French / Chinese, a waitlist instead of an App Store link.
Real-Time Object Detection YOLO11 + OpenCV over webcam, video or RTSP, picking CUDA, Apple MPS or CPU on its own.

Things I keep having to relearn

  1. Write the contract first. Markdown spec, JSON schema, acceptance criteria, then code. Skip it and I rewrite the thing twice.
  2. No keys in public repos. Nothing public here carries an API key, a real conversation, or competition material.
  3. Put the caveat next to the number. 22 eval examples is 22; a 0.41% positive rate changes what an F1 means.
  4. Keep a gate between "it runs" and "it ships." Tests, smoke runs, and for multi-agent work an explicit contract each side has to satisfy.

I use AI heavily while building. The diff still gets read, and the merge is my call.

What I reach for

AI / ML — Python, PyTorch, MLX, LoRA / QLoRA, Qwen, XGBoost, scikit-learn, OpenCV, Ultralytics YOLO Apple — Swift, SwiftUI, Core ML, iOS 17+ app architecture Web / backend — FastAPI, Node.js, TypeScript, React, PostgreSQL, SQLite, REST Everyday — git, GitHub Actions, Docker, a lot of markdown

Find me

kairwang.cloud · LinkedIn · bwang105@uottawa.ca

中文介绍

你好,我是 Kair Wang

渥太华大学研究生。项目都不大,共同点是模型尽量跑在本机,做完的事都留得下能查的记录。

在做什么

  • kAir:聊天优先的 iOS 应用。端侧微调过的 Qwen3.5-0.8B 读懂一句话,从五个能力里选一个(音乐、消息、导航、搜索、直接回答),结果回到对话里。路由这一步不出手机。配套的 kAir-models 负责工具路由:LoRA 加冻结的 JSON schema,五个工具,产物按三层走(HF → GGUF → Core ML / ONNX),Core ML 那层搭好了但还没跑通。评估只有 22 条,README 里写明了不要部署。
  • Personalized Learning Assistant:本地优先的学习助手,主界面是纠错框,不是仪表盘。你纠正它的地方会作为本地证据留下来。状态全在本地 JSON,检索是自己写的 BM25 变体(IDF、文档长度归一、中文二元组、时效权重),没有 API key 也能离线跑。
  • Regmark:开源的店铺一致性审计工具。同一个商品在页面、JSON-LD、商品 Feed 和 AI agent 端点各说各话时,它把差异指出来。结账探测是可选步骤,要先证明店铺是你的才会跑。17 条规则,能进 CI。
  • Hierarchical Insider Threat Detection:课程项目。XGBoost 把 CERT r4.2 的 33 万个 user-day 筛到前 3%,同时保住 89.74% 的恶意窗口;第二阶段用图信息生成叙述再打分,融合后召回 0.81。
  • 小虾 / QQ Claw:腾讯 PCG QQ 赛道黑客松作品。把群里散落的约束变成一张可编辑的投票卡,先问你,再发出去。

联系方式

kairwang.cloud · bwang105@uottawa.ca


Last updated: 2026

Pinned Loading

  1. tashfeenahmed/freellmapi tashfeenahmed/freellmapi Public

    7.4 billion tokens per month. 34 free LLM providers. 635 free model endpoints. All behind one /v1 endpoint, plus any custom OpenAI-compatible endpoint. Smart routing, automatic failover, encrypted …

    TypeScript 50.1k 7k

  2. hierarchical-insider-threat-detection hierarchical-insider-threat-detection Public

    Two-stage insider threat detection on CERT r4.2. XGBoost screens 330k user-days down to the top 3% of ranked windows while keeping 89.74% of the malicious ones; stage two scores graph-informed narr…

    Python

  3. kAir-models kAir-models Public

    The decision layer of my iOS app: Qwen3.5-0.8B + LoRA, trained on Apple Silicon with MLX-LM, turning one utterance into exactly one tool id plus a schema-valid argument object. Five tools, frozen J…

    Python

  4. kairwang01 kairwang01 Public

    The repo behind my profile page: iOS, ML and applied-AI work at the University of Ottawa.