@cachly-dev/mcp-server 0.10.128 → 0.10.129
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/aussetzer.d.ts +89 -0
- package/dist/src/aussetzer.js +143 -0
- package/dist/src/aussetzer.js.map +1 -1
- package/dist/src/bauabdruck-daten.generiert.json +3 -3
- package/dist/src/eingaenge.d.ts +24 -0
- package/dist/src/eingaenge.js +32 -0
- package/dist/src/eingaenge.js.map +1 -1
- package/dist/src/feldreparatur.d.ts +58 -0
- package/dist/src/feldreparatur.js +113 -0
- package/dist/src/feldreparatur.js.map +1 -0
- package/dist/src/handlers/advanced.js +3 -3
- package/dist/src/handlers/advanced.js.map +1 -1
- package/dist/src/handlers/brain.js +252 -36
- package/dist/src/handlers/brain.js.map +1 -1
- package/dist/src/handlers/team.js +19 -4
- package/dist/src/handlers/team.js.map +1 -1
- package/dist/src/interferenz.d.ts +111 -0
- package/dist/src/interferenz.js +141 -0
- package/dist/src/interferenz.js.map +1 -0
- package/dist/src/rangfolge.d.ts +36 -0
- package/dist/src/rangfolge.js +35 -0
- package/dist/src/rangfolge.js.map +1 -1
- package/dist/src/resonanz.d.ts +85 -0
- package/dist/src/resonanz.js +140 -0
- package/dist/src/resonanz.js.map +1 -0
- package/dist/src/versuch.d.ts +9 -1
- package/dist/src/versuch.js +17 -3
- package/dist/src/versuch.js.map +1 -1
- package/dist/src/wertbeitrag.d.ts +95 -4
- package/dist/src/wertbeitrag.js +135 -5
- package/dist/src/wertbeitrag.js.map +1 -1
- package/glama.json +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Varianten-Interferenz — die Frage einmal stellen, viele Wege gehen.
|
|
3
|
+
*
|
|
4
|
+
* ╔══════════════════════════════════════════════════════════════════════════╗
|
|
5
|
+
* ║ GEMESSEN UND NICHT VERDRAHTET (21.08.2026). ║
|
|
6
|
+
* ║ ║
|
|
7
|
+
* ║ Am eingefrorenen Korpus, alle Kombinationen aus K=3/5/9 und Staerke ║
|
|
8
|
+
* ║ 0,3/0,5/0,8 (src/bench/interferenz-vergleich.ts): ║
|
|
9
|
+
* ║ ║
|
|
10
|
+
* ║ Bauform Platz 1 @3 Top 10 Topf ║
|
|
11
|
+
* ║ heute 39,0 51,0 71,0 90,0 ║
|
|
12
|
+
* ║ K=5 staerke=0,5 39,0 51,0 72,0 90,0 ║
|
|
13
|
+
* ║ (alle uebrigen: gleich oder schlechter) ║
|
|
14
|
+
* ║ ║
|
|
15
|
+
* ║ Von den 10 Fragen, die gar nicht in den Topf kamen, wurde KEINE einzige ║
|
|
16
|
+
* ║ gerettet. ║
|
|
17
|
+
* ║ ║
|
|
18
|
+
* ║ Der Grund steht in der Diagnose (src/bench/warum-durchgefallen.ts): ║
|
|
19
|
+
* ║ bge-m3-Vektoren sind DICHT. Bedeutung liegt ueber alle 1024 Dimensionen ║
|
|
20
|
+
* ║ verteilt, nicht in Abschnitten. Einen Abschnitt zu daempfen ist deshalb ║
|
|
21
|
+
* ║ keine "lass ein Wort weg"-Operation, sondern eine Drehung, die alle ║
|
|
22
|
+
* ║ Kandidaten aehnlich trifft — gemessen: Kosinus zur Ausgangsfrage 0,99 ║
|
|
23
|
+
* ║ bei Staerke 0,3 und noch 0,89 bei 0,8. Die Rangfolge bewegt sich nicht. ║
|
|
24
|
+
* ║ ║
|
|
25
|
+
* ║ Die Analogie war falsch, nicht die Umsetzung: Interferenz braucht Wege, ║
|
|
26
|
+
* ║ die sich WIRKLICH unterscheiden. Im Vektorraum eines dichten Modells ║
|
|
27
|
+
* ║ gibt es die nicht zum Nulltarif — echte Textvarianten kosten je einen ║
|
|
28
|
+
* ║ Einbettungsaufruf, und genau den sollte diese Idee sparen. ║
|
|
29
|
+
* ║ ║
|
|
30
|
+
* ║ Was die Messung stattdessen fand, steht in src/bench/topfgroesse.ts: ║
|
|
31
|
+
* ║ der Topf war mit 25 zu klein. 75 hebt die Decke von 90 auf 97 Prozent. ║
|
|
32
|
+
* ║ ║
|
|
33
|
+
* ║ Die Datei bleibt mitsamt Proben, damit der naechste Anlauf die Messung ║
|
|
34
|
+
* ║ vorfindet statt sie zu wiederholen. ║
|
|
35
|
+
* ╚══════════════════════════════════════════════════════════════════════════╝
|
|
36
|
+
*
|
|
37
|
+
* ── Das Vorbild ─────────────────────────────────────────────────────────────
|
|
38
|
+
*
|
|
39
|
+
* Feynmans Pfadintegral: Licht probiert alle Wege gleichzeitig. Die Phasen der
|
|
40
|
+
* falschen Wege loeschen sich gegenseitig aus, uebrig bleibt der richtige.
|
|
41
|
+
* Nicht weil einer ausgewaehlt wurde — weil die anderen einander aufheben.
|
|
42
|
+
*
|
|
43
|
+
* ── Das Problem, gegen das es antritt ───────────────────────────────────────
|
|
44
|
+
*
|
|
45
|
+
* Gemessen am 21.08.2026 am eingefrorenen Korpus: von 100 Fragen kommen 10 gar
|
|
46
|
+
* nicht erst in den Topf. Diese zehn sind fuer JEDE spaetere Stufe verloren —
|
|
47
|
+
* die beste Sortierung der Welt kann nichts sortieren, was nicht da ist.
|
|
48
|
+
*
|
|
49
|
+
* Die Vorauswahl haengt heute an EINER Zahl je Lektion: der Naehe zu EINEM
|
|
50
|
+
* Fragevektor. Eine ungluecklich formulierte Frage zeigt in eine leicht
|
|
51
|
+
* falsche Richtung, und die richtige Lektion faellt aus den Top 25. Es gibt
|
|
52
|
+
* keinen zweiten Versuch.
|
|
53
|
+
*
|
|
54
|
+
* ── Was hier passiert ───────────────────────────────────────────────────────
|
|
55
|
+
*
|
|
56
|
+
* Aus dem einen Fragevektor werden K leicht verschobene Varianten erzeugt.
|
|
57
|
+
* Jede nominiert ihre eigene Top-Liste. Wer in vielen Varianten weit vorne
|
|
58
|
+
* steht, ist stabil gemeint; wer nur in einer auftaucht, war der Zufallstreffer
|
|
59
|
+
* einer bestimmten Formulierung.
|
|
60
|
+
*
|
|
61
|
+
* WICHTIG, und der ganze Grund, warum das billig ist: die Varianten entstehen
|
|
62
|
+
* IM VEKTORRAUM, nicht im Text. Kein einziger zusaetzlicher Einbettungsaufruf,
|
|
63
|
+
* kein Netz, keine Latenz von Belang — nur Arithmetik auf 1024 Zahlen.
|
|
64
|
+
*
|
|
65
|
+
* ── Warum deterministisch und nicht zufaellig ───────────────────────────────
|
|
66
|
+
*
|
|
67
|
+
* Zwei Laeufe auf derselben Frage MUESSEN dieselbe Antwort geben. Ein
|
|
68
|
+
* Suchergebnis, das bei jedem Aufruf leicht anders ist, ist nicht
|
|
69
|
+
* reproduzierbar — und ein Messstand darauf misst sein eigenes Rauschen.
|
|
70
|
+
* Die Streuung kommt deshalb aus einer festen Achsenwahl je Variantenindex,
|
|
71
|
+
* nicht aus einem Zufallsgenerator.
|
|
72
|
+
*/
|
|
73
|
+
/**
|
|
74
|
+
* Erzeugt K Varianten eines Fragevektors.
|
|
75
|
+
*
|
|
76
|
+
* Variante 0 ist IMMER die unveraenderte Frage. Damit kann die Interferenz im
|
|
77
|
+
* schlimmsten Fall nur so gut sein wie vorher plus Zusatzstimmen — sie kann
|
|
78
|
+
* die Ausgangslage nicht verlieren.
|
|
79
|
+
*
|
|
80
|
+
* Die uebrigen K-1 daempfen jeweils einen anderen Abschnitt des Vektors. Das
|
|
81
|
+
* ist die Vektorraum-Entsprechung zu "lass ein paar Woerter weg": ein Teil der
|
|
82
|
+
* Bedeutung wird leiser gedreht, der Rest bleibt. Faellt eine Lektion dadurch
|
|
83
|
+
* heraus, hing sie an genau diesem Abschnitt.
|
|
84
|
+
*
|
|
85
|
+
* @param fv der Fragevektor
|
|
86
|
+
* @param k wie viele Varianten insgesamt (inklusive der unveraenderten)
|
|
87
|
+
* @param staerke wie stark gedaempft wird (0 = gar nicht, 1 = Abschnitt aus)
|
|
88
|
+
*/
|
|
89
|
+
export function varianten(fv, k = 5, staerke = 0.5) {
|
|
90
|
+
if (k <= 1 || fv.length === 0)
|
|
91
|
+
return [fv];
|
|
92
|
+
const aus = [fv];
|
|
93
|
+
const abschnitte = k - 1;
|
|
94
|
+
const breite = Math.max(1, Math.floor(fv.length / abschnitte));
|
|
95
|
+
for (let i = 0; i < abschnitte; i++) {
|
|
96
|
+
const von = i * breite;
|
|
97
|
+
const bis = i === abschnitte - 1 ? fv.length : von + breite;
|
|
98
|
+
const v = fv.slice();
|
|
99
|
+
for (let j = von; j < bis; j++)
|
|
100
|
+
v[j] *= (1 - staerke);
|
|
101
|
+
aus.push(v);
|
|
102
|
+
}
|
|
103
|
+
return aus;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Ueberlagert die Nominierungen mehrerer Varianten.
|
|
107
|
+
*
|
|
108
|
+
* Das Gewicht einer Stimme faellt mit dem Platz (1/(platz+1)) — wie bei
|
|
109
|
+
* Reciprocal Rank Fusion, aber MIT einem Zusatz, der hier den Unterschied
|
|
110
|
+
* macht: die Naehe geht mit ein. Reine Platz-Fusion kann nicht unterscheiden,
|
|
111
|
+
* ob Platz 1 knapp oder deutlich gewonnen hat; genau daran ist am 20.08. die
|
|
112
|
+
* erste Eingangs-Verdrahtung gescheitert.
|
|
113
|
+
*
|
|
114
|
+
* Variante 0 (die unveraenderte Frage) zaehlt doppelt: sie ist die Frage, die
|
|
115
|
+
* der Nutzer wirklich gestellt hat. Die anderen sind Hypothesen darueber, was
|
|
116
|
+
* er gemeint haben koennte.
|
|
117
|
+
*
|
|
118
|
+
* @param listen je Variante eine nach Naehe absteigend sortierte Kandidatenliste
|
|
119
|
+
* @param wieViele wie viele Themen am Ende nominiert werden
|
|
120
|
+
*/
|
|
121
|
+
export function ueberlagere(listen, wieViele) {
|
|
122
|
+
const punkte = new Map();
|
|
123
|
+
for (const [vi, liste] of listen.entries()) {
|
|
124
|
+
const gewicht = vi === 0 ? 2 : 1;
|
|
125
|
+
for (const [platz, kandidat] of liste.entries()) {
|
|
126
|
+
// Negative Naehe heisst "kein Vektor" (-2) oder "zeigt weg" — solche
|
|
127
|
+
// Stimmen werden nicht gezaehlt, statt die Summe nach unten zu ziehen.
|
|
128
|
+
if (kandidat.naehe <= 0)
|
|
129
|
+
continue;
|
|
130
|
+
const stimme = gewicht * (kandidat.naehe / (platz + 1));
|
|
131
|
+
punkte.set(kandidat.topic, (punkte.get(kandidat.topic) ?? 0) + stimme);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return [...punkte.entries()]
|
|
135
|
+
// Bei Gleichstand entscheidet der Name — zwei Laeufe muessen dieselbe
|
|
136
|
+
// Reihenfolge geben, sonst misst der Messstand sein eigenes Rauschen.
|
|
137
|
+
.sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
|
|
138
|
+
.slice(0, wieViele)
|
|
139
|
+
.map(([topic]) => topic);
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=interferenz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interferenz.js","sourceRoot":"","sources":["../../src/interferenz.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEG;AAKH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,SAAS,CAAC,EAAY,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG;IAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAe,CAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC;QACvB,MAAM,GAAG,GAAG,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC;QAC5D,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;YAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QACtD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB,EAAE,QAAgB;IAChE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,qEAAqE;YACrE,uEAAuE;YACvE,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC;gBAAE,SAAS;YAClC,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1B,sEAAsE;QACtE,sEAAsE;SACrE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACvD,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;SAClB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/src/rangfolge.d.ts
CHANGED
|
@@ -165,5 +165,41 @@ export declare function bewerteTopf(topf: Bewertbar[], gewichte?: {
|
|
|
165
165
|
/** Anteil der seltenen Fragewörter im Text. 1,0 bis 1,6 — Mitte genommen. */
|
|
166
166
|
readonly seltenheit: 1.3;
|
|
167
167
|
}): number[];
|
|
168
|
+
/**
|
|
169
|
+
* Punktzahl je Kandidat — STRENGE Fassung: Merkmale multiplizieren statt addieren.
|
|
170
|
+
*
|
|
171
|
+
* ── Das Vorbild ─────────────────────────────────────────────────────────────
|
|
172
|
+
*
|
|
173
|
+
* Kinetisches Korrekturlesen (Hopfield 1974, T-Zell-Rezeptoren): Biochemie
|
|
174
|
+
* erreicht Fehlerraten weit unter dem, was ein einzelner Bindungsschritt
|
|
175
|
+
* hergibt, indem sie Kandidaten durch eine KETTE von Pruefschritten schickt.
|
|
176
|
+
* Bei jedem Schritt kann der Kandidat abfallen; die Trennschaerfe der Schritte
|
|
177
|
+
* MULTIPLIZIERT sich, statt sich zu mitteln.
|
|
178
|
+
*
|
|
179
|
+
* ── Der Unterschied zur Addition ────────────────────────────────────────────
|
|
180
|
+
*
|
|
181
|
+
* In der Summe (bewerteTopf) kann ein Kandidat totale Schwaeche in einem
|
|
182
|
+
* Merkmal mit Staerke in einem anderen voll ausgleichen. Im Produkt nicht:
|
|
183
|
+
* eine Null in einem Merkmal drueckt die Gesamtnote, egal wie gut der Rest
|
|
184
|
+
* ist. Das Produkt verlangt STIMMIGKEIT ueber alle Merkmale — die Summe
|
|
185
|
+
* verlangt nur Masse.
|
|
186
|
+
*
|
|
187
|
+
* `basis` stellt die Strenge ein: grosse Basis naehert sich der Summe an,
|
|
188
|
+
* kleine Basis macht eine Null toedlich. Rechnerisch ist das eine gewichtete
|
|
189
|
+
* Summe im Logarithmus — der Unterschied zur Addition ist die begrenzte
|
|
190
|
+
* Ausgleichbarkeit, nicht die Buchhaltung.
|
|
191
|
+
*
|
|
192
|
+
* Ergebnis der Messung vom 21.08.2026 steht in src/bench/fusion-vergleich.ts.
|
|
193
|
+
*/
|
|
194
|
+
export declare function bewerteTopfStreng(topf: Bewertbar[], gewichte?: {
|
|
195
|
+
/** Nähe zum ganzen Text. Der Grundstock, deshalb 1. */
|
|
196
|
+
readonly text: 1;
|
|
197
|
+
/** Nähe zum Themennamen. In beiden Richtungen 0,6. */
|
|
198
|
+
readonly thema: 0.6;
|
|
199
|
+
/** Angereicherte Frage gegen den ganzen Text. In beiden Richtungen 0,3. */
|
|
200
|
+
readonly rueckkopplung: 0.3;
|
|
201
|
+
/** Anteil der seltenen Fragewörter im Text. 1,0 bis 1,6 — Mitte genommen. */
|
|
202
|
+
readonly seltenheit: 1.3;
|
|
203
|
+
}, basis?: number): number[];
|
|
168
204
|
/** Bequemlichkeit: Kosinus mit Lücken-Behandlung. */
|
|
169
205
|
export declare function naeheOderLuecke(frage: number[] | null, vektor: number[] | null | undefined): number;
|
package/dist/src/rangfolge.js
CHANGED
|
@@ -207,6 +207,41 @@ export function bewerteTopf(topf, gewichte = GEWICHTE) {
|
|
|
207
207
|
+ gewichte.rueckkopplung * r[i]
|
|
208
208
|
+ gewichte.seltenheit * k.seltenheitsDeckung);
|
|
209
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Punktzahl je Kandidat — STRENGE Fassung: Merkmale multiplizieren statt addieren.
|
|
212
|
+
*
|
|
213
|
+
* ── Das Vorbild ─────────────────────────────────────────────────────────────
|
|
214
|
+
*
|
|
215
|
+
* Kinetisches Korrekturlesen (Hopfield 1974, T-Zell-Rezeptoren): Biochemie
|
|
216
|
+
* erreicht Fehlerraten weit unter dem, was ein einzelner Bindungsschritt
|
|
217
|
+
* hergibt, indem sie Kandidaten durch eine KETTE von Pruefschritten schickt.
|
|
218
|
+
* Bei jedem Schritt kann der Kandidat abfallen; die Trennschaerfe der Schritte
|
|
219
|
+
* MULTIPLIZIERT sich, statt sich zu mitteln.
|
|
220
|
+
*
|
|
221
|
+
* ── Der Unterschied zur Addition ────────────────────────────────────────────
|
|
222
|
+
*
|
|
223
|
+
* In der Summe (bewerteTopf) kann ein Kandidat totale Schwaeche in einem
|
|
224
|
+
* Merkmal mit Staerke in einem anderen voll ausgleichen. Im Produkt nicht:
|
|
225
|
+
* eine Null in einem Merkmal drueckt die Gesamtnote, egal wie gut der Rest
|
|
226
|
+
* ist. Das Produkt verlangt STIMMIGKEIT ueber alle Merkmale — die Summe
|
|
227
|
+
* verlangt nur Masse.
|
|
228
|
+
*
|
|
229
|
+
* `basis` stellt die Strenge ein: grosse Basis naehert sich der Summe an,
|
|
230
|
+
* kleine Basis macht eine Null toedlich. Rechnerisch ist das eine gewichtete
|
|
231
|
+
* Summe im Logarithmus — der Unterschied zur Addition ist die begrenzte
|
|
232
|
+
* Ausgleichbarkeit, nicht die Buchhaltung.
|
|
233
|
+
*
|
|
234
|
+
* Ergebnis der Messung vom 21.08.2026 steht in src/bench/fusion-vergleich.ts.
|
|
235
|
+
*/
|
|
236
|
+
export function bewerteTopfStreng(topf, gewichte = GEWICHTE, basis = 0.3) {
|
|
237
|
+
const t = spreizeImTopf(topf.map((k) => k.naeheText));
|
|
238
|
+
const th = spreizeImTopf(topf.map((k) => k.naeheThema));
|
|
239
|
+
const r = spreizeImTopf(topf.map((k) => k.naeheRueckkopplung));
|
|
240
|
+
return topf.map((k, i) => gewichte.text * Math.log(basis + t[i])
|
|
241
|
+
+ gewichte.thema * Math.log(basis + th[i])
|
|
242
|
+
+ gewichte.rueckkopplung * Math.log(basis + r[i])
|
|
243
|
+
+ gewichte.seltenheit * Math.log(basis + k.seltenheitsDeckung));
|
|
244
|
+
}
|
|
210
245
|
/** Bequemlichkeit: Kosinus mit Lücken-Behandlung. */
|
|
211
246
|
export function naeheOderLuecke(frage, vektor) {
|
|
212
247
|
return frage && vektor && vektor.length > 0 ? kosinus(frage, vektor) : -2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rangfolge.js","sourceRoot":"","sources":["../../src/rangfolge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rangfolge.js","sourceRoot":"","sources":["../../src/rangfolge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resonanz — eine Lektion wird durch die Fragen adressiert, die zu ihr fuehrten.
|
|
3
|
+
*
|
|
4
|
+
* ── Das Vorbild ─────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* Das Hologramm speichert nicht das Bild, sondern das Interferenzmuster des
|
|
7
|
+
* Lichts, das es beleuchtet hat. Beleuchtet man es spaeter wieder, entsteht
|
|
8
|
+
* das Bild aus dem Muster — und jeder Splitter traegt das Ganze, nur unschaerfer.
|
|
9
|
+
*
|
|
10
|
+
* ── Das Problem, gegen das es antritt ───────────────────────────────────────
|
|
11
|
+
*
|
|
12
|
+
* Jeder Index in diesem Haus beschreibt, was eine Lektion SAGT: ihr Volltext,
|
|
13
|
+
* ihr Themenname. Gesucht wird aber mit dem, was jemand FRAGT — und die beiden
|
|
14
|
+
* Sprachen fallen auseinander. Gemessen am 21.08.2026: von 100 Fragen liegen
|
|
15
|
+
* 11 auf Platz 100+ der Bedeutungsrangfolge. Fuer die ist die richtige Lektion
|
|
16
|
+
* semantisch nicht "in der Naehe" — keine Vektorrechnung ueber ihren Text holt
|
|
17
|
+
* sie naeher heran.
|
|
18
|
+
*
|
|
19
|
+
* Diese Datei fuehrt deshalb eine dritte Sicht: je Lektion die laufende
|
|
20
|
+
* Ueberlagerung aller Fragevektoren, die nachweislich zu ihr gefuehrt haben.
|
|
21
|
+
* Der Vergleich laeuft dann Frage-gegen-Frage statt Frage-gegen-Text.
|
|
22
|
+
*
|
|
23
|
+
* ── Warum wir das koennen und andere nicht ──────────────────────────────────
|
|
24
|
+
*
|
|
25
|
+
* Es braucht die geschlossene Schleife: von der Frage ueber den Treffer bis zu
|
|
26
|
+
* der Bestaetigung, dass der Treffer richtig war. Ein Suchindex, der nur
|
|
27
|
+
* Dokumente kennt, hat diese Daten nicht.
|
|
28
|
+
*
|
|
29
|
+
* ── Die ehrliche Grenze ─────────────────────────────────────────────────────
|
|
30
|
+
*
|
|
31
|
+
* Der Index ist am Anfang leer. Eine Lektion, die noch nie gefunden wurde, hat
|
|
32
|
+
* keine Resonanz — und ausgerechnet die braeuchte sie am dringendsten. Das ist
|
|
33
|
+
* kein Fehler der Idee, sondern ihre Bauart: sie wird mit der Zeit besser und
|
|
34
|
+
* am ersten Tag gar nicht. Deshalb ist sie ein ZUSATZ und ersetzt keine Sicht.
|
|
35
|
+
*/
|
|
36
|
+
import type { Redis } from 'ioredis';
|
|
37
|
+
/** Schluessel-Vorsatz der Resonanzvektoren. */
|
|
38
|
+
export declare const RESONANZ_PRAEFIX = "cachly:lesson:res:";
|
|
39
|
+
/**
|
|
40
|
+
* Fuegt einen Fragevektor zur Resonanz einer Lektion.
|
|
41
|
+
*
|
|
42
|
+
* Die Ueberlagerung ist eine gleitende Summe mit Normierung: der neue Vektor
|
|
43
|
+
* zieht die Resonanz um `anteil` in seine Richtung. Ohne Normierung waeren
|
|
44
|
+
* haeufig gefundene Lektionen einfach laenger und wuerden jeden Kosinus
|
|
45
|
+
* gewinnen — die Naehe misst dann Beliebtheit statt Passung.
|
|
46
|
+
*
|
|
47
|
+
* `anteil` bewusst klein: eine einzelne Frage darf die Adresse einer Lektion
|
|
48
|
+
* nicht umschreiben. Zehn aehnliche Fragen sollen sie praegen, eine schraege
|
|
49
|
+
* nicht.
|
|
50
|
+
*
|
|
51
|
+
* @param bisher die bisherige Resonanz oder null
|
|
52
|
+
* @param frage der Fragevektor, der zu einem bestaetigten Treffer fuehrte
|
|
53
|
+
* @param anteil wie stark die neue Frage zieht
|
|
54
|
+
*/
|
|
55
|
+
export declare function ueberlagere(bisher: number[] | null, frage: number[], anteil?: number): number[];
|
|
56
|
+
/** Auf Laenge 1. Ein Nullvektor bleibt ein Nullvektor. */
|
|
57
|
+
export declare function normiere(v: number[]): number[];
|
|
58
|
+
/**
|
|
59
|
+
* Der Resonanzbestand — dieselbe Mechanik wie Vektorbestand, andere Sicht.
|
|
60
|
+
*
|
|
61
|
+
* Bewusst eine eigene kleine Klasse statt eines vierten Vektorbestand-Praefix:
|
|
62
|
+
* dieser Bestand wird auch GESCHRIEBEN (im Recall-Pfad, nach einem Treffer),
|
|
63
|
+
* und Schreiben gehoert nicht in eine Klasse, die sonst nur laedt.
|
|
64
|
+
*/
|
|
65
|
+
export declare class Resonanzbestand {
|
|
66
|
+
private readonly frischeMs;
|
|
67
|
+
private vektoren;
|
|
68
|
+
private geladen;
|
|
69
|
+
constructor(frischeMs?: number);
|
|
70
|
+
/** Die Naehe einer Frage zur Resonanz EINER Lektion. -2, wenn keine da ist. */
|
|
71
|
+
naehe(frage: number[], topic: string): number;
|
|
72
|
+
get groesse(): number;
|
|
73
|
+
/** Nur fuer Messungen: Resonanz ohne Speicher setzen. */
|
|
74
|
+
setzeDirekt(topic: string, v: number[]): void;
|
|
75
|
+
/** Laedt fehlende Resonanzvektoren nach. */
|
|
76
|
+
aktualisiere(redis: Redis, jetzt?: number): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Schreibt die neue Resonanz einer Lektion.
|
|
79
|
+
*
|
|
80
|
+
* Faengt jeden Fehler ab: eine Suche darf nie daran scheitern, dass sie sich
|
|
81
|
+
* nicht merken konnte, was sie gefunden hat. Der Aufrufer bekommt `false`
|
|
82
|
+
* und kann es melden.
|
|
83
|
+
*/
|
|
84
|
+
schreibe(redis: Redis, topic: string, frage: number[], anteil?: number): Promise<boolean>;
|
|
85
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resonanz — eine Lektion wird durch die Fragen adressiert, die zu ihr fuehrten.
|
|
3
|
+
*
|
|
4
|
+
* ── Das Vorbild ─────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* Das Hologramm speichert nicht das Bild, sondern das Interferenzmuster des
|
|
7
|
+
* Lichts, das es beleuchtet hat. Beleuchtet man es spaeter wieder, entsteht
|
|
8
|
+
* das Bild aus dem Muster — und jeder Splitter traegt das Ganze, nur unschaerfer.
|
|
9
|
+
*
|
|
10
|
+
* ── Das Problem, gegen das es antritt ───────────────────────────────────────
|
|
11
|
+
*
|
|
12
|
+
* Jeder Index in diesem Haus beschreibt, was eine Lektion SAGT: ihr Volltext,
|
|
13
|
+
* ihr Themenname. Gesucht wird aber mit dem, was jemand FRAGT — und die beiden
|
|
14
|
+
* Sprachen fallen auseinander. Gemessen am 21.08.2026: von 100 Fragen liegen
|
|
15
|
+
* 11 auf Platz 100+ der Bedeutungsrangfolge. Fuer die ist die richtige Lektion
|
|
16
|
+
* semantisch nicht "in der Naehe" — keine Vektorrechnung ueber ihren Text holt
|
|
17
|
+
* sie naeher heran.
|
|
18
|
+
*
|
|
19
|
+
* Diese Datei fuehrt deshalb eine dritte Sicht: je Lektion die laufende
|
|
20
|
+
* Ueberlagerung aller Fragevektoren, die nachweislich zu ihr gefuehrt haben.
|
|
21
|
+
* Der Vergleich laeuft dann Frage-gegen-Frage statt Frage-gegen-Text.
|
|
22
|
+
*
|
|
23
|
+
* ── Warum wir das koennen und andere nicht ──────────────────────────────────
|
|
24
|
+
*
|
|
25
|
+
* Es braucht die geschlossene Schleife: von der Frage ueber den Treffer bis zu
|
|
26
|
+
* der Bestaetigung, dass der Treffer richtig war. Ein Suchindex, der nur
|
|
27
|
+
* Dokumente kennt, hat diese Daten nicht.
|
|
28
|
+
*
|
|
29
|
+
* ── Die ehrliche Grenze ─────────────────────────────────────────────────────
|
|
30
|
+
*
|
|
31
|
+
* Der Index ist am Anfang leer. Eine Lektion, die noch nie gefunden wurde, hat
|
|
32
|
+
* keine Resonanz — und ausgerechnet die braeuchte sie am dringendsten. Das ist
|
|
33
|
+
* kein Fehler der Idee, sondern ihre Bauart: sie wird mit der Zeit besser und
|
|
34
|
+
* am ersten Tag gar nicht. Deshalb ist sie ein ZUSATZ und ersetzt keine Sicht.
|
|
35
|
+
*/
|
|
36
|
+
import { packe, entpacke, kosinus } from './bedeutung.js';
|
|
37
|
+
/** Schluessel-Vorsatz der Resonanzvektoren. */
|
|
38
|
+
export const RESONANZ_PRAEFIX = 'cachly:lesson:res:';
|
|
39
|
+
/**
|
|
40
|
+
* Fuegt einen Fragevektor zur Resonanz einer Lektion.
|
|
41
|
+
*
|
|
42
|
+
* Die Ueberlagerung ist eine gleitende Summe mit Normierung: der neue Vektor
|
|
43
|
+
* zieht die Resonanz um `anteil` in seine Richtung. Ohne Normierung waeren
|
|
44
|
+
* haeufig gefundene Lektionen einfach laenger und wuerden jeden Kosinus
|
|
45
|
+
* gewinnen — die Naehe misst dann Beliebtheit statt Passung.
|
|
46
|
+
*
|
|
47
|
+
* `anteil` bewusst klein: eine einzelne Frage darf die Adresse einer Lektion
|
|
48
|
+
* nicht umschreiben. Zehn aehnliche Fragen sollen sie praegen, eine schraege
|
|
49
|
+
* nicht.
|
|
50
|
+
*
|
|
51
|
+
* @param bisher die bisherige Resonanz oder null
|
|
52
|
+
* @param frage der Fragevektor, der zu einem bestaetigten Treffer fuehrte
|
|
53
|
+
* @param anteil wie stark die neue Frage zieht
|
|
54
|
+
*/
|
|
55
|
+
export function ueberlagere(bisher, frage, anteil = 0.3) {
|
|
56
|
+
if (!bisher || bisher.length !== frage.length)
|
|
57
|
+
return normiere(frage);
|
|
58
|
+
const neu = bisher.map((x, i) => (1 - anteil) * x + anteil * frage[i]);
|
|
59
|
+
return normiere(neu);
|
|
60
|
+
}
|
|
61
|
+
/** Auf Laenge 1. Ein Nullvektor bleibt ein Nullvektor. */
|
|
62
|
+
export function normiere(v) {
|
|
63
|
+
let q = 0;
|
|
64
|
+
for (const x of v)
|
|
65
|
+
q += x * x;
|
|
66
|
+
const l = Math.sqrt(q);
|
|
67
|
+
return l > 0 ? v.map((x) => x / l) : v;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Der Resonanzbestand — dieselbe Mechanik wie Vektorbestand, andere Sicht.
|
|
71
|
+
*
|
|
72
|
+
* Bewusst eine eigene kleine Klasse statt eines vierten Vektorbestand-Praefix:
|
|
73
|
+
* dieser Bestand wird auch GESCHRIEBEN (im Recall-Pfad, nach einem Treffer),
|
|
74
|
+
* und Schreiben gehoert nicht in eine Klasse, die sonst nur laedt.
|
|
75
|
+
*/
|
|
76
|
+
export class Resonanzbestand {
|
|
77
|
+
frischeMs;
|
|
78
|
+
vektoren = new Map();
|
|
79
|
+
geladen = 0;
|
|
80
|
+
constructor(frischeMs = 60_000) {
|
|
81
|
+
this.frischeMs = frischeMs;
|
|
82
|
+
}
|
|
83
|
+
/** Die Naehe einer Frage zur Resonanz EINER Lektion. -2, wenn keine da ist. */
|
|
84
|
+
naehe(frage, topic) {
|
|
85
|
+
const v = this.vektoren.get(topic);
|
|
86
|
+
return v ? kosinus(frage, v) : -2;
|
|
87
|
+
}
|
|
88
|
+
get groesse() { return this.vektoren.size; }
|
|
89
|
+
/** Nur fuer Messungen: Resonanz ohne Speicher setzen. */
|
|
90
|
+
setzeDirekt(topic, v) {
|
|
91
|
+
this.vektoren.set(topic, v);
|
|
92
|
+
}
|
|
93
|
+
/** Laedt fehlende Resonanzvektoren nach. */
|
|
94
|
+
async aktualisiere(redis, jetzt = Date.now()) {
|
|
95
|
+
if (this.vektoren.size > 0 && jetzt - this.geladen < this.frischeMs)
|
|
96
|
+
return;
|
|
97
|
+
const schluessel = [];
|
|
98
|
+
let cursor = '0';
|
|
99
|
+
do {
|
|
100
|
+
const [next, gefunden] = await redis.scan(cursor, 'MATCH', `${RESONANZ_PRAEFIX}*`, 'COUNT', 500);
|
|
101
|
+
cursor = next;
|
|
102
|
+
schluessel.push(...gefunden);
|
|
103
|
+
} while (cursor !== '0');
|
|
104
|
+
if (schluessel.length === 0) {
|
|
105
|
+
this.geladen = jetzt;
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const werte = await redis.mget(...schluessel);
|
|
109
|
+
const frisch = new Map();
|
|
110
|
+
for (const [i, s] of schluessel.entries()) {
|
|
111
|
+
const roh = werte[i];
|
|
112
|
+
if (!roh)
|
|
113
|
+
continue;
|
|
114
|
+
const v = entpacke(roh);
|
|
115
|
+
if (v)
|
|
116
|
+
frisch.set(s.slice(RESONANZ_PRAEFIX.length), v);
|
|
117
|
+
}
|
|
118
|
+
this.vektoren = frisch;
|
|
119
|
+
this.geladen = jetzt;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Schreibt die neue Resonanz einer Lektion.
|
|
123
|
+
*
|
|
124
|
+
* Faengt jeden Fehler ab: eine Suche darf nie daran scheitern, dass sie sich
|
|
125
|
+
* nicht merken konnte, was sie gefunden hat. Der Aufrufer bekommt `false`
|
|
126
|
+
* und kann es melden.
|
|
127
|
+
*/
|
|
128
|
+
async schreibe(redis, topic, frage, anteil = 0.3) {
|
|
129
|
+
try {
|
|
130
|
+
const neu = ueberlagere(this.vektoren.get(topic) ?? null, frage, anteil);
|
|
131
|
+
this.vektoren.set(topic, neu);
|
|
132
|
+
await redis.set(`${RESONANZ_PRAEFIX}${topic}`, packe(neu));
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=resonanz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resonanz.js","sourceRoot":"","sources":["../../src/resonanz.ts"],"names":[],"mappings":"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"}
|
package/dist/src/versuch.d.ts
CHANGED
|
@@ -44,6 +44,13 @@
|
|
|
44
44
|
* danach aus dem Text entfernt, bevor er den Nutzer erreicht.
|
|
45
45
|
*/
|
|
46
46
|
import type { Redis } from 'ioredis';
|
|
47
|
+
import { meldeUndVermerke } from './aussetzer.js';
|
|
48
|
+
/**
|
|
49
|
+
* So viel Speicher, wie ein Vermerk braucht. Bewusst strukturell getippt und
|
|
50
|
+
* nicht als Redis-Typ: dieses Modul soll ohne Redis-Abhaengigkeit pruefbar
|
|
51
|
+
* bleiben.
|
|
52
|
+
*/
|
|
53
|
+
type VermerkSpeicherArt = Parameters<typeof meldeUndVermerke>[0];
|
|
47
54
|
export declare const VERSUCH_ENV = "CACHLY_VERSUCH";
|
|
48
55
|
export declare const VERSUCH_SALZ_ENV = "CACHLY_VERSUCH_SALZ";
|
|
49
56
|
/** Grund fuer `meldeEinmal`: Versuch eingeschaltet, aber kein Salz gesetzt. */
|
|
@@ -57,7 +64,7 @@ export declare const OHNE_SALZ = "versuch-ohne-salz";
|
|
|
57
64
|
* `meldeEinmal`) und verhaelt sich danach wie der erste — still weiterlaufen
|
|
58
65
|
* waere die Fehlerklasse, gegen die `aussetzer.ts` gebaut wurde.
|
|
59
66
|
*/
|
|
60
|
-
export declare function versuchStart(): string | null;
|
|
67
|
+
export declare function versuchStart(speicher?: VermerkSpeicherArt | null): string | null;
|
|
61
68
|
/**
|
|
62
69
|
* Eine neue, stabile Kennung je Recall-Aufruf.
|
|
63
70
|
*
|
|
@@ -177,3 +184,4 @@ export interface VersuchProtokollTeil {
|
|
|
177
184
|
* forget) und gibt den bereinigten Text zurueck — den, den der Nutzer sieht.
|
|
178
185
|
*/
|
|
179
186
|
export declare function schliesseVersuchAb(redis: Redis, kennung: string, teil: VersuchProtokollTeil, fertigeAntwort: string): string;
|
|
187
|
+
export {};
|
package/dist/src/versuch.js
CHANGED
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
* danach aus dem Text entfernt, bevor er den Nutzer erreicht.
|
|
45
45
|
*/
|
|
46
46
|
import { randomBytes, createHash } from 'node:crypto';
|
|
47
|
-
import { meldeEinmal } from './aussetzer.js';
|
|
47
|
+
import { meldeEinmal, meldeUndVermerke, VERSUCH_LEER } from './aussetzer.js';
|
|
48
48
|
// ── Der Schalter ─────────────────────────────────────────────────────────────
|
|
49
49
|
export const VERSUCH_ENV = 'CACHLY_VERSUCH';
|
|
50
50
|
export const VERSUCH_SALZ_ENV = 'CACHLY_VERSUCH_SALZ';
|
|
@@ -59,12 +59,26 @@ export const OHNE_SALZ = 'versuch-ohne-salz';
|
|
|
59
59
|
* `meldeEinmal`) und verhaelt sich danach wie der erste — still weiterlaufen
|
|
60
60
|
* waere die Fehlerklasse, gegen die `aussetzer.ts` gebaut wurde.
|
|
61
61
|
*/
|
|
62
|
-
export function versuchStart() {
|
|
62
|
+
export function versuchStart(speicher) {
|
|
63
63
|
if (process.env[VERSUCH_ENV] !== 'an')
|
|
64
64
|
return null;
|
|
65
65
|
const salz = process.env[VERSUCH_SALZ_ENV];
|
|
66
66
|
if (!salz) {
|
|
67
|
-
|
|
67
|
+
const text = `${VERSUCH_ENV}=an, aber ${VERSUCH_SALZ_ENV} fehlt — der Versuch verhaelt sich wie "aus"`;
|
|
68
|
+
if (speicher) {
|
|
69
|
+
// Ohne Speicher stand die Meldung nur im Arbeitsspeicher und war nach
|
|
70
|
+
// jedem Deploy weg (Karte opupbt3l9wcq, gefunden von der Gegenrede,
|
|
71
|
+
// Rolle: Der Betreiber). Der Versuch konnte damit WOCHENLANG leer
|
|
72
|
+
// laufen: "keine Daten" sah genauso aus wie "noch nicht genug Daten".
|
|
73
|
+
//
|
|
74
|
+
// meldeUndVermerke faengt jeden eigenen Fehler ab und gibt eine
|
|
75
|
+
// Zusage zurueck, die niemand einloesen muss — deshalb `void`. Diese
|
|
76
|
+
// Funktion bleibt synchron, weil ihre Aufrufer es sind.
|
|
77
|
+
void meldeUndVermerke(speicher, VERSUCH_LEER, text);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
meldeEinmal(OHNE_SALZ, text);
|
|
81
|
+
}
|
|
68
82
|
return null;
|
|
69
83
|
}
|
|
70
84
|
return salz;
|
package/dist/src/versuch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versuch.js","sourceRoot":"","sources":["../../src/versuch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"versuch.js","sourceRoot":"","sources":["../../src/versuch.ts"],"names":[],"mappings":"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"}
|