@learncard/network-brain-service 4.0.4 → 4.1.0

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 (154) hide show
  1. package/.env.example +14 -0
  2. package/CHANGELOG.md +41 -0
  3. package/config/config.dev.json +5 -0
  4. package/config/config.example.json +5 -0
  5. package/config/config.production.json +5 -0
  6. package/config/config.scouts.dev.json +5 -0
  7. package/config/config.scouts.production.json +5 -0
  8. package/dist/accesslayer/campaign/audience.d.ts +7 -0
  9. package/dist/accesslayer/campaign/audience.d.ts.map +1 -0
  10. package/dist/accesslayer/campaign/create.d.ts +3 -0
  11. package/dist/accesslayer/campaign/create.d.ts.map +1 -0
  12. package/dist/accesslayer/campaign/delete.d.ts +2 -0
  13. package/dist/accesslayer/campaign/delete.d.ts.map +1 -0
  14. package/dist/accesslayer/campaign/read.d.ts +6 -0
  15. package/dist/accesslayer/campaign/read.d.ts.map +1 -0
  16. package/dist/accesslayer/campaign/shared.d.ts +16 -0
  17. package/dist/accesslayer/campaign/shared.d.ts.map +1 -0
  18. package/dist/accesslayer/campaign/state.d.ts +4 -0
  19. package/dist/accesslayer/campaign/state.d.ts.map +1 -0
  20. package/dist/accesslayer/campaign/update.d.ts +3 -0
  21. package/dist/accesslayer/campaign/update.d.ts.map +1 -0
  22. package/dist/accesslayer/credential-share-previews.d.ts +5 -0
  23. package/dist/accesslayer/credential-share-previews.d.ts.map +1 -0
  24. package/dist/accesslayer/profile/delete.d.ts.map +1 -1
  25. package/dist/accesslayer/skill/read.d.ts +12 -2
  26. package/dist/accesslayer/skill/read.d.ts.map +1 -1
  27. package/dist/accesslayer/skill/update.d.ts +11 -1
  28. package/dist/accesslayer/skill/update.d.ts.map +1 -1
  29. package/dist/app.d.ts +4 -0
  30. package/dist/app.d.ts.map +1 -1
  31. package/dist/cache/app-store.caches.d.ts +2 -1
  32. package/dist/cache/app-store.caches.d.ts.map +1 -1
  33. package/dist/config/environment.d.ts +268 -178
  34. package/dist/config/environment.d.ts.map +1 -1
  35. package/dist/config/skillEmbedding.d.ts +70 -0
  36. package/dist/config/skillEmbedding.d.ts.map +1 -0
  37. package/dist/config/skillEmbedding.neo4j.test.d.ts +2 -0
  38. package/dist/config/skillEmbedding.neo4j.test.d.ts.map +1 -0
  39. package/dist/config/stageConfig.d.ts +20 -0
  40. package/dist/config/stageConfig.d.ts.map +1 -1
  41. package/dist/constants/campaigns.d.ts +3 -0
  42. package/dist/constants/campaigns.d.ts.map +1 -0
  43. package/dist/didkit_wasm_bg.wasm +0 -0
  44. package/dist/helpers/bedrock-embedding.helpers.d.ts +40 -0
  45. package/dist/helpers/bedrock-embedding.helpers.d.ts.map +1 -0
  46. package/dist/helpers/bedrock-embedding.helpers.test.d.ts +2 -0
  47. package/dist/helpers/bedrock-embedding.helpers.test.d.ts.map +1 -0
  48. package/dist/helpers/bedrock-embedding.smoke.test.d.ts +2 -0
  49. package/dist/helpers/bedrock-embedding.smoke.test.d.ts.map +1 -0
  50. package/dist/helpers/skill-embedding.helpers.d.ts +65 -7
  51. package/dist/helpers/skill-embedding.helpers.d.ts.map +1 -1
  52. package/dist/helpers/skill-embedding.helpers.test.d.ts +2 -0
  53. package/dist/helpers/skill-embedding.helpers.test.d.ts.map +1 -0
  54. package/dist/index.js +2 -2
  55. package/dist/models/Campaign.d.ts +10 -0
  56. package/dist/models/Campaign.d.ts.map +1 -0
  57. package/dist/models/CredentialSharePreview.d.ts +14 -0
  58. package/dist/models/CredentialSharePreview.d.ts.map +1 -0
  59. package/dist/models/Integration.d.ts +1 -1
  60. package/dist/models/Profile.d.ts.map +1 -1
  61. package/dist/models/campaign-constraints.d.ts +2 -0
  62. package/dist/models/campaign-constraints.d.ts.map +1 -0
  63. package/dist/models/index.d.ts +2 -0
  64. package/dist/models/index.d.ts.map +1 -1
  65. package/dist/publish-metafile.json +1 -1
  66. package/dist/routes/app-store.d.ts +1 -1
  67. package/dist/routes/boosts.d.ts +24 -4
  68. package/dist/routes/boosts.d.ts.map +1 -1
  69. package/dist/routes/campaigns.d.ts +1411 -0
  70. package/dist/routes/campaigns.d.ts.map +1 -0
  71. package/dist/routes/contracts.d.ts +19 -6
  72. package/dist/routes/contracts.d.ts.map +1 -1
  73. package/dist/routes/credential-share-previews.d.ts +39 -0
  74. package/dist/routes/credential-share-previews.d.ts.map +1 -0
  75. package/dist/routes/credentials.d.ts +4 -1
  76. package/dist/routes/credentials.d.ts.map +1 -1
  77. package/dist/routes/inbox.d.ts +5 -5
  78. package/dist/routes/index.d.ts +4 -0
  79. package/dist/routes/index.d.ts.map +1 -1
  80. package/dist/routes/integrations.d.ts +3 -3
  81. package/dist/routes/profile-manager.d.ts +4 -0
  82. package/dist/routes/profile-manager.d.ts.map +1 -1
  83. package/dist/routes/profiles.d.ts +44 -0
  84. package/dist/routes/profiles.d.ts.map +1 -1
  85. package/dist/routes/skill-frameworks.d.ts +1 -0
  86. package/dist/routes/skill-frameworks.d.ts.map +1 -1
  87. package/dist/routes/skills-semantic-search.test.d.ts +2 -0
  88. package/dist/routes/skills-semantic-search.test.d.ts.map +1 -0
  89. package/dist/routes/skills.d.ts.map +1 -1
  90. package/dist/routes/test.d.ts +3 -1
  91. package/dist/routes/test.d.ts.map +1 -1
  92. package/dist/seed/seedSkillFrameworks.d.ts +1 -0
  93. package/dist/seed/seedSkillFrameworks.d.ts.map +1 -1
  94. package/dist/seed/seedSkillFrameworks.embeddings.test.d.ts +2 -0
  95. package/dist/seed/seedSkillFrameworks.embeddings.test.d.ts.map +1 -0
  96. package/dist/types/app-manifest.d.ts +2 -2
  97. package/dist/types/campaign.d.ts +19 -0
  98. package/dist/types/campaign.d.ts.map +1 -0
  99. package/dist/types/consentflowcontract.d.ts +1 -1
  100. package/dist/types/integration.d.ts +3 -3
  101. package/dist/types/profile.d.ts +9 -0
  102. package/dist/types/profile.d.ts.map +1 -1
  103. package/dist/types/skill.d.ts.map +1 -1
  104. package/package.json +20 -17
  105. package/project.json +14 -0
  106. package/scripts/skill-embeddings-backfill.ts +161 -0
  107. package/serverless-local.yml +4 -0
  108. package/serverless.function-env.cjs +3 -0
  109. package/serverless.local.yml +4 -0
  110. package/serverless.yml +12 -1
  111. package/src/accesslayer/campaign/README.md +174 -0
  112. package/src/accesslayer/campaign/audience.ts +152 -0
  113. package/src/accesslayer/campaign/create.ts +47 -0
  114. package/src/accesslayer/campaign/delete.ts +18 -0
  115. package/src/accesslayer/campaign/read.ts +125 -0
  116. package/src/accesslayer/campaign/shared.ts +92 -0
  117. package/src/accesslayer/campaign/state.ts +80 -0
  118. package/src/accesslayer/campaign/update.ts +50 -0
  119. package/src/accesslayer/credential-share-previews.ts +76 -0
  120. package/src/accesslayer/profile/delete.ts +6 -0
  121. package/src/accesslayer/skill/read.ts +56 -16
  122. package/src/accesslayer/skill/update.ts +43 -1
  123. package/src/app.ts +9 -0
  124. package/src/config/environment.test.ts +208 -0
  125. package/src/config/environment.ts +166 -11
  126. package/src/config/skillEmbedding.neo4j.test.ts +138 -0
  127. package/src/config/skillEmbedding.ts +202 -0
  128. package/src/constants/campaigns.ts +9 -0
  129. package/src/helpers/bedrock-embedding.helpers.test.ts +208 -0
  130. package/src/helpers/bedrock-embedding.helpers.ts +243 -0
  131. package/src/helpers/bedrock-embedding.smoke.test.ts +53 -0
  132. package/src/helpers/skill-embedding.helpers.test.ts +1044 -0
  133. package/src/helpers/skill-embedding.helpers.ts +611 -123
  134. package/src/models/Campaign.ts +32 -0
  135. package/src/models/CredentialSharePreview.ts +30 -0
  136. package/src/models/Profile.ts +1 -0
  137. package/src/models/campaign-constraints.ts +22 -0
  138. package/src/models/index.ts +29 -1
  139. package/src/routes/campaigns.ts +179 -0
  140. package/src/routes/credential-share-previews.ts +74 -0
  141. package/src/routes/profiles.ts +7 -0
  142. package/src/routes/skills-semantic-search.test.ts +168 -0
  143. package/src/routes/skills.ts +42 -6
  144. package/src/seed/seedSkillFrameworks.embeddings.test.ts +82 -0
  145. package/src/seed/seedSkillFrameworks.test.ts +6 -0
  146. package/src/seed/seedSkillFrameworks.ts +83 -18
  147. package/src/types/campaign.ts +17 -0
  148. package/src/types/skill.ts +6 -0
  149. package/test/campaigns.spec.ts +789 -0
  150. package/test/credential-share-previews.spec.ts +97 -0
  151. package/test/verification/campaigns.ts +49 -0
  152. package/vitest.campaigns.config.ts +21 -0
  153. package/vitest.config.ts +10 -0
  154. package/vitest.integration.config.ts +1 -0
@@ -0,0 +1,53 @@
1
+ /**
2
+ * LC-2206 opt-in smoke test against REAL Amazon Bedrock (paid: three InvokeModel calls).
3
+ * Skipped unless SKILL_EMBEDDING_BEDROCK_SMOKE=true. Never enable it in CI.
4
+ *
5
+ * SKILL_EMBEDDING_BEDROCK_SMOKE=true AWS_PROFILE=<profile> \
6
+ * bunx vitest run --config vitest.config.ts src/helpers/bedrock-embedding.smoke.test.ts
7
+ *
8
+ * Uses the normal AWS credential chain (SigV4) in us-east-1 and the same request shape,
9
+ * purposes, dimension and normalisation as production.
10
+ */
11
+ import { describe, expect, it } from 'vitest';
12
+
13
+ import {
14
+ DEFAULT_SKILL_EMBEDDING_DIMENSION,
15
+ DEFAULT_SKILL_EMBEDDING_REGION,
16
+ NOVA2_EMBEDDING_MODEL_ID,
17
+ } from '../config/skillEmbedding';
18
+ import { embedTextWithBedrock, type BedrockEmbeddingConfig } from './bedrock-embedding.helpers';
19
+
20
+ const enabled = process.env.SKILL_EMBEDDING_BEDROCK_SMOKE === 'true';
21
+
22
+ const config: BedrockEmbeddingConfig = {
23
+ modelId: process.env.SKILL_EMBEDDING_BEDROCK_MODEL_ID || NOVA2_EMBEDDING_MODEL_ID,
24
+ region: process.env.SKILL_EMBEDDING_BEDROCK_REGION || DEFAULT_SKILL_EMBEDDING_REGION,
25
+ dimension: Number(process.env.SKILL_EMBEDDING_DIMENSION || DEFAULT_SKILL_EMBEDDING_DIMENSION),
26
+ timeoutMs: 15_000,
27
+ };
28
+
29
+ const dot = (a: number[], b: number[]) =>
30
+ a.reduce((sum, value, index) => sum + value * (b[index] ?? 0), 0);
31
+
32
+ describe.skipIf(!enabled)('Bedrock Nova 2 embeddings smoke (real AWS, opt-in)', () => {
33
+ it('returns unit vectors where a related skill outranks an unrelated one', async () => {
34
+ const query = await embedTextWithBedrock('python data analysis', 'query', config);
35
+ const related = await embedTextWithBedrock(
36
+ 'Data Analysis\nAnalyse datasets with Python and statistics',
37
+ 'index',
38
+ config
39
+ );
40
+ const unrelated = await embedTextWithBedrock(
41
+ 'Customer service\nHelp customers resolve issues politely',
42
+ 'index',
43
+ config
44
+ );
45
+
46
+ for (const vector of [query, related, unrelated]) {
47
+ expect(vector).toHaveLength(config.dimension);
48
+ expect(Math.hypot(...vector)).toBeCloseTo(1, 6);
49
+ }
50
+
51
+ expect(dot(query, related)).toBeGreaterThan(dot(query, unrelated));
52
+ }, 60_000);
53
+ });