@misterscan/sesi 1.1.2 → 1.2.1
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/README.md +29 -8
- package/bin/sesi.js +35 -34
- package/dist/ai-runtime.d.ts +5 -0
- package/dist/ai-runtime.d.ts.map +1 -1
- package/dist/ai-runtime.js +157 -7
- package/dist/ai-runtime.js.map +1 -1
- package/dist/builtins.d.ts +1 -1
- package/dist/builtins.d.ts.map +1 -1
- package/dist/builtins.js +114 -1
- package/dist/builtins.js.map +1 -1
- package/dist/interpreter.d.ts +6 -1
- package/dist/interpreter.d.ts.map +1 -1
- package/dist/interpreter.js +210 -36
- package/dist/interpreter.js.map +1 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +2 -0
- package/dist/parser.js.map +1 -1
- package/dist/sesi.bundled.js +1029 -489
- package/dist/types.d.ts +9 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/docs/ARCHITECTURE.md +9 -9
- package/docs/BUILTINS.md +87 -8
- package/docs/DISTRIBUTED_SYSTEMS.md +1 -1
- package/docs/IMAGE_GENERATION.md +82 -1
- package/docs/IMPLEMENTATION_SUMMARY.md +544 -533
- package/docs/QUICKSTART.md +41 -1
- package/docs/README.md +20 -14
- package/docs/ROADMAP.md +10 -11
- package/docs/SPECIFICATION.md +37 -14
- package/docs/SYSTEMS_REASONING.md +35 -11
- package/docs/bakery_logo.png +0 -0
- package/docs/coffee_mug.png +0 -0
- package/docs/desk_lamp.png +0 -0
- package/docs/favicon.ico +0 -0
- package/docs/logo.png +0 -0
- package/docs/notebook.png +0 -0
- package/docs/sesi_ai_chronicles.md +209 -0
- package/examples/16_modules.sesi +28 -0
- package/examples/17_http_client.sesi +29 -0
- package/examples/18_parallel_requests.sesi +37 -0
- package/main/chatbot.sesi +36 -0
- package/main/conversational_classifier_weights.json +45 -0
- package/main/conversational_sentences.json +304 -0
- package/main/epochs.sesi +94 -0
- package/main/gpu_orchestrator.sesi +36 -0
- package/main/hardware_diagnostics.sesi +118 -0
- package/main/inference.sesi +54 -0
- package/main/native_chatbot.sesi +180 -0
- package/main/native_synthesizer.sesi +83 -0
- package/main/nn_personas_trainer.sesi +302 -0
- package/main/nn_responses_trainer.sesi +269 -0
- package/main/nn_sentences_trainer.sesi +330 -0
- package/main/personas.json +124 -0
- package/main/personas_classifier_weights.json +45 -0
- package/main/playground.sesi +3 -1
- package/main/predictive_typing.sesi +127 -0
- package/main/query_brain.sesi +45 -0
- package/main/response_classifier_weights.json +45 -0
- package/main/retro_chat.html +239 -0
- package/main/retro_chat_generator.sesi +745 -0
- package/main/sesi_ai.sesi +158 -0
- package/main/sesi_db_chatbot.sesi +252 -0
- package/main/terminal.log +56 -0
- package/main/terminal_chat.py +385 -0
- package/main/tests/temp_math_mod.sesi +3 -0
- package/main/tests/test_image_input.sesi +40 -0
- package/main/tests/test_v2_features.sesi +48 -0
- package/main/unified_sesi_ai.sesi +334 -0
- package/main/varied_responses.json +304 -0
- package/package.json +27 -15
- package/main/atm_deposit.sesi +0 -37
- package/main/atm_withdraw.sesi +0 -37
- package/main/data.txt +0 -1
- package/main/math_aggregator.sesi +0 -15
- package/main/math_generator.sesi +0 -7
- package/main/math_processor.sesi +0 -23
- package/main/tax_calculator.sesi +0 -15
- package/main/vault.sesi +0 -15
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
// Sesi Script: native_chatbot.sesi
|
|
2
|
+
// 100% NATIVE DATA-TRAINED DEVELOEPR CO-PILOT CHATBOT!
|
|
3
|
+
// Trained entirely inside Sesi on 14 keywords across 6 distinct functional categories!
|
|
4
|
+
|
|
5
|
+
// ==================================================
|
|
6
|
+
// 💬 1. CHOOSE YOUR ADVANCED TECHNICAL QUERY HERE!
|
|
7
|
+
// (Test it with custom phrases containing our keywords!)
|
|
8
|
+
let queryText = "create an svg"
|
|
9
|
+
// ==================================================
|
|
10
|
+
|
|
11
|
+
print "=================================================="
|
|
12
|
+
print "🧠 WELCOME TO THE NATIVE-TRAINED SESI DEVELOEPR CO-PILOT!"
|
|
13
|
+
print "=================================================="
|
|
14
|
+
print "⚙️ Vectorizing training vocabulary..."
|
|
15
|
+
|
|
16
|
+
// Sigmoid math
|
|
17
|
+
fn activate(x) {
|
|
18
|
+
return 1.0 / (1.0 + exp(0.0 - x))
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
fn derivative(y) {
|
|
22
|
+
return y * (1.0 - y)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// 2. Advanced Bag-of-Words Vectorizer (14 keywords)
|
|
26
|
+
fn vectorize(text) {
|
|
27
|
+
let words = split(text, " ")
|
|
28
|
+
let vec = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
|
29
|
+
|
|
30
|
+
let w = 0
|
|
31
|
+
while w < len(words) {
|
|
32
|
+
let word = words[w]
|
|
33
|
+
if word == "print" { vec[0] = 1.0 }
|
|
34
|
+
if word == "str" { vec[1] = 1.0 }
|
|
35
|
+
if word == "type" { vec[2] = 1.0 }
|
|
36
|
+
if word == "num" { vec[3] = 1.0 }
|
|
37
|
+
if word == "bool" { vec[4] = 1.0 }
|
|
38
|
+
if word == "json" { vec[5] = 1.0 }
|
|
39
|
+
if word == "convert" { vec[6] = 1.0 }
|
|
40
|
+
if word == "array" { vec[7] = 1.0 }
|
|
41
|
+
if word == "len" { vec[8] = 1.0 }
|
|
42
|
+
if word == "file" { vec[9] = 1.0 }
|
|
43
|
+
if word == "write" { vec[10] = 1.0 }
|
|
44
|
+
if word == "dir" { vec[11] = 1.0 }
|
|
45
|
+
if word == "exp" { vec[12] = 1.0 }
|
|
46
|
+
if word == "random" { vec[13] = 1.0 }
|
|
47
|
+
w = w + 1
|
|
48
|
+
}
|
|
49
|
+
return vec
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Helper to calculate neuron forward dot product
|
|
53
|
+
fn compute_output(x, w, b) {
|
|
54
|
+
let sum = 0.0
|
|
55
|
+
let i = 0
|
|
56
|
+
while i < 14 {
|
|
57
|
+
sum = sum + (x[i] * w[i])
|
|
58
|
+
i = i + 1
|
|
59
|
+
}
|
|
60
|
+
return activate(sum + b)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// 3. Setup Comprehensive Labeled Dataset (6 classes, declared strictly on single continuous lines)
|
|
64
|
+
let inputs = [vectorize("how to print str logging output"), vectorize("type check and num bool conversion"), vectorize("convert objects to json format"), vectorize("array length len split push pop keys"), vectorize("file write list dir read image"), vectorize("math exp random synaptic calculations")]
|
|
65
|
+
|
|
66
|
+
let targets = [[1.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 1.0]]
|
|
67
|
+
|
|
68
|
+
// 4. Initialize synaptic weights and biases for the 6 output units
|
|
69
|
+
let w0 = [0.1, 0.2, -0.1, 0.3, -0.2, 0.1, -0.1, 0.2, -0.1, 0.1, -0.2, 0.1, -0.3, 0.2]
|
|
70
|
+
let w1 = [-0.1, 0.1, 0.3, 0.2, 0.1, -0.2, 0.1, -0.3, 0.2, -0.1, 0.1, -0.2, 0.1, -0.1]
|
|
71
|
+
let w2 = [0.2, -0.2, 0.1, -0.1, 0.2, 0.3, 0.3, 0.1, -0.2, 0.2, -0.1, 0.1, -0.2, 0.1]
|
|
72
|
+
let w3 = [-0.1, 0.1, -0.2, 0.1, -0.1, 0.2, -0.1, 0.3, 0.3, -0.2, 0.1, -0.1, 0.2, -0.2]
|
|
73
|
+
let w4 = [0.1, -0.1, 0.2, -0.2, 0.1, -0.1, 0.2, -0.1, 0.2, 0.4, 0.4, 0.3, -0.1, 0.1]
|
|
74
|
+
let w5 = [-0.2, 0.2, -0.1, 0.1, -0.2, 0.1, -0.2, 0.1, -0.2, 0.1, -0.2, 0.1, 0.4, 0.4]
|
|
75
|
+
|
|
76
|
+
let b0 = -0.1
|
|
77
|
+
let b1 = 0.1
|
|
78
|
+
let b2 = -0.2
|
|
79
|
+
let b3 = 0.2
|
|
80
|
+
let b4 = -0.1
|
|
81
|
+
let b5 = 0.0
|
|
82
|
+
|
|
83
|
+
print "🧠 Training 14x6 multi-class Sesi neural synapses..."
|
|
84
|
+
|
|
85
|
+
// 5. Run native single-layer gradient descent training loop (2,000 epochs)
|
|
86
|
+
let lr = 0.4
|
|
87
|
+
let epoch = 1
|
|
88
|
+
while epoch <= 2000 {
|
|
89
|
+
let c = 0
|
|
90
|
+
while c < 6 {
|
|
91
|
+
let x = inputs[c]
|
|
92
|
+
let t = targets[c]
|
|
93
|
+
|
|
94
|
+
// Forward Propagation
|
|
95
|
+
let o0 = compute_output(x, w0, b0)
|
|
96
|
+
let o1 = compute_output(x, w1, b1)
|
|
97
|
+
let o2 = compute_output(x, w2, b2)
|
|
98
|
+
let o3 = compute_output(x, w3, b3)
|
|
99
|
+
let o4 = compute_output(x, w4, b4)
|
|
100
|
+
let o5 = compute_output(x, w5, b5)
|
|
101
|
+
|
|
102
|
+
// Backpropagation deltas
|
|
103
|
+
let delta0 = (t[0] - o0) * derivative(o0)
|
|
104
|
+
let delta1 = (t[1] - o1) * derivative(o1)
|
|
105
|
+
let delta2 = (t[2] - o2) * derivative(o2)
|
|
106
|
+
let delta3 = (t[3] - o3) * derivative(o3)
|
|
107
|
+
let delta4 = (t[4] - o4) * derivative(o4)
|
|
108
|
+
let delta5 = (t[5] - o5) * derivative(o5)
|
|
109
|
+
|
|
110
|
+
// Synaptic Weight Updates
|
|
111
|
+
let k = 0
|
|
112
|
+
while k < 14 {
|
|
113
|
+
w0[k] = w0[k] + (lr * delta0 * x[k])
|
|
114
|
+
w1[k] = w1[k] + (lr * delta1 * x[k])
|
|
115
|
+
w2[k] = w2[k] + (lr * delta2 * x[k])
|
|
116
|
+
w3[k] = w3[k] + (lr * delta3 * x[k])
|
|
117
|
+
w4[k] = w4[k] + (lr * delta4 * x[k])
|
|
118
|
+
w5[k] = w5[k] + (lr * delta5 * x[k])
|
|
119
|
+
k = k + 1
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
b0 = b0 + (lr * delta0)
|
|
123
|
+
b1 = b1 + (lr * delta1)
|
|
124
|
+
b2 = b2 + (lr * delta2)
|
|
125
|
+
b3 = b3 + (lr * delta3)
|
|
126
|
+
b4 = b4 + (lr * delta4)
|
|
127
|
+
b5 = b5 + (lr * delta5)
|
|
128
|
+
|
|
129
|
+
c = c + 1
|
|
130
|
+
}
|
|
131
|
+
epoch = epoch + 1
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
print "🎯 Synaptic parameters optimized! Brain ready."
|
|
135
|
+
print "--------------------------------------------------"
|
|
136
|
+
|
|
137
|
+
// 6. Comprehensive Technical Reference Database (Declared strictly on single continuous lines to satisfy Sesi parser!)
|
|
138
|
+
let responses = ["📖 SESI MANUAL: I/O & CONSOLE LOGGING\n 🎯 Function: print(...args) -> null\n - Prints multiple values to stdout separated by spaces.\n - Example: print \"Value:\", 42\n 🎯 Function: str(value) -> string\n - Convers any primitive, array, or object into a clean string representation.\n - Example: let s = str([1, 2])", "📖 SESI MANUAL: TYPE CHECKING & CASTING\n 🎯 Function: type(value) -> string\n - Returns native Sesi types: 'number', 'string', 'bool', 'null', 'array', 'object'.\n 🎯 Function: num(value) -> number / bool(value) -> bool\n - Converts values to numbers or booleans using strict truthiness rules.\n - Example: num(\"3.14\") -> 3.14 / bool(0) -> false", "📖 SESI MANUAL: JSON UTILITIES\n 🎯 Function: to_json(value) -> string\n - Serializes an array or object into a formatted JSON string.\n 🎯 Function: from_json(string) -> any\n - Parses valid JSON strings back into native Sesi arrays and objects.\n - Example: let obj = from_json(\"{\\\"a\\\": 1}\")\n - Note: Critical for offline parameters loading!", "📖 SESI MANUAL: ARRAYS & COLLECTIONS\n 🎯 Function: len(col) -> number / range(n) -> array\n - len() returns collection size. range(n) creates a sequence from 0 to n-1.\n 🎯 Function: push(arr, v) -> pop(arr) -> any\n - Adds/removes elements in-place.\n 🎯 Function: join(arr, sep) / split(str, sep)\n - Joins array elements or splits strings into array components.", "📖 SESI MANUAL: FILE SYSTEM OPERATIONS\n 🎯 Function: read_file(path) / write_file(path, text)\n - Reads or writes text files relative to the workspace directory.\n 🎯 Function: write_image(path, base64_content) -> bool\n - Writes base64 strings directly as binary image files (e.g. logos).\n 🎯 Function: list_dir(path) / make_dir(path)\n - Lists directory items or recursively creates new directories.", "📖 SESI MANUAL: MATH & DEEP LEARNING\n 🎯 Function: exp(x) -> number\n - Computes high-speed exponential function Math.exp(x).\n - Fundamental for native neural networks: Sigmoid = 1.0 / (1.0 + exp(-x))\n 🎯 Function: random() -> number\n - Returns a pseudo-random decimal float between 0.0 and 1.0.\n - Essential for seed randomization and breaking saddle points!"]
|
|
139
|
+
|
|
140
|
+
// 7. Query User String!
|
|
141
|
+
print "📥 User Query Input: \"" + queryText + "\""
|
|
142
|
+
let query_vec = vectorize(queryText)
|
|
143
|
+
print "📊 Vectorized Input: " + str(query_vec)
|
|
144
|
+
print "--------------------------------------------------"
|
|
145
|
+
|
|
146
|
+
// Forward propagation on user query
|
|
147
|
+
let q_o0 = compute_output(query_vec, w0, b0)
|
|
148
|
+
let q_o1 = compute_output(query_vec, w1, b1)
|
|
149
|
+
let q_o2 = compute_output(query_vec, w2, b2)
|
|
150
|
+
let q_o3 = compute_output(query_vec, w3, b3)
|
|
151
|
+
let q_o4 = compute_output(query_vec, w4, b4)
|
|
152
|
+
let q_o5 = compute_output(query_vec, w5, b5)
|
|
153
|
+
|
|
154
|
+
let outputs = [q_o0, q_o1, q_o2, q_o3, q_o4, q_o5]
|
|
155
|
+
print "🧠 Neural Activation Scores: " + str(outputs)
|
|
156
|
+
|
|
157
|
+
// Determine class index with highest score
|
|
158
|
+
let best_class = 0
|
|
159
|
+
let max_score = -1.0
|
|
160
|
+
let j = 0
|
|
161
|
+
while j < 6 {
|
|
162
|
+
if outputs[j] > max_score {
|
|
163
|
+
max_score = outputs[j]
|
|
164
|
+
best_class = j
|
|
165
|
+
}
|
|
166
|
+
j = j + 1
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
print "--------------------------------------------------"
|
|
170
|
+
print "🤖 SESI CO-PILOT RESPONDING:"
|
|
171
|
+
print "--------------------------------------------------"
|
|
172
|
+
if max_score < 0.40 {
|
|
173
|
+
print "🤔 Sesi's native synapses evaluated this query with low confidence: " + str(max_score)
|
|
174
|
+
print " It seems your question does not contain any Sesi keywords in our vocabulary!"
|
|
175
|
+
print " Please try asking about: 'print', 'str', 'files', 'json', 'exp', or 'random'!"
|
|
176
|
+
} else {
|
|
177
|
+
print responses[best_class]
|
|
178
|
+
print "📐 Neural Classification Confidence: " + str(max_score)
|
|
179
|
+
}
|
|
180
|
+
print "=================================================="
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// Sesi Script: native_synthesizer.sesi
|
|
2
|
+
// 100% NATIVE OFFLINE MARKOV TEXT SYNTHESIZER!
|
|
3
|
+
// Generatively types Sesi code syntax word-by-word completely offline with zero API calls!
|
|
4
|
+
|
|
5
|
+
// ==================================================
|
|
6
|
+
// 💬 1. DEFINE YOUR INSPIRATIONAL TRAINING CORPUS!
|
|
7
|
+
// ==================================================
|
|
8
|
+
let corpus = "let value = 42 print value let raw = to_json(value) let obj = from_json(raw) print obj if value > 10 print value while value < 100 let value = value + 1 print value read_file(path) write_file(path, text) write_image(path, data) list_dir(path) make_dir(path) exp(x) random()"
|
|
9
|
+
|
|
10
|
+
print "=================================================="
|
|
11
|
+
print "📻 BLUE NOTE SYNTHESIZER: NATIVE TEXT GENERATION"
|
|
12
|
+
print "=================================================="
|
|
13
|
+
print "⚙️ Analyzing corpus structure..."
|
|
14
|
+
|
|
15
|
+
// Native Floor function (Genius string-splitting floor logic!)
|
|
16
|
+
fn floor(x) {
|
|
17
|
+
let s = str(x)
|
|
18
|
+
let parts = split(s, ".")
|
|
19
|
+
return num(parts[0])
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// 2. Tokenize corpus
|
|
23
|
+
let words = split(corpus, " ")
|
|
24
|
+
let num_words = len(words)
|
|
25
|
+
print "📊 Compiled " + str(num_words) + " corpus tokens!"
|
|
26
|
+
|
|
27
|
+
// 3. Compile Markov Transition Table (Word-to-Word transition dictionary)
|
|
28
|
+
let transitions = {}
|
|
29
|
+
|
|
30
|
+
let i = 0
|
|
31
|
+
while i < (num_words - 1) {
|
|
32
|
+
let w1 = words[i]
|
|
33
|
+
let w2 = words[i + 1]
|
|
34
|
+
|
|
35
|
+
let key_exists = type(transitions[w1]) == "array"
|
|
36
|
+
if key_exists == false {
|
|
37
|
+
// Declared strictly on one line to satisfy Sesi parser
|
|
38
|
+
transitions[w1] = []
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
let list = transitions[w1]
|
|
42
|
+
push(list, w2)
|
|
43
|
+
|
|
44
|
+
i = i + 1
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
print "🎯 State transition probabilities calculated!"
|
|
48
|
+
print "--------------------------------------------------"
|
|
49
|
+
|
|
50
|
+
// 4. Generate synthetic Sesi code sentences!
|
|
51
|
+
let current_word = "let" // Start word
|
|
52
|
+
let generated = current_word
|
|
53
|
+
let gen_steps = 1
|
|
54
|
+
let max_steps = 25 // Length of synthesized text
|
|
55
|
+
|
|
56
|
+
while gen_steps < max_steps {
|
|
57
|
+
let choices = transitions[current_word]
|
|
58
|
+
let has_choices = type(choices) == "array"
|
|
59
|
+
|
|
60
|
+
if has_choices == false {
|
|
61
|
+
// If we hit a dead end, wrap back to starting word
|
|
62
|
+
current_word = "let"
|
|
63
|
+
} else {
|
|
64
|
+
let num_choices = len(choices)
|
|
65
|
+
if num_choices == 0 {
|
|
66
|
+
current_word = "let"
|
|
67
|
+
} else {
|
|
68
|
+
// Pick a mathematically safe random index
|
|
69
|
+
let rand_idx = floor(random() * num_choices)
|
|
70
|
+
let next_word = choices[rand_idx]
|
|
71
|
+
|
|
72
|
+
generated = generated + " " + next_word
|
|
73
|
+
current_word = next_word
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
gen_steps = gen_steps + 1
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
print "🤖 GENERATED NATIVE SESI SYNTHESIS:"
|
|
81
|
+
print "--------------------------------------------------"
|
|
82
|
+
print generated
|
|
83
|
+
print "=================================================="
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
// Sesi Script: nn_personas_trainer.sesi
|
|
2
|
+
// 🧠 NATIVE NEURAL NETWORK PERSONA & DIALOGUE CLASSIFIER
|
|
3
|
+
// Trains a 10x3 synapse network on 300 sentences from main/conversational_sentences.json,
|
|
4
|
+
// then zero-shot evaluates and classifies the bios of all 20 personas in main/personas.json!
|
|
5
|
+
|
|
6
|
+
print "=================================================="
|
|
7
|
+
print "🧠 INITIATING Sesi NEURAL PERSONA & DIALOGUE TRAINER"
|
|
8
|
+
print "=================================================="
|
|
9
|
+
|
|
10
|
+
// Custom integer floor function
|
|
11
|
+
fn floor(x) {
|
|
12
|
+
let s = str(x)
|
|
13
|
+
let parts = split(s, ".")
|
|
14
|
+
return num(parts[0])
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Fast Sigmoid (Softsign) activation
|
|
18
|
+
fn activate(x) {
|
|
19
|
+
let absX = x
|
|
20
|
+
if x < 0.0 {
|
|
21
|
+
absX = 0.0 - x
|
|
22
|
+
}
|
|
23
|
+
return 0.5 + (0.5 * (x / (1.0 + absX)))
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
fn activate_derivative(y) {
|
|
27
|
+
return y * (1.0 - y)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// 1. Define 10-keyword Vocabulary for Bag-of-Words vectors
|
|
31
|
+
let vocab = ["synthesizer", "vinyl", "record", "wood", "gears", "clock", "compiler", "framework", "memory", "offline"]
|
|
32
|
+
print "📚 Vocabulary Features: " + str(vocab)
|
|
33
|
+
|
|
34
|
+
// 2. Load 300 conversational sentences
|
|
35
|
+
print "📂 Loading main/conversational_sentences.json dataset..."
|
|
36
|
+
let raw_conversations = read_file("main/conversational_sentences.json")
|
|
37
|
+
let parsed_conv = from_json(raw_conversations)
|
|
38
|
+
let sentences = parsed_conv["sentences"]
|
|
39
|
+
let num_sentences = len(sentences)
|
|
40
|
+
print "📊 Ingested " + str(num_sentences) + " sentences."
|
|
41
|
+
|
|
42
|
+
// 3. Compile inputs and targets natively in Sesi
|
|
43
|
+
print "🧹 Processing text sentences into Bag-of-Words feature matrices..."
|
|
44
|
+
let inputs = []
|
|
45
|
+
let targets = []
|
|
46
|
+
|
|
47
|
+
let s_idx = 0
|
|
48
|
+
while s_idx < num_sentences {
|
|
49
|
+
let sentence = sentences[s_idx]
|
|
50
|
+
let words = split(sentence, " ")
|
|
51
|
+
let w_len = len(words)
|
|
52
|
+
|
|
53
|
+
// 10-dimensional input vector
|
|
54
|
+
let x = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
|
55
|
+
|
|
56
|
+
let has_audio = false
|
|
57
|
+
let has_mech = false
|
|
58
|
+
let has_sys = false
|
|
59
|
+
|
|
60
|
+
let v_idx = 0
|
|
61
|
+
while v_idx < 10 {
|
|
62
|
+
let keyword = vocab[v_idx]
|
|
63
|
+
let found = 0.0
|
|
64
|
+
|
|
65
|
+
let w = 0
|
|
66
|
+
while w < w_len {
|
|
67
|
+
let raw_word = words[w]
|
|
68
|
+
let word = raw_word
|
|
69
|
+
let w_char_len = len(word)
|
|
70
|
+
|
|
71
|
+
if w_char_len > 1 {
|
|
72
|
+
let last_char = word[w_char_len - 1]
|
|
73
|
+
if last_char == "." { word = split(word, ".")[0] }
|
|
74
|
+
if last_char == "!" { word = split(word, "!")[0] }
|
|
75
|
+
if last_char == "?" { word = split(word, "?")[0] }
|
|
76
|
+
if last_char == "," { word = split(word, ",")[0] }
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if word == keyword {
|
|
80
|
+
found = 1.0
|
|
81
|
+
if v_idx < 3 { has_audio = true }
|
|
82
|
+
if v_idx >= 3 {
|
|
83
|
+
if v_idx < 6 { has_mech = true }
|
|
84
|
+
}
|
|
85
|
+
if v_idx >= 6 { has_sys = true }
|
|
86
|
+
}
|
|
87
|
+
w = w + 1
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
x[v_idx] = found
|
|
91
|
+
v_idx = v_idx + 1
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
push(inputs, x)
|
|
95
|
+
|
|
96
|
+
// Classify target label dynamically based on keywords or original indices
|
|
97
|
+
let t = [0.0, 0.0, 0.0]
|
|
98
|
+
if has_audio {
|
|
99
|
+
t[0] = 1.0
|
|
100
|
+
} else {
|
|
101
|
+
if has_mech {
|
|
102
|
+
t[1] = 1.0
|
|
103
|
+
} else {
|
|
104
|
+
if has_sys {
|
|
105
|
+
t[2] = 1.0
|
|
106
|
+
} else {
|
|
107
|
+
// Fallback default balanced targets using index slices
|
|
108
|
+
if s_idx < 100 { t[0] = 1.0 } // Audio
|
|
109
|
+
if s_idx >= 100 {
|
|
110
|
+
if s_idx < 200 { t[1] = 1.0 } // Mechanical
|
|
111
|
+
}
|
|
112
|
+
if s_idx >= 200 { t[2] = 1.0 } // Systems
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
push(targets, t)
|
|
117
|
+
|
|
118
|
+
s_idx = s_idx + 1
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
print "✅ Dataset vectorization complete!"
|
|
122
|
+
print "--------------------------------------------------"
|
|
123
|
+
|
|
124
|
+
// 4. Initialize 10x3 Synapse Matrix
|
|
125
|
+
print "🎲 Initializing 10x3 random neural synapses..."
|
|
126
|
+
let weights = []
|
|
127
|
+
let biases = []
|
|
128
|
+
|
|
129
|
+
let c = 0
|
|
130
|
+
while c < 3 {
|
|
131
|
+
let w_row = []
|
|
132
|
+
let k = 0
|
|
133
|
+
while k < 10 {
|
|
134
|
+
let w_val = random() - 0.5
|
|
135
|
+
push(w_row, w_val)
|
|
136
|
+
k = k + 1
|
|
137
|
+
}
|
|
138
|
+
push(weights, w_row)
|
|
139
|
+
push(biases, 0.0)
|
|
140
|
+
c = c + 1
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// 5. Backpropagation Epoch Training Loop
|
|
144
|
+
let lr = 0.3
|
|
145
|
+
let max_epochs = 1500
|
|
146
|
+
print "🚀 Training synapses across " + str(max_epochs) + " epochs (lr = " + str(lr) + ")..."
|
|
147
|
+
|
|
148
|
+
let epoch = 1
|
|
149
|
+
while epoch <= max_epochs {
|
|
150
|
+
let total_loss = 0.0
|
|
151
|
+
let sample_idx = 0
|
|
152
|
+
|
|
153
|
+
while sample_idx < num_sentences {
|
|
154
|
+
let x = inputs[sample_idx]
|
|
155
|
+
let t = targets[sample_idx]
|
|
156
|
+
|
|
157
|
+
// Outputs container
|
|
158
|
+
let outputs = [0.0, 0.0, 0.0]
|
|
159
|
+
let deltas = [0.0, 0.0, 0.0]
|
|
160
|
+
|
|
161
|
+
// Forward Pass
|
|
162
|
+
let c_idx = 0
|
|
163
|
+
while c_idx < 3 {
|
|
164
|
+
let sum = 0.0
|
|
165
|
+
let w_row = weights[c_idx]
|
|
166
|
+
let k = 0
|
|
167
|
+
while k < 10 {
|
|
168
|
+
sum = sum + (x[k] * w_row[k])
|
|
169
|
+
k = k + 1
|
|
170
|
+
}
|
|
171
|
+
let o = activate(sum + biases[c_idx])
|
|
172
|
+
outputs[c_idx] = o
|
|
173
|
+
|
|
174
|
+
// Calculate Loss and Delta
|
|
175
|
+
let err = t[c_idx] - o
|
|
176
|
+
total_loss = total_loss + (err * err)
|
|
177
|
+
deltas[c_idx] = err * activate_derivative(o)
|
|
178
|
+
|
|
179
|
+
c_idx = c_idx + 1
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Backpropagation Gradient Weight Updates
|
|
183
|
+
c_idx = 0
|
|
184
|
+
while c_idx < 3 {
|
|
185
|
+
let w_row = weights[c_idx]
|
|
186
|
+
let delta = deltas[c_idx]
|
|
187
|
+
let k = 0
|
|
188
|
+
while k < 10 {
|
|
189
|
+
w_row[k] = w_row[k] + (lr * delta * x[k])
|
|
190
|
+
k = k + 1
|
|
191
|
+
}
|
|
192
|
+
biases[c_idx] = biases[c_idx] + (lr * delta)
|
|
193
|
+
c_idx = c_idx + 1
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
sample_idx = sample_idx + 1
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
let avg_loss = total_loss / (num_sentences * 3.0)
|
|
200
|
+
|
|
201
|
+
if (epoch % 300) == 0 {
|
|
202
|
+
print "Epoch " + str(epoch) + " - Average Class Loss: " + str(avg_loss)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
epoch = epoch + 1
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
print "--------------------------------------------------"
|
|
209
|
+
print "🎉 Synapse Epoch Training Complete!"
|
|
210
|
+
print "--------------------------------------------------"
|
|
211
|
+
|
|
212
|
+
// 6. Save calibrated synapses to JSON
|
|
213
|
+
let saved_weights = {}
|
|
214
|
+
saved_weights["weights"] = weights
|
|
215
|
+
saved_weights["biases"] = biases
|
|
216
|
+
write_file("main/conversational_classifier_weights.json", to_json(saved_weights))
|
|
217
|
+
print "💾 Saved trained synapses to main/conversational_classifier_weights.json"
|
|
218
|
+
print "--------------------------------------------------"
|
|
219
|
+
|
|
220
|
+
// Helper to run forward pass inference on a block of text
|
|
221
|
+
fn predict(bio_text) {
|
|
222
|
+
let words = split(bio_text, " ")
|
|
223
|
+
let w_len = len(words)
|
|
224
|
+
let x = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
|
225
|
+
|
|
226
|
+
let v_idx = 0
|
|
227
|
+
while v_idx < 10 {
|
|
228
|
+
let keyword = vocab[v_idx]
|
|
229
|
+
let found = 0.0
|
|
230
|
+
let w = 0
|
|
231
|
+
while w < w_len {
|
|
232
|
+
let raw_word = words[w]
|
|
233
|
+
let word = raw_word
|
|
234
|
+
let w_char_len = len(word)
|
|
235
|
+
if w_char_len > 1 {
|
|
236
|
+
let last_char = word[w_char_len - 1]
|
|
237
|
+
if last_char == "." { word = split(word, ".")[0] }
|
|
238
|
+
if last_char == "!" { word = split(word, "!")[0] }
|
|
239
|
+
if last_char == "," { word = split(word, ",")[0] }
|
|
240
|
+
}
|
|
241
|
+
if word == keyword {
|
|
242
|
+
found = 1.0
|
|
243
|
+
}
|
|
244
|
+
w = w + 1
|
|
245
|
+
}
|
|
246
|
+
x[v_idx] = found
|
|
247
|
+
v_idx = v_idx + 1
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Forward pass
|
|
251
|
+
let predictions = [0.0, 0.0, 0.0]
|
|
252
|
+
let c_idx = 0
|
|
253
|
+
while c_idx < 3 {
|
|
254
|
+
let sum = 0.0
|
|
255
|
+
let w_row = weights[c_idx]
|
|
256
|
+
let k = 0
|
|
257
|
+
while k < 10 {
|
|
258
|
+
sum = sum + (x[k] * w_row[k])
|
|
259
|
+
k = k + 1
|
|
260
|
+
}
|
|
261
|
+
predictions[c_idx] = activate(sum + biases[c_idx])
|
|
262
|
+
c_idx = c_idx + 1
|
|
263
|
+
}
|
|
264
|
+
return predictions
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// 7. Load Personas and zero-shot evaluate them!
|
|
268
|
+
print "👥 Loading main/personas.json for neural zero-shot evaluation..."
|
|
269
|
+
let raw_personas = read_file("main/personas.json")
|
|
270
|
+
let parsed_personas = from_json(raw_personas)
|
|
271
|
+
let personas = parsed_personas["personas"]
|
|
272
|
+
let num_personas = len(personas)
|
|
273
|
+
|
|
274
|
+
print "🔮 EVALUATING AND CLASSIFYING ALL 20 DEVELOPER PERSONAS:"
|
|
275
|
+
print "--------------------------------------------------"
|
|
276
|
+
|
|
277
|
+
let p_idx = 0
|
|
278
|
+
while p_idx < num_personas {
|
|
279
|
+
let p = personas[p_idx]
|
|
280
|
+
let name = p["name"]
|
|
281
|
+
let bio = p["personality"] + " " + p["tone"]
|
|
282
|
+
|
|
283
|
+
let pred = predict(bio)
|
|
284
|
+
|
|
285
|
+
// Classify highest probability category index
|
|
286
|
+
let max_val = pred[0]
|
|
287
|
+
let predicted_class = "AUDIO"
|
|
288
|
+
|
|
289
|
+
if pred[1] > max_val {
|
|
290
|
+
max_val = pred[1]
|
|
291
|
+
predicted_class = "MECHANICAL"
|
|
292
|
+
}
|
|
293
|
+
if pred[2] > max_val {
|
|
294
|
+
max_val = pred[2]
|
|
295
|
+
predicted_class = "SYSTEMS"
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
print "[" + str(p_idx) + "] " + name + " ➜ Predicted: " + predicted_class + " [Audio: " + str(pred[0]) + ", Mech: " + str(pred[1]) + ", Sys: " + str(pred[2]) + "]"
|
|
299
|
+
p_idx = p_idx + 1
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
print "=================================================="
|