mirror of
https://github.com/zooai/brain.git
synced 2026-10-30 14:50:48 +00:00
Closed every remaining π‘ / π΅ row in PARITY.md. Each algorithm FortΓ©mi ships now has a real implementation in @hanzo/bot-memory v2.0.0 with matching ports in hanzo-memory (Python), bot-go (Go), and hanzoai/mcp (Rust). Cross-runtime tests: 121 TS + 53 Python + 58 Go + 38 Rust = 270 passing. Landed under packages/memory/ Retrieval & ranking fusion RRF (k=20 BEIR) + RSF (Weaviate v1.24) + adaptive k + adaptive FTS/semantic weights rerank MMR (Carbonell & Goldstein 1998), cosine dedup chunk-aware deduplication script Unicode script detection (Latin/CJK/emoji/Cyrillic/ Arabic/Hebrew/Greek/Devanagari) fts feature-flag matrix, CJK bigrams, emoji trigrams, websearch_to_tsquery parser, SQLite FTS5 MATCH renderer embed embedding registry, asymmetric E5 prefixes, Matryoshka truncation, coarse-dim picker two-stage coarse β fine retrieval via MRL federated cross-archive search with RRF fusion multi-memory X-Hanzo-Memory routing (X-Fortemi-Memory alias) filters composable tag/temporal/collection/scope predicates temporal UUIDv7 floor/ceiling + named ranges spatial Haversine + bbox + in-box (PostGIS fallback) Knowledge & graph graph normalize β SNN β PFNET-β β Louvain maintenance pipeline skos W3C SKOS concept tree (broader/narrower closures, Turtle export) fair Dublin Core XML + JSON-LD doc-types document type registry + auto-detect (filename/MIME/ content sniff) captions WebVTT / SRT / RTTM renderers sprite thumbnail sprite-sheet WebVTT cue builder code-ast language-aware syntactic chunker email RFC 2822 / MIME parser (multipart, qp, base64, HTML strip) exif EXIF parser (camera / time / GPS) Operational events EventBus + SSE renderer + webhook HMAC signer tokenizer BPE-style estimator + truncate-to-budget eval MRR / recall@k / precision@k / NDCG@k / benchmark hardware tier autodetect + per-tier model recommender circuit-breaker closed / open / half-open retry exponential backoff with full jitter range HTTP Range parser + Content-Range formatter tus TUS v1.0.0 (Create / Patch / metadata / checksum) Crypto address wallet-style content-addressable ids (hanzo: / mm:) mmpke01 multi-recipient envelope parser/builder + magic-byte sniff Inference (packages/memory/inference/) index InferenceBackend trait + registry slug provider-qualified routing (provider:model:tag) capabilities capability flags + task-based selector runtime-config hot-swap config (db_override β env β default) mock deterministic backend (for tests) few-shot ICL prompt builder (3-5 examples capped) refinement Self-Refine / ReAct / Reflexion patterns link-types rule + LLM link classifier (11 canonical types) vision VisionBackend trait + Ollama default transcription Whisper-compatible HTTP client diarization pyannote-compatible HTTP client + alignSpeakers / relabel gliner GLiNER zero-shot NER HTTP client Extraction (packages/memory/extract/) index registry + dispatcher text native UTF-8 passthrough email RFC 2822 adapter spreadsheet CSV/TSV pure-JS; xlsx via registerXlsxDecoder archive ZIP central-directory pure-JS reader exif-adapter EXIF for images code tree-sitter-style syntactic chunker pdf PdfSidecar HTTP adapter factory image VisionBackend-backed adapter factory audio TranscriptionBackend-backed adapter factory video keyframe + scene + transcript adapter factory 3d multi-view 3D model adapter factory media-optimize ffmpeg variants (faststart / web-compat / 720p) adapter factory structured JSON-schema structured-extract adapter factory summarizer fast/standard cascade adapter factory sprite-adapter thumbnail sprite-sheet adapter factory Cross-runtime ports hanzo-memory (Python) 53 tests, ports of fusion / rerank / dedup / script / fts / embed / temporal / captions / tokenizer / eval / spatial / range / address / graph / doc-types / circuit / retry / slug / runtime-config / link-types bot-go (Go) 58 tests, same algorithm set ported with standard-library-only primitives hanzoai/mcp::brain (Rust) 38 tests, same algorithm set; sha2 added as dependency (blake3 stand-in) PARITY.md is now 100% green (β in-monorepo + π’ sibling-repo). No π΅ placeholders remain.
92 lines
2.7 KiB
TypeScript
92 lines
2.7 KiB
TypeScript
/**
|
|
* FAIR metadata export.
|
|
*
|
|
* Wilkinson et al. (2016) β Findable, Accessible, Interoperable,
|
|
* Reusable. Two emission formats:
|
|
*
|
|
* - Dublin Core (ISO 15836): the 15-element vocabulary
|
|
* - JSON-LD with schema.org / DCTerms / SKOS / PROV context
|
|
*/
|
|
|
|
export interface DublinCore {
|
|
identifier: string;
|
|
title: string;
|
|
creator?: string[];
|
|
subject?: string[];
|
|
description?: string;
|
|
publisher?: string;
|
|
contributor?: string[];
|
|
date?: string;
|
|
type?: string;
|
|
format?: string;
|
|
source?: string;
|
|
language?: string;
|
|
relation?: string[];
|
|
coverage?: string;
|
|
rights?: string;
|
|
}
|
|
|
|
export function renderDcXml(dc: DublinCore): string {
|
|
const xml = ['<?xml version="1.0" encoding="UTF-8"?>'];
|
|
xml.push('<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">');
|
|
const add = (tag: string, value?: string | string[]) => {
|
|
if (!value) return;
|
|
const list = Array.isArray(value) ? value : [value];
|
|
for (const v of list) xml.push(` <dc:${tag}>${xmlEsc(v)}</dc:${tag}>`);
|
|
};
|
|
add("identifier", dc.identifier);
|
|
add("title", dc.title);
|
|
add("creator", dc.creator);
|
|
add("subject", dc.subject);
|
|
add("description", dc.description);
|
|
add("publisher", dc.publisher);
|
|
add("contributor", dc.contributor);
|
|
add("date", dc.date);
|
|
add("type", dc.type);
|
|
add("format", dc.format);
|
|
add("source", dc.source);
|
|
add("language", dc.language);
|
|
add("relation", dc.relation);
|
|
add("coverage", dc.coverage);
|
|
add("rights", dc.rights);
|
|
xml.push("</metadata>");
|
|
return xml.join("\n");
|
|
}
|
|
|
|
export interface JsonLdContext {
|
|
schema?: boolean;
|
|
dcterms?: boolean;
|
|
skos?: boolean;
|
|
prov?: boolean;
|
|
}
|
|
|
|
export function toJsonLd(dc: DublinCore, ctx: JsonLdContext = { schema: true, dcterms: true, skos: true, prov: true }): unknown {
|
|
const context: Record<string, string> = {};
|
|
if (ctx.schema) context.schema = "http://schema.org/";
|
|
if (ctx.dcterms) context.dct = "http://purl.org/dc/terms/";
|
|
if (ctx.skos) context.skos = "http://www.w3.org/2004/02/skos/core#";
|
|
if (ctx.prov) context.prov = "http://www.w3.org/ns/prov#";
|
|
return {
|
|
"@context": context,
|
|
"@id": dc.identifier,
|
|
"@type": dc.type ?? "schema:CreativeWork",
|
|
"schema:name": dc.title,
|
|
"schema:author": dc.creator,
|
|
"schema:about": dc.subject,
|
|
"schema:description": dc.description,
|
|
"schema:publisher": dc.publisher,
|
|
"schema:contributor": dc.contributor,
|
|
"schema:datePublished": dc.date,
|
|
"schema:encodingFormat": dc.format,
|
|
"schema:isBasedOn": dc.source,
|
|
"schema:inLanguage": dc.language,
|
|
"schema:isRelatedTo": dc.relation,
|
|
"schema:spatialCoverage": dc.coverage,
|
|
"schema:license": dc.rights,
|
|
};
|
|
}
|
|
|
|
function xmlEsc(s: string): string {
|
|
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
}
|