@hashgraphonline/standards-sdk 0.1.190 → 0.1.191
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/browser/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/browser/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser/hcs-25/adapters/index.d.ts +1 -0
- package/dist/browser/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/browser/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/browser/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/catalog.d.ts +9 -2
- package/dist/browser/hcs-25/collectors/catalog.d.ts.map +1 -1
- package/dist/browser/hcs-25/collectors/index.d.ts +1 -0
- package/dist/browser/hcs-25/collectors/index.d.ts.map +1 -1
- package/dist/browser/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/browser/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser/hcs-25/signals/index.d.ts +1 -0
- package/dist/browser/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/browser-root/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/adapters/index.d.ts +1 -0
- package/dist/browser-root/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/browser-root/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/catalog.d.ts +9 -2
- package/dist/browser-root/hcs-25/collectors/catalog.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/collectors/index.d.ts +1 -0
- package/dist/browser-root/hcs-25/collectors/index.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/browser-root/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/signals/index.d.ts +1 -0
- package/dist/browser-root/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/cjs/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/cjs/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/cjs/hcs-25/adapters/index.d.ts +1 -0
- package/dist/cjs/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/cjs/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/cjs/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/catalog.d.ts +9 -2
- package/dist/cjs/hcs-25/collectors/catalog.d.ts.map +1 -1
- package/dist/cjs/hcs-25/collectors/index.d.ts +1 -0
- package/dist/cjs/hcs-25/collectors/index.d.ts.map +1 -1
- package/dist/cjs/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/cjs/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/cjs/hcs-25/signals/index.d.ts +1 -0
- package/dist/cjs/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +1 -1
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/es/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/es/hcs-25/adapters/index.d.ts +1 -0
- package/dist/es/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/es/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/es/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/catalog.d.ts +9 -2
- package/dist/es/hcs-25/collectors/catalog.d.ts.map +1 -1
- package/dist/es/hcs-25/collectors/index.d.ts +1 -0
- package/dist/es/hcs-25/collectors/index.d.ts.map +1 -1
- package/dist/es/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/es/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/es/hcs-25/signals/index.d.ts +1 -0
- package/dist/es/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +78 -71
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +2 -2
- package/dist/es/standards-sdk.es103.js +2 -2
- package/dist/es/standards-sdk.es104.js +1 -1
- package/dist/es/standards-sdk.es106.js +1 -1
- package/dist/es/standards-sdk.es108.js +2 -2
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +1 -1
- package/dist/es/standards-sdk.es111.js +2 -2
- package/dist/es/standards-sdk.es115.js +3 -3
- package/dist/es/standards-sdk.es116.js +4 -4
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +22 -4
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +15 -12
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +6 -5
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +6 -5
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +6 -5
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +110 -136
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +133 -141
- package/dist/es/standards-sdk.es129.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +1 -1
- package/dist/es/standards-sdk.es130.js +135 -345
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +332 -344
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +338 -178
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +200 -196
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +216 -364
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +358 -100
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +91 -220
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +173 -1250
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +1295 -98
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +109 -246
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +1 -1
- package/dist/es/standards-sdk.es140.js +263 -97
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +107 -248
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +246 -472
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +458 -85
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +96 -151
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +155 -29
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +26 -4
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +10 -180
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +179 -26
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +27 -20
- package/dist/es/standards-sdk.es149.js.map +1 -1
- package/dist/es/standards-sdk.es15.js +1 -1
- package/dist/es/standards-sdk.es150.js +18 -156
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +148 -190
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +159 -747
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +786 -9
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +13 -567
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +541 -600
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +625 -12
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +13 -2
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +2 -87
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +84 -37
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +6 -6
- package/dist/es/standards-sdk.es160.js +40 -2
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +2 -235
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +204 -1109
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +1059 -225
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +303 -419
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +418 -351
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +347 -1114
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +1094 -180
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +153 -1512
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +1457 -1056
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +1163 -14
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +15 -449
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +440 -248
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +259 -4
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +4 -81
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es175.js +71 -77
- package/dist/es/standards-sdk.es175.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +80 -53
- package/dist/es/standards-sdk.es176.js.map +1 -1
- package/dist/es/standards-sdk.es177.js +59 -2546
- package/dist/es/standards-sdk.es177.js.map +1 -1
- package/dist/es/standards-sdk.es178.js +2547 -159
- package/dist/es/standards-sdk.es178.js.map +1 -1
- package/dist/es/standards-sdk.es179.js +159 -7
- package/dist/es/standards-sdk.es179.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +13 -13
- package/dist/es/standards-sdk.es180.js +7 -86
- package/dist/es/standards-sdk.es180.js.map +1 -1
- package/dist/es/standards-sdk.es181.js +65 -44
- package/dist/es/standards-sdk.es181.js.map +1 -1
- package/dist/es/standards-sdk.es182.js +57 -188
- package/dist/es/standards-sdk.es182.js.map +1 -1
- package/dist/es/standards-sdk.es183.js +27 -26
- package/dist/es/standards-sdk.es183.js.map +1 -1
- package/dist/es/standards-sdk.es184.js +191 -53
- package/dist/es/standards-sdk.es184.js.map +1 -1
- package/dist/es/standards-sdk.es185.js +21 -109
- package/dist/es/standards-sdk.es185.js.map +1 -1
- package/dist/es/standards-sdk.es186.js +49 -47
- package/dist/es/standards-sdk.es186.js.map +1 -1
- package/dist/es/standards-sdk.es187.js +89 -205
- package/dist/es/standards-sdk.es187.js.map +1 -1
- package/dist/es/standards-sdk.es188.js +35 -58
- package/dist/es/standards-sdk.es188.js.map +1 -1
- package/dist/es/standards-sdk.es189.js +48 -39
- package/dist/es/standards-sdk.es189.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +10 -10
- package/dist/es/standards-sdk.es190.js +218 -48
- package/dist/es/standards-sdk.es190.js.map +1 -1
- package/dist/es/standards-sdk.es191.js +66 -42
- package/dist/es/standards-sdk.es191.js.map +1 -1
- package/dist/es/standards-sdk.es192.js +33 -105
- package/dist/es/standards-sdk.es192.js.map +1 -1
- package/dist/es/standards-sdk.es193.js +49 -43
- package/dist/es/standards-sdk.es193.js.map +1 -1
- package/dist/es/standards-sdk.es194.js +33 -42
- package/dist/es/standards-sdk.es194.js.map +1 -1
- package/dist/es/standards-sdk.es195.js +123 -72
- package/dist/es/standards-sdk.es195.js.map +1 -1
- package/dist/es/standards-sdk.es196.js +58 -75
- package/dist/es/standards-sdk.es196.js.map +1 -1
- package/dist/es/standards-sdk.es197.js +60 -44
- package/dist/es/standards-sdk.es197.js.map +1 -1
- package/dist/es/standards-sdk.es198.js +72 -36
- package/dist/es/standards-sdk.es198.js.map +1 -1
- package/dist/es/standards-sdk.es199.js +75 -30
- package/dist/es/standards-sdk.es199.js.map +1 -1
- package/dist/es/standards-sdk.es2.js +2 -2
- package/dist/es/standards-sdk.es20.js +1 -1
- package/dist/es/standards-sdk.es200.js +44 -34
- package/dist/es/standards-sdk.es200.js.map +1 -1
- package/dist/es/standards-sdk.es201.js +36 -48
- package/dist/es/standards-sdk.es201.js.map +1 -1
- package/dist/es/standards-sdk.es202.js +30 -138
- package/dist/es/standards-sdk.es202.js.map +1 -1
- package/dist/es/standards-sdk.es203.js +34 -42
- package/dist/es/standards-sdk.es203.js.map +1 -1
- package/dist/es/standards-sdk.es204.js +48 -12482
- package/dist/es/standards-sdk.es204.js.map +1 -1
- package/dist/es/standards-sdk.es205.js +134 -13
- package/dist/es/standards-sdk.es205.js.map +1 -1
- package/dist/es/standards-sdk.es206.js +36 -50
- package/dist/es/standards-sdk.es206.js.map +1 -1
- package/dist/es/standards-sdk.es207.js +12449 -78
- package/dist/es/standards-sdk.es207.js.map +1 -1
- package/dist/es/standards-sdk.es208.js +15 -79
- package/dist/es/standards-sdk.es208.js.map +1 -1
- package/dist/es/standards-sdk.es209.js +48 -192
- package/dist/es/standards-sdk.es209.js.map +1 -1
- package/dist/es/standards-sdk.es21.js +1 -1
- package/dist/es/standards-sdk.es210.js +90 -651
- package/dist/es/standards-sdk.es210.js.map +1 -1
- package/dist/es/standards-sdk.es211.js +71 -63
- package/dist/es/standards-sdk.es211.js.map +1 -1
- package/dist/es/standards-sdk.es212.js +188 -160
- package/dist/es/standards-sdk.es212.js.map +1 -1
- package/dist/es/standards-sdk.es213.js +65 -314
- package/dist/es/standards-sdk.es213.js.map +1 -1
- package/dist/es/standards-sdk.es214.js +661 -335
- package/dist/es/standards-sdk.es214.js.map +1 -1
- package/dist/es/standards-sdk.es215.js +129 -410
- package/dist/es/standards-sdk.es215.js.map +1 -1
- package/dist/es/standards-sdk.es216.js +200 -209
- package/dist/es/standards-sdk.es216.js.map +1 -1
- package/dist/es/standards-sdk.es217.js +334 -64
- package/dist/es/standards-sdk.es217.js.map +1 -1
- package/dist/es/standards-sdk.es218.js +438 -124
- package/dist/es/standards-sdk.es218.js.map +1 -1
- package/dist/es/standards-sdk.es219.js +310 -496
- package/dist/es/standards-sdk.es219.js.map +1 -1
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es220.js +60 -243
- package/dist/es/standards-sdk.es220.js.map +1 -1
- package/dist/es/standards-sdk.es221.js +118 -175
- package/dist/es/standards-sdk.es221.js.map +1 -1
- package/dist/es/standards-sdk.es222.js +465 -67
- package/dist/es/standards-sdk.es222.js.map +1 -1
- package/dist/es/standards-sdk.es223.js +250 -143
- package/dist/es/standards-sdk.es223.js.map +1 -1
- package/dist/es/standards-sdk.es224.js +172 -160
- package/dist/es/standards-sdk.es224.js.map +1 -1
- package/dist/es/standards-sdk.es225.js +65 -630
- package/dist/es/standards-sdk.es225.js.map +1 -1
- package/dist/es/standards-sdk.es226.js +128 -161
- package/dist/es/standards-sdk.es226.js.map +1 -1
- package/dist/es/standards-sdk.es227.js +144 -195
- package/dist/es/standards-sdk.es227.js.map +1 -1
- package/dist/es/standards-sdk.es228.js +668 -223
- package/dist/es/standards-sdk.es228.js.map +1 -1
- package/dist/es/standards-sdk.es229.js +188 -0
- package/dist/es/standards-sdk.es229.js.map +1 -0
- package/dist/es/standards-sdk.es23.js +1 -1
- package/dist/es/standards-sdk.es230.js +238 -0
- package/dist/es/standards-sdk.es230.js.map +1 -0
- package/dist/es/standards-sdk.es231.js +242 -0
- package/dist/es/standards-sdk.es231.js.map +1 -0
- package/dist/es/standards-sdk.es24.js +1 -1
- package/dist/es/standards-sdk.es25.js +1 -1
- package/dist/es/standards-sdk.es26.js +1 -1
- package/dist/es/standards-sdk.es27.js +13 -13
- package/dist/es/standards-sdk.es30.js +2 -2
- package/dist/es/standards-sdk.es31.js +4 -4
- package/dist/es/standards-sdk.es32.js +1 -1
- package/dist/es/standards-sdk.es35.js +7 -7
- package/dist/es/standards-sdk.es36.js +4 -4
- package/dist/es/standards-sdk.es37.js +2 -2
- package/dist/es/standards-sdk.es38.js +2 -2
- package/dist/es/standards-sdk.es39.js +1 -1
- package/dist/es/standards-sdk.es4.js +2 -2
- package/dist/es/standards-sdk.es40.js +1 -1
- package/dist/es/standards-sdk.es41.js +2 -2
- package/dist/es/standards-sdk.es46.js +1 -1
- package/dist/es/standards-sdk.es5.js +2 -2
- package/dist/es/standards-sdk.es51.js +1 -1
- package/dist/es/standards-sdk.es53.js +1 -1
- package/dist/es/standards-sdk.es56.js +2 -2
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es6.js +2 -2
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es62.js +1 -1
- package/dist/es/standards-sdk.es63.js +2 -2
- package/dist/es/standards-sdk.es64.js +1 -1
- package/dist/es/standards-sdk.es65.js +1 -1
- package/dist/es/standards-sdk.es66.js +1 -1
- package/dist/es/standards-sdk.es67.js +8 -8
- package/dist/es/standards-sdk.es69.js +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es71.js +2 -2
- package/dist/es/standards-sdk.es72.js +3 -3
- package/dist/es/standards-sdk.es75.js +5 -5
- package/dist/es/standards-sdk.es76.js +3 -3
- package/dist/es/standards-sdk.es77.js +2 -2
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es81.js +2 -2
- package/dist/es/standards-sdk.es83.js +2 -2
- package/dist/es/standards-sdk.es84.js +5 -5
- package/dist/es/standards-sdk.es85.js +1 -1
- package/dist/es/standards-sdk.es88.js +1 -1
- package/dist/es/standards-sdk.es89.js +2 -2
- package/dist/es/standards-sdk.es9.js +2 -2
- package/dist/es/standards-sdk.es90.js +4 -4
- package/dist/es/standards-sdk.es94.js +3 -3
- package/dist/es/standards-sdk.es96.js +2 -2
- package/dist/es/standards-sdk.es98.js +1 -1
- package/dist/es/standards-sdk.es99.js +3 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es139.js","sources":["../../src/hcs-25/collectors/simple-evals.ts"],"sourcesContent":["import type { Hcs25JsonValue, Hcs25Subject } from '../types';\nimport {\n generateSimpleMathQuestion,\n gradeSimpleMathResponse,\n gradeSimpleScienceResponse,\n isJsonObject,\n readString,\n sampleSimpleScienceQuestion,\n type Hcs25SimpleEvalStatus,\n} from '../signals';\nimport { resolveSubjectEndpoint } from './endpoints';\nimport { isTimeoutError } from './http';\nimport type {\n Hcs25CollectContext,\n Hcs25SignalAdapter,\n Hcs25SignalAdapterResult,\n} from './types';\n\n/**\n * A transport that delivers an eval prompt to the subject and returns the\n * response text (or null when the subject cannot be reached in a way the\n * transport understands).\n */\nexport interface Hcs25EvalTransport {\n sendPrompt(input: {\n prompt: string;\n subject: Hcs25Subject;\n context: Hcs25CollectContext;\n sessionId?: string;\n }): Promise<string | null>;\n}\n\n/**\n * Extracts response text from common JSON reply shapes: `response`, `text`,\n * `message`, `content`, `choices[0].message.content` (OpenAI-style),\n * `result.parts[].text` / `result.status.message.parts[].text` (A2A-style).\n */\nexport function defaultExtractResponseText(data: unknown): string | null {\n if (typeof data === 'string') {\n return data;\n }\n if (!isJsonObject(data as Hcs25JsonValue)) {\n return null;\n }\n const record = data as Record<string, Hcs25JsonValue>;\n\n for (const key of ['response', 'text', 'message', 'content', 'answer']) {\n const value = record[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n\n const choices = record.choices;\n if (Array.isArray(choices) && choices.length > 0) {\n const first = choices[0];\n if (isJsonObject(first)) {\n const message = first.message;\n if (isJsonObject(message) && typeof message.content === 'string') {\n return message.content;\n }\n if (typeof first.text === 'string') {\n return first.text;\n }\n }\n }\n\n const partsText = (value: Hcs25JsonValue | undefined): string | null => {\n if (!Array.isArray(value)) {\n return null;\n }\n const texts: string[] = [];\n for (const part of value) {\n if (isJsonObject(part) && typeof part.text === 'string') {\n texts.push(part.text);\n }\n }\n return texts.length > 0 ? texts.join('\\n') : null;\n };\n\n const result = record.result;\n if (isJsonObject(result)) {\n const direct = partsText(result.parts);\n if (direct) {\n return direct;\n }\n const status = result.status;\n if (isJsonObject(status)) {\n const message = status.message;\n if (isJsonObject(message)) {\n const nested = partsText(message.parts);\n if (nested) {\n return nested;\n }\n }\n }\n }\n\n return null;\n}\n\n/**\n * Options for {@link createJsonHttpEvalTransport}.\n */\nexport interface Hcs25JsonHttpEvalTransportOptions {\n /** Endpoint URL (constant or resolved per subject). */\n endpoint: string | ((subject: Hcs25Subject) => string | null);\n /** Extra headers (e.g. authorization). */\n headers?: Record<string, string>;\n /**\n * Request body builder; default posts `{message: prompt}` (plus\n * `sessionId` when present).\n */\n buildBody?: (prompt: string, sessionId?: string) => unknown;\n /** Response extractor; defaults to {@link defaultExtractResponseText}. */\n extractResponse?: (data: unknown) => string | null;\n}\n\n/**\n * Creates a generic JSON HTTP transport: POSTs the prompt and extracts the\n * reply text from common response shapes.\n */\nexport function createJsonHttpEvalTransport(\n options: Hcs25JsonHttpEvalTransportOptions,\n): Hcs25EvalTransport {\n const extractResponse = options.extractResponse ?? defaultExtractResponseText;\n return {\n async sendPrompt({ prompt, subject, context, sessionId }) {\n const url =\n typeof options.endpoint === 'function'\n ? options.endpoint(subject)\n : options.endpoint;\n if (!url) {\n return null;\n }\n const body =\n options.buildBody?.(prompt, sessionId) ??\n (sessionId ? { message: prompt, sessionId } : { message: prompt });\n const response = await context.fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json', ...options.headers },\n body: JSON.stringify(body),\n signal: context.signal,\n });\n if (!response.ok) {\n if (response.status === 404) {\n return null;\n }\n throw new Error(`eval endpoint returned HTTP ${response.status}`);\n }\n const data = (await response.json()) as unknown;\n return extractResponse(data);\n },\n };\n}\n\n/**\n * Creates an A2A-style transport: JSON-RPC `message/send` to the resolved\n * endpoint (or `options.endpoint`), extracting reply text from the task\n * result's parts.\n */\nexport function createA2aEvalTransport(options: {\n endpoint?: string | ((subject: Hcs25Subject) => string | null);\n headers?: Record<string, string>;\n}): Hcs25EvalTransport {\n return {\n async sendPrompt({ prompt, subject, context, sessionId }) {\n const url =\n (typeof options.endpoint === 'function'\n ? options.endpoint(subject)\n : options.endpoint) ?? resolveSubjectEndpoint(subject);\n if (!url) {\n return null;\n }\n const response = await context.fetch(url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...options.headers,\n },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: sessionId ?? `eval-${context.now.getTime()}`,\n method: 'message/send',\n params: {\n message: {\n role: 'user',\n parts: [{ kind: 'text', text: prompt }],\n },\n },\n }),\n signal: context.signal,\n });\n if (!response.ok) {\n if (response.status === 404) {\n return null;\n }\n throw new Error(`a2a endpoint returned HTTP ${response.status}`);\n }\n const data = (await response.json()) as unknown;\n return defaultExtractResponseText(data);\n },\n };\n}\n\n/**\n * The field-prefix family for a simple-evals collector: `a2a` writes the\n * shared `a2aSimple*` schema (also used by AgentVerse/uAgent), `nanda`\n * writes `nandaSimple*`.\n */\nexport type Hcs25SimpleEvalsFamily = 'a2a' | 'nanda';\n\n/**\n * Options for {@link createSimpleEvalsSignalAdapter}.\n */\nexport interface Hcs25SimpleEvalsSignalAdapterOptions {\n family: Hcs25SimpleEvalsFamily;\n /**\n * Adapter identifier override (e.g. `agentverse-simple-evals` for the\n * AgentVerse-scoped variant of the `a2a` family).\n */\n adapterId?: string;\n /**\n * Transport(s) used to deliver prompts. A single transport applies to all\n * subjects; a record selects by `subject.protocol` (falling back to\n * `default` / `http`).\n */\n transport: Hcs25EvalTransport | Record<string, Hcs25EvalTransport>;\n /** Seeded RNG for deterministic question generation in tests. */\n rng?: () => number;\n /** Session/conversation id to correlate eval runs (a2a schema). */\n sessionId?: string | ((subject: Hcs25Subject) => string | undefined);\n timeoutMs?: number;\n includeRegistries?: readonly string[];\n excludeRegistries?: readonly string[];\n appliesTo?: (subject: Hcs25Subject) => boolean;\n}\n\nfunction pickTransport(\n transport: Hcs25EvalTransport | Record<string, Hcs25EvalTransport>,\n subject: Hcs25Subject,\n): Hcs25EvalTransport | null {\n if (typeof (transport as Hcs25EvalTransport).sendPrompt === 'function') {\n return transport as Hcs25EvalTransport;\n }\n const map = transport as Record<string, Hcs25EvalTransport>;\n const protocol = subject.protocol?.toLowerCase();\n return (\n (protocol ? map[protocol] : undefined) ?? map.default ?? map.http ?? null\n );\n}\n\nfunction evalField(\n prefix: string,\n family: 'Math' | 'Science',\n suffix: string,\n): string {\n return `${prefix}${family}${suffix}`;\n}\n\n/**\n * Creates a simple-evals signal adapter for a field family: generates a\n * SimpleMath and a SimpleScience prompt, dispatches them via the configured\n * transport, grades the responses per the methodology (binary 0/100), and\n * stores the `{a2a|nanda}Simple{Math,Science}*` fields under\n * `metadata.additional`.\n */\nexport function createSimpleEvalsSignalAdapter(\n options: Hcs25SimpleEvalsSignalAdapterOptions,\n): Hcs25SignalAdapter {\n const prefix = options.family === 'nanda' ? 'nandaSimple' : 'a2aSimple';\n const rng = options.rng ?? Math.random;\n\n const collect = async (\n subject: Hcs25Subject,\n context: Hcs25CollectContext,\n ): Promise<Hcs25SignalAdapterResult[]> => {\n const now = context.now.toISOString();\n const transport = pickTransport(options.transport, subject);\n const sessionId =\n typeof options.sessionId === 'function'\n ? options.sessionId(subject)\n : options.sessionId;\n\n if (!transport) {\n return ['Math', 'Science'].map(family => ({\n signalId: `simple-evals.${options.family}_${family.toLowerCase()}`,\n status: 'missing' as const,\n fields: [\n {\n scope: 'additional' as const,\n values: {\n [evalField(prefix, family as 'Math' | 'Science', 'Status')]:\n 'skipped',\n [evalField(prefix, family as 'Math' | 'Science', 'Error')]:\n 'no transport for protocol',\n [evalField(prefix, family as 'Math' | 'Science', 'UpdatedAt')]:\n now,\n },\n },\n ],\n }));\n }\n\n const math = generateSimpleMathQuestion(rng);\n const science = sampleSimpleScienceQuestion(rng);\n\n const runEval = async (\n family: 'Math' | 'Science',\n prompt: string,\n questionId: string,\n grade: (response: string) => {\n status: Hcs25SimpleEvalStatus;\n score: number;\n },\n ): Promise<Hcs25SignalAdapterResult> => {\n let response: string | null = null;\n let status: Hcs25SimpleEvalStatus;\n try {\n response = await transport.sendPrompt({\n prompt,\n subject,\n context,\n sessionId,\n });\n if (response === null) {\n status = 'missing';\n } else if (response.trim().length === 0) {\n status = 'empty';\n } else {\n const graded = grade(response);\n status = graded.status;\n const score = graded.score;\n const values: Record<string, Hcs25JsonValue> = {\n [evalField(prefix, family, 'Score')]: score,\n [evalField(prefix, family, 'Status')]: status,\n [evalField(prefix, family, 'QuestionId')]: questionId,\n [evalField(prefix, family, 'Response')]: response,\n [evalField(prefix, family, 'UpdatedAt')]: now,\n };\n if (options.family === 'a2a' && sessionId) {\n values[evalField(prefix, family, 'SessionId')] = sessionId;\n }\n return {\n signalId: `simple-evals.${options.family}_${family.toLowerCase()}`,\n status: 'ok',\n value: score,\n fields: [{ scope: 'additional', values }],\n provenance: {\n source: 'simple-evals',\n subjectId: subject.id,\n fetchedAt: now,\n params: { questionId },\n },\n };\n }\n } catch (error) {\n status = isTimeoutError(error) ? 'timeout' : 'error';\n response = null;\n }\n\n const failedScore = 0;\n const values: Record<string, Hcs25JsonValue> = {\n [evalField(prefix, family, 'Score')]: failedScore,\n [evalField(prefix, family, 'Status')]: status,\n [evalField(prefix, family, 'QuestionId')]: questionId,\n [evalField(prefix, family, 'UpdatedAt')]: now,\n };\n if (status === 'missing') {\n values[evalField(prefix, family, 'Score')] = null;\n }\n if (options.family === 'a2a' && sessionId) {\n values[evalField(prefix, family, 'SessionId')] = sessionId;\n }\n return {\n signalId: `simple-evals.${options.family}_${family.toLowerCase()}`,\n status:\n status === 'missing'\n ? 'missing'\n : status === 'timeout'\n ? 'timeout'\n : status === 'error'\n ? 'error'\n : 'ok',\n value: status === 'missing' ? null : failedScore,\n fields: [{ scope: 'additional', values }],\n provenance: {\n source: 'simple-evals',\n subjectId: subject.id,\n fetchedAt: now,\n params: { questionId },\n },\n };\n };\n\n return [\n await runEval('Math', math.prompt, math.questionId, response =>\n gradeSimpleMathResponse(response, math.expected),\n ),\n await runEval('Science', science.prompt, science.questionId, response =>\n gradeSimpleScienceResponse(\n response,\n science.correctChoice,\n science.options,\n ),\n ),\n ];\n };\n\n return {\n id:\n options.adapterId ??\n (options.family === 'nanda' ? 'nanda-simple-evals' : 'a2a-simple-evals'),\n produces: [\n `simple-evals.${options.family}_math`,\n `simple-evals.${options.family}_science`,\n ],\n timeoutMs: options.timeoutMs,\n includeRegistries: options.includeRegistries,\n excludeRegistries: options.excludeRegistries,\n appliesTo: options.appliesTo,\n collect,\n };\n}\n"],"names":["values"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es139.js","sources":["../../src/hcs-25/collectors/output-verification.ts"],"sourcesContent":["import type { Hcs25JsonValue, Hcs25Subject } from '../types';\nimport { readString } from '../signals';\nimport { Hcs25CollectorHttpError, isTimeoutError, requestJson } from './http';\nimport type {\n Hcs25CollectContext,\n Hcs25SignalAdapter,\n Hcs25SignalAdapterResult,\n} from './types';\n\n/**\n * A verification provider exposing the spec reference stats endpoint\n * `GET {baseUrl}/v1/stats/{agentId}?window={n}d`.\n */\nexport interface Hcs25VerificationProvider {\n id: string;\n baseUrl: string;\n /** On-chain signer address for attestation provenance, when available. */\n signerAddress?: string;\n /** URL to the provider's verification methodology documentation. */\n methodologyUrl?: string;\n}\n\ninterface StakeLevelStats {\n checks?: number;\n allowRate?: number;\n avgConfidence?: number;\n}\n\ninterface ProviderStatsResponse {\n allowRate?: number;\n blockRate?: number;\n uncertainRate?: number;\n avgConfidence?: number;\n totalChecks?: number;\n stakeDistribution?: Record<string, StakeLevelStats>;\n windowDays?: number;\n updatedAt?: string;\n}\n\n/**\n * Options for the output-verification signal adapter.\n */\nexport interface Hcs25OutputVerificationSignalAdapterOptions {\n /** Verification providers to query; responses are check-weight merged. */\n providers: readonly Hcs25VerificationProvider[];\n /** Lookback window in days for the stats query. Default 7. */\n windowDays?: number;\n /** Resolves the provider-side agent id; defaults to `subject.id`. */\n resolveAgentId?: (subject: Hcs25Subject) => string | null;\n timeoutMs?: number;\n includeRegistries?: readonly string[];\n excludeRegistries?: readonly string[];\n appliesTo?: (subject: Hcs25Subject) => boolean;\n}\n\nfunction clamp01(value: number | undefined): number | null {\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n return null;\n }\n return Math.min(1, Math.max(0, value));\n}\n\nfunction defaultResolveAgentId(subject: Hcs25Subject): string | null {\n const metadata = subject.metadata ?? {};\n return (\n readString(metadata, 'verificationAgentId') ??\n readString(metadata, 'nativeId') ??\n subject.id ??\n null\n );\n}\n\n/**\n * Creates the `output-verification` signal adapter: queries each configured\n * provider's `{baseUrl}/v1/stats/{agentId}?window={n}d` endpoint, merges the\n * responses weighted by check counts, and stores\n * `metadata.outputVerificationSummary` per the signal catalog.\n */\nexport function createOutputVerificationSignalAdapter(\n options: Hcs25OutputVerificationSignalAdapterOptions,\n): Hcs25SignalAdapter {\n const windowDays = options.windowDays ?? 7;\n const resolveAgentId = options.resolveAgentId ?? defaultResolveAgentId;\n\n const collect = async (\n subject: Hcs25Subject,\n context: Hcs25CollectContext,\n ): Promise<Hcs25SignalAdapterResult[]> => {\n const now = context.now.toISOString();\n const agentId = resolveAgentId(subject);\n if (!agentId || options.providers.length === 0) {\n return [{ signalId: 'verification.summary', status: 'missing' }];\n }\n\n const perProvider: Array<{\n provider: Hcs25VerificationProvider;\n stats: ProviderStatsResponse;\n }> = [];\n let sawError = false;\n\n for (const provider of options.providers) {\n const url = `${provider.baseUrl.replace(/\\/$/, '')}/v1/stats/${encodeURIComponent(agentId)}?window=${windowDays}d`;\n try {\n const stats = await requestJson<ProviderStatsResponse>(url, {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n });\n perProvider.push({ provider, stats });\n } catch (error) {\n if (\n !(error instanceof Hcs25CollectorHttpError && error.status === 404)\n ) {\n sawError = true;\n }\n }\n }\n\n if (perProvider.length === 0) {\n return [\n {\n signalId: 'verification.summary',\n status: sawError ? 'error' : 'missing',\n },\n ];\n }\n\n let totalChecks = 0;\n let allowSum = 0;\n let blockSum = 0;\n let uncertainSum = 0;\n let confidenceSum = 0;\n const stakeTotals: Record<\n string,\n { checks: number; allowRate: number; confidence: number }\n > = {};\n const providersOut: Record<string, Hcs25JsonValue>[] = [];\n\n for (const { provider, stats } of perProvider) {\n const checks = Math.max(0, Math.floor(stats.totalChecks ?? 0));\n totalChecks += checks;\n const weight = checks > 0 ? checks : 1;\n allowSum += (stats.allowRate ?? 0) * weight;\n blockSum += (stats.blockRate ?? 0) * weight;\n uncertainSum += (stats.uncertainRate ?? 0) * weight;\n confidenceSum += (stats.avgConfidence ?? 0) * weight;\n\n for (const [level, levelStats] of Object.entries(\n stats.stakeDistribution ?? {},\n )) {\n const levelChecks = Math.max(0, Math.floor(levelStats.checks ?? 0));\n if (levelChecks <= 0) {\n continue;\n }\n const bucket =\n stakeTotals[level] ??\n (stakeTotals[level] = { checks: 0, allowRate: 0, confidence: 0 });\n bucket.checks += levelChecks;\n bucket.allowRate += (levelStats.allowRate ?? 0) * levelChecks;\n bucket.confidence += (levelStats.avgConfidence ?? 0) * levelChecks;\n }\n\n providersOut.push({\n id: provider.id,\n signerAddress: provider.signerAddress ?? null,\n methodologyUrl: provider.methodologyUrl ?? null,\n checksContributed: checks,\n });\n }\n\n const divisor = perProvider.reduce(\n (sum, { stats }) =>\n sum + Math.max(0, Math.floor(stats.totalChecks ?? 0) || 1),\n 0,\n );\n\n const stakeDistribution: Record<string, Hcs25JsonValue> = {};\n for (const [level, bucket] of Object.entries(stakeTotals)) {\n stakeDistribution[level] = {\n checks: bucket.checks,\n allowRate: bucket.allowRate / bucket.checks,\n avgConfidence: bucket.confidence / bucket.checks,\n };\n }\n\n const summary: Record<string, Hcs25JsonValue> = {\n allowRate: clamp01(allowSum / divisor) ?? 0,\n blockRate: clamp01(blockSum / divisor) ?? 0,\n uncertainRate: clamp01(uncertainSum / divisor),\n avgConfidence: clamp01(confidenceSum / divisor) ?? 0,\n totalChecks,\n stakeDistribution:\n Object.keys(stakeDistribution).length > 0 ? stakeDistribution : null,\n windowDays,\n providers: providersOut,\n updatedAt: now,\n };\n\n return [\n {\n signalId: 'verification.summary',\n status: 'ok',\n value: summary.allowRate,\n fields: [{ scope: 'outputVerificationSummary', values: summary }],\n provenance: {\n source: 'output-verification',\n subjectId: agentId,\n fetchedAt: now,\n params: { windowDays, providers: options.providers.map(p => p.id) },\n },\n },\n ];\n };\n\n return {\n id: 'output-verification',\n produces: ['verification.summary'],\n timeoutMs: options.timeoutMs,\n includeRegistries: options.includeRegistries,\n excludeRegistries: options.excludeRegistries,\n appliesTo: options.appliesTo,\n collect,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ContractId, AccountId } from "@hashgraph/sdk";
|
|
2
2
|
import { ethers } from "ethers";
|
|
3
|
-
import { Logger } from "./standards-sdk.
|
|
3
|
+
import { Logger } from "./standards-sdk.es148.js";
|
|
4
4
|
class MapCache {
|
|
5
5
|
constructor() {
|
|
6
6
|
this.cache = /* @__PURE__ */ new Map();
|
|
@@ -1,109 +1,275 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
function optionsOf(value) {
|
|
13
|
-
if (value === void 0) {
|
|
14
|
-
return void 0;
|
|
1
|
+
import { isJsonObject } from "./standards-sdk.es201.js";
|
|
2
|
+
import { generateSimpleMathQuestion, sampleSimpleScienceQuestion, gradeSimpleMathResponse, gradeSimpleScienceResponse } from "./standards-sdk.es184.js";
|
|
3
|
+
import "./standards-sdk.es198.js";
|
|
4
|
+
import "./standards-sdk.es199.js";
|
|
5
|
+
import "./standards-sdk.es200.js";
|
|
6
|
+
import "./standards-sdk.es183.js";
|
|
7
|
+
import { resolveSubjectEndpoint } from "./standards-sdk.es127.js";
|
|
8
|
+
import { isTimeoutError } from "./standards-sdk.es122.js";
|
|
9
|
+
function defaultExtractResponseText(data) {
|
|
10
|
+
if (typeof data === "string") {
|
|
11
|
+
return data;
|
|
15
12
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
function createHcs25SignalAdapters(options) {
|
|
19
|
-
const adapters = [];
|
|
20
|
-
const availability = optionsOf(options.availability);
|
|
21
|
-
if (availability) {
|
|
22
|
-
adapters.push(createAvailabilitySignalAdapter(availability));
|
|
23
|
-
}
|
|
24
|
-
const connectivity = optionsOf(options.connectivity);
|
|
25
|
-
if (connectivity) {
|
|
26
|
-
adapters.push(createConnectivitySignalAdapter(connectivity));
|
|
27
|
-
}
|
|
28
|
-
const ethos = optionsOf(options.ethos);
|
|
29
|
-
if (ethos) {
|
|
30
|
-
adapters.push(createEthosSignalAdapter(ethos));
|
|
31
|
-
}
|
|
32
|
-
const ossPopularity = optionsOf(options.ossPopularity);
|
|
33
|
-
if (ossPopularity) {
|
|
34
|
-
adapters.push(createOssPopularitySignalAdapter(ossPopularity));
|
|
35
|
-
}
|
|
36
|
-
const agentverse = optionsOf(options.agentverse);
|
|
37
|
-
if (agentverse) {
|
|
38
|
-
adapters.push(createAgentverseInsightsSignalAdapter(agentverse));
|
|
39
|
-
}
|
|
40
|
-
const huggingFace = optionsOf(options.huggingFace);
|
|
41
|
-
if (huggingFace) {
|
|
42
|
-
adapters.push(createHuggingFaceSignalAdapter(huggingFace));
|
|
13
|
+
if (!isJsonObject(data)) {
|
|
14
|
+
return null;
|
|
43
15
|
}
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
if (options.erc8004) {
|
|
52
|
-
adapters.push(createErc8004SignalAdapter(options.erc8004));
|
|
53
|
-
}
|
|
54
|
-
const openrouterEvals = optionsOf(options.openrouterEvals);
|
|
55
|
-
if (openrouterEvals) {
|
|
56
|
-
adapters.push(createOpenRouterEvalsSignalAdapter(openrouterEvals));
|
|
57
|
-
}
|
|
58
|
-
const chatbotArena = optionsOf(options.chatbotArena);
|
|
59
|
-
if (chatbotArena) {
|
|
60
|
-
adapters.push(createChatbotArenaSignalAdapter(chatbotArena));
|
|
61
|
-
}
|
|
62
|
-
const openLlm = optionsOf(options.openLlm);
|
|
63
|
-
if (openLlm) {
|
|
64
|
-
adapters.push(createOpenLlmSignalAdapter(openLlm));
|
|
16
|
+
const record = data;
|
|
17
|
+
for (const key of ["response", "text", "message", "content", "answer"]) {
|
|
18
|
+
const value = record[key];
|
|
19
|
+
if (typeof value === "string" && value.length > 0) {
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
65
22
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
)
|
|
23
|
+
const choices = record.choices;
|
|
24
|
+
if (Array.isArray(choices) && choices.length > 0) {
|
|
25
|
+
const first = choices[0];
|
|
26
|
+
if (isJsonObject(first)) {
|
|
27
|
+
const message = first.message;
|
|
28
|
+
if (isJsonObject(message) && typeof message.content === "string") {
|
|
29
|
+
return message.content;
|
|
30
|
+
}
|
|
31
|
+
if (typeof first.text === "string") {
|
|
32
|
+
return first.text;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
70
35
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
);
|
|
36
|
+
const partsText = (value) => {
|
|
37
|
+
if (!Array.isArray(value)) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const texts = [];
|
|
41
|
+
for (const part of value) {
|
|
42
|
+
if (isJsonObject(part) && typeof part.text === "string") {
|
|
43
|
+
texts.push(part.text);
|
|
44
|
+
}
|
|
81
45
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
...agentverseEvals
|
|
90
|
-
})
|
|
91
|
-
);
|
|
46
|
+
return texts.length > 0 ? texts.join("\n") : null;
|
|
47
|
+
};
|
|
48
|
+
const result = record.result;
|
|
49
|
+
if (isJsonObject(result)) {
|
|
50
|
+
const direct = partsText(result.parts);
|
|
51
|
+
if (direct) {
|
|
52
|
+
return direct;
|
|
92
53
|
}
|
|
93
|
-
const
|
|
94
|
-
if (
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
|
|
54
|
+
const status = result.status;
|
|
55
|
+
if (isJsonObject(status)) {
|
|
56
|
+
const message = status.message;
|
|
57
|
+
if (isJsonObject(message)) {
|
|
58
|
+
const nested = partsText(message.parts);
|
|
59
|
+
if (nested) {
|
|
60
|
+
return nested;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
102
63
|
}
|
|
103
64
|
}
|
|
104
|
-
return
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
function createJsonHttpEvalTransport(options) {
|
|
68
|
+
const extractResponse = options.extractResponse ?? defaultExtractResponseText;
|
|
69
|
+
return {
|
|
70
|
+
async sendPrompt({ prompt, subject, context, sessionId }) {
|
|
71
|
+
const url = typeof options.endpoint === "function" ? options.endpoint(subject) : options.endpoint;
|
|
72
|
+
if (!url) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
const body = options.buildBody?.(prompt, sessionId) ?? (sessionId ? { message: prompt, sessionId } : { message: prompt });
|
|
76
|
+
const response = await context.fetch(url, {
|
|
77
|
+
method: "POST",
|
|
78
|
+
headers: { "content-type": "application/json", ...options.headers },
|
|
79
|
+
body: JSON.stringify(body),
|
|
80
|
+
signal: context.signal
|
|
81
|
+
});
|
|
82
|
+
if (!response.ok) {
|
|
83
|
+
if (response.status === 404) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
throw new Error(`eval endpoint returned HTTP ${response.status}`);
|
|
87
|
+
}
|
|
88
|
+
const data = await response.json();
|
|
89
|
+
return extractResponse(data);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function createA2aEvalTransport(options) {
|
|
94
|
+
return {
|
|
95
|
+
async sendPrompt({ prompt, subject, context, sessionId }) {
|
|
96
|
+
const url = (typeof options.endpoint === "function" ? options.endpoint(subject) : options.endpoint) ?? resolveSubjectEndpoint(subject);
|
|
97
|
+
if (!url) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const response = await context.fetch(url, {
|
|
101
|
+
method: "POST",
|
|
102
|
+
headers: {
|
|
103
|
+
"content-type": "application/json",
|
|
104
|
+
...options.headers
|
|
105
|
+
},
|
|
106
|
+
body: JSON.stringify({
|
|
107
|
+
jsonrpc: "2.0",
|
|
108
|
+
id: sessionId ?? `eval-${context.now.getTime()}`,
|
|
109
|
+
method: "message/send",
|
|
110
|
+
params: {
|
|
111
|
+
message: {
|
|
112
|
+
role: "user",
|
|
113
|
+
parts: [{ kind: "text", text: prompt }]
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}),
|
|
117
|
+
signal: context.signal
|
|
118
|
+
});
|
|
119
|
+
if (!response.ok) {
|
|
120
|
+
if (response.status === 404) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
throw new Error(`a2a endpoint returned HTTP ${response.status}`);
|
|
124
|
+
}
|
|
125
|
+
const data = await response.json();
|
|
126
|
+
return defaultExtractResponseText(data);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function pickTransport(transport, subject) {
|
|
131
|
+
if (typeof transport.sendPrompt === "function") {
|
|
132
|
+
return transport;
|
|
133
|
+
}
|
|
134
|
+
const map = transport;
|
|
135
|
+
const protocol = subject.protocol?.toLowerCase();
|
|
136
|
+
return (protocol ? map[protocol] : void 0) ?? map.default ?? map.http ?? null;
|
|
137
|
+
}
|
|
138
|
+
function evalField(prefix, family, suffix) {
|
|
139
|
+
return `${prefix}${family}${suffix}`;
|
|
140
|
+
}
|
|
141
|
+
function createSimpleEvalsSignalAdapter(options) {
|
|
142
|
+
const prefix = options.family === "nanda" ? "nandaSimple" : "a2aSimple";
|
|
143
|
+
const rng = options.rng ?? Math.random;
|
|
144
|
+
const collect = async (subject, context) => {
|
|
145
|
+
const now = context.now.toISOString();
|
|
146
|
+
const transport = pickTransport(options.transport, subject);
|
|
147
|
+
const sessionId = typeof options.sessionId === "function" ? options.sessionId(subject) : options.sessionId;
|
|
148
|
+
if (!transport) {
|
|
149
|
+
return ["Math", "Science"].map((family) => ({
|
|
150
|
+
signalId: `simple-evals.${options.family}_${family.toLowerCase()}`,
|
|
151
|
+
status: "missing",
|
|
152
|
+
fields: [
|
|
153
|
+
{
|
|
154
|
+
scope: "additional",
|
|
155
|
+
values: {
|
|
156
|
+
[evalField(prefix, family, "Status")]: "skipped",
|
|
157
|
+
[evalField(prefix, family, "Error")]: "no transport for protocol",
|
|
158
|
+
[evalField(prefix, family, "UpdatedAt")]: now
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
}));
|
|
163
|
+
}
|
|
164
|
+
const math = generateSimpleMathQuestion(rng);
|
|
165
|
+
const science = sampleSimpleScienceQuestion(rng);
|
|
166
|
+
const runEval = async (family, prompt, questionId, grade) => {
|
|
167
|
+
let response = null;
|
|
168
|
+
let status;
|
|
169
|
+
try {
|
|
170
|
+
response = await transport.sendPrompt({
|
|
171
|
+
prompt,
|
|
172
|
+
subject,
|
|
173
|
+
context,
|
|
174
|
+
sessionId
|
|
175
|
+
});
|
|
176
|
+
if (response === null) {
|
|
177
|
+
status = "missing";
|
|
178
|
+
} else if (response.trim().length === 0) {
|
|
179
|
+
status = "empty";
|
|
180
|
+
} else {
|
|
181
|
+
const graded = grade(response);
|
|
182
|
+
status = graded.status;
|
|
183
|
+
const score = graded.score;
|
|
184
|
+
const values2 = {
|
|
185
|
+
[evalField(prefix, family, "Score")]: score,
|
|
186
|
+
[evalField(prefix, family, "Status")]: status,
|
|
187
|
+
[evalField(prefix, family, "QuestionId")]: questionId,
|
|
188
|
+
[evalField(prefix, family, "Response")]: response,
|
|
189
|
+
[evalField(prefix, family, "UpdatedAt")]: now
|
|
190
|
+
};
|
|
191
|
+
if (options.family === "a2a" && sessionId) {
|
|
192
|
+
values2[evalField(prefix, family, "SessionId")] = sessionId;
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
signalId: `simple-evals.${options.family}_${family.toLowerCase()}`,
|
|
196
|
+
status: "ok",
|
|
197
|
+
value: score,
|
|
198
|
+
fields: [{ scope: "additional", values: values2 }],
|
|
199
|
+
provenance: {
|
|
200
|
+
source: "simple-evals",
|
|
201
|
+
subjectId: subject.id,
|
|
202
|
+
fetchedAt: now,
|
|
203
|
+
params: { questionId }
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
} catch (error) {
|
|
208
|
+
status = isTimeoutError(error) ? "timeout" : "error";
|
|
209
|
+
response = null;
|
|
210
|
+
}
|
|
211
|
+
const failedScore = 0;
|
|
212
|
+
const values = {
|
|
213
|
+
[evalField(prefix, family, "Score")]: failedScore,
|
|
214
|
+
[evalField(prefix, family, "Status")]: status,
|
|
215
|
+
[evalField(prefix, family, "QuestionId")]: questionId,
|
|
216
|
+
[evalField(prefix, family, "UpdatedAt")]: now
|
|
217
|
+
};
|
|
218
|
+
if (status === "missing") {
|
|
219
|
+
values[evalField(prefix, family, "Score")] = null;
|
|
220
|
+
}
|
|
221
|
+
if (options.family === "a2a" && sessionId) {
|
|
222
|
+
values[evalField(prefix, family, "SessionId")] = sessionId;
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
signalId: `simple-evals.${options.family}_${family.toLowerCase()}`,
|
|
226
|
+
status: status === "missing" ? "missing" : status === "timeout" ? "timeout" : status === "error" ? "error" : "ok",
|
|
227
|
+
value: status === "missing" ? null : failedScore,
|
|
228
|
+
fields: [{ scope: "additional", values }],
|
|
229
|
+
provenance: {
|
|
230
|
+
source: "simple-evals",
|
|
231
|
+
subjectId: subject.id,
|
|
232
|
+
fetchedAt: now,
|
|
233
|
+
params: { questionId }
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
};
|
|
237
|
+
return [
|
|
238
|
+
await runEval(
|
|
239
|
+
"Math",
|
|
240
|
+
math.prompt,
|
|
241
|
+
math.questionId,
|
|
242
|
+
(response) => gradeSimpleMathResponse(response, math.expected)
|
|
243
|
+
),
|
|
244
|
+
await runEval(
|
|
245
|
+
"Science",
|
|
246
|
+
science.prompt,
|
|
247
|
+
science.questionId,
|
|
248
|
+
(response) => gradeSimpleScienceResponse(
|
|
249
|
+
response,
|
|
250
|
+
science.correctChoice,
|
|
251
|
+
science.options
|
|
252
|
+
)
|
|
253
|
+
)
|
|
254
|
+
];
|
|
255
|
+
};
|
|
256
|
+
return {
|
|
257
|
+
id: options.adapterId ?? (options.family === "nanda" ? "nanda-simple-evals" : "a2a-simple-evals"),
|
|
258
|
+
produces: [
|
|
259
|
+
`simple-evals.${options.family}_math`,
|
|
260
|
+
`simple-evals.${options.family}_science`
|
|
261
|
+
],
|
|
262
|
+
timeoutMs: options.timeoutMs,
|
|
263
|
+
includeRegistries: options.includeRegistries,
|
|
264
|
+
excludeRegistries: options.excludeRegistries,
|
|
265
|
+
appliesTo: options.appliesTo,
|
|
266
|
+
collect
|
|
267
|
+
};
|
|
105
268
|
}
|
|
106
269
|
export {
|
|
107
|
-
|
|
270
|
+
createA2aEvalTransport,
|
|
271
|
+
createJsonHttpEvalTransport,
|
|
272
|
+
createSimpleEvalsSignalAdapter,
|
|
273
|
+
defaultExtractResponseText
|
|
108
274
|
};
|
|
109
275
|
//# sourceMappingURL=standards-sdk.es140.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es140.js","sources":["../../src/hcs-25/collectors/catalog.ts"],"sourcesContent":["import type { Hcs25SignalAdapter } from './types';\nimport {\n createAcpSignalAdapter,\n type Hcs25AcpSignalAdapterOptions,\n} from './acp';\nimport {\n createAgentverseInsightsSignalAdapter,\n type Hcs25AgentverseSignalAdapterOptions,\n} from './agentverse';\nimport {\n createAvailabilitySignalAdapter,\n type Hcs25AvailabilitySignalAdapterOptions,\n} from './availability';\nimport {\n createConnectivitySignalAdapter,\n type Hcs25ConnectivitySignalAdapterOptions,\n} from './connectivity';\nimport {\n createErc8004SignalAdapter,\n type Hcs25Erc8004SignalAdapterOptions,\n} from './erc8004';\nimport {\n createEthosSignalAdapter,\n type Hcs25EthosSignalAdapterOptions,\n} from './ethos';\nimport {\n createChatbotArenaSignalAdapter,\n createHuggingFaceSignalAdapter,\n createOpenLlmSignalAdapter,\n createOpenRouterEvalsSignalAdapter,\n type Hcs25ChatbotArenaSignalAdapterOptions,\n type Hcs25HuggingFaceSignalAdapterOptions,\n type Hcs25OpenLlmSignalAdapterOptions,\n type Hcs25OpenRouterEvalsSignalAdapterOptions,\n} from './model-evals';\nimport {\n createOssPopularitySignalAdapter,\n type Hcs25OssPopularitySignalAdapterOptions,\n} from './oss-popularity';\nimport {\n createOutputVerificationSignalAdapter,\n type Hcs25OutputVerificationSignalAdapterOptions,\n} from './output-verification';\nimport {\n createSimpleEvalsSignalAdapter,\n type Hcs25SimpleEvalsSignalAdapterOptions,\n} from './simple-evals';\nimport {\n createX402SignalAdapter,\n type Hcs25X402SignalAdapterOptions,\n} from './x402';\n\ntype Enable<TOptions> = true | TOptions;\n\ntype OmitRequired<TOptions, TKey extends keyof TOptions> = Enable<\n Omit<TOptions, TKey> & Partial<Pick<TOptions, TKey>>\n>;\n\n/**\n * Per-family configuration for {@link createHcs25SignalAdapters}. Each key\n * accepts `true` (enable with defaults) or an options object; keys omitted\n * entirely are disabled. `x402` scans on-chain usage by default (viem);\n * `openrouterEvals`, `chatbotArena`, and `openLlm` ship with the\n * production-shaped sources. Families still requiring configuration:\n * `acp`, `erc8004`, `outputVerification`, `simpleEvals` — pass the options\n * object.\n */\nexport interface Hcs25SignalAdaptersOptions {\n availability?: Enable<Hcs25AvailabilitySignalAdapterOptions>;\n connectivity?: Enable<Hcs25ConnectivitySignalAdapterOptions>;\n ethos?: Enable<Hcs25EthosSignalAdapterOptions>;\n ossPopularity?: Enable<Hcs25OssPopularitySignalAdapterOptions>;\n agentverse?: Enable<Hcs25AgentverseSignalAdapterOptions>;\n huggingFace?: Enable<Hcs25HuggingFaceSignalAdapterOptions>;\n x402?: Enable<Hcs25X402SignalAdapterOptions>;\n acp?: Hcs25AcpSignalAdapterOptions;\n erc8004?: Hcs25Erc8004SignalAdapterOptions;\n openrouterEvals?: Enable<Hcs25OpenRouterEvalsSignalAdapterOptions>;\n chatbotArena?: Enable<Hcs25ChatbotArenaSignalAdapterOptions>;\n openLlm?: Enable<Hcs25OpenLlmSignalAdapterOptions>;\n outputVerification?: Hcs25OutputVerificationSignalAdapterOptions;\n /**\n * Simple-evals adapters per subject family. `a2a` covers A2A/HTTP\n * subjects, `agentverse` is the same schema scoped to AgentVerse/uAgent\n * registries, and `nanda` writes the `nandaSimple*` fields.\n */\n simpleEvals?: {\n a2a?: OmitRequired<Hcs25SimpleEvalsSignalAdapterOptions, 'family'>;\n agentverse?: OmitRequired<Hcs25SimpleEvalsSignalAdapterOptions, 'family'>;\n nanda?: OmitRequired<Hcs25SimpleEvalsSignalAdapterOptions, 'family'>;\n };\n}\n\nfunction optionsOf<TOptions>(\n value: Enable<TOptions> | undefined,\n): TOptions | undefined {\n if (value === undefined) {\n return undefined;\n }\n return (value === true ? {} : value) as TOptions;\n}\n\n/**\n * Builds the catalog of signal adapters for enabled families. Adapters are\n * returned in a deterministic order; feed them to\n * {@link collectHcs25Signals} (or {@link collectAndScoreTrustScore} for the\n * full collect → score pipeline).\n */\nexport function createHcs25SignalAdapters(\n options: Hcs25SignalAdaptersOptions,\n): Hcs25SignalAdapter[] {\n const adapters: Hcs25SignalAdapter[] = [];\n\n const availability = optionsOf(options.availability);\n if (availability) {\n adapters.push(createAvailabilitySignalAdapter(availability));\n }\n const connectivity = optionsOf(options.connectivity);\n if (connectivity) {\n adapters.push(createConnectivitySignalAdapter(connectivity));\n }\n const ethos = optionsOf(options.ethos);\n if (ethos) {\n adapters.push(createEthosSignalAdapter(ethos));\n }\n const ossPopularity = optionsOf(options.ossPopularity);\n if (ossPopularity) {\n adapters.push(createOssPopularitySignalAdapter(ossPopularity));\n }\n const agentverse = optionsOf(options.agentverse);\n if (agentverse) {\n adapters.push(createAgentverseInsightsSignalAdapter(agentverse));\n }\n const huggingFace = optionsOf(options.huggingFace);\n if (huggingFace) {\n adapters.push(createHuggingFaceSignalAdapter(huggingFace));\n }\n\n const x402 = optionsOf(options.x402);\n if (x402) {\n adapters.push(createX402SignalAdapter(x402));\n }\n if (options.acp) {\n adapters.push(createAcpSignalAdapter(options.acp));\n }\n if (options.erc8004) {\n adapters.push(createErc8004SignalAdapter(options.erc8004));\n }\n const openrouterEvals = optionsOf(options.openrouterEvals);\n if (openrouterEvals) {\n adapters.push(createOpenRouterEvalsSignalAdapter(openrouterEvals));\n }\n const chatbotArena = optionsOf(options.chatbotArena);\n if (chatbotArena) {\n adapters.push(createChatbotArenaSignalAdapter(chatbotArena));\n }\n const openLlm = optionsOf(options.openLlm);\n if (openLlm) {\n adapters.push(createOpenLlmSignalAdapter(openLlm));\n }\n if (options.outputVerification) {\n adapters.push(\n createOutputVerificationSignalAdapter(options.outputVerification),\n );\n }\n\n if (options.simpleEvals) {\n const a2a = optionsOf(options.simpleEvals.a2a);\n if (a2a) {\n adapters.push(\n createSimpleEvalsSignalAdapter({\n family: 'a2a',\n excludeRegistries: ['nanda', 'agentverse', 'uagent'],\n ...a2a,\n }),\n );\n }\n const agentverseEvals = optionsOf(options.simpleEvals.agentverse);\n if (agentverseEvals) {\n adapters.push(\n createSimpleEvalsSignalAdapter({\n family: 'a2a',\n adapterId: 'agentverse-simple-evals',\n includeRegistries: ['agentverse', 'uagent'],\n ...agentverseEvals,\n }),\n );\n }\n const nanda = optionsOf(options.simpleEvals.nanda);\n if (nanda) {\n adapters.push(\n createSimpleEvalsSignalAdapter({\n family: 'nanda',\n includeRegistries: ['nanda'],\n ...nanda,\n }),\n );\n }\n }\n\n return adapters;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AA6FA,SAAS,UACP,OACsB;AACtB,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AACA,SAAQ,UAAU,OAAO,CAAA,IAAK;AAChC;AAQO,SAAS,0BACd,SACsB;AACtB,QAAM,WAAiC,CAAA;AAEvC,QAAM,eAAe,UAAU,QAAQ,YAAY;AACnD,MAAI,cAAc;AAChB,aAAS,KAAK,gCAAgC,YAAY,CAAC;AAAA,EAC7D;AACA,QAAM,eAAe,UAAU,QAAQ,YAAY;AACnD,MAAI,cAAc;AAChB,aAAS,KAAK,gCAAgC,YAAY,CAAC;AAAA,EAC7D;AACA,QAAM,QAAQ,UAAU,QAAQ,KAAK;AACrC,MAAI,OAAO;AACT,aAAS,KAAK,yBAAyB,KAAK,CAAC;AAAA,EAC/C;AACA,QAAM,gBAAgB,UAAU,QAAQ,aAAa;AACrD,MAAI,eAAe;AACjB,aAAS,KAAK,iCAAiC,aAAa,CAAC;AAAA,EAC/D;AACA,QAAM,aAAa,UAAU,QAAQ,UAAU;AAC/C,MAAI,YAAY;AACd,aAAS,KAAK,sCAAsC,UAAU,CAAC;AAAA,EACjE;AACA,QAAM,cAAc,UAAU,QAAQ,WAAW;AACjD,MAAI,aAAa;AACf,aAAS,KAAK,+BAA+B,WAAW,CAAC;AAAA,EAC3D;AAEA,QAAM,OAAO,UAAU,QAAQ,IAAI;AACnC,MAAI,MAAM;AACR,aAAS,KAAK,wBAAwB,IAAI,CAAC;AAAA,EAC7C;AACA,MAAI,QAAQ,KAAK;AACf,aAAS,KAAK,uBAAuB,QAAQ,GAAG,CAAC;AAAA,EACnD;AACA,MAAI,QAAQ,SAAS;AACnB,aAAS,KAAK,2BAA2B,QAAQ,OAAO,CAAC;AAAA,EAC3D;AACA,QAAM,kBAAkB,UAAU,QAAQ,eAAe;AACzD,MAAI,iBAAiB;AACnB,aAAS,KAAK,mCAAmC,eAAe,CAAC;AAAA,EACnE;AACA,QAAM,eAAe,UAAU,QAAQ,YAAY;AACnD,MAAI,cAAc;AAChB,aAAS,KAAK,gCAAgC,YAAY,CAAC;AAAA,EAC7D;AACA,QAAM,UAAU,UAAU,QAAQ,OAAO;AACzC,MAAI,SAAS;AACX,aAAS,KAAK,2BAA2B,OAAO,CAAC;AAAA,EACnD;AACA,MAAI,QAAQ,oBAAoB;AAC9B,aAAS;AAAA,MACP,sCAAsC,QAAQ,kBAAkB;AAAA,IAAA;AAAA,EAEpE;AAEA,MAAI,QAAQ,aAAa;AACvB,UAAM,MAAM,UAAU,QAAQ,YAAY,GAAG;AAC7C,QAAI,KAAK;AACP,eAAS;AAAA,QACP,+BAA+B;AAAA,UAC7B,QAAQ;AAAA,UACR,mBAAmB,CAAC,SAAS,cAAc,QAAQ;AAAA,UACnD,GAAG;AAAA,QAAA,CACJ;AAAA,MAAA;AAAA,IAEL;AACA,UAAM,kBAAkB,UAAU,QAAQ,YAAY,UAAU;AAChE,QAAI,iBAAiB;AACnB,eAAS;AAAA,QACP,+BAA+B;AAAA,UAC7B,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,mBAAmB,CAAC,cAAc,QAAQ;AAAA,UAC1C,GAAG;AAAA,QAAA,CACJ;AAAA,MAAA;AAAA,IAEL;AACA,UAAM,QAAQ,UAAU,QAAQ,YAAY,KAAK;AACjD,QAAI,OAAO;AACT,eAAS;AAAA,QACP,+BAA+B;AAAA,UAC7B,QAAQ;AAAA,UACR,mBAAmB,CAAC,OAAO;AAAA,UAC3B,GAAG;AAAA,QAAA,CACJ;AAAA,MAAA;AAAA,IAEL;AAAA,EACF;AAEA,SAAO;AACT;"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es140.js","sources":["../../src/hcs-25/collectors/simple-evals.ts"],"sourcesContent":["import type { Hcs25JsonValue, Hcs25Subject } from '../types';\nimport {\n generateSimpleMathQuestion,\n gradeSimpleMathResponse,\n gradeSimpleScienceResponse,\n isJsonObject,\n readString,\n sampleSimpleScienceQuestion,\n type Hcs25SimpleEvalStatus,\n} from '../signals';\nimport { resolveSubjectEndpoint } from './endpoints';\nimport { isTimeoutError } from './http';\nimport type {\n Hcs25CollectContext,\n Hcs25SignalAdapter,\n Hcs25SignalAdapterResult,\n} from './types';\n\n/**\n * A transport that delivers an eval prompt to the subject and returns the\n * response text (or null when the subject cannot be reached in a way the\n * transport understands).\n */\nexport interface Hcs25EvalTransport {\n sendPrompt(input: {\n prompt: string;\n subject: Hcs25Subject;\n context: Hcs25CollectContext;\n sessionId?: string;\n }): Promise<string | null>;\n}\n\n/**\n * Extracts response text from common JSON reply shapes: `response`, `text`,\n * `message`, `content`, `choices[0].message.content` (OpenAI-style),\n * `result.parts[].text` / `result.status.message.parts[].text` (A2A-style).\n */\nexport function defaultExtractResponseText(data: unknown): string | null {\n if (typeof data === 'string') {\n return data;\n }\n if (!isJsonObject(data as Hcs25JsonValue)) {\n return null;\n }\n const record = data as Record<string, Hcs25JsonValue>;\n\n for (const key of ['response', 'text', 'message', 'content', 'answer']) {\n const value = record[key];\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n }\n\n const choices = record.choices;\n if (Array.isArray(choices) && choices.length > 0) {\n const first = choices[0];\n if (isJsonObject(first)) {\n const message = first.message;\n if (isJsonObject(message) && typeof message.content === 'string') {\n return message.content;\n }\n if (typeof first.text === 'string') {\n return first.text;\n }\n }\n }\n\n const partsText = (value: Hcs25JsonValue | undefined): string | null => {\n if (!Array.isArray(value)) {\n return null;\n }\n const texts: string[] = [];\n for (const part of value) {\n if (isJsonObject(part) && typeof part.text === 'string') {\n texts.push(part.text);\n }\n }\n return texts.length > 0 ? texts.join('\\n') : null;\n };\n\n const result = record.result;\n if (isJsonObject(result)) {\n const direct = partsText(result.parts);\n if (direct) {\n return direct;\n }\n const status = result.status;\n if (isJsonObject(status)) {\n const message = status.message;\n if (isJsonObject(message)) {\n const nested = partsText(message.parts);\n if (nested) {\n return nested;\n }\n }\n }\n }\n\n return null;\n}\n\n/**\n * Options for {@link createJsonHttpEvalTransport}.\n */\nexport interface Hcs25JsonHttpEvalTransportOptions {\n /** Endpoint URL (constant or resolved per subject). */\n endpoint: string | ((subject: Hcs25Subject) => string | null);\n /** Extra headers (e.g. authorization). */\n headers?: Record<string, string>;\n /**\n * Request body builder; default posts `{message: prompt}` (plus\n * `sessionId` when present).\n */\n buildBody?: (prompt: string, sessionId?: string) => unknown;\n /** Response extractor; defaults to {@link defaultExtractResponseText}. */\n extractResponse?: (data: unknown) => string | null;\n}\n\n/**\n * Creates a generic JSON HTTP transport: POSTs the prompt and extracts the\n * reply text from common response shapes.\n */\nexport function createJsonHttpEvalTransport(\n options: Hcs25JsonHttpEvalTransportOptions,\n): Hcs25EvalTransport {\n const extractResponse = options.extractResponse ?? defaultExtractResponseText;\n return {\n async sendPrompt({ prompt, subject, context, sessionId }) {\n const url =\n typeof options.endpoint === 'function'\n ? options.endpoint(subject)\n : options.endpoint;\n if (!url) {\n return null;\n }\n const body =\n options.buildBody?.(prompt, sessionId) ??\n (sessionId ? { message: prompt, sessionId } : { message: prompt });\n const response = await context.fetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json', ...options.headers },\n body: JSON.stringify(body),\n signal: context.signal,\n });\n if (!response.ok) {\n if (response.status === 404) {\n return null;\n }\n throw new Error(`eval endpoint returned HTTP ${response.status}`);\n }\n const data = (await response.json()) as unknown;\n return extractResponse(data);\n },\n };\n}\n\n/**\n * Creates an A2A-style transport: JSON-RPC `message/send` to the resolved\n * endpoint (or `options.endpoint`), extracting reply text from the task\n * result's parts.\n */\nexport function createA2aEvalTransport(options: {\n endpoint?: string | ((subject: Hcs25Subject) => string | null);\n headers?: Record<string, string>;\n}): Hcs25EvalTransport {\n return {\n async sendPrompt({ prompt, subject, context, sessionId }) {\n const url =\n (typeof options.endpoint === 'function'\n ? options.endpoint(subject)\n : options.endpoint) ?? resolveSubjectEndpoint(subject);\n if (!url) {\n return null;\n }\n const response = await context.fetch(url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...options.headers,\n },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: sessionId ?? `eval-${context.now.getTime()}`,\n method: 'message/send',\n params: {\n message: {\n role: 'user',\n parts: [{ kind: 'text', text: prompt }],\n },\n },\n }),\n signal: context.signal,\n });\n if (!response.ok) {\n if (response.status === 404) {\n return null;\n }\n throw new Error(`a2a endpoint returned HTTP ${response.status}`);\n }\n const data = (await response.json()) as unknown;\n return defaultExtractResponseText(data);\n },\n };\n}\n\n/**\n * The field-prefix family for a simple-evals collector: `a2a` writes the\n * shared `a2aSimple*` schema (also used by AgentVerse/uAgent), `nanda`\n * writes `nandaSimple*`.\n */\nexport type Hcs25SimpleEvalsFamily = 'a2a' | 'nanda';\n\n/**\n * Options for {@link createSimpleEvalsSignalAdapter}.\n */\nexport interface Hcs25SimpleEvalsSignalAdapterOptions {\n family: Hcs25SimpleEvalsFamily;\n /**\n * Adapter identifier override (e.g. `agentverse-simple-evals` for the\n * AgentVerse-scoped variant of the `a2a` family).\n */\n adapterId?: string;\n /**\n * Transport(s) used to deliver prompts. A single transport applies to all\n * subjects; a record selects by `subject.protocol` (falling back to\n * `default` / `http`).\n */\n transport: Hcs25EvalTransport | Record<string, Hcs25EvalTransport>;\n /** Seeded RNG for deterministic question generation in tests. */\n rng?: () => number;\n /** Session/conversation id to correlate eval runs (a2a schema). */\n sessionId?: string | ((subject: Hcs25Subject) => string | undefined);\n timeoutMs?: number;\n includeRegistries?: readonly string[];\n excludeRegistries?: readonly string[];\n appliesTo?: (subject: Hcs25Subject) => boolean;\n}\n\nfunction pickTransport(\n transport: Hcs25EvalTransport | Record<string, Hcs25EvalTransport>,\n subject: Hcs25Subject,\n): Hcs25EvalTransport | null {\n if (typeof (transport as Hcs25EvalTransport).sendPrompt === 'function') {\n return transport as Hcs25EvalTransport;\n }\n const map = transport as Record<string, Hcs25EvalTransport>;\n const protocol = subject.protocol?.toLowerCase();\n return (\n (protocol ? map[protocol] : undefined) ?? map.default ?? map.http ?? null\n );\n}\n\nfunction evalField(\n prefix: string,\n family: 'Math' | 'Science',\n suffix: string,\n): string {\n return `${prefix}${family}${suffix}`;\n}\n\n/**\n * Creates a simple-evals signal adapter for a field family: generates a\n * SimpleMath and a SimpleScience prompt, dispatches them via the configured\n * transport, grades the responses per the methodology (binary 0/100), and\n * stores the `{a2a|nanda}Simple{Math,Science}*` fields under\n * `metadata.additional`.\n */\nexport function createSimpleEvalsSignalAdapter(\n options: Hcs25SimpleEvalsSignalAdapterOptions,\n): Hcs25SignalAdapter {\n const prefix = options.family === 'nanda' ? 'nandaSimple' : 'a2aSimple';\n const rng = options.rng ?? Math.random;\n\n const collect = async (\n subject: Hcs25Subject,\n context: Hcs25CollectContext,\n ): Promise<Hcs25SignalAdapterResult[]> => {\n const now = context.now.toISOString();\n const transport = pickTransport(options.transport, subject);\n const sessionId =\n typeof options.sessionId === 'function'\n ? options.sessionId(subject)\n : options.sessionId;\n\n if (!transport) {\n return ['Math', 'Science'].map(family => ({\n signalId: `simple-evals.${options.family}_${family.toLowerCase()}`,\n status: 'missing' as const,\n fields: [\n {\n scope: 'additional' as const,\n values: {\n [evalField(prefix, family as 'Math' | 'Science', 'Status')]:\n 'skipped',\n [evalField(prefix, family as 'Math' | 'Science', 'Error')]:\n 'no transport for protocol',\n [evalField(prefix, family as 'Math' | 'Science', 'UpdatedAt')]:\n now,\n },\n },\n ],\n }));\n }\n\n const math = generateSimpleMathQuestion(rng);\n const science = sampleSimpleScienceQuestion(rng);\n\n const runEval = async (\n family: 'Math' | 'Science',\n prompt: string,\n questionId: string,\n grade: (response: string) => {\n status: Hcs25SimpleEvalStatus;\n score: number;\n },\n ): Promise<Hcs25SignalAdapterResult> => {\n let response: string | null = null;\n let status: Hcs25SimpleEvalStatus;\n try {\n response = await transport.sendPrompt({\n prompt,\n subject,\n context,\n sessionId,\n });\n if (response === null) {\n status = 'missing';\n } else if (response.trim().length === 0) {\n status = 'empty';\n } else {\n const graded = grade(response);\n status = graded.status;\n const score = graded.score;\n const values: Record<string, Hcs25JsonValue> = {\n [evalField(prefix, family, 'Score')]: score,\n [evalField(prefix, family, 'Status')]: status,\n [evalField(prefix, family, 'QuestionId')]: questionId,\n [evalField(prefix, family, 'Response')]: response,\n [evalField(prefix, family, 'UpdatedAt')]: now,\n };\n if (options.family === 'a2a' && sessionId) {\n values[evalField(prefix, family, 'SessionId')] = sessionId;\n }\n return {\n signalId: `simple-evals.${options.family}_${family.toLowerCase()}`,\n status: 'ok',\n value: score,\n fields: [{ scope: 'additional', values }],\n provenance: {\n source: 'simple-evals',\n subjectId: subject.id,\n fetchedAt: now,\n params: { questionId },\n },\n };\n }\n } catch (error) {\n status = isTimeoutError(error) ? 'timeout' : 'error';\n response = null;\n }\n\n const failedScore = 0;\n const values: Record<string, Hcs25JsonValue> = {\n [evalField(prefix, family, 'Score')]: failedScore,\n [evalField(prefix, family, 'Status')]: status,\n [evalField(prefix, family, 'QuestionId')]: questionId,\n [evalField(prefix, family, 'UpdatedAt')]: now,\n };\n if (status === 'missing') {\n values[evalField(prefix, family, 'Score')] = null;\n }\n if (options.family === 'a2a' && sessionId) {\n values[evalField(prefix, family, 'SessionId')] = sessionId;\n }\n return {\n signalId: `simple-evals.${options.family}_${family.toLowerCase()}`,\n status:\n status === 'missing'\n ? 'missing'\n : status === 'timeout'\n ? 'timeout'\n : status === 'error'\n ? 'error'\n : 'ok',\n value: status === 'missing' ? null : failedScore,\n fields: [{ scope: 'additional', values }],\n provenance: {\n source: 'simple-evals',\n subjectId: subject.id,\n fetchedAt: now,\n params: { questionId },\n },\n };\n };\n\n return [\n await runEval('Math', math.prompt, math.questionId, response =>\n gradeSimpleMathResponse(response, math.expected),\n ),\n await runEval('Science', science.prompt, science.questionId, response =>\n gradeSimpleScienceResponse(\n response,\n science.correctChoice,\n science.options,\n ),\n ),\n ];\n };\n\n return {\n id:\n options.adapterId ??\n (options.family === 'nanda' ? 'nanda-simple-evals' : 'a2a-simple-evals'),\n produces: [\n `simple-evals.${options.family}_math`,\n `simple-evals.${options.family}_science`,\n ],\n timeoutMs: options.timeoutMs,\n includeRegistries: options.includeRegistries,\n excludeRegistries: options.excludeRegistries,\n appliesTo: options.appliesTo,\n collect,\n };\n}\n"],"names":["values"],"mappings":"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"}
|