langwatch 0.1.0 → 0.1.3

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 (46) hide show
  1. package/copy-types.sh +17 -0
  2. package/dist/chunk-2I4YLOQY.mjs +736 -0
  3. package/dist/chunk-2I4YLOQY.mjs.map +1 -0
  4. package/dist/index.d.mts +352 -4
  5. package/dist/index.d.ts +352 -4
  6. package/dist/index.js +6505 -413
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.mjs +571 -359
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/{utils-DDcm0z9v.d.mts → utils-CFtM8VVg.d.mts} +108 -31
  11. package/dist/{utils-DDcm0z9v.d.ts → utils-CFtM8VVg.d.ts} +108 -31
  12. package/dist/utils.d.mts +1 -2
  13. package/dist/utils.d.ts +1 -2
  14. package/dist/utils.js +437 -0
  15. package/dist/utils.js.map +1 -1
  16. package/dist/utils.mjs +3 -1
  17. package/example/README.md +3 -1
  18. package/example/app/(chat)/chat/[id]/page.tsx +1 -1
  19. package/example/app/(chat)/page.tsx +10 -5
  20. package/example/app/guardrails/page.tsx +26 -0
  21. package/example/app/langchain/page.tsx +27 -0
  22. package/example/app/langchain-rag/page.tsx +28 -0
  23. package/example/app/share/[id]/page.tsx +1 -1
  24. package/example/components/chat-list.tsx +1 -1
  25. package/example/components/chat-panel.tsx +1 -1
  26. package/example/components/header.tsx +39 -13
  27. package/example/components/prompt-form.tsx +1 -1
  28. package/example/components/stocks/stock-purchase.tsx +1 -1
  29. package/example/components/stocks/stocks.tsx +1 -1
  30. package/example/lib/chat/guardrails.tsx +181 -0
  31. package/example/lib/chat/langchain-rag.tsx +191 -0
  32. package/example/lib/chat/langchain.tsx +112 -0
  33. package/example/lib/chat/{actions.tsx → vercel-ai.tsx} +1 -1
  34. package/example/package-lock.json +289 -6
  35. package/example/package.json +1 -0
  36. package/package.json +13 -5
  37. package/src/evaluations.ts +219 -0
  38. package/src/index.test.ts +5 -0
  39. package/src/index.ts +190 -7
  40. package/src/langchain.ts +557 -0
  41. package/src/{helpers.ts → typeUtils.ts} +20 -2
  42. package/src/types.ts +7 -3
  43. package/src/utils.ts +25 -2
  44. package/ts-to-zod.config.js +2 -0
  45. package/dist/chunk-AP23NJ57.mjs +0 -296
  46. package/dist/chunk-AP23NJ57.mjs.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,8 +1,331 @@
1
1
  import EventEmitter from 'events';
2
- import { M as Metadata, C as CollectorRESTParams, S as Span, P as PendingBaseSpan, a as PendingLLMSpan, b as PendingRAGSpan, c as SpanTypes } from './utils-DDcm0z9v.js';
3
- export { B as BaseSpan, d as ChatMessage, e as ChatRichContent, L as LLMSpan, R as RAGSpan, f as SpanInputOutput, h as captureError, g as convertFromVercelAIMessages } from './utils-DDcm0z9v.js';
2
+ import { AgentAction, AgentFinish } from '@langchain/core/agents';
3
+ import { BaseCallbackHandler } from '@langchain/core/callbacks/base';
4
+ import { DocumentInterface } from '@langchain/core/documents';
5
+ import { Serialized } from '@langchain/core/load/serializable';
6
+ import { BaseMessage } from '@langchain/core/messages';
7
+ import { LLMResult } from '@langchain/core/outputs';
8
+ import { ChainValues } from '@langchain/core/utils/types';
9
+ import { R as RAGChunk, M as Metadata, C as CollectorRESTParams, S as Span, a as RESTEvaluation, P as PendingBaseSpan, b as PendingLLMSpan, c as PendingRAGSpan, d as SpanTypes } from './utils-CFtM8VVg.js';
10
+ export { B as BaseSpan, e as ChatMessage, f as ChatRichContent, L as LLMSpan, g as RAGSpan, h as SpanInputOutput, i as autoconvertTypedValues, j as captureError, k as convertFromVercelAIMessages } from './utils-CFtM8VVg.js';
4
11
  import 'ai';
5
- import 'llm-cost/model_prices_and_context_window.json';
12
+
13
+ type EvaluatorTypes = keyof Evaluators;
14
+ type Evaluators = {
15
+ "huggingface/llama_guard": {
16
+ settings: {
17
+ policy: string;
18
+ evaluate: "input" | "output" | "both";
19
+ model: "cloudflare/thebloke/llamaguard-7b-awq";
20
+ };
21
+ };
22
+ "example/word_count": {
23
+ settings: Record<string, never>;
24
+ };
25
+ "openai/moderation": {
26
+ settings: {
27
+ model: "text-moderation-stable" | "text-moderation-latest";
28
+ categories: {
29
+ harassment: boolean;
30
+ harassment_threatening: boolean;
31
+ hate: boolean;
32
+ hate_threatening: boolean;
33
+ self_harm: boolean;
34
+ self_harm_instructions: boolean;
35
+ self_harm_intent: boolean;
36
+ sexual: boolean;
37
+ sexual_minors: boolean;
38
+ violence: boolean;
39
+ violence_graphic: boolean;
40
+ };
41
+ };
42
+ };
43
+ "haystack/faithfulness": {
44
+ settings: {
45
+ model: "openai/gpt-3.5-turbo" | "openai/gpt-3.5-turbo-0125" | "openai/gpt-3.5-turbo-1106" | "openai/gpt-4-turbo" | "openai/gpt-4-0125-preview" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "openai/gpt-4-1106-preview" | "azure/gpt-35-turbo-1106" | "azure/gpt-4o" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-sonnet-20240229" | "anthropic/claude-3-opus-20240229";
46
+ max_tokens: number;
47
+ };
48
+ };
49
+ "langevals/basic": {
50
+ settings: {
51
+ rules: {
52
+ field: "input" | "output";
53
+ rule: "contains" | "not_contains" | "matches_regex" | "not_matches_regex";
54
+ value: string;
55
+ }[];
56
+ };
57
+ };
58
+ "langevals/competitor_blocklist": {
59
+ settings: {
60
+ competitors: string[];
61
+ };
62
+ };
63
+ "langevals/competitor_llm": {
64
+ settings: {
65
+ model: "openai/gpt-3.5-turbo" | "openai/gpt-3.5-turbo-0125" | "openai/gpt-3.5-turbo-1106" | "openai/gpt-4-turbo" | "openai/gpt-4-0125-preview" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "openai/gpt-4-1106-preview" | "azure/gpt-35-turbo-1106" | "azure/gpt-4o" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-sonnet-20240229" | "anthropic/claude-3-opus-20240229";
66
+ max_tokens: number;
67
+ name: string;
68
+ description: string;
69
+ };
70
+ };
71
+ "langevals/competitor_llm_function_call": {
72
+ settings: {
73
+ model: "openai/gpt-3.5-turbo" | "openai/gpt-3.5-turbo-0125" | "openai/gpt-3.5-turbo-1106" | "openai/gpt-4-turbo" | "openai/gpt-4-0125-preview" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "openai/gpt-4-1106-preview" | "azure/gpt-35-turbo-1106" | "azure/gpt-4o" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-sonnet-20240229" | "anthropic/claude-3-opus-20240229";
74
+ max_tokens: number;
75
+ name: string;
76
+ description: string;
77
+ competitors: string[];
78
+ };
79
+ };
80
+ "langevals/llm_boolean": {
81
+ settings: {
82
+ model: "openai/gpt-3.5-turbo" | "openai/gpt-3.5-turbo-0125" | "openai/gpt-3.5-turbo-1106" | "openai/gpt-4-turbo" | "openai/gpt-4-0125-preview" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "openai/gpt-4-1106-preview" | "azure/gpt-35-turbo-1106" | "azure/gpt-4o" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-sonnet-20240229" | "anthropic/claude-3-opus-20240229";
83
+ max_tokens: number;
84
+ prompt: string;
85
+ };
86
+ };
87
+ "langevals/llm_score": {
88
+ settings: {
89
+ model: "openai/gpt-3.5-turbo" | "openai/gpt-3.5-turbo-0125" | "openai/gpt-3.5-turbo-1106" | "openai/gpt-4-turbo" | "openai/gpt-4-0125-preview" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "openai/gpt-4-1106-preview" | "azure/gpt-35-turbo-1106" | "azure/gpt-4o" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-sonnet-20240229" | "anthropic/claude-3-opus-20240229";
90
+ max_tokens: number;
91
+ prompt: string;
92
+ };
93
+ };
94
+ "langevals/off_topic": {
95
+ settings: {
96
+ model: "openai/gpt-3.5-turbo" | "openai/gpt-3.5-turbo-0125" | "openai/gpt-3.5-turbo-1106" | "openai/gpt-4-turbo" | "openai/gpt-4-0125-preview" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "openai/gpt-4-1106-preview" | "azure/gpt-35-turbo-1106" | "azure/gpt-4o" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-sonnet-20240229" | "anthropic/claude-3-opus-20240229";
97
+ max_tokens: number;
98
+ allowed_topics: {
99
+ topic: string;
100
+ description: string;
101
+ }[];
102
+ };
103
+ };
104
+ "langevals/product_sentiment_polarity": {
105
+ settings: Record<string, never>;
106
+ };
107
+ "langevals/query_resolution": {
108
+ settings: {
109
+ model: "openai/gpt-3.5-turbo" | "openai/gpt-3.5-turbo-0125" | "openai/gpt-3.5-turbo-1106" | "openai/gpt-4-turbo" | "openai/gpt-4-0125-preview" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "openai/gpt-4-1106-preview" | "azure/gpt-35-turbo-1106" | "azure/gpt-4o" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-sonnet-20240229" | "anthropic/claude-3-opus-20240229";
110
+ max_tokens: number;
111
+ };
112
+ };
113
+ "langevals/similarity": {
114
+ settings: {
115
+ field: "input" | "output";
116
+ rule: "is_not_similar_to" | "is_similar_to";
117
+ value: string;
118
+ threshold: number;
119
+ embeddings_model: "openai/text-embedding-3-small" | "azure/text-embedding-ada-002";
120
+ };
121
+ };
122
+ "lingua/language_detection": {
123
+ settings: {
124
+ check_for: "input_matches_output" | "output_matches_language";
125
+ expected_language?: "AF" | "AR" | "AZ" | "BE" | "BG" | "BN" | "BS" | "CA" | "CS" | "CY" | "DA" | "DE" | "EL" | "EN" | "EO" | "ES" | "ET" | "EU" | "FA" | "FI" | "FR" | "GA" | "GU" | "HE" | "HI" | "HR" | "HU" | "HY" | "ID" | "IS" | "IT" | "JA" | "KA" | "KK" | "KO" | "LA" | "LG" | "LT" | "LV" | "MI" | "MK" | "MN" | "MR" | "MS" | "NB" | "NL" | "NN" | "PA" | "PL" | "PT" | "RO" | "RU" | "SK" | "SL" | "SN" | "SO" | "SQ" | "SR" | "ST" | "SV" | "SW" | "TA" | "TE" | "TH" | "TL" | "TN" | "TR" | "TS" | "UK" | "UR" | "VI" | "XH" | "YO" | "ZH" | "ZU";
126
+ min_words: number;
127
+ threshold: number;
128
+ };
129
+ };
130
+ "aws/comprehend_pii_detection": {
131
+ settings: {
132
+ entity_types: {
133
+ BANK_ACCOUNT_NUMBER: boolean;
134
+ BANK_ROUTING: boolean;
135
+ CREDIT_DEBIT_NUMBER: boolean;
136
+ CREDIT_DEBIT_CVV: boolean;
137
+ CREDIT_DEBIT_EXPIRY: boolean;
138
+ PIN: boolean;
139
+ EMAIL: boolean;
140
+ ADDRESS: boolean;
141
+ NAME: boolean;
142
+ PHONE: boolean;
143
+ SSN: boolean;
144
+ DATE_TIME: boolean;
145
+ PASSPORT_NUMBER: boolean;
146
+ DRIVER_ID: boolean;
147
+ URL: boolean;
148
+ AGE: boolean;
149
+ USERNAME: boolean;
150
+ PASSWORD: boolean;
151
+ AWS_ACCESS_KEY: boolean;
152
+ AWS_SECRET_KEY: boolean;
153
+ IP_ADDRESS: boolean;
154
+ MAC_ADDRESS: boolean;
155
+ LICENSE_PLATE: boolean;
156
+ VEHICLE_IDENTIFICATION_NUMBER: boolean;
157
+ UK_NATIONAL_INSURANCE_NUMBER: boolean;
158
+ CA_SOCIAL_INSURANCE_NUMBER: boolean;
159
+ US_INDIVIDUAL_TAX_IDENTIFICATION_NUMBER: boolean;
160
+ UK_UNIQUE_TAXPAYER_REFERENCE_NUMBER: boolean;
161
+ IN_PERMANENT_ACCOUNT_NUMBER: boolean;
162
+ IN_NREGA: boolean;
163
+ INTERNATIONAL_BANK_ACCOUNT_NUMBER: boolean;
164
+ SWIFT_CODE: boolean;
165
+ UK_NATIONAL_HEALTH_SERVICE_NUMBER: boolean;
166
+ CA_HEALTH_NUMBER: boolean;
167
+ IN_AADHAAR: boolean;
168
+ IN_VOTER_NUMBER: boolean;
169
+ };
170
+ language_code: "en" | "es" | "fr" | "de" | "it" | "pt" | "ar" | "hi" | "ja" | "ko" | "zh" | "zh-TW";
171
+ min_confidence: number;
172
+ aws_region: "us-east-1" | "us-east-2" | "us-west-1" | "us-west-2" | "ap-east-1" | "ap-south-1" | "ap-northeast-3" | "ap-northeast-2" | "ap-southeast-1" | "ap-southeast-2" | "ap-northeast-1" | "ca-central-1" | "eu-central-1" | "eu-west-1" | "eu-west-2" | "eu-south-1" | "eu-west-3" | "eu-north-1" | "me-south-1" | "sa-east-1";
173
+ };
174
+ };
175
+ "google_cloud/dlp_pii_detection": {
176
+ settings: {
177
+ info_types: {
178
+ phone_number: boolean;
179
+ email_address: boolean;
180
+ credit_card_number: boolean;
181
+ iban_code: boolean;
182
+ ip_address: boolean;
183
+ passport: boolean;
184
+ vat_number: boolean;
185
+ medical_record_number: boolean;
186
+ };
187
+ min_likelihood: "VERY_UNLIKELY" | "UNLIKELY" | "POSSIBLE" | "LIKELY" | "VERY_LIKELY";
188
+ };
189
+ };
190
+ "azure/content_safety": {
191
+ settings: {
192
+ severity_threshold: 1 | 2 | 3 | 4 | 5 | 6 | 7;
193
+ categories: {
194
+ Hate: boolean;
195
+ SelfHarm: boolean;
196
+ Sexual: boolean;
197
+ Violence: boolean;
198
+ };
199
+ output_type: "FourSeverityLevels" | "EightSeverityLevels";
200
+ };
201
+ };
202
+ "azure/jailbreak": {
203
+ settings: Record<string, never>;
204
+ };
205
+ "azure/prompt_injection": {
206
+ settings: Record<string, never>;
207
+ };
208
+ "ragas/answer_correctness": {
209
+ settings: {
210
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "anthropic/claude-3-5-sonnet-20240620";
211
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
212
+ max_tokens: number;
213
+ };
214
+ };
215
+ "ragas/answer_relevancy": {
216
+ settings: {
217
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "anthropic/claude-3-5-sonnet-20240620";
218
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
219
+ max_tokens: number;
220
+ };
221
+ };
222
+ "ragas/context_precision": {
223
+ settings: {
224
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "anthropic/claude-3-5-sonnet-20240620";
225
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
226
+ max_tokens: number;
227
+ };
228
+ };
229
+ "ragas/context_recall": {
230
+ settings: {
231
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "anthropic/claude-3-5-sonnet-20240620";
232
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
233
+ max_tokens: number;
234
+ };
235
+ };
236
+ "ragas/context_relevancy": {
237
+ settings: {
238
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "anthropic/claude-3-5-sonnet-20240620";
239
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
240
+ max_tokens: number;
241
+ };
242
+ };
243
+ "ragas/context_utilization": {
244
+ settings: {
245
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "anthropic/claude-3-5-sonnet-20240620";
246
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
247
+ max_tokens: number;
248
+ };
249
+ };
250
+ "ragas/faithfulness": {
251
+ settings: {
252
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "anthropic/claude-3-5-sonnet-20240620";
253
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
254
+ max_tokens: number;
255
+ };
256
+ };
257
+ };
258
+
259
+ type Conversation = {
260
+ input?: string;
261
+ output?: string;
262
+ }[];
263
+
264
+ type Money = {
265
+ currency: string;
266
+ amount: number;
267
+ };
268
+ type EvaluationResultModel = {
269
+ status: "processed" | "skipped" | "error";
270
+ passed?: boolean;
271
+ score?: number;
272
+ details?: string;
273
+ label?: string;
274
+ cost?: Money;
275
+ };
276
+ type CommonEvaluationParams = {
277
+ name?: string;
278
+ input?: string;
279
+ output?: string;
280
+ expectedOutput?: string;
281
+ contexts?: RAGChunk[] | string[];
282
+ conversation?: Conversation;
283
+ asGuardrail?: boolean;
284
+ trace?: LangWatchTrace;
285
+ span?: LangWatchSpan;
286
+ };
287
+ type SavedEvaluationParams = {
288
+ slug: string;
289
+ settings?: Record<string, unknown>;
290
+ } & CommonEvaluationParams;
291
+ type LangEvalsEvaluationParams<T extends EvaluatorTypes> = {
292
+ evaluator: T;
293
+ settings?: Evaluators[T]["settings"];
294
+ } & CommonEvaluationParams;
295
+ type EvaluationParams = SavedEvaluationParams | LangEvalsEvaluationParams<EvaluatorTypes>;
296
+
297
+ declare class LangWatchCallbackHandler extends BaseCallbackHandler {
298
+ name: string;
299
+ trace: LangWatchTrace;
300
+ spans: Record<string, LangWatchSpan>;
301
+ constructor({ trace }: {
302
+ trace: LangWatchTrace;
303
+ });
304
+ handleLLMStart(llm: Serialized, prompts: string[], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined, _tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
305
+ private buildLLMSpan;
306
+ handleChatModelStart(llm: Serialized, messages: BaseMessage[][], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
307
+ handleNewToken(_token: string, runId: string): Promise<void>;
308
+ handleLLMEnd(response: LLMResult, runId: string, _parentRunId?: string | undefined): Promise<void>;
309
+ handleLLMError(err: Error, runId: string, _parentRunId?: string | undefined): Promise<void>;
310
+ handleChainStart(chain: Serialized, inputs: ChainValues, runId: string, parentRunId?: string | undefined, _tags?: string[] | undefined, _metadata?: Record<string, unknown> | undefined, _runType?: string, name?: string): Promise<void>;
311
+ handleChainEnd(output: ChainValues, runId: string, _parentRunId?: string | undefined): Promise<void>;
312
+ handleChainError(err: Error, runId: string, _parentRunId?: string | undefined, _tags?: string[] | undefined, _kwargs?: {
313
+ inputs?: Record<string, unknown> | undefined;
314
+ } | undefined): Promise<void>;
315
+ handleToolStart(tool: Serialized, input: string, runId: string, parentRunId?: string | undefined, _tags?: string[] | undefined, _metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
316
+ handleToolEnd(output: string, runId: string, _parentRunId?: string | undefined): Promise<void>;
317
+ handleToolError(err: Error, runId: string, _parentRunId?: string | undefined, _tags?: string[] | undefined): Promise<void>;
318
+ handleRetrieverStart(retriever: Serialized, query: string, runId: string, parentRunId?: string | undefined, _tags?: string[] | undefined, _metadata?: Record<string, unknown> | undefined, name?: string | undefined): Promise<void>;
319
+ handleRetrieverEnd(documents: DocumentInterface<Record<string, any>>[], runId: string, _parentRunId?: string | undefined, _tags?: string[] | undefined): Promise<void>;
320
+ handleRetrieverError(err: Error, runId: string, _parentRunId?: string | undefined, _tags?: string[] | undefined): Promise<void>;
321
+ handleAgentAction(_action: AgentAction, runId: string, _parentRunId?: string | undefined, _tags?: string[] | undefined): Promise<void>;
322
+ handleAgentEnd(action: AgentFinish, runId: string, _parentRunId?: string | undefined, _tags?: string[] | undefined): Promise<void>;
323
+ private buildSpan;
324
+ private endSpan;
325
+ private errorSpan;
326
+ private autoconvertTypedValues;
327
+ private getParent;
328
+ }
6
329
 
7
330
  declare class LangWatch extends EventEmitter {
8
331
  apiKey: string | undefined;
@@ -18,12 +341,29 @@ declare class LangWatch extends EventEmitter {
18
341
  sendTrace(params: CollectorRESTParams): Promise<void>;
19
342
  _sendTrace(params: CollectorRESTParams): Promise<void>;
20
343
  }
344
+ type AddEvaluationParams = {
345
+ evaluationId?: string;
346
+ span?: LangWatchSpan;
347
+ name: string;
348
+ type?: string;
349
+ isGuardrail?: boolean;
350
+ status?: "processed" | "skipped" | "error";
351
+ passed?: boolean;
352
+ score?: number;
353
+ label?: string;
354
+ details?: string;
355
+ error?: Error;
356
+ timestamps?: RESTEvaluation["timestamps"];
357
+ };
21
358
  declare class LangWatchTrace {
22
359
  client: LangWatch;
23
360
  traceId: string;
24
361
  metadata?: Metadata;
25
362
  finishedSpans: Record<string, Span>;
26
- timeoutRef?: NodeJS.Timeout;
363
+ langchainCallback?: LangWatchCallbackHandler;
364
+ evaluations: RESTEvaluation[];
365
+ private currentSpan?;
366
+ private timeoutRef?;
27
367
  constructor({ client, traceId, metadata, }: {
28
368
  client: LangWatch;
29
369
  traceId: string;
@@ -32,9 +372,15 @@ declare class LangWatchTrace {
32
372
  update({ metadata }: {
33
373
  metadata: Metadata;
34
374
  }): void;
375
+ setCurrentSpan(span: LangWatchSpan): void;
376
+ getCurrentSpan(): LangWatchSpan | undefined;
377
+ resetCurrentSpan(): void;
35
378
  startSpan(params: Omit<Partial<PendingBaseSpan>, "parentId">): LangWatchSpan;
36
379
  startLLMSpan(params: Omit<Partial<PendingLLMSpan>, "parentId">): LangWatchLLMSpan;
37
380
  startRAGSpan(params: Omit<Partial<PendingRAGSpan>, "parentId">): LangWatchRAGSpan;
381
+ addEvaluation: ({ evaluationId, span, name, type, isGuardrail, status, passed, score, label, details, error, timestamps, }: AddEvaluationParams) => void;
382
+ evaluate(params: EvaluationParams): Promise<EvaluationResultModel>;
383
+ getLangChainCallback(): LangWatchCallbackHandler;
38
384
  onEnd(span: Span): void;
39
385
  delayedSendSpans(): void;
40
386
  sendSpans(): Promise<void>;
@@ -57,6 +403,8 @@ declare class LangWatchSpan implements PendingBaseSpan {
57
403
  startSpan(params: Omit<Partial<PendingBaseSpan>, "parentId">): LangWatchSpan;
58
404
  startLLMSpan(params: Omit<Partial<PendingLLMSpan>, "parentId">): LangWatchLLMSpan;
59
405
  startRAGSpan(params: Omit<Partial<PendingRAGSpan>, "parentId">): LangWatchRAGSpan;
406
+ addEvaluation(params: AddEvaluationParams): void;
407
+ evaluate(params: EvaluationParams): Promise<EvaluationResultModel>;
60
408
  end(params?: Partial<Omit<PendingBaseSpan, "spanId" | "parentId">>): void;
61
409
  }
62
410
  declare class LangWatchLLMSpan extends LangWatchSpan implements PendingLLMSpan {