@countly/ai-sdk-langchain 0.0.3 → 0.0.4

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/README.md CHANGED
@@ -64,6 +64,61 @@ await handler.flush(); // send buffered events
64
64
  await handler.shutdown(); // flush + stop the transport
65
65
  ```
66
66
 
67
+ ## Caller-supplied prompt_id
68
+
69
+ By default every tracked LLM call gets a freshly generated `prompt_id`. If you already mint your own prompt identifier upstream (e.g. a request-scoped id shared across services), supply it via the `getPromptId` config callback and the adapter will stamp it on every `[CLY]_llm_interaction` event instead:
70
+
71
+ ```typescript
72
+ import { AsyncLocalStorage } from "node:async_hooks";
73
+
74
+ const promptStore = new AsyncLocalStorage<{ promptId: string }>();
75
+
76
+ const handler = new CountlyCallbackHandler({
77
+ appKey: "YOUR_APP_KEY",
78
+ url: "https://your-countly-server.com",
79
+ getPromptId: () => promptStore.getStore()?.promptId, // return undefined to fall back to a generated id
80
+ });
81
+
82
+ // Resolved per-call: returning a value pins prompt_id; returning undefined restores default behavior.
83
+ promptStore.run({ promptId: "chat-req-42" }, () =>
84
+ chain.invoke(input, { callbacks: [handler] }),
85
+ );
86
+ ```
87
+
88
+ `getPromptId` is called once per LLM interaction (both success and error paths). Returning `undefined` is identical to not supplying it at all. Because the same `prompt_id` flows through to feedback correlation below, a caller-supplied id lets you link an interaction to feedback without threading the generated id back through your app.
89
+
90
+ ## Feedback
91
+
92
+ User feedback (thumbs up/down, ratings, comments) is not auto-collected — wire it from your UI. Capture the `prompt_id` of each tracked interaction via the `onPrompt` callback, then record feedback against it with `createFeedbackTracker` (re-exported from this package, so no extra install is needed):
93
+
94
+ ```typescript
95
+ import { CountlyCallbackHandler, createFeedbackTracker, type PromptInfo } from "@countly/ai-sdk-langchain";
96
+
97
+ const countly = { appKey: "YOUR_APP_KEY", url: "https://your-countly-server.com" };
98
+
99
+ let lastPrompt: PromptInfo | undefined;
100
+ const handler = new CountlyCallbackHandler({
101
+ ...countly,
102
+ onPrompt: (info) => { lastPrompt = info; }, // fires after every tracked LLM call
103
+ });
104
+
105
+ const feedback = createFeedbackTracker(countly, { sdk_adapter: "langchain" });
106
+
107
+ const result = await chain.invoke(input, { callbacks: [handler] });
108
+
109
+ // ...later, when the user rates the answer:
110
+ feedback.track({
111
+ prompt_id: lastPrompt!.prompt_id,
112
+ rating: "thumbs_up", // or "thumbs_down", or any custom string
113
+ score: 0.9, // optional 0-1 numeric score
114
+ category: "helpful", // optional: hallucination, irrelevant, harmful, ...
115
+ comment: "Great answer", // optional free-form text
116
+ deviceId: user.id, // attribute to the same user as the interaction
117
+ });
118
+ ```
119
+
120
+ Each `track()` call emits a `[CLY]_llm_interaction_feedback` event whose `prompt_id` links back to the `[CLY]_llm_interaction` event — powering prompt → feedback funnels and per-model satisfaction breakdowns in Countly. In a real app, store `prompt_id` alongside the rendered message (or return it to your client) and read it back when the user rates the answer. Feedback is batched like interaction events; call `feedback.flush()` to send immediately, or `feedback.shutdown()` on process exit.
121
+
67
122
  ## Full documentation
68
123
 
69
124
  See the [Countly AI SDK repository](https://github.com/Countly/countly-ai-sdk) for the unified data model, observability levels, cost calculation, privacy controls, and Countly plugin integration (Drill, Funnels, Cohorts, APM, Crash Analytics).
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,eAAe,EAIrB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,YAAY,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,cAAc,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,eAAe,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,eAAe,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAkBD,qBAAa,sBAAuB,YAAW,mBAAmB;IAChE,QAAQ,CAAC,IAAI,uBAAuB;IAEpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;gBAE/C,UAAU,EAAE,eAAe;IAKvC,cAAc,CACZ,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,GACf,IAAI;IAYP,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA+C9C,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA2B/C,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ9D,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASlD,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOhD,iCAAiC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,0DAA0D;IACpD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,eAAe,EAIrB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,YAAY,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,cAAc,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,eAAe,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,eAAe,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAkBD,qBAAa,sBAAuB,YAAW,mBAAmB;IAChE,QAAQ,CAAC,IAAI,uBAAuB;IAEpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;gBAE/C,UAAU,EAAE,eAAe;IAKvC,cAAc,CACZ,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,GACf,IAAI;IAYP,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA4D9C,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA2B/C,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ9D,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASlD,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOhD,iCAAiC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,0DAA0D;IACpD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC"}
package/dist/adapter.js CHANGED
@@ -26,6 +26,15 @@ export class CountlyCallbackHandler {
26
26
  const latency = run ? now - run.startTime : 0;
27
27
  const tokenUsage = output?.llmOutput?.tokenUsage ?? {};
28
28
  const generation = output?.generations?.[0]?.[0];
29
+ // Standardized cross-provider token breakdown. LangChain attaches a
30
+ // `usage_metadata` (UsageMetadata) to the AIMessage with an
31
+ // `input_token_details` breakdown that carries `cache_read`/`cache_creation`
32
+ // — the legacy `llmOutput.tokenUsage` aggregate has no cache detail. Its
33
+ // `input_tokens` is the SUM of all input token types (cache_read included),
34
+ // so cache-read stays a subset of input and the cost contract holds.
35
+ const usageMeta = generation?.message?.usage_metadata;
36
+ const cacheRead = usageMeta?.input_token_details?.cache_read;
37
+ const cacheWrite = usageMeta?.input_token_details?.cache_creation;
29
38
  // Provider-specific orphan fields → metadata bag.
30
39
  const meta = {};
31
40
  if (run?.tags && run.tags.length > 0)
@@ -44,26 +53,30 @@ export class CountlyCallbackHandler {
44
53
  // Report the real vendor (openai/anthropic/…) inferred from the model id,
45
54
  // falling back to the framework name only when the vendor is unknown.
46
55
  provider: inferProviderFromModel(model) ?? "langchain",
47
- usage_input: tokenUsage.promptTokens ?? 0,
48
- usage_output: tokenUsage.completionTokens ?? 0,
49
- usage_total: tokenUsage.totalTokens ?? 0,
56
+ // Prefer the legacy aggregate (preserves existing behavior); fall back to
57
+ // usage_metadata so vendors that only populate it (e.g. Anthropic via
58
+ // LangChain) still report token counts consistent with the cache detail.
59
+ usage_input: tokenUsage.promptTokens ?? usageMeta?.input_tokens ?? 0,
60
+ usage_output: tokenUsage.completionTokens ?? usageMeta?.output_tokens ?? 0,
61
+ usage_total: tokenUsage.totalTokens ?? usageMeta?.total_tokens ?? 0,
50
62
  finish_reason: generation?.generationInfo?.finish_reason,
51
63
  text_input: run?.input,
52
64
  text_output: generation?.text,
53
65
  latency_total: latency,
54
66
  status: "success",
67
+ ...(cacheRead != null && { usage_cache_read: cacheRead }),
68
+ ...(cacheWrite != null && { usage_cache_write: cacheWrite }),
55
69
  // Trace identity: LangChain runId is the per-call trace identifier; parentRunId hierarchies into agent chains.
56
70
  trace_id: runId,
57
71
  span_id: runId,
58
72
  ...(run?.parentRunId && { parent_span_id: run.parentRunId }),
59
73
  ...(Object.keys(meta).length > 0 && { provider_metadata: meta }),
60
74
  };
61
- const promptId = generatePromptId();
75
+ const promptId = this.config.getPromptId?.() ?? generatePromptId();
62
76
  const context = { prompt_id: promptId, sdk_adapter: "langchain" };
63
77
  const events = buildAllEvents(raw, this.config, context);
64
78
  this.transport.enqueue(events);
65
79
  this.transport.reportTrace(raw, context);
66
- this.transport.reportUserData(raw);
67
80
  this.llmRuns.delete(runId);
68
81
  }
69
82
  handleLLMError(err, runId) {
@@ -82,7 +95,7 @@ export class CountlyCallbackHandler {
82
95
  status: "error",
83
96
  error: err.message,
84
97
  };
85
- const promptId = generatePromptId();
98
+ const promptId = this.config.getPromptId?.() ?? generatePromptId();
86
99
  const context = { prompt_id: promptId, sdk_adapter: "langchain" };
87
100
  const events = buildAllEvents(raw, this.config, context);
88
101
  this.transport.enqueue(events);
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,sBAAsB,GAKvB,MAAM,sBAAsB,CAAC;AAgC9B,MAAM,OAAO,sBAAsB;IACxB,IAAI,GAAG,mBAAmB,CAAC;IAEnB,MAAM,CAAiB;IACvB,SAAS,CAAY;IACrB,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IACxC,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE3D,YAAY,UAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,cAAc,CACZ,GAAQ,EACR,OAAiB,EACjB,KAAa,EACb,WAAoB,EACpB,YAAsC,EACtC,IAAe,EACf,QAAkC,EAClC,OAAgB;QAEhB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;YACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,SAAS;YAC7D,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YACnB,WAAW;YACX,IAAI;YACJ,QAAQ;YACR,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,MAAW,EAAE,KAAa;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,MAAM,UAAU,GAAG,MAAM,EAAE,SAAS,EAAE,UAAU,IAAI,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjD,oEAAoE;QACpE,4DAA4D;QAC5D,6EAA6E;QAC7E,yEAAyE;QACzE,4EAA4E;QAC5E,qEAAqE;QACrE,MAAM,SAAS,GAAG,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC;QACtD,MAAM,SAAS,GAAG,SAAS,EAAE,mBAAmB,EAAE,UAAU,CAAC;QAC7D,MAAM,UAAU,GAAG,SAAS,EAAE,mBAAmB,EAAE,cAAc,CAAC;QAElE,kDAAkD;QAClD,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAC3D,IAAI,GAAG,EAAE,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QACxF,IAAI,GAAG,EAAE,OAAO;YAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC;QAC9C,IAAI,UAAU,EAAE,cAAc;YAAE,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,cAAc,CAAC;QACjF,IAAI,MAAM,EAAE,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;QAEtG,MAAM,KAAK,GAAG,MAAM,EAAE,SAAS,EAAE,SAAS,IAAI,GAAG,EAAE,KAAK,IAAI,SAAS,CAAC;QACtE,MAAM,GAAG,GAAwB;YAC/B,KAAK;YACL,0EAA0E;YAC1E,sEAAsE;YACtE,QAAQ,EAAE,sBAAsB,CAAC,KAAK,CAAC,IAAI,WAAW;YACtD,0EAA0E;YAC1E,sEAAsE;YACtE,yEAAyE;YACzE,WAAW,EAAE,UAAU,CAAC,YAAY,IAAI,SAAS,EAAE,YAAY,IAAI,CAAC;YACpE,YAAY,EAAE,UAAU,CAAC,gBAAgB,IAAI,SAAS,EAAE,aAAa,IAAI,CAAC;YAC1E,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,SAAS,EAAE,YAAY,IAAI,CAAC;YACnE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa;YACxD,UAAU,EAAE,GAAG,EAAE,KAAK;YACtB,WAAW,EAAE,UAAU,EAAE,IAAI;YAC7B,aAAa,EAAE,OAAO;YACtB,MAAM,EAAE,SAAS;YACjB,GAAG,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;YACzD,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;YAC5D,+GAA+G;YAC/G,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK;YACd,GAAG,CAAC,GAAG,EAAE,WAAW,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;YAC5D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;SACjE,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,gBAAgB,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,GAAU,EAAE,KAAa;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,GAAG,EAAE,KAAK,IAAI,SAAS,CAAC;QACzC,MAAM,GAAG,GAAwB;YAC/B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,sBAAsB,CAAC,QAAQ,CAAC,IAAI,WAAW;YACzD,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,GAAG,EAAE,KAAK;YACtB,aAAa,EAAE,OAAO;YACtB,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,GAAG,CAAC,OAAO;SACnB,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,gBAAgB,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAErC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,eAAe,CAAC,IAAS,EAAE,KAAa,EAAE,KAAa;QACrD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,cAAc;YACpE,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,KAAa;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,uEAAuE;QACvE,sEAAsE;QACtE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,eAAe,CAAC,GAAU,EAAE,KAAa;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;IAClC,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  export { CountlyCallbackHandler } from "./adapter";
2
+ export { createFeedbackTracker } from "@countly/ai-sdk-core";
3
+ export type { FeedbackInput, FeedbackTracker, PromptInfo } from "@countly/ai-sdk-core";
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAMnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,7 @@
1
1
  export { CountlyCallbackHandler } from "./adapter";
2
+ // Feedback pipeline — re-exported from core so user feedback (thumbs up/down,
3
+ // ratings, comments) can be wired without importing @countly/ai-sdk-core
4
+ // directly. Correlate via the `onPrompt` config callback, which exposes the
5
+ // `prompt_id` stamped on every `[CLY]_llm_interaction` event.
6
+ export { createFeedbackTracker } from "@countly/ai-sdk-core";
2
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,8EAA8E;AAC9E,yEAAyE;AACzE,4EAA4E;AAC5E,8DAA8D;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@countly/ai-sdk-langchain",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "Countly AI observability adapter for LangChain",
5
5
  "type": "module",
6
6
  "exports": {
@@ -16,7 +16,7 @@
16
16
  "access": "public"
17
17
  },
18
18
  "dependencies": {
19
- "@countly/ai-sdk-core": "0.0.3"
19
+ "@countly/ai-sdk-core": "0.0.4"
20
20
  },
21
21
  "peerDependencies": {
22
22
  "@langchain/core": ">=0.3.0"