Files
neuron/dist/language-profile.c
Will Anderson 2622bb04bd ELP: two-layer activation pipeline (activate → suppress → reason → generate)
elp-input.el: replace broken engram_search_json with engram_activate_json
as Layer 1. Layer 2 suppress/filter keeps nodes with non-zero salience/
importance. Reason step extracts patient from top activated node content.
ELP grammar realizes the response via generate().

routes.el: add 'elp' event_type to handle_dharma_recv so the studio can
route ELP requests through dharma.
2026-05-03 11:31:04 -05:00

395 lines
13 KiB
C

#include <stdint.h>
#include <stdlib.h>
#include "el_runtime.h"
el_val_t lang_profile(el_val_t code, el_val_t word_order, el_val_t morph_type, el_val_t has_case, el_val_t has_gender, el_val_t script_dir, el_val_t agreement, el_val_t null_subject);
el_val_t lang_get(el_val_t profile, el_val_t key);
el_val_t lang_profile_en(void);
el_val_t lang_profile_ja(void);
el_val_t lang_profile_ar(void);
el_val_t lang_profile_zh(void);
el_val_t lang_profile_de(void);
el_val_t lang_profile_es(void);
el_val_t lang_profile_fi(void);
el_val_t lang_profile_sw(void);
el_val_t lang_profile_hi(void);
el_val_t lang_profile_ru(void);
el_val_t lang_profile_fr(void);
el_val_t lang_profile_la(void);
el_val_t lang_profile_he(void);
el_val_t lang_profile_sa(void);
el_val_t lang_profile_got(void);
el_val_t lang_profile_non(void);
el_val_t lang_profile_enm(void);
el_val_t lang_profile_pi(void);
el_val_t lang_profile_grc(void);
el_val_t lang_profile_ang(void);
el_val_t lang_profile_fro(void);
el_val_t lang_profile_goh(void);
el_val_t lang_profile_sga(void);
el_val_t lang_profile_txb(void);
el_val_t lang_profile_peo(void);
el_val_t lang_profile_akk(void);
el_val_t lang_profile_uga(void);
el_val_t lang_profile_egy(void);
el_val_t lang_profile_sux(void);
el_val_t lang_profile_gez(void);
el_val_t lang_profile_cop(void);
el_val_t lang_from_code(el_val_t code);
el_val_t lang_default(void);
el_val_t lang_is_isolating(el_val_t profile);
el_val_t lang_is_agglutinative(el_val_t profile);
el_val_t lang_is_fusional(el_val_t profile);
el_val_t lang_is_polysynthetic(el_val_t profile);
el_val_t lang_is_rtl(el_val_t profile);
el_val_t lang_has_null_subject(el_val_t profile);
el_val_t lang_has_case(el_val_t profile);
el_val_t lang_has_gender(el_val_t profile);
el_val_t lang_word_order(el_val_t profile);
el_val_t lang_code(el_val_t profile);
el_val_t lang_profile(el_val_t code, el_val_t word_order, el_val_t morph_type, el_val_t has_case, el_val_t has_gender, el_val_t script_dir, el_val_t agreement, el_val_t null_subject) {
el_val_t r = native_list_empty();
r = native_list_append(r, EL_STR("code"));
r = native_list_append(r, code);
r = native_list_append(r, EL_STR("word_order"));
r = native_list_append(r, word_order);
r = native_list_append(r, EL_STR("morph_type"));
r = native_list_append(r, morph_type);
r = native_list_append(r, EL_STR("has_case"));
r = native_list_append(r, has_case);
r = native_list_append(r, EL_STR("has_gender"));
r = native_list_append(r, has_gender);
r = native_list_append(r, EL_STR("script_dir"));
r = native_list_append(r, script_dir);
r = native_list_append(r, EL_STR("agreement"));
r = native_list_append(r, agreement);
r = native_list_append(r, EL_STR("null_subject"));
r = native_list_append(r, null_subject);
return r;
return 0;
}
el_val_t lang_get(el_val_t profile, el_val_t key) {
el_val_t n = native_list_len(profile);
el_val_t i = 0;
while (i < (n - 1)) {
el_val_t k = native_list_get(profile, i);
if (str_eq(k, key)) {
return native_list_get(profile, (i + 1));
}
i = (i + 2);
}
return EL_STR("");
return 0;
}
el_val_t lang_profile_en(void) {
return lang_profile(EL_STR("en"), EL_STR("SVO"), EL_STR("fusional"), EL_STR("false"), EL_STR("false"), EL_STR("ltr"), EL_STR("number;person"), EL_STR("false"));
return 0;
}
el_val_t lang_profile_ja(void) {
return lang_profile(EL_STR("ja"), EL_STR("SOV"), EL_STR("agglutinative"), EL_STR("false"), EL_STR("false"), EL_STR("ltr"), EL_STR("none"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_ar(void) {
return lang_profile(EL_STR("ar"), EL_STR("VSO"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("rtl"), EL_STR("number;person;gender;case"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_zh(void) {
return lang_profile(EL_STR("zh"), EL_STR("SVO"), EL_STR("isolating"), EL_STR("false"), EL_STR("false"), EL_STR("ltr"), EL_STR("none"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_de(void) {
return lang_profile(EL_STR("de"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("false"));
return 0;
}
el_val_t lang_profile_es(void) {
return lang_profile(EL_STR("es"), EL_STR("SVO"), EL_STR("fusional"), EL_STR("false"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_fi(void) {
return lang_profile(EL_STR("fi"), EL_STR("SOV"), EL_STR("agglutinative"), EL_STR("true"), EL_STR("false"), EL_STR("ltr"), EL_STR("number;person;case"), EL_STR("false"));
return 0;
}
el_val_t lang_profile_sw(void) {
return lang_profile(EL_STR("sw"), EL_STR("SVO"), EL_STR("agglutinative"), EL_STR("false"), EL_STR("false"), EL_STR("ltr"), EL_STR("noun-class;number"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_hi(void) {
return lang_profile(EL_STR("hi"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_ru(void) {
return lang_profile(EL_STR("ru"), EL_STR("free"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("false"));
return 0;
}
el_val_t lang_profile_fr(void) {
return lang_profile(EL_STR("fr"), EL_STR("SVO"), EL_STR("fusional"), EL_STR("false"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender"), EL_STR("false"));
return 0;
}
el_val_t lang_profile_la(void) {
return lang_profile(EL_STR("la"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_he(void) {
return lang_profile(EL_STR("he"), EL_STR("SVO"), EL_STR("semitic"), EL_STR("true"), EL_STR("false"), EL_STR("rtl"), EL_STR("number;person;gender"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_sa(void) {
return lang_profile(EL_STR("sa"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_got(void) {
return lang_profile(EL_STR("got"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_non(void) {
return lang_profile(EL_STR("non"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_enm(void) {
return lang_profile(EL_STR("enm"), EL_STR("SVO"), EL_STR("fusional"), EL_STR("false"), EL_STR("false"), EL_STR("ltr"), EL_STR("number;person"), EL_STR("false"));
return 0;
}
el_val_t lang_profile_pi(void) {
return lang_profile(EL_STR("pi"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_grc(void) {
return lang_profile(EL_STR("grc"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case;aspect"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_ang(void) {
return lang_profile(EL_STR("ang"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_fro(void) {
return lang_profile(EL_STR("fro"), EL_STR("SVO"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("false"));
return 0;
}
el_val_t lang_profile_goh(void) {
return lang_profile(EL_STR("goh"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_sga(void) {
return lang_profile(EL_STR("sga"), EL_STR("VSO"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_txb(void) {
return lang_profile(EL_STR("txb"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("false"));
return 0;
}
el_val_t lang_profile_peo(void) {
return lang_profile(EL_STR("peo"), EL_STR("SOV"), EL_STR("fusional"), EL_STR("true"), EL_STR("false"), EL_STR("ltr"), EL_STR("number;person;case"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_akk(void) {
return lang_profile(EL_STR("akk"), EL_STR("VSO"), EL_STR("fusional"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("false"));
return 0;
}
el_val_t lang_profile_uga(void) {
return lang_profile(EL_STR("uga"), EL_STR("VSO"), EL_STR("semitic"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender;case"), EL_STR("false"));
return 0;
}
el_val_t lang_profile_egy(void) {
return lang_profile(EL_STR("egy"), EL_STR("SVO"), EL_STR("agglutinative"), EL_STR("false"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_sux(void) {
return lang_profile(EL_STR("sux"), EL_STR("SOV"), EL_STR("agglutinative"), EL_STR("true"), EL_STR("false"), EL_STR("ltr"), EL_STR("number;person"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_gez(void) {
return lang_profile(EL_STR("gez"), EL_STR("SOV"), EL_STR("semitic"), EL_STR("true"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender"), EL_STR("true"));
return 0;
}
el_val_t lang_profile_cop(void) {
return lang_profile(EL_STR("cop"), EL_STR("SVO"), EL_STR("agglutinative"), EL_STR("false"), EL_STR("true"), EL_STR("ltr"), EL_STR("number;person;gender"), EL_STR("false"));
return 0;
}
el_val_t lang_from_code(el_val_t code) {
if (str_eq(code, EL_STR("en"))) {
return lang_profile_en();
}
if (str_eq(code, EL_STR("ja"))) {
return lang_profile_ja();
}
if (str_eq(code, EL_STR("ar"))) {
return lang_profile_ar();
}
if (str_eq(code, EL_STR("zh"))) {
return lang_profile_zh();
}
if (str_eq(code, EL_STR("de"))) {
return lang_profile_de();
}
if (str_eq(code, EL_STR("es"))) {
return lang_profile_es();
}
if (str_eq(code, EL_STR("fi"))) {
return lang_profile_fi();
}
if (str_eq(code, EL_STR("sw"))) {
return lang_profile_sw();
}
if (str_eq(code, EL_STR("hi"))) {
return lang_profile_hi();
}
if (str_eq(code, EL_STR("ru"))) {
return lang_profile_ru();
}
if (str_eq(code, EL_STR("fr"))) {
return lang_profile_fr();
}
if (str_eq(code, EL_STR("la"))) {
return lang_profile_la();
}
if (str_eq(code, EL_STR("he"))) {
return lang_profile_he();
}
if (str_eq(code, EL_STR("grc"))) {
return lang_profile_grc();
}
if (str_eq(code, EL_STR("ang"))) {
return lang_profile_ang();
}
if (str_eq(code, EL_STR("sa"))) {
return lang_profile_sa();
}
if (str_eq(code, EL_STR("got"))) {
return lang_profile_got();
}
if (str_eq(code, EL_STR("non"))) {
return lang_profile_non();
}
if (str_eq(code, EL_STR("enm"))) {
return lang_profile_enm();
}
if (str_eq(code, EL_STR("pi"))) {
return lang_profile_pi();
}
if (str_eq(code, EL_STR("fro"))) {
return lang_profile_fro();
}
if (str_eq(code, EL_STR("goh"))) {
return lang_profile_goh();
}
if (str_eq(code, EL_STR("sga"))) {
return lang_profile_sga();
}
if (str_eq(code, EL_STR("txb"))) {
return lang_profile_txb();
}
if (str_eq(code, EL_STR("peo"))) {
return lang_profile_peo();
}
if (str_eq(code, EL_STR("akk"))) {
return lang_profile_akk();
}
if (str_eq(code, EL_STR("uga"))) {
return lang_profile_uga();
}
if (str_eq(code, EL_STR("egy"))) {
return lang_profile_egy();
}
if (str_eq(code, EL_STR("sux"))) {
return lang_profile_sux();
}
if (str_eq(code, EL_STR("gez"))) {
return lang_profile_gez();
}
if (str_eq(code, EL_STR("cop"))) {
return lang_profile_cop();
}
return lang_profile_en();
return 0;
}
el_val_t lang_default(void) {
return lang_profile_en();
return 0;
}
el_val_t lang_is_isolating(el_val_t profile) {
return str_eq(lang_get(profile, EL_STR("morph_type")), EL_STR("isolating"));
return 0;
}
el_val_t lang_is_agglutinative(el_val_t profile) {
return str_eq(lang_get(profile, EL_STR("morph_type")), EL_STR("agglutinative"));
return 0;
}
el_val_t lang_is_fusional(el_val_t profile) {
return str_eq(lang_get(profile, EL_STR("morph_type")), EL_STR("fusional"));
return 0;
}
el_val_t lang_is_polysynthetic(el_val_t profile) {
return str_eq(lang_get(profile, EL_STR("morph_type")), EL_STR("polysynthetic"));
return 0;
}
el_val_t lang_is_rtl(el_val_t profile) {
return str_eq(lang_get(profile, EL_STR("script_dir")), EL_STR("rtl"));
return 0;
}
el_val_t lang_has_null_subject(el_val_t profile) {
return str_eq(lang_get(profile, EL_STR("null_subject")), EL_STR("true"));
return 0;
}
el_val_t lang_has_case(el_val_t profile) {
return str_eq(lang_get(profile, EL_STR("has_case")), EL_STR("true"));
return 0;
}
el_val_t lang_has_gender(el_val_t profile) {
return str_eq(lang_get(profile, EL_STR("has_gender")), EL_STR("true"));
return 0;
}
el_val_t lang_word_order(el_val_t profile) {
return lang_get(profile, EL_STR("word_order"));
return 0;
}
el_val_t lang_code(el_val_t profile) {
return lang_get(profile, EL_STR("code"));
return 0;
}