diff --git a/README.md b/README.md index 664a79d..d095236 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ -# braindump +# Coopertron 5000 -Anonymous braindump form + LLM synthesis for Inference Cooperative meetings. +A benevolent robot that reads the co-op's anonymous pre-meeting braindump and +tells the members what they said. Built for Inference Cooperative meetings. Members answer a short form before a meeting (ideas, wants, needs, goals, dissent). This script turns the export into a review document the group reads together: where energy is concentrated, what is unusual, where people disagree. @@ -129,3 +130,6 @@ lives on CryptPad for now; a small co-op-hosted app (anonymous form + a synthesize button, same pipeline) is a possible next step if the output is useful. Discussion and ideas: open an issue here or on [co-op/support](https://git.inference.coop/co-op/support/issues). + +Why the name: it is a small experiment with a big-robot name, on purpose. The +repo and command are `coopertron`; the 5000 lives in prose only. diff --git a/synthesize.py b/synthesize.py index 41227a3..f617d54 100755 --- a/synthesize.py +++ b/synthesize.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""braindump synthesize: turn an anonymous survey export into a review document. +"""Coopertron 5000: turn an anonymous survey export into a review document. Pipeline (deterministic Python around two model stages): @@ -162,7 +162,7 @@ class Gateway: f"{self.base}/chat/completions", data=json.dumps(body).encode("utf-8"), headers={"Authorization": f"Bearer {key}", "Content-Type": "application/json", - "User-Agent": "braindump-synthesize/0.1"}, + "User-Agent": "coopertron/0.1"}, method="POST", ) try: @@ -463,7 +463,7 @@ def render(loaded: dict, items: list[dict], clusters: dict, meta: dict) -> str: return f'> "{it["quote"]}" ({it["rid"]}, {it["q"]})' out: list[str] = [] - out.append(f"# Braindump synthesis\n") + out.append(f"# Coopertron 5000 report\n") out.append(f"_Generated {meta['date']} from {meta['source']} · {n_resp} responses · " f"{len(items)} points · {len(clusters['themes'])} themes · model `{meta['model']}`_\n") out.append("Counts below are computed from the extracted points, not estimated by the model. " diff --git a/tests/fixtures/sample.review.md b/tests/fixtures/sample.review.md index d663381..34c675a 100644 --- a/tests/fixtures/sample.review.md +++ b/tests/fixtures/sample.review.md @@ -1,4 +1,4 @@ -# Braindump synthesis +# Coopertron 5000 report _Generated 2026-10-19 from sample.csv · 12 responses · 71 points · 2 themes · model `tinfoil/glm-5.3`_ diff --git a/tests/test_synthesize.py b/tests/test_synthesize.py index 19bd14b..bf310d5 100644 --- a/tests/test_synthesize.py +++ b/tests/test_synthesize.py @@ -156,7 +156,7 @@ class PipelineTests(unittest.TestCase): meta = {"date": "2026-10-19", "source": "sample.csv", "model": "tinfoil/glm-5.3", "dropped": dropped} md = S.render(loaded, items, clusters, meta) - self.assertIn("# Braindump synthesis", md) + self.assertIn("# Coopertron 5000 report", md) self.assertIn("## Priorities (pick up to 3)", md) self.assertIn("**4** · privacy", md) # r01, r03, r06, r09 picked privacy self.assertIn("### 1. ", md)