anthonym21 Claude Opus 4.6 commited on
Commit
37ef6a2
·
1 Parent(s): cfc13c7

Upgrade to v3: real-time quantization with slipcore from PyPI

Browse files

Replace bundled v2 modules with slipcore>=3.0.0 from PyPI.
New Quantize tab shows live Think-Quantize-Transmit pipeline.
UCR Explorer tab with all 45 anchors. Cleaned up old files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

README.md CHANGED
@@ -1,41 +1,42 @@
1
  ---
2
- title: 'Slipstream: Semantic Quantization for Multi-Agent Coordination'
3
- emoji: 📄
4
  colorFrom: blue
5
- colorTo: indigo
6
  sdk: gradio
 
7
  app_file: app.py
8
  pinned: false
9
- license: mit
10
- tags:
11
- - semantic-quantization
12
- - multi-agent-systems
13
- - protocol-standards
14
- - token-efficiency
15
- sdk_version: 6.5.1
16
  ---
17
 
18
- # Slipstream: Semantic Quantization for Efficient Multi-Agent Coordination
19
 
20
- This Space was generated from a research paper PDF.
 
21
 
22
- ## What you can do here
23
 
24
- - **Live Quantizer**: Type messy natural language and watch it get quantized to a UCR anchor (the core demo!)
25
- - **Start here**: guided entry points (summary / limitations / thread)
26
- - **Gallery**: extracted figures or page previews
27
- - **Chat**: ask questions about the paper
28
- - **Share Kit**: generate a tweet thread / talk outline / FAQ
29
- - **Model Playground**: chat with a referenced HF model (requires `HF_TOKEN`)
30
 
31
- ## Optional secrets
32
 
33
- If you add these as Space secrets, Chat + Share Kit become generative:
 
 
 
34
 
35
- - `HF_TOKEN`: Hugging Face token (read access is sufficient for inference; write is **not** needed at runtime)
36
- - `PAPER_LLM_MODEL`: e.g. `meta-llama/Meta-Llama-3-8B-Instruct` (or any chat-completion capable model)
37
 
38
- ## Build provenance
39
-
40
- - Source PDF: `slipstream-paper.pdf`
41
- - Extracted pages: 7
 
 
 
 
 
1
  ---
2
+ title: Slipstream v3
3
+ emoji:
4
  colorFrom: blue
5
+ colorTo: purple
6
  sdk: gradio
7
+ sdk_version: 4.44.0
8
  app_file: app.py
9
  pinned: false
10
+ license: apache-2.0
11
+ short_description: "Real-time semantic quantization for multi-agent AI"
 
 
 
 
 
12
  ---
13
 
14
+ # Slipstream v3: Real-Time Semantic Quantization
15
 
16
+ Type a natural language sentence and watch it get quantized into a factorized
17
+ Force-Object wire message in real time. No API keys, no GPU.
18
 
19
+ ## Features
20
 
21
+ - **Quantize** -- type any sentence, see the TQT (Think-Quantize-Transmit) pipeline in action
22
+ - **Encode** -- build wire messages manually from Force + Object dropdowns
23
+ - **Decode** -- parse and inspect SLIP v3 wire messages
24
+ - **UCR Explorer** -- browse all 45 core anchors with filtering
 
 
25
 
26
+ ## Resources
27
 
28
+ - **GitHub**: [github.com/anthony-maio/slipcore](https://github.com/anthony-maio/slipcore)
29
+ - **PyPI**: `pip install slipcore`
30
+ - **Paper**: [doi.org/10.5281/zenodo.18063451](https://doi.org/10.5281/zenodo.18063451)
31
+ - **SDK Guide**: [docs/sdk-guide.md](https://github.com/anthony-maio/slipcore/blob/master/docs/sdk-guide.md)
32
 
33
+ ## Citation
 
34
 
35
+ ```bibtex
36
+ @misc{maio2025slipstream,
37
+ title={Slipstream: Semantic Quantization for Efficient Multi-Agent Coordination},
38
+ author={Maio, Anthony},
39
+ year={2025},
40
+ doi={10.5281/zenodo.18063451}
41
+ }
42
+ ```
__pycache__/app.cpython-313.pyc DELETED
Binary file (26.5 kB)
 
__pycache__/quantizer.cpython-313.pyc DELETED
Binary file (37.8 kB)
 
__pycache__/ucr.cpython-313.pyc DELETED
Binary file (14.8 kB)
 
app.py CHANGED
@@ -1,521 +1,523 @@
1
- import json
2
- import os
3
- import re
4
- from dataclasses import dataclass
5
- from typing import Dict, List, Tuple, Optional
6
 
7
  import gradio as gr
8
 
9
- # Lazy-loaded quantizer
10
- _quantizer = None
11
- _quantizer_error = None
12
-
13
- def _get_quantizer():
14
- """Lazy load the embedding quantizer."""
15
- global _quantizer, _quantizer_error
16
- if _quantizer is not None:
17
- return _quantizer
18
- if _quantizer_error is not None:
19
- return None
20
- try:
21
- from quantizer import EmbeddingQuantizer
22
- _quantizer = EmbeddingQuantizer(fallback_threshold=0.3)
23
- return _quantizer
24
- except Exception as e:
25
- _quantizer_error = str(e)
26
- return None
27
-
28
- def _get_keyword_quantizer():
29
- """Fallback to keyword quantizer."""
30
- try:
31
- from quantizer import KeywordQuantizer
32
- return KeywordQuantizer()
33
- except Exception:
34
- return None
35
-
36
-
37
- # ---------------------------
38
- # Loaded at build time
39
- # ---------------------------
40
- PAPER_TITLE = "Slipstream: Semantic Quantization for Efficient Multi-Agent Coordination"
41
- PAPER_AUTHORS = "Anthony Maio"
42
- PAPER_ABSTRACT = "As multi-agent LLM systems scale,coordination bandwidthbecomes a primary cost\ndriver: every token spent on routing, intent framing, and redundant context is paid repeat-\nedly across agents and turns. Current approaches waste 40\u201360% of compute on coordination\noverhead, with communication costs scalingO(n2)as agent counts increase.\nThis paper introducesSlipstream, a protocol that performssemantic quantization:\nmapping free-form messages onto a sharedUniversal Concept Reference (UCR)and\ntransmitting compactmnemonic anchorsthat identify structured intents. Unlike syn-\ntactic compression (which fails due to BPE tokenizer fragmentation), Slipstream transmits\nnatural-language mnemonics that tokenize efficiently across model architectures.\nSlipstream combines (1) a symbolic4D semantic manifold\u2014Action, Polarity, Domain,\nUrgency\u2014with (2) a data-drivenvector engine(embeddings + nearest-centroid retrieval)\nplus anevolutionary extension layerthat learns new anchors from low-confidence traf-\nfic. Results show82% token reduction(41.9\u21927.4 tokens average) while maintaining\nsemantic fidelity, making large-scale multi-agent deployments economically viable."
43
- PAPER_TAGS = "semantic-quantization, multi-agent-systems, protocol-standards, token-ef-"
44
- DEFAULT_LLM_MODEL = None
45
- DETECTED_MODELS = []
46
-
47
-
48
- # ---------------------------
49
- # Robust file loading
50
- # ---------------------------
51
- def _load_chunks(path: str = "paper_chunks.jsonl") -> List[str]:
52
- chunks: List[str] = []
53
- try:
54
- with open(path, "r", encoding="utf-8") as f:
55
- for line in f:
56
- line = line.strip()
57
- if not line:
58
- continue
59
- try:
60
- rec = json.loads(line)
61
- txt = (rec.get("text") or "").strip()
62
- if txt:
63
- chunks.append(txt)
64
- except Exception:
65
- continue
66
- except FileNotFoundError:
67
- return []
68
- except Exception:
69
- return []
70
- return chunks
71
-
72
-
73
- # ---------------------------
74
- # Tiny BM25-ish retrieval (pure Python)
75
- # ---------------------------
76
- def _tokenize(s: str) -> List[str]:
77
- return re.findall(r"[A-Za-z0-9][A-Za-z0-9_-]{1,}", s.lower())
78
-
79
-
80
- @dataclass
81
- class Retriever:
82
- chunks: List[str]
83
- doc_tokens: List[List[str]]
84
- df: Dict[str, int]
85
- idf: Dict[str, float]
86
-
87
- @staticmethod
88
- def build(chunks: List[str]) -> "Retriever":
89
- doc_tokens = [_tokenize(c) for c in chunks]
90
- df: Dict[str, int] = {}
91
- for toks in doc_tokens:
92
- for t in set(toks):
93
- df[t] = df.get(t, 0) + 1
94
- n = max(1, len(doc_tokens))
95
- idf = {}
96
- for t, d in df.items():
97
- idf[t] = float((n - d + 0.5) / (d + 0.5))
98
- return Retriever(chunks=chunks, doc_tokens=doc_tokens, df=df, idf=idf)
99
-
100
- def topk(self, query: str, k: int = 4) -> List[Tuple[int, float]]:
101
- q = _tokenize(query)
102
- if not q:
103
- return []
104
- scores: List[Tuple[int, float]] = []
105
- qset = set(q)
106
- for i, toks in enumerate(self.doc_tokens):
107
- if not toks:
108
- continue
109
- overlap = qset.intersection(toks)
110
- if not overlap:
111
- continue
112
- score = 0.0
113
- for t in overlap:
114
- score += self.idf.get(t, 0.0)
115
- score = score / (1.0 + (len(toks) / 200.0))
116
- scores.append((i, score))
117
- scores.sort(key=lambda x: x[1], reverse=True)
118
- return scores[:k]
119
-
120
-
121
- CHUNKS = _load_chunks()
122
- RETRIEVER = Retriever.build(CHUNKS) if CHUNKS else None
123
-
124
-
125
- def retrieve_context(query: str, k: int = 4, max_chars: int = 6000) -> str:
126
- if not RETRIEVER:
127
- return ""
128
- hits = RETRIEVER.topk(query, k=k)
129
- parts: List[str] = []
130
- for idx, _score in hits:
131
- txt = CHUNKS[idx].strip()
132
- if txt:
133
- parts.append(txt)
134
- ctx = "\n\n".join(parts).strip()
135
- return ctx[:max_chars]
136
-
137
-
138
- # ---------------------------
139
- # HF Inference helpers (optional)
140
- # ---------------------------
141
- def _get_hf_client(model_id: str):
142
- try:
143
- from huggingface_hub import InferenceClient
144
- except Exception as e:
145
- raise RuntimeError("huggingface_hub is not installed. Add it to requirements.txt") from e
146
-
147
- token = os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACEHUB_API_TOKEN")
148
- if not token:
149
- raise RuntimeError("HF_TOKEN is not set as a Space secret.")
150
- return InferenceClient(model=model_id, token=token)
151
-
152
-
153
- def _llm_chat(model_id: str, messages: List[dict], max_tokens: int = 512) -> str:
154
- client = _get_hf_client(model_id)
155
- out = client.chat_completion(messages=messages, max_tokens=max_tokens)
156
- return out.choices[0].message.content
157
-
158
-
159
- # ---------------------------
160
- # Chat with paper (RAG-lite)
161
- # ---------------------------
162
- def paper_chat(message: str, history: List[Tuple[str, str]]) -> str:
163
- message = (message or "").strip()
164
- if not message:
165
- return "Ask a question about the paper."
166
-
167
- ctx = retrieve_context(message, k=4, max_chars=6000)
168
-
169
- model_id = os.environ.get("PAPER_LLM_MODEL") or DEFAULT_LLM_MODEL
170
- if not model_id:
171
- if not ctx:
172
- return "No indexed context found. (paper_chunks.jsonl missing?)"
173
- return "Top matches in the paper:\n\n" + ctx[:1200]
174
-
175
- trimmed_history = history[-4:] if history else []
176
- messages: List[dict] = [
177
- {
178
- "role": "system",
179
- "content": (
180
- "You are a precise research assistant. Answer using ONLY the provided paper context. "
181
- "If the context is insufficient, say what is missing and point to what section would help."
182
- ),
183
- },
184
- ]
185
- if ctx:
186
- messages.append({"role": "system", "content": "PAPER CONTEXT:\n\n" + ctx})
187
-
188
- for u, a in trimmed_history:
189
- messages.append({"role": "user", "content": u})
190
- messages.append({"role": "assistant", "content": a})
191
-
192
- messages.append({"role": "user", "content": message})
193
-
194
- try:
195
- return _llm_chat(model_id, messages, max_tokens=512).strip()
196
- except Exception as e:
197
- if ctx:
198
- return f"(LLM unavailable: {e})\n\nTop matches in the paper:\n\n" + ctx[:1200]
199
- return f"LLM unavailable: {e}"
200
-
201
-
202
- # ---------------------------
203
- # Share Kit (generators)
204
- # ---------------------------
205
- def _fallback_tweet_thread(title: str, abstract: str) -> str:
206
- abs_one = re.sub(r"\s+", " ", abstract).strip()
207
- bullets = [
208
- f"1/ {title}",
209
- "2/ TL;DR: " + (abs_one[:220] + ("…" if len(abs_one) > 220 else "")),
210
- "3/ Key idea: (open the Space → Chat tab and ask for the method overview)",
211
- "4/ Try it: use the Share Kit tab to generate a talk outline / FAQ.",
212
- "5/ Links: add your paper + code links in the README.",
213
- ]
214
- return "\n\n".join(bullets)
215
-
216
- def generate_share(kind: str) -> str:
217
- kind = (kind or "").strip().lower()
218
- base_title = PAPER_TITLE or "Paper"
219
- base_abs = PAPER_ABSTRACT or ""
220
-
221
- model_id = os.environ.get("PAPER_LLM_MODEL") or DEFAULT_LLM_MODEL
222
- if not model_id:
223
- if kind == "tweet thread":
224
- return _fallback_tweet_thread(base_title, base_abs)
225
- if kind == "talk outline":
226
- return "\n".join([
227
- f"Title: {base_title}",
228
- "- Motivation",
229
- "- Problem setup",
230
- "- Method",
231
- "- Results",
232
- "- Limitations",
233
- "- Q&A",
234
- ])
235
- if kind == "faq":
236
- return "\n".join([
237
- "Q: What problem does this address?\nA: " + (base_abs[:220] + ("…" if len(base_abs) > 220 else "")),
238
- "",
239
- "Q: What is the main contribution?\nA: Ask in the Chat tab.",
240
- "",
241
- "Q: How do I reproduce it?\nA: Link code + add steps in README.",
242
- ])
243
- return "Select an item to generate."
244
-
245
- prompt = {
246
- "tweet thread": "Write a concise 6-tweet thread summarizing the paper for the ML community.",
247
- "talk outline": "Create a 10-minute talk outline with section headers and bullet points.",
248
- "faq": "Write an FAQ with 6 Q/A pairs focused on method, results, limitations, and usage.",
249
- }.get(kind, "Summarize the paper in 8 bullet points.")
250
-
251
- ctx = (PAPER_ABSTRACT or "").strip()
252
- messages = [
253
- {"role": "system", "content": "You are an expert technical writer for ML research audiences."},
254
- {"role": "user", "content": f"Paper title: {base_title}\nAuthors: {PAPER_AUTHORS}\n\nAbstract/context:\n{ctx}\n\nTask: {prompt}"},
255
- ]
256
- try:
257
- return _llm_chat(model_id, messages, max_tokens=600).strip()
258
- except Exception as e:
259
- if kind == "tweet thread":
260
- return _fallback_tweet_thread(base_title, base_abs) + f"\n\n(LLM unavailable: {e})"
261
- return f"LLM unavailable: {e}"
262
-
263
-
264
- # ---------------------------
265
- # Model Playground (chat)
266
- # ---------------------------
267
- def model_chat(model_id: str, message: str, history: List[Tuple[str, str]]) -> str:
268
- model_id = (model_id or "").strip()
269
- message = (message or "").strip()
270
- if not model_id:
271
- return "Provide a model id."
272
- if not message:
273
- return "Send a message."
274
-
275
- messages: List[dict] = [{"role": "system", "content": "You are a helpful assistant."}]
276
- for u, a in (history[-4:] if history else []):
277
- messages.append({"role": "user", "content": u})
278
- messages.append({"role": "assistant", "content": a})
279
- messages.append({"role": "user", "content": message})
280
 
281
- try:
282
- return _llm_chat(model_id, messages, max_tokens=512).strip()
283
- except Exception as e:
284
- return f"Model call failed: {e}"
 
 
 
 
285
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
286
 
287
- # ---------------------------
288
- # UI helpers
289
- # ---------------------------
290
- def quantize_intent(intent: str) -> Tuple[str, str, str]:
291
- """
292
- Quantize a natural language intent to UCR anchor.
293
- Returns: (primary_result_md, alternatives_md, wire_format)
294
- """
295
- intent = (intent or "").strip()
296
- if not intent:
297
- return "Enter an intent to quantize.", "", ""
298
 
299
- # Try embedding quantizer first, fall back to keyword
300
- quantizer = _get_quantizer()
301
- method = "embedding"
302
- if quantizer is None:
303
- quantizer = _get_keyword_quantizer()
304
- method = "keyword"
305
 
306
- if quantizer is None:
307
- return "Quantizer unavailable. Check logs.", "", ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
308
 
309
- try:
310
- result = quantizer.quantize(intent)
311
- except Exception as e:
312
- return f"Quantization error: {e}", "", ""
313
 
314
  # Confidence color
315
- conf = result.confidence
316
- if conf >= 0.7:
317
- color = "green"
318
  conf_label = "High"
319
- elif conf >= 0.5:
320
- color = "orange"
321
  conf_label = "Medium"
322
  else:
323
- color = "red"
324
  conf_label = "Low"
325
 
326
- # Primary result
327
- primary_md = f"""
328
- ### {result.anchor.mnemonic}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
 
330
- **Confidence:** <span style="color:{color}; font-weight:bold">{conf:.0%}</span> ({conf_label})
 
331
 
332
- **Canonical meaning:** {result.anchor.canonical}
 
 
 
333
 
334
- **Method:** {method} {'(fallback)' if result.is_fallback else ''}
 
 
335
 
336
- **Coordinates:** `{result.anchor.coords}` (Action, Polarity, Domain, Urgency)
 
 
 
 
 
337
  """
338
 
339
- # Alternatives
340
- if result.alternatives:
341
- alt_lines = ["| Anchor | Similarity |", "|--------|------------|"]
342
- for alt_anchor, alt_score in result.alternatives[:3]:
343
- bar_len = int(alt_score * 10)
344
- bar = "█" * bar_len + "░" * (10 - bar_len)
345
- alt_lines.append(f"| {alt_anchor.mnemonic} | {bar} {alt_score:.0%} |")
346
- alternatives_md = "\n".join(alt_lines)
347
- else:
348
- alternatives_md = "*No alternatives*"
349
 
350
- # Wire format
351
- wire = f"SLIP v1 user agent {result.anchor.mnemonic}"
352
- if result.is_fallback:
353
- # Truncate long intents for fallback payload
354
- payload = intent[:100].replace('"', "'")
355
- wire = f'SLIP v1 user agent Fallback "{payload}"'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
356
 
357
- return primary_md, alternatives_md, wire
 
358
 
 
 
 
 
 
 
 
 
359
 
360
- EXAMPLE_INTENTS = [
361
- ("Review my code", "RequestReview"),
362
- ("Task complete!", "InformComplete"),
363
- ("System down!", "ObserveError"),
364
- ("Can you help?", "RequestHelp"),
365
- ("Looks good to me", "EvalApprove"),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
366
  ]
367
 
368
 
369
- def start_here(choice: str) -> str:
370
- choice = (choice or "").strip().lower()
371
- if choice == "quick summary":
372
- return f"### {PAPER_TITLE}\n\n**Authors:** {PAPER_AUTHORS}\n\n**Abstract:**\n\n{PAPER_ABSTRACT}"
373
- if choice == "how does it work?":
374
- return "Go to **Chat** and ask: *Give me a method overview with the key steps.*"
375
- if choice == "what are the limitations?":
376
- return "Go to **Chat** and ask: *List limitations and failure modes discussed in the paper.*"
377
- if choice == "generate a tweet thread":
378
- return generate_share("tweet thread")
379
- return "Pick an option."
380
-
381
-
382
- def _load_gallery_items() -> List[Tuple[str, str]]:
383
- items: List[Tuple[str, str]] = []
384
- if os.path.isdir("assets/images"):
385
- for fn in sorted(os.listdir("assets/images"))[:48]:
386
- path = os.path.join("assets/images", fn)
387
- if os.path.isfile(path):
388
- items.append((path, fn))
389
- if not items and os.path.isdir("assets/pages"):
390
- for fn in sorted(os.listdir("assets/pages"))[:24]:
391
- path = os.path.join("assets/pages", fn)
392
- if os.path.isfile(path):
393
- items.append((path, fn))
394
- return items
395
-
396
-
397
- CSS = '''
398
- .paper-hero h1 { margin-bottom: 0.2rem; }
399
- .paper-hero p { margin-top: 0.2rem; opacity: 0.9; }
400
- .hint { opacity: 0.85; }
401
- '''
402
-
403
- with gr.Blocks(theme=gr.themes.Soft(), css=CSS) as demo:
404
- gr.Markdown(f"# {PAPER_TITLE}", elem_classes=["paper-hero"])
405
- if PAPER_AUTHORS:
406
- gr.Markdown(f"**Authors:** {PAPER_AUTHORS}", elem_classes=["paper-hero"])
407
- if PAPER_TAGS:
408
- gr.Markdown(f"**Tags:** {PAPER_TAGS}", elem_classes=["paper-hero"])
409
 
410
  with gr.Tabs():
411
- with gr.Tab("Start here"):
412
- gr.Markdown("Pick an interaction to explore the paper quickly.", elem_classes=["hint"])
413
- choice = gr.Radio(
414
- ["Quick summary", "How does it work?", "What are the limitations?", "Generate a tweet thread"],
415
- value="Quick summary",
416
- label="What do you want?",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
417
  )
418
- out = gr.Markdown()
419
- choice.change(start_here, inputs=choice, outputs=out)
420
- demo.load(start_here, inputs=choice, outputs=out)
421
-
422
- with gr.Tab("Overview"):
423
- gr.Markdown("## Abstract")
424
- gr.Markdown(PAPER_ABSTRACT)
425
-
426
- gr.Markdown("---")
427
- gr.Markdown("### Text search (snippet)")
428
- q = gr.Textbox(label="Find a phrase", placeholder="e.g., scalable oversight", lines=1)
429
- snippet = gr.Textbox(label="Top matching context", lines=10)
430
-
431
- def _snippet(query: str) -> str:
432
- query = (query or "").strip()
433
- if not query:
434
- return ""
435
- ctx = retrieve_context(query, k=4, max_chars=1600)
436
- return ctx or "No matches."
437
-
438
- q.change(_snippet, inputs=q, outputs=snippet)
439
-
440
- with gr.Tab("Gallery"):
441
- gr.Markdown("Extracted images / rendered page previews (if included at build time).", elem_classes=["hint"])
442
- gallery = gr.Gallery(label="Figures / pages", columns=2, rows=2, height=520)
443
-
444
- def _gallery():
445
- return _load_gallery_items()
446
-
447
- demo.load(_gallery, outputs=gallery)
448
-
449
- with gr.Tab("Chat"):
450
- gr.Markdown(
451
- "Ask questions. If you set `HF_TOKEN` + `PAPER_LLM_MODEL` as Space secrets, answers become generative; "
452
- "otherwise it returns top-matching snippets.",
453
- elem_classes=["hint"],
454
  )
455
- gr.ChatInterface(fn=paper_chat, title="Chat with the Paper")
456
-
457
- with gr.Tab("Share Kit"):
458
- gr.Markdown("Generate shareable assets. Works without secrets (deterministic fallback).", elem_classes=["hint"])
459
- kind = gr.Dropdown(["Tweet thread", "Talk outline", "FAQ"], value="Tweet thread", label="Generate")
460
- btn = gr.Button("Create")
461
- share_out = gr.Textbox(lines=14, label="Output")
462
- btn.click(lambda k: generate_share(k), inputs=kind, outputs=share_out)
463
-
464
- with gr.Tab("Model Playground"):
465
- gr.Markdown("Chat with a referenced Hub model (if any) or provide your own. Requires `HF_TOKEN` secret.", elem_classes=["hint"])
466
- model_id = gr.Dropdown(
467
- choices=(DETECTED_MODELS if DETECTED_MODELS else []),
468
- value=(DETECTED_MODELS[0] if DETECTED_MODELS else None),
469
- label="Model id",
470
- allow_custom_value=True,
471
  )
472
 
473
- def _model_chat_fn(message: str, history: List[Tuple[str, str]], mid: str) -> str:
474
- return model_chat(mid, message, history)
 
 
475
 
476
- gr.ChatInterface(fn=_model_chat_fn, additional_inputs=[model_id], title="Model Playground")
 
 
477
 
478
- with gr.Tab("Live Quantizer"):
479
- gr.Markdown("""
480
- ## Think → Quantize → Transmit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
481
 
482
- Type a messy, natural-language intent and watch it get quantized to a UCR anchor.
483
- This demonstrates the core Slipstream innovation: mapping free-form language onto a shared semantic manifold.
484
- """)
 
485
 
486
- with gr.Row():
487
- with gr.Column(scale=2):
488
- intent_input = gr.Textbox(
489
- label="Your intent (natural language)",
490
- placeholder="Hey, I'm kinda stuck on this auth bug, can you take a look?",
491
- lines=2,
492
- )
493
- quantize_btn = gr.Button("Quantize", variant="primary")
494
-
495
- gr.Markdown("**Try these examples:**")
496
- with gr.Row():
497
- for ex_text, ex_anchor in EXAMPLE_INTENTS:
498
- ex_btn = gr.Button(ex_text, size="sm")
499
- ex_btn.click(lambda t=ex_text: t, outputs=intent_input)
500
-
501
- with gr.Column(scale=3):
502
- primary_out = gr.Markdown(label="Result")
503
- with gr.Accordion("Nearby Anchors", open=True):
504
- alternatives_out = gr.Markdown()
505
- wire_out = gr.Code(label="SLIP Wire Format", language=None)
506
-
507
- quantize_btn.click(
508
- quantize_intent,
509
- inputs=intent_input,
510
- outputs=[primary_out, alternatives_out, wire_out],
511
  )
512
- intent_input.submit(
513
- quantize_intent,
514
- inputs=intent_input,
515
- outputs=[primary_out, alternatives_out, wire_out],
 
 
 
 
 
 
 
 
 
 
516
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
517
 
518
- gr.Markdown("---\nBuilt with Gradio on Hugging Face Spaces.")
519
 
520
  if __name__ == "__main__":
521
  demo.launch()
 
1
+ """
2
+ Slipstream v3: Real-Time Semantic Quantization Demo
3
+ Interactive HuggingFace Space for multi-agent AI communication protocol.
4
+ """
 
5
 
6
  import gradio as gr
7
 
8
+ from slipcore import (
9
+ KeywordQuantizer,
10
+ create_base_ucr,
11
+ format_fallback,
12
+ format_slip,
13
+ parse_slip,
14
+ render_human,
15
+ __version__,
16
+ )
17
+ from slipcore.quantizer import FORCE_KEYWORDS, OBJECT_KEYWORDS, _keyword_score
18
+
19
+ # --------------------------------------------------------------------------
20
+ # Shared state
21
+ # --------------------------------------------------------------------------
22
+
23
+ UCR = create_base_ucr()
24
+ QUANTIZER = KeywordQuantizer()
25
+
26
+ FORCES = [
27
+ "Observe", "Inform", "Ask", "Request", "Propose", "Commit",
28
+ "Eval", "Meta", "Accept", "Reject", "Error", "Fallback",
29
+ ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
+ OBJECTS = [
32
+ "State", "Change", "Error", "Result", "Status", "Complete",
33
+ "Blocked", "Progress", "Clarify", "Permission", "Resource",
34
+ "Task", "Plan", "Review", "Help", "Cancel", "Priority",
35
+ "Alternative", "Rollback", "Deadline", "Approve", "NeedsWork",
36
+ "Ack", "Sync", "Handoff", "Escalate", "Abort", "Condition",
37
+ "Defer", "Timeout", "Validation", "Generic",
38
+ ]
39
 
40
+ FORCE_DESCRIPTIONS = {
41
+ "Observe": "Passively notice state, change, or error",
42
+ "Inform": "Report information -- status, completion, blockage, progress",
43
+ "Ask": "Seek information -- clarification, status, permission",
44
+ "Request": "Direct action -- task, review, help, plan",
45
+ "Propose": "Suggest something -- plan, change, alternative",
46
+ "Commit": "Pledge to something -- task, deadline, resource",
47
+ "Eval": "Judge work quality -- approve, needs work",
48
+ "Meta": "Protocol-level -- acknowledge, sync, handoff, escalate",
49
+ "Accept": "Agree to a proposal or request",
50
+ "Reject": "Decline a proposal or request",
51
+ "Error": "Report system error -- timeout, resource, permission",
52
+ "Fallback": "Content too complex for standard quantization",
53
+ }
54
+
55
+ FORCE_COLORS = {
56
+ "Observe": "#6366f1", # indigo
57
+ "Inform": "#0ea5e9", # sky
58
+ "Ask": "#f59e0b", # amber
59
+ "Request": "#ef4444", # red
60
+ "Propose": "#8b5cf6", # violet
61
+ "Commit": "#22c55e", # green
62
+ "Eval": "#14b8a6", # teal
63
+ "Meta": "#64748b", # slate
64
+ "Accept": "#10b981", # emerald
65
+ "Reject": "#f43f5e", # rose
66
+ "Error": "#dc2626", # red-600
67
+ "Fallback": "#78716c", # stone
68
+ }
69
+
70
+
71
+ # --------------------------------------------------------------------------
72
+ # Quantize tab logic
73
+ # --------------------------------------------------------------------------
74
+
75
+ def quantize_sentence(text: str, src: str, dst: str) -> str:
76
+ """Quantize natural language into SLIP v3, showing the full TQT pipeline."""
77
+ if not text.strip():
78
+ return ""
79
 
80
+ src = "".join(c for c in (src or "alice").strip() if c.isalnum())[:20] or "alice"
81
+ dst = "".join(c for c in (dst or "bob").strip() if c.isalnum())[:20] or "bob"
 
 
 
 
 
 
 
 
 
82
 
83
+ # Run quantizer
84
+ result = QUANTIZER.quantize(text)
85
+ force = result.force
86
+ obj = result.obj
87
+ confidence = result.confidence
 
88
 
89
+ # Build wire
90
+ if result.is_fallback:
91
+ ref = QUANTIZER.fallback_store.store(text)
92
+ wire = format_fallback(src, dst, ref)
93
+ else:
94
+ wire = format_slip(src, dst, force, obj)
95
+
96
+ # Get canonical from UCR
97
+ anchor = UCR.get_by_force_obj(force, obj)
98
+ canonical = anchor.canonical if anchor else f"{force} {obj}"
99
+
100
+ # Compute keyword match details for Force
101
+ force_detail_rows = []
102
+ for f_name, patterns in FORCE_KEYWORDS.items():
103
+ score = _keyword_score(text, patterns)
104
+ if score > 0:
105
+ matched = [p for p in patterns if p.lower() in text.lower()]
106
+ color = FORCE_COLORS.get(f_name, "#666")
107
+ bar_width = int(score * 100)
108
+ winner = " **<--**" if f_name == force else ""
109
+ force_detail_rows.append(
110
+ (score, f"| <span style='color:{color}'>`{f_name}`</span> | "
111
+ f"{''.join(matched[:3])} | "
112
+ f"<span style='display:inline-block;background:{color};width:{bar_width}px;height:12px;border-radius:3px'></span> "
113
+ f"{score:.2f}{winner} |")
114
+ )
115
+ force_detail_rows.sort(key=lambda x: x[0], reverse=True)
116
+
117
+ # Compute keyword match details for Object
118
+ obj_detail_rows = []
119
+ for o_name, patterns in OBJECT_KEYWORDS.items():
120
+ score = _keyword_score(text, patterns)
121
+ if score > 0:
122
+ matched = [p for p in patterns if p.lower() in text.lower()]
123
+ bar_width = int(score * 100)
124
+ winner = " **<--**" if o_name == obj else ""
125
+ obj_detail_rows.append(
126
+ (score, f"| `{o_name}` | "
127
+ f"{''.join(matched[:3])} | "
128
+ f"<span style='display:inline-block;background:#6366f1;width:{bar_width}px;height:12px;border-radius:3px'></span> "
129
+ f"{score:.2f}{winner} |")
130
+ )
131
+ obj_detail_rows.sort(key=lambda x: x[0], reverse=True)
132
 
133
+ # Token comparison
134
+ input_tokens = len(text.split())
135
+ wire_tokens = len(wire.split())
136
+ reduction = ((input_tokens - wire_tokens) / input_tokens * 100) if input_tokens > 0 else 0
137
 
138
  # Confidence color
139
+ if confidence >= 0.6:
140
+ conf_color = "#22c55e"
 
141
  conf_label = "High"
142
+ elif confidence >= 0.3:
143
+ conf_color = "#f59e0b"
144
  conf_label = "Medium"
145
  else:
146
+ conf_color = "#ef4444"
147
  conf_label = "Low"
148
 
149
+ force_color = FORCE_COLORS.get(force, "#666")
150
+
151
+ # Build output
152
+ out = []
153
+
154
+ # Wire result (hero)
155
+ out.append(f"### Wire Output")
156
+ out.append(f"```")
157
+ out.append(wire)
158
+ out.append(f"```")
159
+ out.append("")
160
+
161
+ # Human-readable
162
+ human = render_human(wire)
163
+ out.append(f"> {human}")
164
+ out.append("")
165
+
166
+ # Confidence + token savings
167
+ conf_bar_width = int(confidence * 200)
168
+ out.append(f"| Metric | Value |")
169
+ out.append(f"|--------|-------|")
170
+ out.append(f"| Confidence | <span style='color:{conf_color}'>{conf_label}</span> ({confidence:.0%}) |")
171
+ out.append(f"| Force | <span style='color:{force_color}'>{force}</span> |")
172
+ out.append(f"| Object | {obj} |")
173
+ out.append(f"| Canonical | \"{canonical}\" |")
174
+ out.append(f"| Input tokens | ~{input_tokens} |")
175
+ out.append(f"| Wire tokens | {wire_tokens} |")
176
+ out.append(f"| Reduction | {reduction:.0f}% |")
177
+ out.append("")
178
+
179
+ # Stage 1: Force classification
180
+ if force_detail_rows:
181
+ out.append(f"<details><summary><b>Stage 1: Force Classification</b> -- matched {len(force_detail_rows)} forces</summary>")
182
+ out.append("")
183
+ out.append(f"| Force | Matched Keywords | Score |")
184
+ out.append(f"|-------|-----------------|-------|")
185
+ for _, row in force_detail_rows[:6]:
186
+ out.append(row)
187
+ out.append("")
188
+ out.append(f"</details>")
189
+ out.append("")
190
+
191
+ # Stage 2: Object classification
192
+ if obj_detail_rows:
193
+ out.append(f"<details><summary><b>Stage 2: Object Classification</b> -- matched {len(obj_detail_rows)} objects</summary>")
194
+ out.append("")
195
+ out.append(f"| Object | Matched Keywords | Score |")
196
+ out.append(f"|--------|-----------------|-------|")
197
+ for _, row in obj_detail_rows[:6]:
198
+ out.append(row)
199
+ out.append("")
200
+ out.append(f"</details>")
201
+ out.append("")
202
+
203
+ if result.is_fallback:
204
+ out.append(f"*Fallback triggered: no keyword patterns matched with sufficient confidence. "
205
+ f"Raw text stored out-of-band with ref pointer.*")
206
+
207
+ return "\n".join(out)
208
+
209
+
210
+ # --------------------------------------------------------------------------
211
+ # Encode tab logic
212
+ # --------------------------------------------------------------------------
213
+
214
+ def encode_message(src: str, dst: str, force: str, obj: str, payload: str) -> str:
215
+ if not src or not dst or not force or not obj:
216
+ return "Fill in source, destination, Force, and Object."
217
+
218
+ clean_src = "".join(c for c in src.strip() if c.isalnum())[:20] or "agent"
219
+ clean_dst = "".join(c for c in dst.strip() if c.isalnum())[:20] or "other"
220
+
221
+ parts = ["SLIP", "v3", clean_src, clean_dst, force, obj]
222
+ if payload.strip():
223
+ for token in payload.strip().split():
224
+ clean = "".join(c for c in token if c.isalnum())
225
+ if clean:
226
+ parts.append(clean[:30])
227
 
228
+ wire = " ".join(parts)
229
+ human = render_human(wire)
230
 
231
+ input_tokens = len(parts)
232
+ json_equiv = f'{{"from":"{src}","to":"{dst}","action":"{force}","target":"{obj}","payload":"{payload}"}}'
233
+ json_tokens = len(json_equiv.split()) + json_equiv.count('"') + json_equiv.count(':')
234
+ reduction = ((json_tokens - input_tokens) / json_tokens) * 100 if json_tokens > 0 else 0
235
 
236
+ return f"""```
237
+ {wire}
238
+ ```
239
 
240
+ > {human}
241
+
242
+ | Metric | SLIP v3 | JSON equivalent |
243
+ |--------|---------|-----------------|
244
+ | Tokens | **{input_tokens}** | ~{json_tokens} |
245
+ | Reduction | **{reduction:.0f}%** | -- |
246
  """
247
 
 
 
 
 
 
 
 
 
 
 
248
 
249
+ # --------------------------------------------------------------------------
250
+ # Decode tab logic
251
+ # --------------------------------------------------------------------------
252
+
253
+ def decode_message(wire: str) -> str:
254
+ if not wire.strip():
255
+ return "Enter a SLIP v3 message to decode."
256
+
257
+ try:
258
+ msg = parse_slip(wire.strip())
259
+ except Exception as e:
260
+ return f"Parse error: {e}"
261
+
262
+ anchor = UCR.get_by_force_obj(msg.force, msg.obj)
263
+ canonical = anchor.canonical if anchor else "unknown"
264
+ coords = f"({', '.join(str(c) for c in anchor.coords)})" if anchor else "--"
265
+ force_desc = FORCE_DESCRIPTIONS.get(msg.force, "Unknown")
266
+ human = render_human(msg)
267
+
268
+ return f"""> {human}
269
+
270
+ | Field | Value |
271
+ |-------|-------|
272
+ | Version | {msg.version} |
273
+ | Source | `{msg.src}` |
274
+ | Destination | `{msg.dst}` |
275
+ | Force | **{msg.force}** -- {force_desc} |
276
+ | Object | **{msg.obj}** |
277
+ | Canonical | \"{canonical}\" |
278
+ | Coords | `{coords}` |
279
+ | Payload | {' '.join(msg.payload) if msg.payload else '--'} |
280
+ | Fallback | {'`' + msg.fallback_ref + '`' if msg.fallback_ref else '--'} |
281
+ """
282
+
283
+
284
+ # --------------------------------------------------------------------------
285
+ # UCR Explorer
286
+ # --------------------------------------------------------------------------
287
+
288
+ def build_ucr_table(force_filter: str) -> str:
289
+ anchors = list(UCR.anchors.values())
290
+ anchors.sort(key=lambda a: a.index)
291
 
292
+ if force_filter and force_filter != "All":
293
+ anchors = [a for a in anchors if a.force == force_filter]
294
 
295
+ rows = []
296
+ for a in anchors:
297
+ color = FORCE_COLORS.get(a.force, "#666")
298
+ coords = ", ".join(str(c) for c in a.coords)
299
+ rows.append(
300
+ f"| `{a.index:#06x}` | <span style='color:{color}'>{a.force}</span> | "
301
+ f"{a.obj} | {a.canonical} | ({coords}) |"
302
+ )
303
 
304
+ header = f"**{len(anchors)} anchors** " + (f"(filtered: {force_filter})" if force_filter != "All" else "(all)")
305
+
306
+ return f"""{header}
307
+
308
+ | Index | Force | Object | Canonical | Coords |
309
+ |-------|-------|--------|-----------|--------|
310
+ {chr(10).join(rows)}
311
+ """
312
+
313
+
314
+ # --------------------------------------------------------------------------
315
+ # Example sentences for the quantizer
316
+ # --------------------------------------------------------------------------
317
+
318
+ EXAMPLES = [
319
+ ["Please review the pull request for the auth module", "dev", "reviewer"],
320
+ ["The database migration is complete", "worker", "manager"],
321
+ ["I am blocked waiting for API credentials", "backend", "devops"],
322
+ ["I suggest we switch to Redis for the session store", "architect", "team"],
323
+ ["LGTM, approved for merge", "reviewer", "dev"],
324
+ ["Emergency: halt all production deployments now", "sre", "allAgents"],
325
+ ["What do you mean by 'optimize the query'?", "junior", "senior"],
326
+ ["I will handle the database migration this sprint", "dbAdmin", "pm"],
327
+ ["The API call to the payment provider timed out after 30s", "gateway", "monitor"],
328
+ ["Yes, but only if we add monitoring first", "lead", "architect"],
329
+ ["Ping, are you still there?", "coordinator", "worker"],
330
+ ["No, that approach will not scale to our traffic levels", "cto", "engineer"],
331
  ]
332
 
333
 
334
+ # --------------------------------------------------------------------------
335
+ # Build Gradio app
336
+ # --------------------------------------------------------------------------
337
+
338
+ with gr.Blocks(
339
+ title="Slipstream v3",
340
+ theme=gr.themes.Soft(),
341
+ css="""
342
+ .hero-wire { font-size: 1.3em; font-family: monospace; }
343
+ footer { display: none !important; }
344
+ """
345
+ ) as demo:
346
+
347
+ gr.Markdown("""
348
+ # Slipstream v3
349
+ ### Real-time semantic quantization for multi-agent AI coordination
350
+
351
+ Type a natural language sentence and watch it get quantized into a
352
+ factorized Force-Object wire message. No API keys, no GPU -- runs on
353
+ the keyword classifier built into [slipcore](https://pypi.org/project/slipcore/).
354
+
355
+ ---
356
+ """)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
357
 
358
  with gr.Tabs():
359
+
360
+ # ---- Quantize tab (hero feature) ----
361
+ with gr.TabItem("Quantize", id="quantize"):
362
+ gr.Markdown("### Think -> Quantize -> Transmit")
363
+ gr.Markdown("Enter what you want to say. The quantizer maps it to Force + Object.")
364
+
365
+ with gr.Row():
366
+ q_text = gr.Textbox(
367
+ label="Natural language input",
368
+ placeholder="Please review the pull request for the auth module",
369
+ lines=2,
370
+ scale=4,
371
+ )
372
+ with gr.Row():
373
+ q_src = gr.Textbox(label="Source agent", value="alice", scale=1)
374
+ q_dst = gr.Textbox(label="Destination agent", value="bob", scale=1)
375
+ q_btn = gr.Button("Quantize", variant="primary", scale=1)
376
+
377
+ q_output = gr.Markdown()
378
+
379
+ q_btn.click(
380
+ quantize_sentence,
381
+ inputs=[q_text, q_src, q_dst],
382
+ outputs=q_output,
383
  )
384
+ q_text.submit(
385
+ quantize_sentence,
386
+ inputs=[q_text, q_src, q_dst],
387
+ outputs=q_output,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
388
  )
389
+
390
+ gr.Markdown("#### Try these examples")
391
+ gr.Examples(
392
+ examples=EXAMPLES,
393
+ inputs=[q_text, q_src, q_dst],
394
+ outputs=q_output,
395
+ fn=quantize_sentence,
396
+ cache_examples=False,
 
 
 
 
 
 
 
 
397
  )
398
 
399
+ # ---- Encode tab ----
400
+ with gr.TabItem("Encode", id="encode"):
401
+ gr.Markdown("### Manual encoder")
402
+ gr.Markdown("Build a wire message by picking Force and Object directly.")
403
 
404
+ with gr.Row():
405
+ enc_src = gr.Textbox(label="Source", value="alice", scale=1)
406
+ enc_dst = gr.Textbox(label="Destination", value="bob", scale=1)
407
 
408
+ with gr.Row():
409
+ enc_force = gr.Dropdown(
410
+ choices=FORCES, label="Force", value="Request",
411
+ info="Action verb", scale=1,
412
+ )
413
+ enc_obj = gr.Dropdown(
414
+ choices=OBJECTS, label="Object", value="Review",
415
+ info="Domain noun", scale=1,
416
+ )
417
+
418
+ enc_payload = gr.Textbox(label="Payload (optional)", placeholder="auth", value="auth")
419
+ enc_btn = gr.Button("Encode", variant="primary")
420
+ enc_output = gr.Markdown()
421
+
422
+ enc_btn.click(
423
+ encode_message,
424
+ inputs=[enc_src, enc_dst, enc_force, enc_obj, enc_payload],
425
+ outputs=enc_output,
426
+ )
427
 
428
+ # ---- Decode tab ----
429
+ with gr.TabItem("Decode", id="decode"):
430
+ gr.Markdown("### Wire format decoder")
431
+ gr.Markdown("Paste a SLIP v3 message to inspect it.")
432
 
433
+ dec_input = gr.Textbox(
434
+ label="SLIP v3 message",
435
+ value="SLIP v3 alice bob Request Review auth",
436
+ placeholder="SLIP v3 src dst Force Object payload...",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
437
  )
438
+ dec_btn = gr.Button("Decode", variant="primary")
439
+ dec_output = gr.Markdown()
440
+
441
+ dec_btn.click(decode_message, inputs=dec_input, outputs=dec_output)
442
+
443
+ # ---- UCR Explorer tab ----
444
+ with gr.TabItem("UCR Explorer", id="ucr"):
445
+ gr.Markdown("### Universal Concept Reference")
446
+ gr.Markdown("The 45 core anchors that form the shared semantic vocabulary.")
447
+
448
+ ucr_filter = gr.Dropdown(
449
+ choices=["All"] + FORCES,
450
+ value="All",
451
+ label="Filter by Force",
452
  )
453
+ ucr_table = gr.Markdown(value=build_ucr_table("All"))
454
+
455
+ ucr_filter.change(build_ucr_table, inputs=ucr_filter, outputs=ucr_table)
456
+
457
+ # ---- About tab ----
458
+ with gr.TabItem("About", id="about"):
459
+ gr.Markdown(f"""
460
+ ### What is Slipstream?
461
+
462
+ Slipstream is a protocol that performs **semantic quantization**: mapping free-form
463
+ messages onto a shared Universal Concept Reference (UCR) and transmitting factorized
464
+ intents (Force + Object) that identify structured actions.
465
+
466
+ Instead of sending `"Could you please take a look at my pull request for the authentication module changes?"` (17 tokens),
467
+ Slipstream transmits `SLIP v3 dev reviewer Request Review auth` (7 tokens).
468
+
469
+ **82% token reduction** while preserving semantic fidelity.
470
+
471
+ ### How the quantizer works
472
+
473
+ The keyword quantizer runs in two stages:
474
+
475
+ 1. **Force classification** -- match input against keyword patterns for each of the 12 Force tokens. Pick the highest-scoring Force.
476
+ 2. **Object classification** -- match input against keyword patterns for each of the 31+ Object tokens. Pick the highest-scoring Object.
477
+
478
+ If no pattern matches above the confidence threshold, the message falls back to `Fallback Generic` with a pointer reference to the original text stored out-of-band.
479
+
480
+ For production use, swap in the embedding-based `SemanticQuantizer` from `slipcore_ml` (requires sentence-transformers).
481
+
482
+ ---
483
+
484
+ ### Resources
485
+
486
+ | Resource | Link |
487
+ |----------|------|
488
+ | GitHub | [github.com/anthony-maio/slipcore](https://github.com/anthony-maio/slipcore) |
489
+ | PyPI | `pip install slipcore` (v{__version__}) |
490
+ | Paper | [doi.org/10.5281/zenodo.18063451](https://doi.org/10.5281/zenodo.18063451) |
491
+ | SDK Guide | [docs/sdk-guide.md](https://github.com/anthony-maio/slipcore/blob/master/docs/sdk-guide.md) |
492
+ | Model (LoRA) | [anthonym21/slipstream-glm-z1-9b](https://huggingface.co/anthonym21/slipstream-glm-z1-9b) |
493
+ | Dataset | [anthonym21/slipstream-tqt](https://huggingface.co/datasets/anthonym21/slipstream-tqt) |
494
+
495
+ ### Cost savings at scale
496
+
497
+ | Deployment | Agents | Annual JSON cost | Annual SLIP cost | Savings |
498
+ |------------|--------|------------------|------------------|---------|
499
+ | Startup | 10 | $3,600 | $650 | $2,950 |
500
+ | Scale-up | 50 | $180,000 | $32,400 | $147,600 |
501
+ | Enterprise | 1,000 | $2,500,000 | $450,000 | $2,050,000 |
502
+
503
+ ---
504
+
505
+ **Citation:**
506
+ ```bibtex
507
+ @misc{{maio2025slipstream,
508
+ title={{Slipstream: Semantic Quantization for Efficient Multi-Agent Coordination}},
509
+ author={{Maio, Anthony}},
510
+ year={{2025}},
511
+ doi={{10.5281/zenodo.18063451}}
512
+ }}
513
+ ```
514
+
515
+ Apache 2.0 License | [Anthony Maio](https://github.com/anthony-maio)
516
+ """)
517
+
518
+ gr.Markdown(f"<center><sub>slipcore v{__version__} | keyword quantizer | "
519
+ f"[source](https://github.com/anthony-maio/slipcore/tree/master/hf-space)</sub></center>")
520
 
 
521
 
522
  if __name__ == "__main__":
523
  demo.launch()
assets/analysis.json DELETED
@@ -1,75 +0,0 @@
1
- {
2
- "schema_version": "paper_analysis_v1",
3
- "pdf": {
4
- "path": "D:\\Development\\slipcore\\private\\zenodo\\slipstream-paper.pdf",
5
- "filename": "slipstream-paper.pdf",
6
- "sha256": "e91b687dbbe2aa4fe01ec0ae3c5475fda9ad2a5107ea8e81927028c575c707f7",
7
- "page_count": 7,
8
- "text_pages_extracted": 7,
9
- "extracted_chars": 11939
10
- },
11
- "paper": {
12
- "title": "Slipstream: Semantic Quantization for Efficient Multi-Agent Coordination",
13
- "authors": [
14
- "Anthony Maio"
15
- ],
16
- "abstract": "As multi-agent LLM systems scale,coordination bandwidthbecomes a primary cost\ndriver: every token spent on routing, intent framing, and redundant context is paid repeat-\nedly across agents and turns. Current approaches waste 40–60% of compute on coordination\noverhead, with communication costs scalingO(n2)as agent counts increase.\nThis paper introducesSlipstream, a protocol that performssemantic quantization:\nmapping free-form messages onto a sharedUniversal Concept Reference (UCR)and\ntransmitting compactmnemonic anchorsthat identify structured intents. Unlike syn-\ntactic compression (which fails due to BPE tokenizer fragmentation), Slipstream transmits\nnatural-language mnemonics that tokenize efficiently across model architectures.\nSlipstream combines (1) a symbolic4D semantic manifold—Action, Polarity, Domain,\nUrgency—with (2) a data-drivenvector engine(embeddings + nearest-centroid retrieval)\nplus anevolutionary extension layerthat learns new anchors from low-confidence traf-\nfic. Results show82% token reduction(41.9→7.4 tokens average) while maintaining\nsemantic fidelity, making large-scale multi-agent deployments economically viable."
17
- },
18
- "artifacts": {
19
- "urls": [
20
- "https://github.com/anthony-maio/slipcore",
21
- "https://modelcontextprotocol.io/,",
22
- "https://www.linuxfoundation."
23
- ],
24
- "hf_models": [],
25
- "hf_datasets": [],
26
- "hf_spaces": [],
27
- "possible_hf_repo_ids": [
28
- "Edge/embedded",
29
- "Msg/Day",
30
- "REQ/TSK",
31
- "messages/day",
32
- "org/press"
33
- ],
34
- "github_repos": [
35
- "anthony-maio/slipcore"
36
- ],
37
- "arxiv_ids": [
38
- "1982.10564",
39
- "2690.17728"
40
- ],
41
- "dois": [
42
- "10.1109/TIT.1982.1056489",
43
- "10.1145/1772690.1772862",
44
- "10.18653/v1/D19-1410"
45
- ]
46
- },
47
- "suggested": {
48
- "space_slug": "slipstream-semantic-quantization-for-efficient-m",
49
- "space_title": "Slipstream: Semantic Quantization for Efficient Multi-Agent Coordination",
50
- "tags": [
51
- "semantic-quantization",
52
- "multi-agent-systems",
53
- "protocol-standards",
54
- "token-ef-"
55
- ],
56
- "emoji": "📄",
57
- "colorFrom": "blue",
58
- "colorTo": "indigo"
59
- },
60
- "outputs": {
61
- "context_txt": "paper_context.txt",
62
- "chunks_jsonl": "paper_chunks.jsonl",
63
- "rendered_pages": [
64
- {
65
- "page": 1,
66
- "path": "pages\\page_01.png"
67
- },
68
- {
69
- "page": 2,
70
- "path": "pages\\page_02.png"
71
- }
72
- ],
73
- "extracted_images": []
74
- }
75
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
paper_chunks.jsonl DELETED
@@ -1,6 +0,0 @@
1
- {"chunk_id": 0, "text": "Slipstream: Semantic Quantization for Efficient\nMulti-Agent Coordination\nAnthony Maio\nIndependent Researcher\nanthony@making-minds.ai\n2025\nAbstract\nAs multi-agent LLM systems scale,coordination bandwidthbecomes a primary cost\ndriver: every token spent on routing, intent framing, and redundant context is paid repeat-\nedly across agents and turns. Current approaches waste 40–60% of compute on coordination\noverhead, with communication costs scalingO(n2)as agent counts increase.\nThis paper introducesSlipstream, a protocol that performssemantic quantization:\nmapping free-form messages onto a sharedUniversal Concept Reference (UCR)and\ntransmitting compactmnemonic anchorsthat identify structured intents. Unlike syn-\ntactic compression (which fails due to BPE tokenizer fragmentation), Slipstream transmits\nnatural-language mnemonics that tokenize efficiently across model architectures.\nSlipstream combines (1) a symbolic4D semantic manifold—Action, Polarity, Domain,\nUrgency—with (2) a data-drivenvector engine(embeddings + nearest-centroid retrieval)\nplus anevolutionary extension layerthat learns new anchors from low-confidence traf-\nfic. Results show82% token reduction(41.9→7.4 tokens average) while maintaining\nsemantic fidelity, making large-scale multi-agent deployments economically viable.\nKeywords:Semantic Quantization, Multi-Agent Systems, Protocol Standards, Token Ef-\nficiency, Agentic AI\n1 Introduction\n1.1 The Coordination Crisis\nAgent swarms incur atokenizer tax: the repeated, non-semantic overhead of communicating\nmessage types, domains, and priorities. This overhead often dominates when messages are\nstructured (routing, task dispatch, acknowledgements).\nA typical coordination message:\n1{\n2\" sender \": \" planning_agent \",\n3\" recipient \": \" execution_agent \",\n4\" message_type \": \" task_delegation \",\n5\" content \": {\n6\" request \": \" Please review the authentication code \",\n7\" priority \": \" high \"\n8}\n9}\n•Token count:∼45 tokens\n•Semantic content:∼10 tokens\n•Information density:22%\n1\nAt GPT-4o pricing ($5/M input, $15/M output), a 50-agent deployment exchanging 1,000\nmessages/day costs$180,000/yearin coordination tokens alone—before any work is per-\nformed.\n1.2 Why Syntactic Compression Fails\nOur initial approach, nSLIP v1, focused on syntactic minification:\n1REQ / TSK |s =7| d =3| act = review_auth\n•Expected tokens:8–10\n•Actual tokens with BPE:18–22\nThe failure stems"}
2
- {"chunk_id": 1, "text": "tic Compression Fails\nOur initial approach, nSLIP v1, focused on syntactic minification:\n1REQ / TSK |s =7| d =3| act = review_auth\n•Expected tokens:8–10\n•Actual tokens with BPE:18–22\nThe failure stems from Byte-Pair Encoding (BPE) tokenizer behavior. Punctuation and\nspecial characters fragment into separate tokens:\nTable 1: BPE Tokenization of Syntactic Compression\nInput Tokens\nREQ/TSK REQ,/,TSK= 3\n|s=7| |,s,=,7,|= 5\nThis “Tokenizer Tax” negates syntactic savings entirely.\n1.3 The Solution: Semantic Quantization\nInstead of compressingsyntax, we quantizesemantics. Agents share a pre-agreed “concept\ncodebook” (the UCR) and transmit pointers to meanings:\n1SLIP v1 planner executor RequestReview auth_module\nToken count:7 tokens (82% reduction)\nThe key insight:natural English words tokenize efficiently.RequestReviewis 1–2\ntokens across major tokenizers, while0x0011fragments into 3–4 tokens.\n2 The Universal Concept Reference\n2.1 The 4D Semantic Manifold\nThe UCR represents each anchor as a coordinate in a 4-dimensional semantic space:\nTable 2: UCR Semantic Dimensions\nDimension Values Purpose\nACTION request, inform, propose, evaluate Speech act type\nPOLARITY negative, neutral, positive Outcome sentiment\nDOMAIN task, plan, observation, control Context area\nURGENCY routine, elevated, critical Priority level\nThis structure provides:\n1.Interpretability:Anchors can be audited, extended, and reasoned about\n2\n2.Constraint surface:Agents can validate structural plausibility\n3.Semantic arithmetic:Combining dimensions yields predictable intents\n2.2 Anchor Structure\nEach anchor includes:\n1@dataclass\n2class UCRAnchor :\n3index : int # Unique ID (0 x0000 -0 xFFFF )\n4mnemonic : str # Wire token : \" RequestReview \"\n5canonical : str # Human description\n6coords : tuple [int , ...] # Position in manifold\n7is_core : bool # True if immutable core anchor\n•Core Range (0x0000–0x7FFF):Standard anchors, immutable per version\n•Extension Range (0x8000–0xFFFF):Installation-specific, evolvable\n2.3 Core Anchors\nTable 3: Core UCR Anchors by Category\nCategory Anchors\nRequestsRequestTask,RequestReview,RequestHelp,RequestPlan\nInformInformComplete,InformProgress,InformBlocked,InformStatus\nProposeProposePlan,ProposeChange,ProposeAlternative\nEvaluateEvalApprove,EvalReject,EvalNeedsWork\nMetaAccept,Reject,MetaAck,MetaHandoff,Fallback\n3 Protocol Specification\n3.1 Wire Format\n1SLIP v1 <src > <dst > <anchor >"}
3
- {"chunk_id": 2, "text": "n,ProposeChange,ProposeAlternative\nEvaluateEvalApprove,EvalReject,EvalNeedsWork\nMetaAccept,Reject,MetaAck,MetaHandoff,Fallback\n3 Protocol Specification\n3.1 Wire Format\n1SLIP v1 <src > <dst > <anchor > [ payload ...]\nTable 4: Wire Format Fields\nField Description\nSLIP v1Protocol marker and version\n<src>Source agent identifier\n<dst>Destination agent identifier\n<anchor>UCR mnemonic (e.g.,RequestReview)\n[payload]Optional space-separated parameters\nDesign Principles:\n•No special characters that fragment in BPE\n•Natural English words for efficient tokenization\n•Human-readable for debugging\n•Model-agnostic (works across GPT-4, Claude, Llama, etc.)\n3\n3.2 The Think-Quantize-Transmit Pattern\nThe TQT pattern consists of three stages:\n1.THINK:Agent forms natural language intent: “Please review the authentication code\nfor security”\n2.QUANTIZE:Map to nearest UCR anchor via keyword matching (fast, zero-dependency)\nor embedding similarity (accurate, requires ML). Result:RequestReview(confidence:\n0.89)\n3.TRANSMIT:Wire format:SLIP v1 dev reviewer RequestReview auth. Tokens: 7\n(vs 45 for JSON)\n4 Vector Quantization Engine\n4.1 Embedding-Based Retrieval\nThe vector quantization engine leverages sentence embeddings [Reimers and Gurevych, 2019]\nto map natural language intents to UCR anchors. Given a messagex, the vector engine embeds\nit and retrieves the best anchor by cosine similarity:\nk∗ = argmaxk cos(E(x),ck)(1)\nWhereE(x)is the thought embedding andck is the anchor centroid. This approach extends\nclassical quantization theory [Lloyd, 1982] to the semantic domain.\nA confidence thresholdτcontrols whether to emit an anchor or fall back to plaintext:\n1def quantize ( thought : str , threshold : float = 0.55) :\n2embedding = encode ( thought )\n3similarities = cosine ( embedding , centroids )\n4best_idx = argmax ( similarities )\n5\n6if similarities [ best_idx ] < threshold :\n7return Fallback ( thought )\n8\n9return anchors [ best_idx ]\n4.2 Graceful Degradation\nThe system operates in three modes:\nTable 5: Quantization Modes\nMode Dependencies Accuracy Use Case\nFull ML sentence-transformers 94% Production\nKeyword None 78% Edge/embedded\nFallback None 100% (passthrough) Novel intents\n5 Evolutionary Extension Layer\n5.1 The Drift Problem\nStatic codebooks degrade underconcept drift—new domains, task types, and terminology\nemerge over time. A codebook trained on software development fails on biotech"}
4
- {"chunk_id": 3, "text": "Extension Layer\n5.1 The Drift Problem\nStatic codebooks degrade underconcept drift—new domains, task types, and terminology\nemerge over time. A codebook trained on software development fails on biotech vocabulary.\n4\n5.2 Extension Learning\nSlipstream reserves the extension range (0x8000–0xFFFF) for learned anchors:\n1.Log:Messages with low quantization confidence are recorded\n2.Cluster:K-means identifies recurring semantic patterns [Sculley, 2010]\n3.Mint:New anchors are created with inferred 4D coordinates\n4.Register:Indices assigned in extension range; vector index rebuilt\n1class ExtensionManager :\n2def propose_extensions (self , fallbacks , min_cluster_size =3) :\n3embeddings = encode ( fallbacks )\n4clusters = kmeans ( embeddings , k= len ( fallbacks ) // min_cluster_size )\n5\n6new_anchors = []\n7for cluster in clusters :\n8if len ( cluster ) >= min_cluster_size :\n9centroid = mean ( embeddings [ cluster ])\n10exemplar = nearest_to_centroid ( cluster )\n11coords = infer_coords ( exemplar )\n12new_anchors . append ( mint_anchor ( centroid , exemplar , coords ))\n13\n14return new_anchors\n5.3 Governance\nExtension learning can be abused. Mitigations:\n•Minimum cluster size requirements\n•Rate limits on minting\n•Human approval gates for production\n•Provenance logging for each anchor\n6 Evaluation\n6.1 Token Efficiency\nTable 6: Token Efficiency Comparison\nMessage Type JSON Tokens SLIP Tokens Reduction\nTask delegation 47.3 8.2 82.7%\nStatus update 35.1 6.4 81.8%\nError report 52.0 9.1 82.5%\nAverage 41.9 7.4 82.3%\n5\n6.2 Cost Savings\nTable 7: Annual Cost Comparison by Deployment Scale\nScale Agents Msg/Day JSON Cost SLIP Cost Savings\nStartup 10 500 $3,600 $650 $2,950\nScale-up 50 5,000 $180,000 $32,400 $147,600\nEnterprise 1,000 500,000 $2,500,000 $450,000$2,050,000\n6.3 Semantic Fidelity\n•Retrieval accuracy:94% top-1 on intent classification\n•Coverage:88.7% of messages quantize without fallback\n•Codebook utilization:87% of anchors actively used\n7 Integration with AAIF Ecosystem\nSlipstream is designed as thetransport layerfor the Linux Foundation’s Agentic AI Founda-\ntion (AAIF) standards [Linux Foundation, 2025]:\n+-------------------------------------+\n| Application (Agent Logic) |\n+-----------------+-------------------+\n|\n+-----------------v-------------------+\n| MCP / A2A (Semantic Layer) | <- Discovery, capabilities\n+-----------------+-------------------+\n|\n+-----------------v-------"}
5
- {"chunk_id": 4, "text": "----------+-------------------+\n|\n+-----------------v-------------------+\n| MCP / A2A (Semantic Layer) | <- Discovery, capabilities\n+-----------------+-------------------+\n|\n+-----------------v-------------------+\n| Slipstream (Transport Layer) | <- 82% token reduction\n+-----------------+-------------------+\n|\n+-----------------v-------------------+\n| Network (HTTP, WebSocket, gRPC) |\n+-------------------------------------+\nCompatibility:Works transparently beneath Model Context Protocol (MCP) [Anthropic,\n2024] and Agent2Agent (A2A), like gRPC optimizes HTTP/2.\n8 Security Considerations\nTable 8: Security Threats and Mitigations\nThreat Mitigation\nPrompt injection via payloads Validate types; treat payloads as untrusted\nAnchor poisoning Min cluster size, rate limits, human approval\nOver-compression Allow fallback to plaintext; confidence thresholds\nSemantic drift Evolutionary layer; version-locked core anchors\n6\n9 Implementation\nA reference implementation is available asslipcore:\n1pip install slipcore\n1from slipcore import slip , decode , think_quantize_transmit\n2\n3# Direct message creation\n4wire = slip (\" alice \", \" bob \", \" RequestReview \", [\" auth_module \"])\n5# -> \" SLIP v1 alice bob RequestReview auth_module \"\n6\n7# Think - Quantize - Transmit pattern\n8wire = think_quantize_transmit (\n9\" Please review the authentication code \",\n10src =\" dev \", dst =\" reviewer \"\n11)\n12# -> \" SLIP v1 dev reviewer RequestReview \"\n13\n14# Decode\n15msg = decode ( wire )\n16print ( msg . anchor . canonical ) # \" Request review of work \"\n•Repository:https://github.com/anthony-maio/slipcore\n•License:Apache 2.0\n10 Conclusion\nSlipstream demonstrates thatsemantic quantizationis the necessary evolution for high-\nthroughput agent coordination. By grounding agents in a structured 4D manifold and trans-\nmitting natural-language mnemonics, we achieve 82% token reduction without sacrificing inter-\npretability or cross-model compatibility.\nThe protocol’s evolutionary layer enables adaptation to new domains while keeping core\nsemantics stable. As agent swarms scale, the shared UCR becomes a form of “collective\nunderstanding”—reducing not just tokens, but the cognitive overhead of coordination itself.\nReferences\nAnthropic. Model context protocol specification.https://modelcontextprotocol.io/, 2024.\nAccessed: 2024.\nLinux Foundation. Agentic AI foundation announcement.https://www.linuxfoundation."}
6
- {"chunk_id": 5, "text": "f.\nReferences\nAnthropic. Model context protocol specification.https://modelcontextprotocol.io/, 2024.\nAccessed: 2024.\nLinux Foundation. Agentic AI foundation announcement.https://www.linuxfoundation.\norg/press/agentic-ai-foundation, 2025. Accessed: 2025.\nStuart Lloyd. Least squares quantization in PCM.IEEE Transactions on Information Theory,\n28(2):129–137, 1982. doi: 10.1109/TIT.1982.1056489.\nNils Reimers and Iryna Gurevych. Sentence-BERT: Sentence embeddings using siamese BERT-\nnetworks. InProceedings of the 2019 Conference on Empirical Methods in Natural Lan-\nguage Processing and the 9th International Joint Conference on Natural Language Processing\n(EMNLP-IJCNLP), pages 3982–3992. Association for Computational Linguistics, 2019. doi:\n10.18653/v1/D19-1410.\nD. Sculley. Web-scale k-means clustering. InProceedings of the 19th International Conference\non World Wide Web, pages 1177–1178. ACM, 2010. doi: 10.1145/1772690.1772862.\n7"}
 
 
 
 
 
 
 
paper_context.txt DELETED
@@ -1,269 +0,0 @@
1
- Slipstream: Semantic Quantization for Efficient
2
- Multi-Agent Coordination
3
- Anthony Maio
4
- Independent Researcher
5
- anthony@making-minds.ai
6
- 2025
7
- Abstract
8
- As multi-agent LLM systems scale,coordination bandwidthbecomes a primary cost
9
- driver: every token spent on routing, intent framing, and redundant context is paid repeat-
10
- edly across agents and turns. Current approaches waste 40–60% of compute on coordination
11
- overhead, with communication costs scalingO(n2)as agent counts increase.
12
- This paper introducesSlipstream, a protocol that performssemantic quantization:
13
- mapping free-form messages onto a sharedUniversal Concept Reference (UCR)and
14
- transmitting compactmnemonic anchorsthat identify structured intents. Unlike syn-
15
- tactic compression (which fails due to BPE tokenizer fragmentation), Slipstream transmits
16
- natural-language mnemonics that tokenize efficiently across model architectures.
17
- Slipstream combines (1) a symbolic4D semantic manifold—Action, Polarity, Domain,
18
- Urgency—with (2) a data-drivenvector engine(embeddings + nearest-centroid retrieval)
19
- plus anevolutionary extension layerthat learns new anchors from low-confidence traf-
20
- fic. Results show82% token reduction(41.9→7.4 tokens average) while maintaining
21
- semantic fidelity, making large-scale multi-agent deployments economically viable.
22
- Keywords:Semantic Quantization, Multi-Agent Systems, Protocol Standards, Token Ef-
23
- ficiency, Agentic AI
24
- 1 Introduction
25
- 1.1 The Coordination Crisis
26
- Agent swarms incur atokenizer tax: the repeated, non-semantic overhead of communicating
27
- message types, domains, and priorities. This overhead often dominates when messages are
28
- structured (routing, task dispatch, acknowledgements).
29
- A typical coordination message:
30
- 1{
31
- 2" sender ": " planning_agent ",
32
- 3" recipient ": " execution_agent ",
33
- 4" message_type ": " task_delegation ",
34
- 5" content ": {
35
- 6" request ": " Please review the authentication code ",
36
- 7" priority ": " high "
37
- 8}
38
- 9}
39
- •Token count:∼45 tokens
40
- •Semantic content:∼10 tokens
41
- •Information density:22%
42
- 1
43
- At GPT-4o pricing ($5/M input, $15/M output), a 50-agent deployment exchanging 1,000
44
- messages/day costs$180,000/yearin coordination tokens alone—before any work is per-
45
- formed.
46
- 1.2 Why Syntactic Compression Fails
47
- Our initial approach, nSLIP v1, focused on syntactic minification:
48
- 1REQ / TSK |s =7| d =3| act = review_auth
49
- •Expected tokens:8–10
50
- •Actual tokens with BPE:18–22
51
- The failure stems from Byte-Pair Encoding (BPE) tokenizer behavior. Punctuation and
52
- special characters fragment into separate tokens:
53
- Table 1: BPE Tokenization of Syntactic Compression
54
- Input Tokens
55
- REQ/TSK REQ,/,TSK= 3
56
- |s=7| |,s,=,7,|= 5
57
- This “Tokenizer Tax” negates syntactic savings entirely.
58
- 1.3 The Solution: Semantic Quantization
59
- Instead of compressingsyntax, we quantizesemantics. Agents share a pre-agreed “concept
60
- codebook” (the UCR) and transmit pointers to meanings:
61
- 1SLIP v1 planner executor RequestReview auth_module
62
- Token count:7 tokens (82% reduction)
63
- The key insight:natural English words tokenize efficiently.RequestReviewis 1–2
64
- tokens across major tokenizers, while0x0011fragments into 3–4 tokens.
65
- 2 The Universal Concept Reference
66
- 2.1 The 4D Semantic Manifold
67
- The UCR represents each anchor as a coordinate in a 4-dimensional semantic space:
68
- Table 2: UCR Semantic Dimensions
69
- Dimension Values Purpose
70
- ACTION request, inform, propose, evaluate Speech act type
71
- POLARITY negative, neutral, positive Outcome sentiment
72
- DOMAIN task, plan, observation, control Context area
73
- URGENCY routine, elevated, critical Priority level
74
- This structure provides:
75
- 1.Interpretability:Anchors can be audited, extended, and reasoned about
76
- 2
77
- 2.Constraint surface:Agents can validate structural plausibility
78
- 3.Semantic arithmetic:Combining dimensions yields predictable intents
79
- 2.2 Anchor Structure
80
- Each anchor includes:
81
- 1@dataclass
82
- 2class UCRAnchor :
83
- 3index : int # Unique ID (0 x0000 -0 xFFFF )
84
- 4mnemonic : str # Wire token : " RequestReview "
85
- 5canonical : str # Human description
86
- 6coords : tuple [int , ...] # Position in manifold
87
- 7is_core : bool # True if immutable core anchor
88
- •Core Range (0x0000–0x7FFF):Standard anchors, immutable per version
89
- •Extension Range (0x8000–0xFFFF):Installation-specific, evolvable
90
- 2.3 Core Anchors
91
- Table 3: Core UCR Anchors by Category
92
- Category Anchors
93
- RequestsRequestTask,RequestReview,RequestHelp,RequestPlan
94
- InformInformComplete,InformProgress,InformBlocked,InformStatus
95
- ProposeProposePlan,ProposeChange,ProposeAlternative
96
- EvaluateEvalApprove,EvalReject,EvalNeedsWork
97
- MetaAccept,Reject,MetaAck,MetaHandoff,Fallback
98
- 3 Protocol Specification
99
- 3.1 Wire Format
100
- 1SLIP v1 <src > <dst > <anchor > [ payload ...]
101
- Table 4: Wire Format Fields
102
- Field Description
103
- SLIP v1Protocol marker and version
104
- <src>Source agent identifier
105
- <dst>Destination agent identifier
106
- <anchor>UCR mnemonic (e.g.,RequestReview)
107
- [payload]Optional space-separated parameters
108
- Design Principles:
109
- •No special characters that fragment in BPE
110
- •Natural English words for efficient tokenization
111
- •Human-readable for debugging
112
- •Model-agnostic (works across GPT-4, Claude, Llama, etc.)
113
- 3
114
- 3.2 The Think-Quantize-Transmit Pattern
115
- The TQT pattern consists of three stages:
116
- 1.THINK:Agent forms natural language intent: “Please review the authentication code
117
- for security”
118
- 2.QUANTIZE:Map to nearest UCR anchor via keyword matching (fast, zero-dependency)
119
- or embedding similarity (accurate, requires ML). Result:RequestReview(confidence:
120
- 0.89)
121
- 3.TRANSMIT:Wire format:SLIP v1 dev reviewer RequestReview auth. Tokens: 7
122
- (vs 45 for JSON)
123
- 4 Vector Quantization Engine
124
- 4.1 Embedding-Based Retrieval
125
- The vector quantization engine leverages sentence embeddings [Reimers and Gurevych, 2019]
126
- to map natural language intents to UCR anchors. Given a messagex, the vector engine embeds
127
- it and retrieves the best anchor by cosine similarity:
128
- k∗ = argmaxk cos(E(x),ck)(1)
129
- WhereE(x)is the thought embedding andck is the anchor centroid. This approach extends
130
- classical quantization theory [Lloyd, 1982] to the semantic domain.
131
- A confidence thresholdτcontrols whether to emit an anchor or fall back to plaintext:
132
- 1def quantize ( thought : str , threshold : float = 0.55) :
133
- 2embedding = encode ( thought )
134
- 3similarities = cosine ( embedding , centroids )
135
- 4best_idx = argmax ( similarities )
136
- 5
137
- 6if similarities [ best_idx ] < threshold :
138
- 7return Fallback ( thought )
139
- 8
140
- 9return anchors [ best_idx ]
141
- 4.2 Graceful Degradation
142
- The system operates in three modes:
143
- Table 5: Quantization Modes
144
- Mode Dependencies Accuracy Use Case
145
- Full ML sentence-transformers 94% Production
146
- Keyword None 78% Edge/embedded
147
- Fallback None 100% (passthrough) Novel intents
148
- 5 Evolutionary Extension Layer
149
- 5.1 The Drift Problem
150
- Static codebooks degrade underconcept drift—new domains, task types, and terminology
151
- emerge over time. A codebook trained on software development fails on biotech vocabulary.
152
- 4
153
- 5.2 Extension Learning
154
- Slipstream reserves the extension range (0x8000–0xFFFF) for learned anchors:
155
- 1.Log:Messages with low quantization confidence are recorded
156
- 2.Cluster:K-means identifies recurring semantic patterns [Sculley, 2010]
157
- 3.Mint:New anchors are created with inferred 4D coordinates
158
- 4.Register:Indices assigned in extension range; vector index rebuilt
159
- 1class ExtensionManager :
160
- 2def propose_extensions (self , fallbacks , min_cluster_size =3) :
161
- 3embeddings = encode ( fallbacks )
162
- 4clusters = kmeans ( embeddings , k= len ( fallbacks ) // min_cluster_size )
163
- 5
164
- 6new_anchors = []
165
- 7for cluster in clusters :
166
- 8if len ( cluster ) >= min_cluster_size :
167
- 9centroid = mean ( embeddings [ cluster ])
168
- 10exemplar = nearest_to_centroid ( cluster )
169
- 11coords = infer_coords ( exemplar )
170
- 12new_anchors . append ( mint_anchor ( centroid , exemplar , coords ))
171
- 13
172
- 14return new_anchors
173
- 5.3 Governance
174
- Extension learning can be abused. Mitigations:
175
- •Minimum cluster size requirements
176
- •Rate limits on minting
177
- •Human approval gates for production
178
- •Provenance logging for each anchor
179
- 6 Evaluation
180
- 6.1 Token Efficiency
181
- Table 6: Token Efficiency Comparison
182
- Message Type JSON Tokens SLIP Tokens Reduction
183
- Task delegation 47.3 8.2 82.7%
184
- Status update 35.1 6.4 81.8%
185
- Error report 52.0 9.1 82.5%
186
- Average 41.9 7.4 82.3%
187
- 5
188
- 6.2 Cost Savings
189
- Table 7: Annual Cost Comparison by Deployment Scale
190
- Scale Agents Msg/Day JSON Cost SLIP Cost Savings
191
- Startup 10 500 $3,600 $650 $2,950
192
- Scale-up 50 5,000 $180,000 $32,400 $147,600
193
- Enterprise 1,000 500,000 $2,500,000 $450,000$2,050,000
194
- 6.3 Semantic Fidelity
195
- •Retrieval accuracy:94% top-1 on intent classification
196
- •Coverage:88.7% of messages quantize without fallback
197
- •Codebook utilization:87% of anchors actively used
198
- 7 Integration with AAIF Ecosystem
199
- Slipstream is designed as thetransport layerfor the Linux Foundation’s Agentic AI Founda-
200
- tion (AAIF) standards [Linux Foundation, 2025]:
201
- +-------------------------------------+
202
- | Application (Agent Logic) |
203
- +-----------------+-------------------+
204
- |
205
- +-----------------v-------------------+
206
- | MCP / A2A (Semantic Layer) | <- Discovery, capabilities
207
- +-----------------+-------------------+
208
- |
209
- +-----------------v-------------------+
210
- | Slipstream (Transport Layer) | <- 82% token reduction
211
- +-----------------+-------------------+
212
- |
213
- +-----------------v-------------------+
214
- | Network (HTTP, WebSocket, gRPC) |
215
- +-------------------------------------+
216
- Compatibility:Works transparently beneath Model Context Protocol (MCP) [Anthropic,
217
- 2024] and Agent2Agent (A2A), like gRPC optimizes HTTP/2.
218
- 8 Security Considerations
219
- Table 8: Security Threats and Mitigations
220
- Threat Mitigation
221
- Prompt injection via payloads Validate types; treat payloads as untrusted
222
- Anchor poisoning Min cluster size, rate limits, human approval
223
- Over-compression Allow fallback to plaintext; confidence thresholds
224
- Semantic drift Evolutionary layer; version-locked core anchors
225
- 6
226
- 9 Implementation
227
- A reference implementation is available asslipcore:
228
- 1pip install slipcore
229
- 1from slipcore import slip , decode , think_quantize_transmit
230
- 2
231
- 3# Direct message creation
232
- 4wire = slip (" alice ", " bob ", " RequestReview ", [" auth_module "])
233
- 5# -> " SLIP v1 alice bob RequestReview auth_module "
234
- 6
235
- 7# Think - Quantize - Transmit pattern
236
- 8wire = think_quantize_transmit (
237
- 9" Please review the authentication code ",
238
- 10src =" dev ", dst =" reviewer "
239
- 11)
240
- 12# -> " SLIP v1 dev reviewer RequestReview "
241
- 13
242
- 14# Decode
243
- 15msg = decode ( wire )
244
- 16print ( msg . anchor . canonical ) # " Request review of work "
245
- •Repository:https://github.com/anthony-maio/slipcore
246
- •License:Apache 2.0
247
- 10 Conclusion
248
- Slipstream demonstrates thatsemantic quantizationis the necessary evolution for high-
249
- throughput agent coordination. By grounding agents in a structured 4D manifold and trans-
250
- mitting natural-language mnemonics, we achieve 82% token reduction without sacrificing inter-
251
- pretability or cross-model compatibility.
252
- The protocol’s evolutionary layer enables adaptation to new domains while keeping core
253
- semantics stable. As agent swarms scale, the shared UCR becomes a form of “collective
254
- understanding”—reducing not just tokens, but the cognitive overhead of coordination itself.
255
- References
256
- Anthropic. Model context protocol specification.https://modelcontextprotocol.io/, 2024.
257
- Accessed: 2024.
258
- Linux Foundation. Agentic AI foundation announcement.https://www.linuxfoundation.
259
- org/press/agentic-ai-foundation, 2025. Accessed: 2025.
260
- Stuart Lloyd. Least squares quantization in PCM.IEEE Transactions on Information Theory,
261
- 28(2):129–137, 1982. doi: 10.1109/TIT.1982.1056489.
262
- Nils Reimers and Iryna Gurevych. Sentence-BERT: Sentence embeddings using siamese BERT-
263
- networks. InProceedings of the 2019 Conference on Empirical Methods in Natural Lan-
264
- guage Processing and the 9th International Joint Conference on Natural Language Processing
265
- (EMNLP-IJCNLP), pages 3982–3992. Association for Computational Linguistics, 2019. doi:
266
- 10.18653/v1/D19-1410.
267
- D. Sculley. Web-scale k-means clustering. InProceedings of the 19th International Conference
268
- on World Wide Web, pages 1177–1178. ACM, 2010. doi: 10.1145/1772690.1772862.
269
- 7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
quantizer.py DELETED
@@ -1,818 +0,0 @@
1
- """
2
- Semantic Quantizer - The Think-Quantize-Transmit Engine
3
-
4
- Maps agent thoughts (natural language) to UCR anchors.
5
- Supports three modes:
6
- 1. Keyword-based (fast, no dependencies)
7
- 2. Embedding-based with centroids (accurate, requires sentence-transformers)
8
- 3. Hybrid with CoordsInferer (prototype similarity + heuristics)
9
-
10
- Also handles:
11
- - Fallback detection (when confidence is too low)
12
- - Usage tracking (for UCR evolution)
13
- - Coordinate inference for new anchors
14
- """
15
-
16
- from __future__ import annotations
17
- from dataclasses import dataclass, field
18
- from typing import Optional, Callable, Dict, List, Tuple
19
- from collections import Counter
20
- import re
21
-
22
- try:
23
- from .ucr import UCR, UCRAnchor, get_default_ucr, CORE_RANGE_END
24
- except ImportError:
25
- from ucr import UCR, UCRAnchor, get_default_ucr, CORE_RANGE_END
26
-
27
-
28
- # ============ Optional Dependencies ============
29
-
30
- try:
31
- import numpy as np
32
- HAS_NUMPY = True
33
- except ImportError:
34
- np = None # type: ignore
35
- HAS_NUMPY = False
36
-
37
-
38
- # ============ Semantic Coordinates ============
39
-
40
- @dataclass(frozen=True)
41
- class SemanticCoords:
42
- """
43
- 4D logical position of an intent in the semantic manifold.
44
-
45
- This is a human-readable representation used during coordinate inference.
46
- Maps to UCR's numeric coords via ACTION_MAP, DOMAIN_MAP, etc.
47
- """
48
- action: str # REQ, INF, EVAL, CMD, OBS, PROP, META
49
- polarity: int # -1 (negative), 0 (neutral), 1 (positive)
50
- domain: str # TASK, QA, INFRA, AUTH, ERR, DOC, META, GEN
51
- urgency: int # 0 (routine) to 3 (critical)
52
-
53
-
54
- # Map v3-style string coords to v2 numeric coords
55
- ACTION_MAP = {"OBS": 0, "INF": 1, "ASK": 2, "REQ": 3, "PROP": 4, "COMMIT": 5, "EVAL": 6, "META": 7, "CMD": 3}
56
- DOMAIN_MAP = {"TASK": 0, "PLAN": 1, "OBS": 2, "EVAL": 3, "CTRL": 4, "RES": 5, "ERR": 6, "GEN": 7,
57
- "QA": 3, "INFRA": 5, "AUTH": 4, "DOC": 1, "META": 4}
58
-
59
-
60
- def semantic_coords_to_tuple(sc: SemanticCoords) -> tuple[int, ...]:
61
- """Convert SemanticCoords to UCR numeric tuple."""
62
- action = ACTION_MAP.get(sc.action.upper(), 3) # default REQ
63
- domain = DOMAIN_MAP.get(sc.domain.upper(), 7) # default GEN
64
- # Map polarity: -1->1, 0->4, 1->6
65
- polarity = {-1: 1, 0: 4, 1: 6}.get(sc.polarity, 4)
66
- # Map urgency 0-3 to 0-7: 0->1, 1->3, 2->5, 3->7
67
- urgency = min(7, max(0, sc.urgency * 2 + 1))
68
- return (action, polarity, domain, urgency)
69
-
70
-
71
- # ============ Coordinate Inference (from v3) ============
72
-
73
- class CoordsInferer:
74
- """
75
- Assigns (Action, Polarity, Domain, Urgency) to text.
76
-
77
- Hybrid approach:
78
- - Heuristics for urgency and polarity (reliable, fast)
79
- - Optional prototype embedding similarity for action/domain refinement
80
-
81
- LIMITATIONS AND CAVEATS:
82
- ========================
83
-
84
- 1. HEURISTIC FRAGILITY:
85
- - Keyword matching is context-blind ("please" could be polite or pleading)
86
- - Urgency detection relies on explicit markers ("ASAP", "urgent")
87
- - Domain detection depends on domain-specific vocabulary
88
-
89
- 2. PROTOTYPE EMBEDDING ISSUES:
90
- - Limited prototype phrases (3 per action, 2 per domain)
91
- - English-only prototypes; other languages will use fallback
92
- - Short messages may not have enough signal for reliable similarity
93
-
94
- 3. KNOWN FAILURE MODES:
95
- - Sarcasm/irony: "Great, another bug" -> incorrectly infers positive polarity
96
- - Questions phrased as statements: "I wonder if..." -> misses ASK action
97
- - Multi-intent: "Review and deploy this" -> only captures first action
98
- - Implicit urgency: "CEO is waiting" -> misses critical urgency
99
-
100
- 4. RECOMMENDED USAGE:
101
- - Use as initialization for finetuned models, not production truth
102
- - Always validate inferred coords against anchor centroids
103
- - Track fallback rate; >15% indicates poor UCR coverage
104
- - For production: finetune a small model on CoordsInferer output
105
-
106
- 5. ACCURACY ESTIMATES (informal testing):
107
- - Urgency: ~80% (explicit markers work well)
108
- - Polarity: ~70% (sentiment is hard)
109
- - Action: ~65% with embeddings, ~55% heuristic-only
110
- - Domain: ~60% (highly vocabulary-dependent)
111
-
112
- Ported from v3's coordinate inference system.
113
- """
114
-
115
- def __init__(self, embed_batch: Optional[Callable] = None):
116
- self._embed_batch = embed_batch
117
- self._proto_action: Dict[str, "np.ndarray"] = {}
118
- self._proto_domain: Dict[str, "np.ndarray"] = {}
119
-
120
- # Prototype phrases (short sentences > single tokens for embeddings)
121
- self._action_phrases = {
122
- "REQ": [
123
- "Please do this task.",
124
- "Can you help with this request?",
125
- "I need you to do something.",
126
- ],
127
- "INF": [
128
- "FYI, here is a status update.",
129
- "I finished the task.",
130
- "This is an informational update.",
131
- ],
132
- "EVAL": [
133
- "Please review and evaluate this.",
134
- "Assess the quality of this work.",
135
- "Give a critique of this design.",
136
- ],
137
- "CMD": [
138
- "Do this immediately.",
139
- "Execute this command.",
140
- "Run the operation now.",
141
- ],
142
- "OBS": [
143
- "I noticed something changed.",
144
- "The current state is...",
145
- "I observed an issue.",
146
- ],
147
- "PROP": [
148
- "I suggest we do this.",
149
- "Here's my proposal.",
150
- "We could try this approach.",
151
- ],
152
- }
153
- self._domain_phrases = {
154
- "TASK": ["Assign a task ticket.", "Work item status update."],
155
- "QA": ["Request code review.", "Review pull request."],
156
- "INFRA": ["Scale the Kubernetes cluster.", "Deploy infrastructure change."],
157
- "AUTH": ["OAuth login issue.", "Authentication and authorization."],
158
- "ERR": ["System error occurred.", "Critical failure and outage."],
159
- "DOC": ["Update documentation.", "Write technical docs."],
160
- "META": ["Discuss process and coordination.", "Team protocol and planning."],
161
- "GEN": ["General conversation.", "Generic request or update."],
162
- }
163
-
164
- def prime(self) -> None:
165
- """Compute prototype embeddings (if embedder available)."""
166
- if not self._embed_batch or not HAS_NUMPY:
167
- return
168
-
169
- def _norm(vec):
170
- n = np.linalg.norm(vec)
171
- return vec / (n + 1e-12) if n > 0 else vec
172
-
173
- # Actions
174
- action_labels = list(self._action_phrases.keys())
175
- action_texts = [" ".join(self._action_phrases[a]) for a in action_labels]
176
- action_vecs = self._embed_batch(action_texts)
177
- for a, v in zip(action_labels, action_vecs):
178
- self._proto_action[a] = _norm(np.asarray(v, dtype=np.float32))
179
-
180
- # Domains
181
- domain_labels = list(self._domain_phrases.keys())
182
- domain_texts = [" ".join(self._domain_phrases[d]) for d in domain_labels]
183
- domain_vecs = self._embed_batch(domain_texts)
184
- for d, v in zip(domain_labels, domain_vecs):
185
- self._proto_domain[d] = _norm(np.asarray(v, dtype=np.float32))
186
-
187
- def infer(self, text: str, vec: Optional["np.ndarray"] = None) -> SemanticCoords:
188
- """
189
- Infer semantic coordinates from text.
190
-
191
- Args:
192
- text: The input text to analyze
193
- vec: Optional pre-computed embedding vector for refinement
194
-
195
- Returns:
196
- SemanticCoords with inferred action, polarity, domain, urgency
197
- """
198
- t = text.strip()
199
- low = t.lower()
200
-
201
- # --- urgency (heuristic) ---
202
- urgency = 0
203
- if any(k in low for k in ("critical", "sev1", "sev-1", "p0", "immediately", "right now")):
204
- urgency = 3
205
- elif any(k in low for k in ("urgent", "asap", "high priority", "blocker")):
206
- urgency = 2
207
- elif any(k in low for k in ("soon", "priority", "important")):
208
- urgency = 1
209
-
210
- # --- polarity (heuristic) ---
211
- polarity = 0
212
- if any(k in low for k in ("error", "failed", "failure", "crash", "broken", "outage", "bug", "can't", "cannot")):
213
- polarity = -1
214
- elif any(k in low for k in ("fixed", "resolved", "success", "completed", "done", "working now", "all good")):
215
- polarity = 1
216
-
217
- # --- action (heuristic) ---
218
- action = "INF"
219
- if t.endswith("?") or low.startswith(("can you", "could you", "would you", "please")):
220
- action = "REQ"
221
- if any(k in low for k in ("review", "critique", "evaluate", "assess")):
222
- action = "EVAL"
223
- if any(k in low for k in ("do this", "run ", "execute", "deploy", "scale ", "restart")) and urgency >= 2:
224
- action = "CMD"
225
- if any(k in low for k in ("i noticed", "i see", "detected", "observed")):
226
- action = "OBS"
227
- if any(k in low for k in ("i suggest", "i propose", "we could", "how about")):
228
- action = "PROP"
229
-
230
- # --- domain (heuristic) ---
231
- domain = "GEN"
232
- if any(k in low for k in ("kubernetes", "k8s", "cluster", "deploy", "terraform", "docker", "infra", "server", "latency")):
233
- domain = "INFRA"
234
- elif any(k in low for k in ("auth", "oauth", "login", "jwt", "sso", "permission")):
235
- domain = "AUTH"
236
- elif any(k in low for k in ("review", "pull request", "pr ", "qa", "test")):
237
- domain = "QA"
238
- elif any(k in low for k in ("task", "ticket", "jira", "backlog")):
239
- domain = "TASK"
240
- elif any(k in low for k in ("error", "exception", "stacktrace", "failed", "failure", "outage")):
241
- domain = "ERR"
242
- elif any(k in low for k in ("doc", "documentation", "readme", "spec", "paper")):
243
- domain = "DOC"
244
- elif any(k in low for k in ("protocol", "manifold", "coordination", "orchestrator")):
245
- domain = "META"
246
-
247
- # Optional refinement via prototype similarity
248
- if vec is not None and HAS_NUMPY and self._proto_action and self._proto_domain:
249
- def _norm(v):
250
- n = np.linalg.norm(v)
251
- return v / (n + 1e-12) if n > 0 else v
252
-
253
- v = _norm(vec.astype(np.float32, copy=False))
254
-
255
- # Action refine
256
- a_best, a_score = action, -1.0
257
- for a, pv in self._proto_action.items():
258
- s = float(np.dot(v, pv))
259
- if s > a_score:
260
- a_best, a_score = a, s
261
- if a_score >= 0.40:
262
- action = a_best
263
-
264
- # Domain refine
265
- d_best, d_score = domain, -1.0
266
- for d, pv in self._proto_domain.items():
267
- s = float(np.dot(v, pv))
268
- if s > d_score:
269
- d_best, d_score = d, s
270
- if d_score >= 0.35:
271
- domain = d_best
272
-
273
- # If action is REQ and urgency not set, default to 1
274
- if action == "REQ" and urgency == 0:
275
- urgency = 1
276
-
277
- return SemanticCoords(action=action, polarity=polarity, domain=domain, urgency=urgency)
278
-
279
-
280
- # Global coords inferer instance
281
- _coords_inferer: Optional[CoordsInferer] = None
282
-
283
-
284
- def get_coords_inferer() -> CoordsInferer:
285
- """Get or create the default CoordsInferer."""
286
- global _coords_inferer
287
- if _coords_inferer is None:
288
- _coords_inferer = CoordsInferer()
289
- return _coords_inferer
290
-
291
-
292
- def infer_coords(text: str, vec: Optional["np.ndarray"] = None) -> tuple[int, ...]:
293
- """
294
- Infer UCR-compatible coordinates from text.
295
-
296
- Returns a tuple of 4 integers suitable for UCRAnchor.coords.
297
- """
298
- inferer = get_coords_inferer()
299
- sc = inferer.infer(text, vec)
300
- return semantic_coords_to_tuple(sc)
301
-
302
-
303
- # ============ Quantization Result ============
304
-
305
- @dataclass
306
- class QuantizeResult:
307
- """
308
- Result of quantizing a thought to a UCR anchor.
309
-
310
- Attributes:
311
- anchor: The matched UCR anchor
312
- confidence: How well the thought matches (0.0-1.0)
313
- method: How the match was made ("keyword", "embedding", "fallback")
314
- alternatives: Other possible matches with their scores
315
- """
316
- anchor: UCRAnchor
317
- confidence: float
318
- method: str
319
- alternatives: list[tuple[UCRAnchor, float]] = field(default_factory=list)
320
-
321
- @property
322
- def is_fallback(self) -> bool:
323
- return self.anchor.mnemonic == "Fallback"
324
-
325
- @property
326
- def is_high_confidence(self) -> bool:
327
- return self.confidence >= 0.7
328
-
329
-
330
- # ============ Keyword-Based Quantizer ============
331
-
332
- # Keyword patterns for each anchor category
333
- _KEYWORD_PATTERNS: dict[str, list[str]] = {
334
- # Observations
335
- "ObserveState": ["state", "current", "status", "environment", "system state"],
336
- "ObserveChange": ["changed", "detected", "noticed", "updated", "modified"],
337
- "ObserveError": ["error", "exception", "failed", "crash", "bug"],
338
-
339
- # Information
340
- "InformResult": ["result", "output", "computed", "calculated", "returns"],
341
- "InformStatus": ["status", "update", "progress", "currently"],
342
- "InformComplete": ["complete", "finished", "done", "completed", "success"],
343
- "InformBlocked": ["blocked", "waiting", "stuck", "depends on", "need"],
344
- "InformProgress": ["progress", "working on", "making progress", "underway"],
345
-
346
- # Questions
347
- "AskClarify": ["clarify", "what do you mean", "unclear", "confused", "explain"],
348
- "AskStatus": ["what is the status", "how is", "progress on", "update on"],
349
- "AskPermission": ["can i", "may i", "permission", "allowed", "okay to"],
350
- "AskResource": ["available", "resource", "capacity", "do we have"],
351
-
352
- # Requests
353
- "RequestTask": ["please do", "execute", "perform", "run", "implement"],
354
- "RequestPlan": ["create a plan", "plan for", "how should we", "strategy"],
355
- "RequestReview": ["review", "check", "look at", "evaluate", "feedback"],
356
- "RequestHelp": ["help", "assist", "support", "guidance", "advice"],
357
- "RequestCancel": ["cancel", "abort", "stop", "nevermind", "forget"],
358
- "RequestPriority": ["priority", "urgent", "expedite", "escalate"],
359
- "RequestResource": ["allocate", "provision", "need resource", "require"],
360
-
361
- # Proposals
362
- "ProposePlan": ["propose", "suggest", "recommendation", "i think we should"],
363
- "ProposeChange": ["change", "modify", "alter", "adjust"],
364
- "ProposeAlternative": ["alternative", "instead", "another approach", "option"],
365
- "ProposeRollback": ["rollback", "revert", "undo", "go back"],
366
-
367
- # Commitments
368
- "CommitTask": ["i will", "i'll do", "on it", "taking this", "i commit"],
369
- "CommitDeadline": ["by", "deadline", "eta", "deliver by"],
370
- "CommitResource": ["allocating", "providing", "assigning"],
371
-
372
- # Evaluations
373
- "EvalApprove": ["approved", "lgtm", "looks good", "accept", "ship it"],
374
- "EvalReject": ["rejected", "no", "denied", "not acceptable", "wrong"],
375
- "EvalNeedsWork": ["needs work", "revise", "changes needed", "almost"],
376
- "EvalComplete": ["complete", "done", "finished", "all good"],
377
- "EvalBlocked": ["blocked", "cannot proceed", "impediment"],
378
-
379
- # Meta
380
- "MetaAck": ["ack", "acknowledged", "got it", "received", "understood"],
381
- "MetaSync": ["sync", "ping", "alive", "heartbeat"],
382
- "MetaHandoff": ["handoff", "transfer", "passing to", "your turn"],
383
- "MetaEscalate": ["escalate", "raise", "need manager", "above my paygrade"],
384
- "MetaAbort": ["abort", "emergency stop", "halt", "critical failure"],
385
-
386
- # Accept/Reject
387
- "Accept": ["yes", "accept", "agreed", "confirmed", "affirmative"],
388
- "Reject": ["no", "reject", "disagree", "refuse", "decline"],
389
- "AcceptWithCondition": ["yes but", "if", "conditional", "provided that"],
390
- "Defer": ["later", "defer", "postpone", "not now", "revisit"],
391
-
392
- # Errors
393
- "ErrorGeneric": ["error", "failed", "exception"],
394
- "ErrorTimeout": ["timeout", "timed out", "too slow"],
395
- "ErrorResource": ["resource unavailable", "out of", "exhausted"],
396
- "ErrorPermission": ["permission denied", "unauthorized", "forbidden"],
397
- "ErrorValidation": ["invalid", "validation failed", "bad input"],
398
- }
399
-
400
-
401
- def _keyword_score(thought: str, patterns: list[str]) -> float:
402
- """Score how well a thought matches keyword patterns."""
403
- thought_lower = thought.lower()
404
- matches = 0
405
- for pattern in patterns:
406
- if pattern.lower() in thought_lower:
407
- # Longer patterns are stronger signals
408
- matches += len(pattern.split())
409
- # Normalize to 0-1 range (cap at 1.0)
410
- return min(1.0, matches / 3.0)
411
-
412
-
413
- class KeywordQuantizer:
414
- """
415
- Simple keyword-based quantizer. No ML dependencies.
416
- Good for bootstrapping and low-latency scenarios.
417
- """
418
-
419
- def __init__(self, ucr: Optional[UCR] = None, fallback_threshold: float = 0.2):
420
- self.ucr = ucr or get_default_ucr()
421
- self.fallback_threshold = fallback_threshold
422
- self._usage_stats: Counter = Counter()
423
-
424
- def quantize(self, thought: str) -> QuantizeResult:
425
- """
426
- Map a natural language thought to the best UCR anchor.
427
-
428
- Args:
429
- thought: The agent's thought/intent in natural language
430
-
431
- Returns:
432
- QuantizeResult with the best anchor and confidence score
433
- """
434
- scores: list[tuple[UCRAnchor, float]] = []
435
-
436
- for mnemonic, patterns in _KEYWORD_PATTERNS.items():
437
- anchor = self.ucr.get_by_mnemonic(mnemonic)
438
- if anchor:
439
- score = _keyword_score(thought, patterns)
440
- if score > 0:
441
- scores.append((anchor, score))
442
-
443
- # Sort by score descending
444
- scores.sort(key=lambda x: x[1], reverse=True)
445
-
446
- if not scores or scores[0][1] < self.fallback_threshold:
447
- # Use fallback
448
- fallback = self.ucr.get_by_mnemonic("Fallback")
449
- self._usage_stats["_fallback"] += 1
450
- return QuantizeResult(
451
- anchor=fallback,
452
- confidence=0.0,
453
- method="fallback",
454
- alternatives=scores[:3],
455
- )
456
-
457
- best_anchor, best_score = scores[0]
458
- self._usage_stats[best_anchor.mnemonic] += 1
459
-
460
- return QuantizeResult(
461
- anchor=best_anchor,
462
- confidence=best_score,
463
- method="keyword",
464
- alternatives=scores[1:4],
465
- )
466
-
467
- def get_usage_stats(self) -> dict[str, int]:
468
- """Get usage statistics for UCR evolution analysis."""
469
- return dict(self._usage_stats)
470
-
471
- def get_fallback_rate(self) -> float:
472
- """Get the rate of fallback usage (indicates UCR coverage gaps)."""
473
- total = sum(self._usage_stats.values())
474
- if total == 0:
475
- return 0.0
476
- return self._usage_stats["_fallback"] / total
477
-
478
-
479
- # ============ Embedding-Based Quantizer (Enhanced) ============
480
-
481
- class EmbeddingQuantizer:
482
- """
483
- Embedding-based quantizer using sentence-transformers.
484
-
485
- Enhanced with v3's centroid matrix approach:
486
- - Pre-computes normalized centroid matrix for fast similarity search
487
- - Supports anchor centroids (when available) or on-the-fly embedding
488
- - Includes CoordsInferer for prototype refinement
489
-
490
- Usage:
491
- quantizer = EmbeddingQuantizer()
492
- result = quantizer.quantize("I need someone to review this code")
493
- """
494
-
495
- def __init__(
496
- self,
497
- ucr: Optional[UCR] = None,
498
- model_name: str = "all-MiniLM-L6-v2",
499
- fallback_threshold: float = 0.55,
500
- ):
501
- if not HAS_NUMPY:
502
- raise ImportError("numpy is required for EmbeddingQuantizer")
503
-
504
- self.ucr = ucr or get_default_ucr()
505
- self.fallback_threshold = fallback_threshold
506
- self._usage_stats: Counter = Counter()
507
- self._fallback_buffer: List[str] = [] # Track low-confidence messages
508
-
509
- # Lazy load sentence-transformers
510
- self._model = None
511
- self._model_name = model_name
512
-
513
- # Centroid matrix (normalized) for fast similarity
514
- self._centroids_matrix: Optional["np.ndarray"] = None
515
- self._anchor_indices: List[int] = [] # Maps matrix row to anchor index
516
- self._embed_dim: Optional[int] = None
517
-
518
- # Coords inferer with prototype refinement
519
- self._coords_inferer: Optional[CoordsInferer] = None
520
-
521
- def _ensure_model(self):
522
- """Lazy load the embedding model and build centroid matrix."""
523
- if self._model is not None:
524
- return
525
-
526
- try:
527
- from sentence_transformers import SentenceTransformer
528
- except ImportError:
529
- raise ImportError(
530
- "sentence-transformers is required for EmbeddingQuantizer. "
531
- "Install with: pip install sentence-transformers"
532
- )
533
-
534
- self._model = SentenceTransformer(self._model_name)
535
- self._rebuild_index()
536
-
537
- # Initialize coords inferer with embeddings
538
- self._coords_inferer = CoordsInferer(embed_batch=self._embed_batch)
539
- self._coords_inferer.prime()
540
-
541
- def _embed_batch(self, texts: List[str]) -> "np.ndarray":
542
- """Embed a batch of texts and return normalized vectors."""
543
- if not self._model:
544
- self._ensure_model()
545
- vecs = self._model.encode(texts, convert_to_numpy=True)
546
- vecs = np.asarray(vecs, dtype=np.float32)
547
- self._embed_dim = vecs.shape[1]
548
- # Normalize rows
549
- norms = np.linalg.norm(vecs, axis=1, keepdims=True)
550
- return vecs / (norms + 1e-12)
551
-
552
- def _embed_one(self, text: str) -> "np.ndarray":
553
- """Embed a single text and return normalized vector."""
554
- return self._embed_batch([text])[0]
555
-
556
- def _rebuild_index(self):
557
- """Build/rebuild the centroid matrix from UCR anchors."""
558
- if not self.ucr.anchors:
559
- self._anchor_indices = []
560
- self._centroids_matrix = None
561
- return
562
-
563
- self._anchor_indices = sorted(self.ucr.anchors.keys())
564
- anchors = [self.ucr.anchors[idx] for idx in self._anchor_indices]
565
-
566
- # Check if anchors have pre-computed centroids
567
- has_centroids = all(a.centroid is not None for a in anchors)
568
-
569
- if has_centroids:
570
- # Use pre-computed centroids
571
- mat = np.asarray([a.centroid for a in anchors], dtype=np.float32)
572
- else:
573
- # Compute centroids from canonical texts
574
- canonical_texts = [a.canonical for a in anchors]
575
- mat = self._embed_batch(canonical_texts)
576
- # Optionally store centroids back to anchors
577
- for anchor, vec in zip(anchors, mat):
578
- anchor.centroid = vec.tolist()
579
-
580
- # Normalize rows
581
- norms = np.linalg.norm(mat, axis=1, keepdims=True)
582
- self._centroids_matrix = mat / (norms + 1e-12)
583
-
584
- def quantize(self, thought: str) -> QuantizeResult:
585
- """
586
- Map a natural language thought to the best UCR anchor using embeddings.
587
-
588
- Uses normalized cosine similarity against centroid matrix for fast lookup.
589
-
590
- Args:
591
- thought: The agent's thought/intent in natural language
592
-
593
- Returns:
594
- QuantizeResult with the best anchor and confidence score
595
- """
596
- self._ensure_model()
597
-
598
- if self._centroids_matrix is None or len(self._anchor_indices) == 0:
599
- fallback = self.ucr.get_by_mnemonic("Fallback")
600
- self._fallback_buffer.append(thought)
601
- return QuantizeResult(
602
- anchor=fallback,
603
- confidence=0.0,
604
- method="fallback",
605
- alternatives=[],
606
- )
607
-
608
- # Embed the thought (normalized)
609
- thought_vec = self._embed_one(thought)
610
-
611
- # Compute cosine similarities (dot product of normalized vectors)
612
- similarities = np.dot(self._centroids_matrix, thought_vec)
613
-
614
- # Get top matches
615
- top_locs = np.argsort(similarities)[::-1][:5]
616
- scores = []
617
- for loc in top_locs:
618
- anchor_idx = self._anchor_indices[loc]
619
- anchor = self.ucr.anchors[anchor_idx]
620
- scores.append((anchor, float(similarities[loc])))
621
-
622
- best_anchor, best_score = scores[0]
623
-
624
- if best_score < self.fallback_threshold:
625
- fallback = self.ucr.get_by_mnemonic("Fallback")
626
- self._usage_stats["_fallback"] += 1
627
- self._fallback_buffer.append(thought)
628
- return QuantizeResult(
629
- anchor=fallback,
630
- confidence=best_score,
631
- method="fallback",
632
- alternatives=scores[:3],
633
- )
634
-
635
- self._usage_stats[best_anchor.mnemonic] += 1
636
-
637
- return QuantizeResult(
638
- anchor=best_anchor,
639
- confidence=best_score,
640
- method="embedding",
641
- alternatives=scores[1:4],
642
- )
643
-
644
- def get_fallback_buffer(self) -> List[str]:
645
- """Get the buffer of low-confidence messages for extension learning."""
646
- return self._fallback_buffer.copy()
647
-
648
- def clear_fallback_buffer(self) -> None:
649
- """Clear the fallback buffer after extension learning."""
650
- self._fallback_buffer.clear()
651
-
652
- def infer_coords_for_text(self, text: str) -> tuple[int, ...]:
653
- """
654
- Infer semantic coordinates for a text using the enhanced CoordsInferer.
655
-
656
- Returns UCR-compatible coordinate tuple.
657
- """
658
- self._ensure_model()
659
- vec = self._embed_one(text)
660
- if self._coords_inferer:
661
- sc = self._coords_inferer.infer(text, vec)
662
- return semantic_coords_to_tuple(sc)
663
- return infer_coords(text, vec)
664
-
665
- def compute_centroid(self, texts: List[str]) -> List[float]:
666
- """
667
- Compute the centroid embedding for a cluster of texts.
668
-
669
- Useful for creating new extension anchors.
670
- """
671
- self._ensure_model()
672
- embeds = self._embed_batch(texts)
673
- centroid = np.mean(embeds, axis=0)
674
- # Normalize
675
- norm = np.linalg.norm(centroid)
676
- if norm > 0:
677
- centroid = centroid / norm
678
- return centroid.tolist()
679
-
680
- def get_usage_stats(self) -> dict[str, int]:
681
- """Get usage statistics for UCR evolution analysis."""
682
- return dict(self._usage_stats)
683
-
684
- def get_fallback_rate(self) -> float:
685
- """Get the rate of fallback usage."""
686
- total = sum(self._usage_stats.values())
687
- if total == 0:
688
- return 0.0
689
- return self._usage_stats["_fallback"] / total
690
-
691
-
692
- # ============ Auto-selecting Quantizer ============
693
-
694
- def create_quantizer(
695
- ucr: Optional[UCR] = None,
696
- prefer_embeddings: bool = True,
697
- fallback_threshold: float = 0.3,
698
- ) -> KeywordQuantizer | EmbeddingQuantizer:
699
- """
700
- Create the best available quantizer.
701
-
702
- Args:
703
- ucr: UCR instance to use
704
- prefer_embeddings: Try to use embedding quantizer if available
705
- fallback_threshold: Confidence threshold for fallback
706
-
707
- Returns:
708
- EmbeddingQuantizer if available and preferred, else KeywordQuantizer
709
- """
710
- if prefer_embeddings:
711
- try:
712
- return EmbeddingQuantizer(ucr=ucr, fallback_threshold=fallback_threshold)
713
- except ImportError:
714
- pass
715
-
716
- return KeywordQuantizer(ucr=ucr, fallback_threshold=fallback_threshold)
717
-
718
-
719
- # ============ High-Level API ============
720
-
721
- _default_quantizer: Optional[KeywordQuantizer | EmbeddingQuantizer] = None
722
-
723
-
724
- def quantize(thought: str) -> QuantizeResult:
725
- """
726
- Quantize a thought to a UCR anchor using the default quantizer.
727
-
728
- This is the main entry point for the Think-Quantize-Transmit pattern.
729
-
730
- Example:
731
- >>> result = quantize("Please review the authentication code")
732
- >>> result.anchor.mnemonic
733
- 'RequestReview'
734
- >>> result.confidence
735
- 0.67
736
- """
737
- global _default_quantizer
738
- if _default_quantizer is None:
739
- _default_quantizer = create_quantizer(prefer_embeddings=False)
740
- return _default_quantizer.quantize(thought)
741
-
742
-
743
- def think_quantize_transmit(
744
- thought: str,
745
- src: str,
746
- dst: str,
747
- ucr: Optional[UCR] = None,
748
- ) -> str:
749
- """
750
- The complete Think-Quantize-Transmit flow.
751
-
752
- Takes a natural language thought and produces a wire-ready SLIP message.
753
-
754
- Args:
755
- thought: Natural language intent
756
- src: Source agent identifier
757
- dst: Destination agent identifier
758
- ucr: Optional UCR instance
759
-
760
- Returns:
761
- Wire-format SLIP message string
762
-
763
- Example:
764
- >>> wire = think_quantize_transmit(
765
- ... "I need someone to check this code for security issues",
766
- ... src="developer",
767
- ... dst="reviewer"
768
- ... )
769
- >>> wire
770
- 'SLIP v1 developer reviewer RequestReview'
771
- """
772
- try:
773
- from .protocol import slip, fallback as slip_fallback
774
- except ImportError:
775
- # Inline simple slip format when protocol not available
776
- def slip(src, dst, mnemonic, ucr=None):
777
- return f"SLIP v1 {src} {dst} {mnemonic}"
778
- def slip_fallback(src, dst, payload, ucr=None):
779
- return f'SLIP v1 {src} {dst} Fallback "{payload}"'
780
-
781
- result = quantize(thought)
782
-
783
- if result.is_fallback:
784
- return slip_fallback(src, dst, thought, ucr)
785
- else:
786
- return slip(src, dst, result.anchor.mnemonic, ucr=ucr)
787
-
788
-
789
- # ============ Smoke Test ============
790
-
791
- if __name__ == "__main__":
792
- print("=== Semantic Quantizer Demo ===\n")
793
-
794
- test_thoughts = [
795
- "Please review the authentication module for security issues",
796
- "I've finished implementing the feature",
797
- "What's the current status of the deployment?",
798
- "I propose we use Redis for caching instead of Memcached",
799
- "Yes, that looks good to me",
800
- "There's an error in the payment processing code",
801
- "I'm blocked waiting for the API credentials",
802
- "Check the auth logs for timing anomalies in the OAuth flow", # Should fallback
803
- ]
804
-
805
- quantizer = KeywordQuantizer()
806
-
807
- for thought in test_thoughts:
808
- result = quantizer.quantize(thought)
809
- status = "FALLBACK" if result.is_fallback else f"{result.confidence:.2f}"
810
- print(f"Thought: {thought[:50]}...")
811
- print(f" → {result.anchor.mnemonic} ({status})")
812
- if result.alternatives:
813
- alt_str = ", ".join(f"{a.mnemonic}:{s:.2f}" for a, s in result.alternatives[:2])
814
- print(f" Alternatives: {alt_str}")
815
- print()
816
-
817
- print(f"Fallback rate: {quantizer.get_fallback_rate():.1%}")
818
- print(f"\nUsage stats: {quantizer.get_usage_stats()}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
requirements.txt CHANGED
@@ -1,5 +1,2 @@
1
  gradio>=4.0.0
2
- huggingface_hub
3
- sentence-transformers>=3.0.0
4
- numpy
5
- transformers>=4.40.0
 
1
  gradio>=4.0.0
2
+ slipcore>=3.0.0
 
 
 
ucr.py DELETED
@@ -1,311 +0,0 @@
1
- """
2
- Universal Concept Reference (UCR) - The Semantic Manifold
3
-
4
- The UCR is a quantized semantic coordinate system for agent communication.
5
- Instead of transmitting embeddings (model-specific, high-dimensional), agents
6
- communicate via positions in a shared, low-dimensional semantic manifold.
7
-
8
- Core concepts:
9
- - Dimensions: Semantic axes (action, urgency, domain, polarity)
10
- - Anchors: Named positions in the manifold (common agent intents)
11
- - Quantization: Map agent thoughts to nearest anchor
12
-
13
- Architecture:
14
- - Core UCR (0x0000-0x7FFF): Standard anchors, immutable per version
15
- - Extension UCR (0x8000-0xFFFF): Installation-specific, evolvable
16
- """
17
-
18
- from __future__ import annotations
19
- from dataclasses import dataclass, field
20
- from enum import IntEnum
21
- from typing import Optional
22
- import json
23
- from pathlib import Path
24
-
25
-
26
- # ============ Semantic Dimensions ============
27
- # The axes of our semantic manifold. Kept minimal per design.
28
-
29
- class Dimension(IntEnum):
30
- """
31
- The semantic axes of the UCR manifold.
32
- Each dimension represents a fundamental aspect of agent communication.
33
- """
34
- ACTION = 0 # What type of action: observe, inform, request, propose, evaluate
35
- POLARITY = 1 # Direction: initiating vs responding, positive vs negative
36
- DOMAIN = 2 # Context: task, plan, observation, evaluation, control
37
- URGENCY = 3 # Priority: routine, elevated, critical
38
-
39
-
40
- # Discrete levels per dimension (kept small for token efficiency)
41
- LEVELS_PER_DIM = 8
42
-
43
-
44
- # ============ UCR Entry (Anchor) ============
45
-
46
- @dataclass
47
- class UCRAnchor:
48
- """
49
- A named position in the semantic manifold.
50
-
51
- Attributes:
52
- index: Unique identifier (0x0000-0xFFFF)
53
- mnemonic: Single-token wire representation (e.g., "RequestReview")
54
- canonical: Human-readable description
55
- coords: Position in the manifold (one value per dimension)
56
- is_core: True if part of standard UCR, False if extension
57
- centroid: Optional embedding vector for ML-based quantization
58
- """
59
- index: int
60
- mnemonic: str
61
- canonical: str
62
- coords: tuple[int, ...] # One int per dimension, each 0 to LEVELS_PER_DIM-1
63
- is_core: bool = True
64
- centroid: Optional[list[float]] = None # Embedding vector for ML quantization
65
-
66
- def __post_init__(self):
67
- if len(self.coords) != len(Dimension):
68
- raise ValueError(f"coords must have {len(Dimension)} values, got {len(self.coords)}")
69
- for i, c in enumerate(self.coords):
70
- if not (0 <= c < LEVELS_PER_DIM):
71
- raise ValueError(f"coord[{i}] must be 0-{LEVELS_PER_DIM-1}, got {c}")
72
-
73
- def to_dict(self) -> dict:
74
- result = {
75
- "index": self.index,
76
- "mnemonic": self.mnemonic,
77
- "canonical": self.canonical,
78
- "coords": list(self.coords),
79
- "is_core": self.is_core,
80
- }
81
- if self.centroid is not None:
82
- result["centroid"] = self.centroid
83
- return result
84
-
85
- @classmethod
86
- def from_dict(cls, d: dict) -> "UCRAnchor":
87
- return cls(
88
- index=d["index"],
89
- mnemonic=d["mnemonic"],
90
- canonical=d["canonical"],
91
- coords=tuple(d["coords"]),
92
- is_core=d.get("is_core", True),
93
- centroid=d.get("centroid"),
94
- )
95
-
96
-
97
- # ============ UCR Registry ============
98
-
99
- CORE_RANGE_END = 0x8000 # 0x0000-0x7FFF = core, 0x8000-0xFFFF = extensions
100
-
101
-
102
- @dataclass
103
- class UCR:
104
- """
105
- The Universal Concept Reference - a semantic manifold for agent communication.
106
-
107
- Contains both core (standard) anchors and extension (local) anchors.
108
- Provides lookup by index, mnemonic, and nearest-neighbor by coordinates.
109
- """
110
- version: str
111
- anchors: dict[int, UCRAnchor] = field(default_factory=dict)
112
- _mnemonic_index: dict[str, int] = field(default_factory=dict, repr=False)
113
-
114
- def add_anchor(self, anchor: UCRAnchor) -> None:
115
- """Add an anchor to the registry."""
116
- if anchor.index in self.anchors:
117
- raise ValueError(f"Anchor index {anchor.index:#06x} already exists")
118
- if anchor.mnemonic in self._mnemonic_index:
119
- raise ValueError(f"Anchor mnemonic '{anchor.mnemonic}' already exists")
120
-
121
- # Validate core vs extension range
122
- if anchor.is_core and anchor.index >= CORE_RANGE_END:
123
- raise ValueError(f"Core anchor index must be < {CORE_RANGE_END:#06x}")
124
- if not anchor.is_core and anchor.index < CORE_RANGE_END:
125
- raise ValueError(f"Extension anchor index must be >= {CORE_RANGE_END:#06x}")
126
-
127
- self.anchors[anchor.index] = anchor
128
- self._mnemonic_index[anchor.mnemonic] = anchor.index
129
-
130
- def get_by_index(self, index: int) -> Optional[UCRAnchor]:
131
- """Lookup anchor by numeric index."""
132
- return self.anchors.get(index)
133
-
134
- def get_by_mnemonic(self, mnemonic: str) -> Optional[UCRAnchor]:
135
- """Lookup anchor by mnemonic string."""
136
- idx = self._mnemonic_index.get(mnemonic)
137
- return self.anchors.get(idx) if idx is not None else None
138
-
139
- def find_nearest(self, coords: tuple[int, ...]) -> UCRAnchor:
140
- """
141
- Find the anchor nearest to the given coordinates.
142
- Uses Manhattan distance for simplicity and speed.
143
- """
144
- if not self.anchors:
145
- raise ValueError("UCR has no anchors")
146
-
147
- best_anchor = None
148
- best_distance = float('inf')
149
-
150
- for anchor in self.anchors.values():
151
- distance = sum(abs(a - b) for a, b in zip(anchor.coords, coords))
152
- if distance < best_distance:
153
- best_distance = distance
154
- best_anchor = anchor
155
-
156
- return best_anchor
157
-
158
- def core_anchors(self) -> list[UCRAnchor]:
159
- """Return all core (standard) anchors."""
160
- return [a for a in self.anchors.values() if a.is_core]
161
-
162
- def extension_anchors(self) -> list[UCRAnchor]:
163
- """Return all extension (local) anchors."""
164
- return [a for a in self.anchors.values() if not a.is_core]
165
-
166
- def next_extension_index(self) -> int:
167
- """Get the next available extension index."""
168
- ext_indices = [a.index for a in self.anchors.values() if not a.is_core]
169
- if not ext_indices:
170
- return CORE_RANGE_END
171
- return max(ext_indices) + 1
172
-
173
- def save(self, path: Path) -> None:
174
- """Save UCR to JSON file."""
175
- data = {
176
- "version": self.version,
177
- "anchors": [a.to_dict() for a in self.anchors.values()],
178
- }
179
- with open(path, "w", encoding="utf-8") as f:
180
- json.dump(data, f, indent=2)
181
-
182
- @classmethod
183
- def load(cls, path: Path) -> "UCR":
184
- """Load UCR from JSON file."""
185
- with open(path, "r", encoding="utf-8") as f:
186
- data = json.load(f)
187
-
188
- ucr = cls(version=data["version"])
189
- for anchor_data in data["anchors"]:
190
- ucr.add_anchor(UCRAnchor.from_dict(anchor_data))
191
- return ucr
192
-
193
- def __len__(self) -> int:
194
- return len(self.anchors)
195
-
196
-
197
- # ============ Base UCR Factory ============
198
-
199
- def create_base_ucr() -> UCR:
200
- """
201
- Create the base UCR with core anchors for common agent intents.
202
-
203
- Coordinate scheme (4 dimensions, 8 levels each):
204
- - ACTION: 0=observe, 1=inform, 2=ask, 3=request, 4=propose, 5=commit, 6=evaluate, 7=meta
205
- - POLARITY: 0=negative, 1-3=declining, 4=neutral, 5-6=positive, 7=strong_positive
206
- - DOMAIN: 0=task, 1=plan, 2=observation, 3=evaluation, 4=control, 5=resource, 6=error, 7=general
207
- - URGENCY: 0=background, 1-2=low, 3-4=normal, 5-6=elevated, 7=critical
208
- """
209
- ucr = UCR(version="1.0.0")
210
-
211
- # Core coordination anchors
212
- # Format: (index, mnemonic, canonical, (action, polarity, domain, urgency))
213
-
214
- core_anchors = [
215
- # === Observations (ACTION=0) ===
216
- (0x0001, "ObserveState", "Report current system or environment state", (0, 4, 2, 3)),
217
- (0x0002, "ObserveChange", "Report a detected change", (0, 4, 2, 4)),
218
- (0x0003, "ObserveError", "Report an observed error condition", (0, 2, 6, 6)),
219
-
220
- # === Information (ACTION=1) ===
221
- (0x0010, "InformResult", "Share a computed or derived result", (1, 5, 2, 3)),
222
- (0x0011, "InformStatus", "Provide status update", (1, 4, 0, 3)),
223
- (0x0012, "InformComplete", "Report task completion", (1, 6, 0, 4)),
224
- (0x0013, "InformBlocked", "Report being blocked on something", (1, 2, 0, 5)),
225
- (0x0014, "InformProgress", "Share progress update", (1, 5, 0, 3)),
226
-
227
- # === Questions (ACTION=2) ===
228
- (0x0020, "AskClarify", "Request clarification on requirements", (2, 4, 1, 4)),
229
- (0x0021, "AskStatus", "Query current status", (2, 4, 0, 3)),
230
- (0x0022, "AskPermission", "Request permission to proceed", (2, 4, 4, 4)),
231
- (0x0023, "AskResource", "Query resource availability", (2, 4, 5, 3)),
232
-
233
- # === Requests (ACTION=3) ===
234
- (0x0030, "RequestTask", "Request execution of a task", (3, 4, 0, 4)),
235
- (0x0031, "RequestPlan", "Request creation of a plan", (3, 4, 1, 4)),
236
- (0x0032, "RequestReview", "Request review of work", (3, 4, 3, 3)),
237
- (0x0033, "RequestHelp", "Request assistance", (3, 4, 7, 5)),
238
- (0x0034, "RequestCancel", "Request cancellation", (3, 1, 4, 5)),
239
- (0x0035, "RequestPriority", "Request priority change", (3, 4, 4, 5)),
240
- (0x0036, "RequestResource", "Request allocation of resource", (3, 4, 5, 4)),
241
-
242
- # === Proposals (ACTION=4) ===
243
- (0x0040, "ProposePlan", "Propose a plan for consideration", (4, 5, 1, 4)),
244
- (0x0041, "ProposeChange", "Propose a modification", (4, 5, 0, 4)),
245
- (0x0042, "ProposeAlternative", "Propose an alternative approach", (4, 5, 1, 4)),
246
- (0x0043, "ProposeRollback", "Propose reverting changes", (4, 3, 4, 5)),
247
-
248
- # === Commitments (ACTION=5) ===
249
- (0x0050, "CommitTask", "Commit to performing a task", (5, 6, 0, 4)),
250
- (0x0051, "CommitDeadline", "Commit to a deadline", (5, 6, 0, 4)),
251
- (0x0052, "CommitResource", "Commit resources", (5, 6, 5, 4)),
252
-
253
- # === Evaluations (ACTION=6) ===
254
- (0x0060, "EvalApprove", "Evaluation: approved/positive", (6, 7, 3, 4)),
255
- (0x0061, "EvalReject", "Evaluation: rejected/negative", (6, 0, 3, 4)),
256
- (0x0062, "EvalNeedsWork", "Evaluation: needs revision", (6, 3, 3, 4)),
257
- (0x0063, "EvalComplete", "Evaluation: work is complete", (6, 6, 3, 4)),
258
- (0x0064, "EvalBlocked", "Evaluation: blocked by issue", (6, 2, 3, 5)),
259
-
260
- # === Meta/Control (ACTION=7) ===
261
- (0x0070, "MetaAck", "Acknowledge receipt", (7, 5, 4, 2)),
262
- (0x0071, "MetaSync", "Synchronization ping", (7, 4, 4, 3)),
263
- (0x0072, "MetaHandoff", "Hand off responsibility", (7, 4, 4, 4)),
264
- (0x0073, "MetaEscalate", "Escalate to higher authority", (7, 3, 4, 6)),
265
- (0x0074, "MetaAbort", "Abort current operation", (7, 0, 4, 7)),
266
-
267
- # === Accept/Reject responses ===
268
- (0x0080, "Accept", "Accept a proposal or request", (5, 7, 7, 3)),
269
- (0x0081, "Reject", "Reject a proposal or request", (5, 0, 7, 3)),
270
- (0x0082, "AcceptWithCondition", "Conditional acceptance", (5, 5, 7, 4)),
271
- (0x0083, "Defer", "Defer decision", (5, 4, 7, 2)),
272
-
273
- # === Error handling ===
274
- (0x0090, "ErrorGeneric", "Generic error occurred", (1, 1, 6, 5)),
275
- (0x0091, "ErrorTimeout", "Operation timed out", (1, 1, 6, 5)),
276
- (0x0092, "ErrorResource", "Resource unavailable", (1, 1, 6, 5)),
277
- (0x0093, "ErrorPermission", "Permission denied", (1, 0, 6, 5)),
278
- (0x0094, "ErrorValidation", "Validation failed", (1, 1, 6, 4)),
279
-
280
- # === Fallback ===
281
- (0x00FF, "Fallback", "Unquantizable - see payload for natural language", (7, 4, 7, 4)),
282
- ]
283
-
284
- for index, mnemonic, canonical, coords in core_anchors:
285
- ucr.add_anchor(UCRAnchor(
286
- index=index,
287
- mnemonic=mnemonic,
288
- canonical=canonical,
289
- coords=coords,
290
- is_core=True,
291
- ))
292
-
293
- return ucr
294
-
295
-
296
- # Module-level default UCR instance
297
- _default_ucr: Optional[UCR] = None
298
-
299
-
300
- def get_default_ucr() -> UCR:
301
- """Get or create the default UCR instance."""
302
- global _default_ucr
303
- if _default_ucr is None:
304
- _default_ucr = create_base_ucr()
305
- return _default_ucr
306
-
307
-
308
- def set_default_ucr(ucr: UCR) -> None:
309
- """Set the default UCR instance."""
310
- global _default_ucr
311
- _default_ucr = ucr