Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
crates/mbongo-compute/profiles/** -text
test-vectors/inference/** -text
6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@ jobs:
# GitHub-hosted runners have no SEV-SNP guest. See the gated job below.
- name: Mbongo Compute Hardware Attestation
run: cargo test -p mbongo-compute --test hardware_attestation --locked
# MVP-A: the mbongo-infer:v1 execution contract and the kaayu-cv-extract:v1
# profile (docs/product/MVP_INFERENCE_CONTRACT_v1.md). Pins the golden
# vector in test-vectors/inference/ and the worker validation order. No
# model runs here; MVP-B adds execution.
- name: Mbongo MVP Inference Contract
run: cargo test -p mbongo-compute --test inference_contract --locked

# ---------------------------------------------------------
# Mbongo Compute v0.4 Vertical (run on PR + push)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"contract":"mbongo-infer:v1","generation":{"max_tokens":400,"seed":42,"temperature_milli":0,"top_p_milli":1000},"limits":{"max_input_bytes":10000,"max_output_bytes":8000},"model":{"artifact_name":"Qwen3-4B-Instruct-2507-Q4_K_M.gguf","artifact_sha256":"3605803b982cb64aead44f6c1b2ae36e3acdb41d8e46c8a94c6533bc4c67e597","artifact_size_bytes":2497281120,"family":"Qwen3","format":"gguf","license":"Apache-2.0","name":"Qwen3-4B-Instruct-2507","quantization":"Q4_K_M","source":"https://huggingface.co/unsloth/Qwen3-4B-Instruct-2507-GGUF","source_revision":"a06e946bb6b655725eafa393f4a9745d460374c9"},"profile":{"id":"kaayu-cv-extract","input_contract":"kaayu-cv-extract-input:v1","output_contract":"kaayu-cv-profile:v1","output_schema_sha256":"81521447e7b7b45c670ff1717d608fc2304765ab530587aba2370ba0a9191af5","prompt_template_sha256":"6c950b4863bc339af94d904dbb609b3dd9098259740f01a6539406e641276d63","version":1},"runtime":{"commit":"620d2225cc436ab0b001e3200e590e3b286ef9ab","family":"llama.cpp","license":"MIT","mode":"llama-server","revision":"v0.7.0"}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "kaayu-cv-profile:v1",
"title": "kaayu-cv-profile:v1",
"type": "object",
"additionalProperties": false,
"required": ["summary", "seniority", "location", "skills", "experience", "education", "languages", "certifications"],
"properties": {
"summary": { "type": "string", "maxLength": 600 },
"seniority": { "type": "string", "enum": ["unknown", "junior", "mid", "senior", "lead", "executive"] },
"location": { "type": "string", "maxLength": 120 },
"skills": { "type": "array", "maxItems": 40, "items": { "type": "string", "maxLength": 60 } },
"experience": {
"type": "array", "maxItems": 15,
"items": {
"type": "object", "additionalProperties": false,
"required": ["title", "organization", "start", "end", "description"],
"properties": {
"title": { "type": "string", "maxLength": 120 },
"organization": { "type": "string", "maxLength": 120 },
"start": { "type": "string", "maxLength": 10 },
"end": { "type": "string", "maxLength": 10 },
"description": { "type": "string", "maxLength": 300 }
}
}
},
"education": {
"type": "array", "maxItems": 10,
"items": {
"type": "object", "additionalProperties": false,
"required": ["degree", "institution", "year"],
"properties": {
"degree": { "type": "string", "maxLength": 120 },
"institution": { "type": "string", "maxLength": 120 },
"year": { "type": "string", "maxLength": 10 }
}
}
},
"languages": {
"type": "array", "maxItems": 10,
"items": {
"type": "object", "additionalProperties": false,
"required": ["language", "level"],
"properties": {
"language": { "type": "string", "maxLength": 40 },
"level": { "type": "string", "enum": ["unknown", "basic", "intermediate", "fluent", "native"] }
}
}
},
"certifications": { "type": "array", "maxItems": 15, "items": { "type": "string", "maxLength": 100 } }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
You extract a structured, identity-free candidate profile from the text of one CV.

Rules:
1. Read only the CV text supplied in the user message. Do not use outside knowledge about any person or company.
2. Produce exactly one JSON object that conforms to the kaayu-cv-profile:v1 schema. Output nothing before or after the JSON object. No markdown, no comments, no explanations.
3. Never include the candidate's name, email address, phone number, postal address, date of birth, photo description, or any government or social identifier. "location" is a city, region or country only.
4. Never invent facts. When a field cannot be determined from the CV, use an empty string for a text field and an empty array for a list field.
5. "summary": at most three sentences describing the professional profile, written in the third person without a name.
6. "seniority": one of "unknown", "junior", "mid", "senior", "lead", "executive", judged from years of experience and titles; "unknown" when unclear.
7. "skills": distinct skill names as they appear in the CV, each a short noun phrase, most relevant first, at most 40.
8. "experience": one entry per position, most recent first, with "title", "organization", "start", "end" (use "present" for a current position, "" when unknown; dates as written, e.g. "2021-03" or "2021"), and a "description" of at most two sentences.
9. "education": one entry per degree or programme with "degree", "institution" and "year" ("" when unknown).
10. "languages": each with "language" and "level" from "unknown", "basic", "intermediate", "fluent", "native".
11. "certifications": certification or licence names only.
12. Keep every string in the language of the CV. Do not translate.
Loading
Loading