@launchdarkly/server-sdk-ai 0.12.2 → 0.13.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 (57) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +1 -1
  3. package/__tests__/LDAIClientImpl.test.ts +20 -6
  4. package/dist/LDAIClientImpl.d.ts +1 -0
  5. package/dist/LDAIClientImpl.d.ts.map +1 -1
  6. package/dist/LDAIClientImpl.js +17 -4
  7. package/dist/LDAIClientImpl.js.map +1 -1
  8. package/dist/LDAIConfigMapper.d.ts +4 -0
  9. package/dist/LDAIConfigMapper.d.ts.map +1 -1
  10. package/dist/LDAIConfigMapper.js +4 -0
  11. package/dist/LDAIConfigMapper.js.map +1 -1
  12. package/dist/LDAIConfigTrackerImpl.d.ts +2 -0
  13. package/dist/LDAIConfigTrackerImpl.d.ts.map +1 -1
  14. package/dist/LDAIConfigTrackerImpl.js +42 -0
  15. package/dist/LDAIConfigTrackerImpl.js.map +1 -1
  16. package/dist/api/config/LDAIConfig.d.ts +3 -0
  17. package/dist/api/config/LDAIConfig.d.ts.map +1 -1
  18. package/dist/api/config/LDAIConfigTracker.d.ts +25 -0
  19. package/dist/api/config/LDAIConfigTracker.d.ts.map +1 -1
  20. package/dist/api/config/VercelAISDK.d.ts +12 -0
  21. package/dist/api/config/VercelAISDK.d.ts.map +1 -1
  22. package/docs/assets/search.js +1 -1
  23. package/docs/classes/AIProvider.html +10 -10
  24. package/docs/classes/AIProviderFactory.html +10 -10
  25. package/docs/classes/TrackedChat.html +17 -17
  26. package/docs/enums/LDFeedbackKind.html +8 -8
  27. package/docs/functions/createBedrockTokenUsage.html +6 -6
  28. package/docs/functions/createOpenAiUsage.html +6 -6
  29. package/docs/functions/createVercelAISDKTokenUsage.html +6 -6
  30. package/docs/functions/initAi.html +6 -6
  31. package/docs/index.html +8 -8
  32. package/docs/interfaces/ChatResponse.html +8 -8
  33. package/docs/interfaces/LDAIAgent.html +11 -11
  34. package/docs/interfaces/LDAIAgentConfig.html +9 -9
  35. package/docs/interfaces/LDAIClient.html +10 -10
  36. package/docs/interfaces/LDAIConfig.html +15 -12
  37. package/docs/interfaces/LDAIConfigTracker.html +82 -20
  38. package/docs/interfaces/LDAIMetrics.html +8 -8
  39. package/docs/interfaces/LDLogger.html +5 -5
  40. package/docs/interfaces/LDMessage.html +8 -8
  41. package/docs/interfaces/LDModelConfig.html +9 -9
  42. package/docs/interfaces/LDProviderConfig.html +7 -7
  43. package/docs/interfaces/LDTokenUsage.html +9 -9
  44. package/docs/interfaces/VercelAISDKConfig.html +45 -40
  45. package/docs/interfaces/VercelAISDKMapOptions.html +14 -9
  46. package/docs/types/LDAIAgentDefaults.html +6 -6
  47. package/docs/types/LDAIDefaults.html +6 -6
  48. package/docs/types/SupportedAIProvider.html +6 -6
  49. package/docs/types/VercelAISDKProvider.html +11 -7
  50. package/docs/variables/SUPPORTED_AI_PROVIDERS.html +6 -6
  51. package/package.json +1 -1
  52. package/src/LDAIClientImpl.ts +30 -8
  53. package/src/LDAIConfigMapper.ts +4 -0
  54. package/src/LDAIConfigTrackerImpl.ts +52 -0
  55. package/src/api/config/LDAIConfig.ts +3 -0
  56. package/src/api/config/LDAIConfigTracker.ts +29 -0
  57. package/src/api/config/VercelAISDK.ts +12 -0
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>VercelAISDKProvider | @launchdarkly/server-sdk-ai - v0.12.2</title><meta name="description" content="Documentation for @launchdarkly/server-sdk-ai"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
1
+ <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>VercelAISDKProvider | @launchdarkly/server-sdk-ai - v0.13.0</title><meta name="description" content="Documentation for @launchdarkly/server-sdk-ai"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
2
2
  <div class="tsd-toolbar-contents container">
3
3
  <div class="table-cell" id="tsd-search" data-base="..">
4
4
  <div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
@@ -6,7 +6,7 @@
6
6
  <div id="tsd-toolbar-links"></div></div>
7
7
  <ul class="results">
8
8
  <li class="state loading">Preparing search index...</li>
9
- <li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@launchdarkly/server-sdk-ai - v0.12.2</a></div>
9
+ <li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@launchdarkly/server-sdk-ai - v0.13.0</a></div>
10
10
  <div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
11
11
  <div class="container container-main">
12
12
  <div class="col-content">
@@ -33,9 +33,13 @@
33
33
  <ul class="tsd-parameter-list">
34
34
  <li>
35
35
  <h5><span class="tsd-kind-parameter">modelName</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
36
- <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type tsd-kind-type-parameter">TMod</span></h4></li></ul></li></ul></div><aside class="tsd-sources">
36
+ <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type tsd-kind-type-parameter">TMod</span></h4>
37
+ <div class="tsd-comment tsd-typography">
38
+ <h4>Deprecated</h4><p>Use <code>VercelAISDKProvider</code> from the <code>@launchdarkly/server-sdk-ai-vercel</code> package instead.
39
+ This type will be removed in a future version.</p>
40
+ </div></li></ul></li></ul></div><aside class="tsd-sources">
37
41
  <ul>
38
- <li>Defined in <a href="https://github.com/launchdarkly/js-core/blob/001ada5/packages/sdk/server-ai/src/api/config/VercelAISDK.ts#L3">sdk/server-ai/src/api/config/VercelAISDK.ts:3</a></li></ul></aside></div>
42
+ <li>Defined in <a href="https://github.com/launchdarkly/js-core/blob/5339456/packages/sdk/server-ai/src/api/config/VercelAISDK.ts#L7">sdk/server-ai/src/api/config/VercelAISDK.ts:7</a></li></ul></aside></div>
39
43
  <div class="col-sidebar">
40
44
  <div class="page-menu">
41
45
  <div class="tsd-navigation settings">
@@ -52,7 +56,7 @@
52
56
  <div class="tsd-theme-toggle">
53
57
  <h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
54
58
  <div class="site-menu">
55
- <nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-4"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)"></path></g></svg><span>@launchdarkly/server-<wbr/>sdk-<wbr/>ai -<wbr/> v0.12.2</span></a>
59
+ <nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-4"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)"></path></g></svg><span>@launchdarkly/server-<wbr/>sdk-<wbr/>ai -<wbr/> v0.13.0</span></a>
56
60
  <ul class="tsd-small-nested-navigation">
57
61
  <li><a href="../enums/LDFeedbackKind.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-8"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-enum)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.45 16V7.24H14.49V8.224H10.518V10.936H14.07V11.908H10.518V15.016H14.49V16H9.45Z" fill="var(--color-text)"></path></g></svg><span>LDFeedback<wbr/>Kind</span></a></li>
58
62
  <li><a href="../classes/AIProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-128"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)"></path></g></svg><span>AIProvider</span></a></li>
@@ -70,8 +74,8 @@
70
74
  <li><a href="../interfaces/LDModelConfig.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>LDModel<wbr/>Config</span></a></li>
71
75
  <li><a href="../interfaces/LDProviderConfig.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>LDProvider<wbr/>Config</span></a></li>
72
76
  <li><a href="../interfaces/LDTokenUsage.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>LDToken<wbr/>Usage</span></a></li>
73
- <li><a href="../interfaces/VercelAISDKConfig.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>VercelAISDKConfig</span></a></li>
74
- <li><a href="../interfaces/VercelAISDKMapOptions.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>VercelAISDKMap<wbr/>Options</span></a></li>
77
+ <li><a href="../interfaces/VercelAISDKConfig.html" class="deprecated"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>VercelAISDKConfig</span></a></li>
78
+ <li><a href="../interfaces/VercelAISDKMapOptions.html" class="deprecated"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>VercelAISDKMap<wbr/>Options</span></a></li>
75
79
  <li><a href="LDAIAgentDefaults.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-2097152"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.31 16V8.224H8.91V7.24H14.79V8.224H12.39V16H11.31Z" fill="var(--color-text)"></path></g></svg><span>LDAIAgent<wbr/>Defaults</span></a></li>
76
80
  <li><a href="LDAIDefaults.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2097152"></use></svg><span>LDAIDefaults</span></a></li>
77
81
  <li><a href="SupportedAIProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2097152"></use></svg><span>SupportedAIProvider</span></a></li>
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>SUPPORTED_AI_PROVIDERS | @launchdarkly/server-sdk-ai - v0.12.2</title><meta name="description" content="Documentation for @launchdarkly/server-sdk-ai"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
1
+ <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>SUPPORTED_AI_PROVIDERS | @launchdarkly/server-sdk-ai - v0.13.0</title><meta name="description" content="Documentation for @launchdarkly/server-sdk-ai"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
2
2
  <div class="tsd-toolbar-contents container">
3
3
  <div class="table-cell" id="tsd-search" data-base="..">
4
4
  <div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
@@ -6,7 +6,7 @@
6
6
  <div id="tsd-toolbar-links"></div></div>
7
7
  <ul class="results">
8
8
  <li class="state loading">Preparing search index...</li>
9
- <li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@launchdarkly/server-sdk-ai - v0.12.2</a></div>
9
+ <li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@launchdarkly/server-sdk-ai - v0.13.0</a></div>
10
10
  <div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
11
11
  <div class="container container-main">
12
12
  <div class="col-content">
@@ -20,7 +20,7 @@
20
20
  </div>
21
21
  <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
22
22
  <ul>
23
- <li>Defined in <a href="https://github.com/launchdarkly/js-core/blob/001ada5/packages/sdk/server-ai/src/api/providers/AIProviderFactory.ts#L9">sdk/server-ai/src/api/providers/AIProviderFactory.ts:9</a></li></ul></aside></div>
23
+ <li>Defined in <a href="https://github.com/launchdarkly/js-core/blob/5339456/packages/sdk/server-ai/src/api/providers/AIProviderFactory.ts#L9">sdk/server-ai/src/api/providers/AIProviderFactory.ts:9</a></li></ul></aside></div>
24
24
  <div class="col-sidebar">
25
25
  <div class="page-menu">
26
26
  <div class="tsd-navigation settings">
@@ -37,7 +37,7 @@
37
37
  <div class="tsd-theme-toggle">
38
38
  <h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
39
39
  <div class="site-menu">
40
- <nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-4"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)"></path></g></svg><span>@launchdarkly/server-<wbr/>sdk-<wbr/>ai -<wbr/> v0.12.2</span></a>
40
+ <nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-4"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)"></path></g></svg><span>@launchdarkly/server-<wbr/>sdk-<wbr/>ai -<wbr/> v0.13.0</span></a>
41
41
  <ul class="tsd-small-nested-navigation">
42
42
  <li><a href="../enums/LDFeedbackKind.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-8"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-enum)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.45 16V7.24H14.49V8.224H10.518V10.936H14.07V11.908H10.518V15.016H14.49V16H9.45Z" fill="var(--color-text)"></path></g></svg><span>LDFeedback<wbr/>Kind</span></a></li>
43
43
  <li><a href="../classes/AIProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-128"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)"></path></g></svg><span>AIProvider</span></a></li>
@@ -55,8 +55,8 @@
55
55
  <li><a href="../interfaces/LDModelConfig.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>LDModel<wbr/>Config</span></a></li>
56
56
  <li><a href="../interfaces/LDProviderConfig.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>LDProvider<wbr/>Config</span></a></li>
57
57
  <li><a href="../interfaces/LDTokenUsage.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>LDToken<wbr/>Usage</span></a></li>
58
- <li><a href="../interfaces/VercelAISDKConfig.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>VercelAISDKConfig</span></a></li>
59
- <li><a href="../interfaces/VercelAISDKMapOptions.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>VercelAISDKMap<wbr/>Options</span></a></li>
58
+ <li><a href="../interfaces/VercelAISDKConfig.html" class="deprecated"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>VercelAISDKConfig</span></a></li>
59
+ <li><a href="../interfaces/VercelAISDKMapOptions.html" class="deprecated"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>VercelAISDKMap<wbr/>Options</span></a></li>
60
60
  <li><a href="../types/LDAIAgentDefaults.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-2097152"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.31 16V8.224H8.91V7.24H14.79V8.224H12.39V16H11.31Z" fill="var(--color-text)"></path></g></svg><span>LDAIAgent<wbr/>Defaults</span></a></li>
61
61
  <li><a href="../types/LDAIDefaults.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2097152"></use></svg><span>LDAIDefaults</span></a></li>
62
62
  <li><a href="../types/SupportedAIProvider.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2097152"></use></svg><span>SupportedAIProvider</span></a></li>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@launchdarkly/server-sdk-ai",
3
- "version": "0.12.2",
3
+ "version": "0.13.0",
4
4
  "description": "LaunchDarkly AI SDK for Server-Side JavaScript",
5
5
  "homepage": "https://github.com/launchdarkly/js-core/tree/main/packages/sdk/server-ai",
6
6
  "repository": {
@@ -69,12 +69,32 @@ export class LDAIClientImpl implements LDAIClient {
69
69
  return Mustache.render(template, variables, undefined, { escape: (item: any) => item });
70
70
  }
71
71
 
72
+ private static _toLDFlagValue(defaultValue: LDAIDefaults | LDAIAgentDefaults): {
73
+ _ldMeta: { enabled: boolean };
74
+ model?: LDModelConfig;
75
+ messages?: LDMessage[];
76
+ provider?: LDProviderConfig;
77
+ instructions?: string;
78
+ } {
79
+ return {
80
+ _ldMeta: { enabled: defaultValue.enabled ?? false },
81
+ model: defaultValue.model,
82
+ messages: 'messages' in defaultValue ? defaultValue.messages : undefined,
83
+ provider: defaultValue.provider,
84
+ instructions: 'instructions' in defaultValue ? defaultValue.instructions : undefined,
85
+ };
86
+ }
87
+
72
88
  private async _evaluate(
73
89
  key: string,
74
90
  context: LDContext,
75
91
  defaultValue: LDAIDefaults,
76
92
  ): Promise<EvaluationResult> {
77
- const value: VariationContent = await this._ldClient.variation(key, context, defaultValue);
93
+ // Convert default value to LDFlagValue format
94
+ // eslint-disable-next-line no-underscore-dangle
95
+ const ldFlagValue = LDAIClientImpl._toLDFlagValue(defaultValue);
96
+
97
+ const value: VariationContent = await this._ldClient.variation(key, context, ldFlagValue);
78
98
 
79
99
  const tracker = new LDAIConfigTrackerImpl(
80
100
  this._ldClient,
@@ -109,11 +129,13 @@ export class LDAIClientImpl implements LDAIClient {
109
129
  defaultValue: LDAIAgentDefaults,
110
130
  variables?: Record<string, unknown>,
111
131
  ): Promise<LDAIAgent> {
112
- const { tracker, enabled, model, provider, instructions } = await this._evaluate(
113
- key,
114
- context,
115
- defaultValue,
116
- );
132
+ const {
133
+ tracker,
134
+ enabled,
135
+ model,
136
+ provider: configProvider,
137
+ instructions,
138
+ } = await this._evaluate(key, context, defaultValue);
117
139
 
118
140
  const agent: LDAIAgent = {
119
141
  tracker,
@@ -126,8 +148,8 @@ export class LDAIClientImpl implements LDAIClient {
126
148
  agent.model = { ...model };
127
149
  }
128
150
 
129
- if (provider) {
130
- agent.provider = { ...provider };
151
+ if (configProvider) {
152
+ agent.provider = { ...configProvider };
131
153
  }
132
154
 
133
155
  const allVariables = { ...variables, ldctx: context };
@@ -27,6 +27,10 @@ export class LDAIConfigMapper {
27
27
  return undefined;
28
28
  }
29
29
 
30
+ /**
31
+ * @deprecated Use `VercelProvider.toVercelAISDK()` from the `@launchdarkly/server-sdk-ai-vercel` package instead.
32
+ * This method will be removed in a future version.
33
+ */
30
34
  toVercelAISDK<TMod>(
31
35
  provider: VercelAISDKProvider<TMod> | Record<string, VercelAISDKProvider<TMod>>,
32
36
  options?: VercelAISDKMapOptions | undefined,
@@ -119,6 +119,58 @@ export class LDAIConfigTrackerImpl implements LDAIConfigTracker {
119
119
  return result;
120
120
  }
121
121
 
122
+ trackStreamMetricsOf<TStream>(
123
+ streamCreator: () => TStream,
124
+ metricsExtractor: (stream: TStream) => Promise<LDAIMetrics>,
125
+ ): TStream {
126
+ const startTime = Date.now();
127
+
128
+ try {
129
+ // Create the stream synchronously
130
+ const stream = streamCreator();
131
+
132
+ // Start background metrics tracking (fire and forget)
133
+ this._trackStreamMetricsInBackground(stream, metricsExtractor, startTime);
134
+
135
+ // Return stream immediately for consumption
136
+ return stream;
137
+ } catch (error) {
138
+ // Track error if stream creation fails
139
+ this.trackDuration(Date.now() - startTime);
140
+ this.trackError();
141
+ throw error;
142
+ }
143
+ }
144
+
145
+ private async _trackStreamMetricsInBackground<TStream>(
146
+ stream: TStream,
147
+ metricsExtractor: (stream: TStream) => Promise<LDAIMetrics>,
148
+ startTime: number,
149
+ ): Promise<void> {
150
+ try {
151
+ // Wait for metrics to be available
152
+ const metrics = await metricsExtractor(stream);
153
+
154
+ // Track success/error based on metrics
155
+ if (metrics.success) {
156
+ this.trackSuccess();
157
+ } else {
158
+ this.trackError();
159
+ }
160
+
161
+ // Track token usage if available
162
+ if (metrics.usage) {
163
+ this.trackTokens(metrics.usage);
164
+ }
165
+ } catch (error) {
166
+ // If metrics extraction fails, track error
167
+ this.trackError();
168
+ } finally {
169
+ // Track duration regardless of success/error
170
+ this.trackDuration(Date.now() - startTime);
171
+ }
172
+ }
173
+
122
174
  async trackOpenAIMetrics<
123
175
  TRes extends {
124
176
  usage?: {
@@ -76,6 +76,9 @@ export interface LDAIConfig {
76
76
  *
77
77
  * WARNING: this method can throw an exception if a Vercel AI SDK model cannot be determined.
78
78
  *
79
+ * @deprecated Use `VercelProvider.toVercelAISDK()` from the `@launchdarkly/server-sdk-ai-vercel` package instead.
80
+ * This method will be removed in a future version.
81
+ *
79
82
  * @param provider A Vercel AI SDK Provider or a map of provider names to Vercel AI SDK Providers.
80
83
  * @param options Optional mapping options.
81
84
  * @returns A configuration directly usable in Vercel AI SDK generateText() and streamText()
@@ -106,6 +106,32 @@ export interface LDAIConfigTracker {
106
106
  func: () => Promise<TRes>,
107
107
  ): Promise<TRes>;
108
108
 
109
+ /**
110
+ * Track metrics for a streaming AI operation.
111
+ *
112
+ * This function will track the duration of the operation, extract metrics using the provided
113
+ * metrics extractor function, and track success or error status accordingly.
114
+ *
115
+ * Unlike trackMetricsOf, this method is designed for streaming operations where:
116
+ * - The stream is created and returned immediately (synchronously)
117
+ * - Metrics are extracted asynchronously in the background once the stream completes
118
+ * - Duration is tracked from stream creation to metrics extraction completion
119
+ *
120
+ * The stream is returned immediately so the caller can begin consuming it without waiting.
121
+ * Metrics extraction happens in the background and does not block stream consumption.
122
+ *
123
+ * If the stream creator throws, then this method will also throw and record an error.
124
+ * If metrics extraction fails, the error is logged but does not affect stream consumption.
125
+ *
126
+ * @param streamCreator Function that creates and returns the stream (synchronous)
127
+ * @param metricsExtractor Function that asynchronously extracts metrics from the stream
128
+ * @returns The stream result (returned immediately, not a Promise)
129
+ */
130
+ trackStreamMetricsOf<TStream>(
131
+ streamCreator: () => TStream,
132
+ metricsExtractor: (stream: TStream) => Promise<LDAIMetrics>,
133
+ ): TStream;
134
+
109
135
  /**
110
136
  * Track an OpenAI operation.
111
137
  *
@@ -187,6 +213,9 @@ export interface LDAIConfigTracker {
187
213
  * In the case the provided function throws, this function will record the duration and an error.
188
214
  * A failed operation will not have any token usage data.
189
215
  *
216
+ * @deprecated Use `trackStreamMetricsOf()` with `VercelProvider.createStreamMetricsExtractor()` from the
217
+ * `@launchdarkly/server-sdk-ai-vercel` package instead. This method will be removed in a future version.
218
+ *
190
219
  * @param func Function which executes the operation.
191
220
  * @returns The result of the operation.
192
221
  */
@@ -1,11 +1,23 @@
1
1
  import { type LDMessage } from './LDAIConfig';
2
2
 
3
+ /**
4
+ * @deprecated Use `VercelAISDKProvider` from the `@launchdarkly/server-sdk-ai-vercel` package instead.
5
+ * This type will be removed in a future version.
6
+ */
3
7
  export type VercelAISDKProvider<TMod> = (modelName: string) => TMod;
4
8
 
9
+ /**
10
+ * @deprecated Use `VercelAISDKMapOptions` from the `@launchdarkly/server-sdk-ai-vercel` package instead.
11
+ * This type will be removed in a future version.
12
+ */
5
13
  export interface VercelAISDKMapOptions {
6
14
  nonInterpolatedMessages?: LDMessage[] | undefined;
7
15
  }
8
16
 
17
+ /**
18
+ * @deprecated Use `VercelAISDKConfig` from the `@launchdarkly/server-sdk-ai-vercel` package instead.
19
+ * This type will be removed in a future version.
20
+ */
9
21
  export interface VercelAISDKConfig<TMod> {
10
22
  model: TMod;
11
23
  messages?: LDMessage[] | undefined;