theprogrammablemind 7.5.8-beta.56 → 7.5.8-beta.58

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.
Files changed (3) hide show
  1. package/client.js +86 -161
  2. package/package.json +1 -1
  3. package/src/config.js +1 -7
package/client.js CHANGED
@@ -126,6 +126,7 @@ const setupArgs = (args, config, logs, hierarchy) => {
126
126
  args.listable = listable(hierarchy)
127
127
  args.asList = asList
128
128
  args.retry = () => { throw new RetryError() }
129
+ args.fragments = (query) => config.fragment(query)
129
130
  const scopedAsk = getAsk(config)
130
131
 
131
132
  const getAPI = (uuid) => {
@@ -608,7 +609,6 @@ const _process = async (config, query, { initializer, commandLineArgs, credentia
608
609
  if (writeTests) {
609
610
  config.rebuild()
610
611
  const objects = getObjects(config.config.objects)(config.uuid)
611
- config.beforeQuery({ query, isModule: false, objects })
612
612
  }
613
613
  } catch(error) {
614
614
  throw error
@@ -744,7 +744,7 @@ const getConfigForTest = (config, testConfig) => {
744
744
  return configForTest
745
745
  }
746
746
 
747
- const runTest = async (config, expected, { args, verbose, afterTest, testConfig, debug }) => {
747
+ const runTest = async (config, expected, { args, verbose, testConfig, debug }) => {
748
748
  const test = expected.query
749
749
  // initialize in between test so state is not preserved since the test was adding without state
750
750
  config.rebuild()
@@ -769,7 +769,6 @@ const runTest = async (config, expected, { args, verbose, afterTest, testConfig,
769
769
  objects = getObjects(config.config.objects)(config.getConfigs()[testConfig.testModuleName].uuid)
770
770
  testConfigName = testConfig.testModuleName
771
771
  }
772
- config.beforeQuery({ query: test, isModule: false, objects })
773
772
  try {
774
773
  const result = await _process(config, test, { errorHandler, isTest: true })
775
774
  result.query = test
@@ -844,37 +843,6 @@ const runTest = async (config, expected, { args, verbose, afterTest, testConfig,
844
843
  const expected_config = sortJson(convertToStable(expected.config), { depth: 25 })
845
844
  const failed_config = !matching(actual_config, expected_config)
846
845
  let failed = failed_paraphrases || failed_paraphrasesParenthesized || failed_generatedParenthesized || failed_responses || failed_contexts || failed_objects || failed_config || failed_checked
847
- if (!failed) {
848
- if (config.afterTest) {
849
- failed = config.afterTest({ query: test, expected, actual: result, config })
850
- if (failed) {
851
- return {
852
- utterance: test,
853
- errorFromAfterTest: failed,
854
- expected: {
855
- responses: expected.responses,
856
- paraphrases: expected.paraphrases,
857
- paraphrasesParenthesized: expected.paraphrasesParenthesized,
858
- generatedParenthesized: expected.generatedParenthesized,
859
- results: expected.contexts,
860
- checked: expected_checked,
861
- objects: expected_objects,
862
- config: expected.config
863
- },
864
- actual: {
865
- responses: result.responses,
866
- paraphrases: result.paraphrases,
867
- paraphrasesParenthesized: result.paraphrasesParenthesized,
868
- generatedParenthesized: result.generatedParenthesized,
869
- results: result.contexts,
870
- checked: actual_checked,
871
- objects: actual_objects,
872
- config: actual_config
873
- }
874
- }
875
- }
876
- }
877
- }
878
846
 
879
847
  if (expected.metadata && result.metadata && failed) {
880
848
  const priorities = analyzeMetaData(expected.metadata, result.metadata)
@@ -942,19 +910,16 @@ const runTestsHelper = async (config, tests, failed, juicyBits) => {
942
910
 
943
911
  const runTests = async (config, testFile, juicyBits) => {
944
912
  const tests = JSON.parse(runtime.fs.readFileSync(testFile))
945
- config.beforeTests()
946
913
  if (juicyBits.verbose) {
947
914
  console.log('\n', testFile, '-----------------------------------------------', '\n')
948
915
  }
949
916
  const v = await runTestsHelper(config, [...tests], [], juicyBits)
950
- config.afterTests()
951
917
  return v
952
918
  }
953
919
 
954
920
  const saveTest = async (testFile, config, test, expected, testConfig, saveDeveloper) => {
955
921
  config.rebuild()
956
922
  const objects = getObjects(config.config.objects)(config.uuid)
957
- config.beforeQuery({ query: test, isModule: false, objects })
958
923
  console.log(test)
959
924
  const result = await _process(config, test, { isTest: true })
960
925
  // const actualObjects = config.config.objects
@@ -1232,31 +1197,6 @@ const defaultProcess = ({ config, errorHandler }) => async (promise) => {
1232
1197
  }
1233
1198
  }
1234
1199
 
1235
- /*
1236
- const kmFileTemplate = (kmBaseName, kmName) =>
1237
- `const entodicton = require('entodicton')
1238
- const base = require('./${kmBaseName}').copy()
1239
- const ${kmName}_tests = require('./${kmName}.test.json')
1240
- const ${kmName}_instance = require('./${kmBaseName}.${kmName}.instance.json')
1241
-
1242
- const config = new entodicton.Config({ name: '${kmName}' })
1243
- config.add(base)
1244
- kirk_instance.base = '${kmBaseName}'
1245
- config.load(${kmName}_instance)
1246
-
1247
- entodicton.knowledgeModule( {
1248
- module,
1249
- description: '${kmName} related concepts',
1250
- section,
1251
- config,
1252
- test: {
1253
- name: './${kmName}.test.json',
1254
- contents: ${kmName}_tests
1255
- },
1256
- })
1257
- `
1258
- */
1259
-
1260
1200
  // loadTemplate BuiltTemplate
1261
1201
  const rebuildTemplate = async ({ config, target, template, errorHandler = defaultErrorHandler }) => {
1262
1202
  const accumulators = {
@@ -1393,18 +1333,15 @@ const knowledgeModule = async ({
1393
1333
  module: moduleFromJSFile,
1394
1334
  description,
1395
1335
  section,
1396
- config,
1336
+ // config, createConfig,
1337
+ createConfig,
1338
+ newWay,
1397
1339
  demo,
1398
1340
  test,
1399
1341
  template,
1400
1342
  errorHandler = defaultErrorHandler,
1401
1343
  process: processResults = defaultProcess,
1402
1344
  stopAtFirstFailure = true,
1403
- beforeQuery = () => {},
1404
- beforeTests = () => {},
1405
- afterTests = () => {},
1406
- beforeTest = () => {},
1407
- afterTest = () => {},
1408
1345
  ...rest
1409
1346
  } = {}) => {
1410
1347
 
@@ -1413,22 +1350,14 @@ const knowledgeModule = async ({
1413
1350
  throw new Error(`Unknown arguments to knowledgeModule: ${unknownArgs.join()}`)
1414
1351
  }
1415
1352
 
1416
- config.beforeQuery = beforeQuery
1417
- config.beforeTests = beforeTests
1418
- config.afterTests = afterTests
1419
- config.beforeTest = beforeTest
1420
- config.afterTest = afterTest
1421
-
1422
1353
  const testConfig = test
1423
1354
 
1424
1355
  if (!moduleFromJSFile) {
1425
1356
  throw new Error("'module' is a required parameter. The value should be either 'module' or a lambda that will be called when the file is acting as a module.")
1426
1357
  }
1427
- if (!config) {
1428
- throw new Error("'config' is a required parameter. The value should the config that defines the knowledge module.")
1429
- }
1430
- if (!config.name) {
1431
- throw new Error("config must have 'name' set to the knowledge module name.")
1358
+ // if (!config && !createConfig) {
1359
+ if (!createConfig) {
1360
+ throw new Error("'config' or 'createConfig' is a required parameter. The value should the config that defines the knowledge module.")
1432
1361
  }
1433
1362
  if (!description) {
1434
1363
  throw new Error("'description' is a required parameter. The value should the description of the knowledge module.")
@@ -1438,82 +1367,44 @@ const knowledgeModule = async ({
1438
1367
  }
1439
1368
 
1440
1369
  const isProcess = require.main === moduleFromJSFile
1441
- let loadForTesting = false
1442
- if (global.theprogrammablemind) {
1443
- if (global.theprogrammablemind.loadForTesting[config.name]) {
1444
- loadForTesting = true
1370
+
1371
+ const setupConfig = (config) => {
1372
+ if (!config.name) {
1373
+ throw new Error("config must have 'name' set to the knowledge module name.")
1445
1374
  }
1446
- }
1447
1375
 
1448
- // remove test only stuff
1449
- if (!isProcess && !loadForTesting) {
1450
- config.config.operators = config.config.operators.filter( (operator) => {
1451
- if (operator.development) {
1452
- return false
1453
- } else {
1454
- return true
1455
- }
1456
- })
1457
- config.config.bridges = config.config.bridges.filter( (bridge) => {
1458
- if (bridge.development) {
1459
- return false
1460
- } else {
1461
- return true
1376
+ config.description = description
1377
+ if (typeof test === 'object') {
1378
+ if (test.contents) {
1379
+ config.tests = test.contents
1380
+ test = test.name
1462
1381
  }
1463
- })
1464
- }
1465
-
1466
- let module
1467
- if (_.isFunction(moduleFromJSFile)) {
1468
- module = moduleFromJSFile
1469
- } else {
1470
- module = () => {
1471
- config.rebuild({ isModule: true })
1472
- moduleFromJSFile.exports = config
1473
- }
1474
- }
1475
- processResults = processResults({ config, errorHandler })
1476
- config.description = description
1477
- config.demo = demo
1478
- if (typeof test === 'object') {
1479
- if (test.contents) {
1480
- config.tests = test.contents
1481
- test = test.name
1482
- }
1483
- } else {
1484
- if (runtime.fs && runtime.fs.existsSync(test)) {
1485
- config.tests = JSON.parse(runtime.fs.readFileSync(test))
1486
1382
  } else {
1487
- config.tests = {}
1488
- }
1489
- }
1490
- config.setTestConfig(testConfig)
1491
-
1492
- if (!isProcess) {
1493
- if (template) {
1494
- if (config.needsRebuild(template.template, template.instance, { isModule: !isProcess })) {
1495
- const error = `This module "${config.name}" cannot be used because the instance file needs rebuilding. Run on the command line with no arguments or the -rt argument to rebuild.`
1496
- throw new Error(error)
1497
- }
1498
- try {
1499
- config.load(template.template, template.instance)
1500
- } catch( e ) {
1501
- errorHandler(e)
1383
+ if (runtime.fs && runtime.fs.existsSync(test)) {
1384
+ config.tests = JSON.parse(runtime.fs.readFileSync(test))
1385
+ } else {
1386
+ config.tests = {}
1502
1387
  }
1503
1388
  }
1389
+ config.setTestConfig(testConfig)
1504
1390
  }
1391
+
1392
+
1505
1393
  if (isProcess) {
1394
+ const config = createConfig()
1395
+ setupConfig(config)
1396
+ processResults = processResults({ config, errorHandler })
1506
1397
  // setup();
1507
1398
  const parser = new runtime.ArgumentParser({
1508
1399
  description: 'Entodicton knowledge module'
1509
1400
  })
1510
1401
 
1511
- const helpDebugAssociation = 'In order to get a debug break when a specific association is created set the DEBUG_ASSOCIATION environment variable to the JSON of the association to break on. For example DEBUG_ASSOCIATION=\'[["the", 0], ["mammal", 1]]\' })'
1512
- const helpDebugHierarchy = 'In order to get a debug break when a specific hierarchy is created set the DEBUG_HIERARCHY environment variable to the JSON of the child-parent pair to break on. For example DEBUG_HIERARCHY=\'[["cat", 1], ["mammel", 1]]\' })'
1513
- const helpDebugPriority = 'In order to get a debug break when a specific set of priorities is created set set DEBUG_PRIORITY environment variable to the JSON of the priorities that you want to break on. For example DEBUG_PRIORITY=\'[["verb", 0], ["article", 0]]\' })'
1514
- const helpDebugContextualPriority = 'In order to get a debug break when a specific set of contextual priorities is created set set DEBUG_CONTEXTUAL_PRIORITY environment variable to the JSON of the priorities that you want to break on. For example DEBUG_CONTEXTUAL_PRIORITY=\'{ context: [["verb", 0], ["article", 0], select: 1}\' })'
1515
- const helpDebugBridge = 'In order to get a debug break when a specific bridge is created set the DEBUG_BRIDGE environment variable to id/level to break on. For example DEBUG_BRIDGE=\'id#level\' })'
1516
- const helpDebugOperator = 'In order to get a debug break when a specific hierarcy is created set the DEBUG_OPERATOR environment variable to debug any config loaded. For example DEBUG_OPERATOR=\'([operator] ([arg]))\' })'
1402
+ const helpDebugAssociation = 'In order to get a debug break when a specific association is created set the DEBUG_ASSOCIATION environment variable to the JSON of the association to break on. For example DEBUG_ASSOCIATION=\'[["the", 0], ["mammal", 1]]\''
1403
+ const helpDebugHierarchy = 'In order to get a debug break when a specific hierarchy is created set the DEBUG_HIERARCHY environment variable to the JSON of the child-parent pair to break on. For example DEBUG_HIERARCHY=\'[["cat", 1], ["mammel", 1]]\''
1404
+ const helpDebugPriority = 'In order to get a debug break when a specific set of priorities is created set set DEBUG_PRIORITY environment variable to the JSON of the priorities that you want to break on. For example DEBUG_PRIORITY=\'[["verb", 0], ["article", 0]]\''
1405
+ const helpDebugContextualPriority = 'In order to get a debug break when a specific set of contextual priorities is created set set DEBUG_CONTEXTUAL_PRIORITY environment variable to the JSON of the priorities that you want to break on. For example DEBUG_CONTEXTUAL_PRIORITY=\'{ context: [["verb", 0], ["article", 0], select: 1}\''
1406
+ const helpDebugBridge = 'In order to get a debug break when a specific bridge is created set the DEBUG_BRIDGE environment variable to id/level to break on. For example DEBUG_BRIDGE=\'id#level\''
1407
+ const helpDebugOperator = 'In order to get a debug break when a specific hierarcy is created set the DEBUG_OPERATOR environment variable to debug any config loaded. For example DEBUG_OPERATOR=\'([operator] ([arg]))\''
1517
1408
 
1518
1409
 
1519
1410
  parser.add_argument('-tmn', '--testModuleName', { help: 'When running tests instead of using the current modules tests use the specified modules tests' })
@@ -1624,6 +1515,10 @@ const knowledgeModule = async ({
1624
1515
 
1625
1516
  }
1626
1517
  config.load(template.template, template.instance, { rebuild: needsRebuild })
1518
+ if (config.name == 'ui') {
1519
+ console.log('config.COUNTER', config.COUNTER)
1520
+ debugger
1521
+ }
1627
1522
  if (needsRebuild) {
1628
1523
  return
1629
1524
  }
@@ -1631,20 +1526,8 @@ const knowledgeModule = async ({
1631
1526
 
1632
1527
  if (!args.save && !args.rebuildTemplate && !args.dontAddAssociations) {
1633
1528
  config.addAssociationsFromTests(config.tests);
1634
- //for (let query in config.tests) {
1635
- // config.addAssociations(config.tests[query].associations || []);
1636
- //}
1637
1529
  }
1638
1530
 
1639
- /*
1640
- if (args.buildTemplate) {
1641
- if (template) {
1642
- config.rebuild()
1643
- config.load(template.template, template.instance, { rebuild: true })
1644
- }
1645
- }
1646
- */
1647
-
1648
1531
  let configPrinted = false
1649
1532
  const printConfig = () => {
1650
1533
  if (configPrinted) {
@@ -1892,7 +1775,6 @@ const knowledgeModule = async ({
1892
1775
  if (query.length === 0) {
1893
1776
  return readline.close()
1894
1777
  }
1895
- // const promise = processResults(_process(config, query, { testsFN: test }))
1896
1778
  const promise = _process(config, query, { testsFN: test }).then((results) => {
1897
1779
  console.log(results.responses.join(' '))
1898
1780
  })
@@ -1920,7 +1802,6 @@ const knowledgeModule = async ({
1920
1802
  if (args.objectDiff) {
1921
1803
  global.beforeObjects = _.cloneDeep(objects)
1922
1804
  }
1923
- config.beforeQuery({ query: args.query, isModule: false, objects })
1924
1805
  try {
1925
1806
  await processResults(_process(config, args.query, { commandLineArgs: args, dontAddAssociations: args.dontAddAssociations, writeTests: args.save || args.saveDeveloper, saveDeveloper: args.saveDeveloper, testConfig, testsFN: test }))
1926
1807
  } catch( error ) {
@@ -1929,11 +1810,55 @@ const knowledgeModule = async ({
1929
1810
  }
1930
1811
  printConfig()
1931
1812
  } else {
1932
- config.addAssociationsFromTests(config.tests);
1933
- //for (let query in config.tests) {
1934
- // config.addAssociations(config.tests[query].associations || []);
1935
- //}
1936
- module()
1813
+ const initConfig = (config) => {
1814
+ setupConfig(config)
1815
+
1816
+ let loadForTesting = false
1817
+ if (global.theprogrammablemind) {
1818
+ if (global.theprogrammablemind.loadForTesting[config.name]) {
1819
+ loadForTesting = true
1820
+ }
1821
+ }
1822
+ // remove test only stuff
1823
+ if (!isProcess && !loadForTesting) {
1824
+ config.config.operators = config.config.operators.filter( (operator) => {
1825
+ if (operator.development) {
1826
+ return false
1827
+ } else {
1828
+ return true
1829
+ }
1830
+ })
1831
+ config.config.bridges = config.config.bridges.filter( (bridge) => {
1832
+ if (bridge.development) {
1833
+ return false
1834
+ } else {
1835
+ return true
1836
+ }
1837
+ })
1838
+ }
1839
+
1840
+ if (template) {
1841
+ if (config.needsRebuild(template.template, template.instance, { isModule: !isProcess })) {
1842
+ const error = `This module "${config.name}" cannot be used because the instance file needs rebuilding. Run on the command line with no arguments or the -rt argument to rebuild.`
1843
+ throw new Error(error)
1844
+ }
1845
+ try {
1846
+ config.load(template.template, template.instance)
1847
+ } catch( e ) {
1848
+ errorHandler(e)
1849
+ }
1850
+ }
1851
+
1852
+ config.addAssociationsFromTests(config.tests);
1853
+ }
1854
+
1855
+ createConfigExport = () => {
1856
+ const config = createConfig()
1857
+ initConfig(config)
1858
+ config.rebuild({ isModule: true })
1859
+ return config
1860
+ }
1861
+ moduleFromJSFile.exports = createConfigExport
1937
1862
  }
1938
1863
 
1939
1864
  }
package/package.json CHANGED
@@ -63,6 +63,6 @@
63
63
  "json-stable-stringify": "^1.0.1",
64
64
  "node-fetch": "^2.6.1"
65
65
  },
66
- "version": "7.5.8-beta.56",
66
+ "version": "7.5.8-beta.58",
67
67
  "license": "ISC"
68
68
  }
package/src/config.js CHANGED
@@ -940,12 +940,12 @@ class Config {
940
940
  return query
941
941
  } else {
942
942
  const config = { ...queryOrConfig }
943
+ delete config.where
943
944
  if (options.isModule) {
944
945
  // things like webpack rewrite the functions if there are constants so this compare does not work
945
946
  delete config.generators
946
947
  delete config.semantics
947
948
  } else {
948
- delete config.where
949
949
  config.generators = (config.generators || []).map((generator) => {
950
950
  generator = {...generator}
951
951
  delete generator.where
@@ -969,12 +969,6 @@ class Config {
969
969
  }
970
970
 
971
971
  const sameQueries = helpers.safeEquals(toCanonicalQueries(template.queries || []).map(helpers.updateQueries), toCanonicalQueries(instance.queries || []))
972
- if (!(instance && sameQueries && sameFragments)) {
973
- console.log('options.isModule', options.isModule)
974
- console.log('sameQueries', sameQueries)
975
- console.log('template.queries', toCanonicalQueries(template.queries || []).map(helpers.updateQueries))
976
- console.log('instance.queries', toCanonicalQueries(instance.queries || []))
977
- }
978
972
  return !(instance && sameQueries && sameFragments)
979
973
  }
980
974