langwatch 0.1.1 → 0.1.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/dist/index.d.ts CHANGED
@@ -1,6 +1,4 @@
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-K-jSEpnZ.js';
3
- export { B as BaseSpan, d as ChatMessage, e as ChatRichContent, L as LLMSpan, R as RAGSpan, f as SpanInputOutput, i as autoconvertTypedValues, h as captureError, g as convertFromVercelAIMessages } from './utils-K-jSEpnZ.js';
4
2
  import { AgentAction, AgentFinish } from '@langchain/core/agents';
5
3
  import { BaseCallbackHandler } from '@langchain/core/callbacks/base';
6
4
  import { DocumentInterface } from '@langchain/core/documents';
@@ -8,8 +6,327 @@ import { Serialized } from '@langchain/core/load/serializable';
8
6
  import { BaseMessage } from '@langchain/core/messages';
9
7
  import { LLMResult } from '@langchain/core/outputs';
10
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';
11
11
  import 'ai';
12
- import 'llm-cost/model_prices_and_context_window.json';
12
+
13
+ type EvaluatorTypes = keyof Evaluators;
14
+ type Evaluators = {
15
+ "lingua/language_detection": {
16
+ settings: {
17
+ check_for: "input_matches_output" | "output_matches_language";
18
+ 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";
19
+ min_words: number;
20
+ threshold: number;
21
+ };
22
+ };
23
+ "aws/comprehend_pii_detection": {
24
+ settings: {
25
+ entity_types: {
26
+ BANK_ACCOUNT_NUMBER: boolean;
27
+ BANK_ROUTING: boolean;
28
+ CREDIT_DEBIT_NUMBER: boolean;
29
+ CREDIT_DEBIT_CVV: boolean;
30
+ CREDIT_DEBIT_EXPIRY: boolean;
31
+ PIN: boolean;
32
+ EMAIL: boolean;
33
+ ADDRESS: boolean;
34
+ NAME: boolean;
35
+ PHONE: boolean;
36
+ SSN: boolean;
37
+ DATE_TIME: boolean;
38
+ PASSPORT_NUMBER: boolean;
39
+ DRIVER_ID: boolean;
40
+ URL: boolean;
41
+ AGE: boolean;
42
+ USERNAME: boolean;
43
+ PASSWORD: boolean;
44
+ AWS_ACCESS_KEY: boolean;
45
+ AWS_SECRET_KEY: boolean;
46
+ IP_ADDRESS: boolean;
47
+ MAC_ADDRESS: boolean;
48
+ LICENSE_PLATE: boolean;
49
+ VEHICLE_IDENTIFICATION_NUMBER: boolean;
50
+ UK_NATIONAL_INSURANCE_NUMBER: boolean;
51
+ CA_SOCIAL_INSURANCE_NUMBER: boolean;
52
+ US_INDIVIDUAL_TAX_IDENTIFICATION_NUMBER: boolean;
53
+ UK_UNIQUE_TAXPAYER_REFERENCE_NUMBER: boolean;
54
+ IN_PERMANENT_ACCOUNT_NUMBER: boolean;
55
+ IN_NREGA: boolean;
56
+ INTERNATIONAL_BANK_ACCOUNT_NUMBER: boolean;
57
+ SWIFT_CODE: boolean;
58
+ UK_NATIONAL_HEALTH_SERVICE_NUMBER: boolean;
59
+ CA_HEALTH_NUMBER: boolean;
60
+ IN_AADHAAR: boolean;
61
+ IN_VOTER_NUMBER: boolean;
62
+ };
63
+ language_code: "en" | "es" | "fr" | "de" | "it" | "pt" | "ar" | "hi" | "ja" | "ko" | "zh" | "zh-TW";
64
+ min_confidence: number;
65
+ 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";
66
+ };
67
+ };
68
+ "huggingface/llama_guard": {
69
+ settings: {
70
+ policy: string;
71
+ evaluate: "input" | "output" | "both";
72
+ model: "cloudflare/thebloke/llamaguard-7b-awq";
73
+ };
74
+ };
75
+ "google_cloud/dlp_pii_detection": {
76
+ settings: {
77
+ info_types: {
78
+ phone_number: boolean;
79
+ email_address: boolean;
80
+ credit_card_number: boolean;
81
+ iban_code: boolean;
82
+ ip_address: boolean;
83
+ passport: boolean;
84
+ vat_number: boolean;
85
+ medical_record_number: boolean;
86
+ };
87
+ min_likelihood: "VERY_UNLIKELY" | "UNLIKELY" | "POSSIBLE" | "LIKELY" | "VERY_LIKELY";
88
+ };
89
+ };
90
+ "presidio/pii_detection": {
91
+ settings: {
92
+ entities: {
93
+ credit_card: boolean;
94
+ crypto: boolean;
95
+ email_address: boolean;
96
+ iban_code: boolean;
97
+ ip_address: boolean;
98
+ location: boolean;
99
+ person: boolean;
100
+ phone_number: boolean;
101
+ medical_license: boolean;
102
+ us_bank_number: boolean;
103
+ us_driver_license: boolean;
104
+ us_itin: boolean;
105
+ us_passport: boolean;
106
+ us_ssn: boolean;
107
+ uk_nhs: boolean;
108
+ sg_nric_fin: boolean;
109
+ sg_uen: boolean;
110
+ au_abn: boolean;
111
+ au_acn: boolean;
112
+ au_tfn: boolean;
113
+ au_medicare: boolean;
114
+ in_pan: boolean;
115
+ in_aadhaar: boolean;
116
+ in_vehicle_registration: boolean;
117
+ in_voter: boolean;
118
+ in_passport: boolean;
119
+ fi_personal_identity_code: boolean;
120
+ };
121
+ min_threshold: number;
122
+ };
123
+ };
124
+ "ragas/answer_correctness": {
125
+ settings: {
126
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "azure/gpt-4o-mini" | "anthropic/claude-3-5-sonnet-20240620";
127
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
128
+ max_tokens: number;
129
+ };
130
+ };
131
+ "ragas/answer_relevancy": {
132
+ settings: {
133
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "azure/gpt-4o-mini" | "anthropic/claude-3-5-sonnet-20240620";
134
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
135
+ max_tokens: number;
136
+ };
137
+ };
138
+ "ragas/context_precision": {
139
+ settings: {
140
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "azure/gpt-4o-mini" | "anthropic/claude-3-5-sonnet-20240620";
141
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
142
+ max_tokens: number;
143
+ };
144
+ };
145
+ "ragas/context_recall": {
146
+ settings: {
147
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "azure/gpt-4o-mini" | "anthropic/claude-3-5-sonnet-20240620";
148
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
149
+ max_tokens: number;
150
+ };
151
+ };
152
+ "ragas/context_relevancy": {
153
+ settings: {
154
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "azure/gpt-4o-mini" | "anthropic/claude-3-5-sonnet-20240620";
155
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
156
+ max_tokens: number;
157
+ };
158
+ };
159
+ "ragas/context_utilization": {
160
+ settings: {
161
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "azure/gpt-4o-mini" | "anthropic/claude-3-5-sonnet-20240620";
162
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
163
+ max_tokens: number;
164
+ };
165
+ };
166
+ "ragas/faithfulness": {
167
+ settings: {
168
+ model: "openai/gpt-3.5-turbo-16k" | "openai/gpt-4o" | "openai/gpt-4o-mini" | "azure/gpt-35-turbo-16k" | "azure/gpt-4o" | "azure/gpt-4o-mini" | "anthropic/claude-3-5-sonnet-20240620";
169
+ embeddings_model: "openai/text-embedding-ada-002" | "azure/text-embedding-ada-002";
170
+ max_tokens: number;
171
+ };
172
+ };
173
+ "langevals/basic": {
174
+ settings: {
175
+ rules: {
176
+ field: "input" | "output";
177
+ rule: "contains" | "not_contains" | "matches_regex" | "not_matches_regex";
178
+ value: string;
179
+ }[];
180
+ };
181
+ };
182
+ "langevals/competitor_blocklist": {
183
+ settings: {
184
+ competitors: string[];
185
+ };
186
+ };
187
+ "langevals/competitor_llm": {
188
+ settings: {
189
+ 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-4o-mini" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-5-sonnet-20240620" | "anthropic/claude-3-opus-20240229";
190
+ max_tokens: number;
191
+ name: string;
192
+ description: string;
193
+ };
194
+ };
195
+ "langevals/competitor_llm_function_call": {
196
+ settings: {
197
+ 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-4o-mini" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-5-sonnet-20240620" | "anthropic/claude-3-opus-20240229";
198
+ max_tokens: number;
199
+ name: string;
200
+ description: string;
201
+ competitors: string[];
202
+ };
203
+ };
204
+ "langevals/llm_boolean": {
205
+ settings: {
206
+ 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-4o-mini" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-5-sonnet-20240620" | "anthropic/claude-3-opus-20240229";
207
+ max_tokens: number;
208
+ prompt: string;
209
+ };
210
+ };
211
+ "langevals/llm_score": {
212
+ settings: {
213
+ 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-4o-mini" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-5-sonnet-20240620" | "anthropic/claude-3-opus-20240229";
214
+ max_tokens: number;
215
+ prompt: string;
216
+ };
217
+ };
218
+ "langevals/off_topic": {
219
+ settings: {
220
+ 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-4o-mini" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-5-sonnet-20240620" | "anthropic/claude-3-opus-20240229";
221
+ max_tokens: number;
222
+ allowed_topics: {
223
+ topic: string;
224
+ description: string;
225
+ }[];
226
+ };
227
+ };
228
+ "langevals/product_sentiment_polarity": {
229
+ settings: Record<string, never>;
230
+ };
231
+ "langevals/query_resolution": {
232
+ settings: {
233
+ 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-4o-mini" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-5-sonnet-20240620" | "anthropic/claude-3-opus-20240229";
234
+ max_tokens: number;
235
+ };
236
+ };
237
+ "langevals/similarity": {
238
+ settings: {
239
+ field: "input" | "output";
240
+ rule: "is_not_similar_to" | "is_similar_to";
241
+ value: string;
242
+ threshold: number;
243
+ embeddings_model: "openai/text-embedding-3-small" | "azure/text-embedding-ada-002";
244
+ };
245
+ };
246
+ "azure/content_safety": {
247
+ settings: {
248
+ severity_threshold: 1 | 2 | 3 | 4 | 5 | 6 | 7;
249
+ categories: {
250
+ Hate: boolean;
251
+ SelfHarm: boolean;
252
+ Sexual: boolean;
253
+ Violence: boolean;
254
+ };
255
+ output_type: "FourSeverityLevels" | "EightSeverityLevels";
256
+ };
257
+ };
258
+ "azure/jailbreak": {
259
+ settings: Record<string, never>;
260
+ };
261
+ "azure/prompt_injection": {
262
+ settings: Record<string, never>;
263
+ };
264
+ "openai/moderation": {
265
+ settings: {
266
+ model: "text-moderation-stable" | "text-moderation-latest";
267
+ categories: {
268
+ harassment: boolean;
269
+ harassment_threatening: boolean;
270
+ hate: boolean;
271
+ hate_threatening: boolean;
272
+ self_harm: boolean;
273
+ self_harm_instructions: boolean;
274
+ self_harm_intent: boolean;
275
+ sexual: boolean;
276
+ sexual_minors: boolean;
277
+ violence: boolean;
278
+ violence_graphic: boolean;
279
+ };
280
+ };
281
+ };
282
+ "example/word_count": {
283
+ settings: Record<string, never>;
284
+ };
285
+ "haystack/faithfulness": {
286
+ settings: {
287
+ 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-4o-mini" | "azure/gpt-4-turbo-2024-04-09" | "azure/gpt-4-1106-preview" | "groq/llama3-70b-8192" | "anthropic/claude-3-haiku-20240307" | "anthropic/claude-3-5-sonnet-20240620" | "anthropic/claude-3-opus-20240229";
288
+ max_tokens: number;
289
+ };
290
+ };
291
+ };
292
+
293
+ type Conversation = {
294
+ input?: string;
295
+ output?: string;
296
+ }[];
297
+
298
+ type Money = {
299
+ currency: string;
300
+ amount: number;
301
+ };
302
+ type EvaluationResultModel = {
303
+ status: "processed" | "skipped" | "error";
304
+ passed?: boolean;
305
+ score?: number;
306
+ details?: string;
307
+ label?: string;
308
+ cost?: Money;
309
+ };
310
+ type CommonEvaluationParams = {
311
+ name?: string;
312
+ input?: string;
313
+ output?: string;
314
+ expectedOutput?: string;
315
+ contexts?: RAGChunk[] | string[];
316
+ conversation?: Conversation;
317
+ asGuardrail?: boolean;
318
+ trace?: LangWatchTrace;
319
+ span?: LangWatchSpan;
320
+ };
321
+ type SavedEvaluationParams = {
322
+ slug: string;
323
+ settings?: Record<string, unknown>;
324
+ } & CommonEvaluationParams;
325
+ type LangEvalsEvaluationParams<T extends EvaluatorTypes> = {
326
+ evaluator: T;
327
+ settings?: Evaluators[T]["settings"];
328
+ } & CommonEvaluationParams;
329
+ type EvaluationParams = SavedEvaluationParams | LangEvalsEvaluationParams<EvaluatorTypes>;
13
330
 
14
331
  declare class LangWatchCallbackHandler extends BaseCallbackHandler {
15
332
  name: string;
@@ -58,13 +375,29 @@ declare class LangWatch extends EventEmitter {
58
375
  sendTrace(params: CollectorRESTParams): Promise<void>;
59
376
  _sendTrace(params: CollectorRESTParams): Promise<void>;
60
377
  }
378
+ type AddEvaluationParams = {
379
+ evaluationId?: string;
380
+ span?: LangWatchSpan;
381
+ name: string;
382
+ type?: string;
383
+ isGuardrail?: boolean;
384
+ status?: "processed" | "skipped" | "error";
385
+ passed?: boolean;
386
+ score?: number;
387
+ label?: string;
388
+ details?: string;
389
+ error?: Error;
390
+ timestamps?: RESTEvaluation["timestamps"];
391
+ };
61
392
  declare class LangWatchTrace {
62
393
  client: LangWatch;
63
394
  traceId: string;
64
395
  metadata?: Metadata;
65
396
  finishedSpans: Record<string, Span>;
66
- timeoutRef?: NodeJS.Timeout;
67
397
  langchainCallback?: LangWatchCallbackHandler;
398
+ evaluations: RESTEvaluation[];
399
+ private currentSpan?;
400
+ private timeoutRef?;
68
401
  constructor({ client, traceId, metadata, }: {
69
402
  client: LangWatch;
70
403
  traceId: string;
@@ -73,9 +406,14 @@ declare class LangWatchTrace {
73
406
  update({ metadata }: {
74
407
  metadata: Metadata;
75
408
  }): void;
409
+ setCurrentSpan(span: LangWatchSpan): void;
410
+ getCurrentSpan(): LangWatchSpan | undefined;
411
+ resetCurrentSpan(): void;
76
412
  startSpan(params: Omit<Partial<PendingBaseSpan>, "parentId">): LangWatchSpan;
77
413
  startLLMSpan(params: Omit<Partial<PendingLLMSpan>, "parentId">): LangWatchLLMSpan;
78
414
  startRAGSpan(params: Omit<Partial<PendingRAGSpan>, "parentId">): LangWatchRAGSpan;
415
+ addEvaluation: ({ evaluationId, span, name, type, isGuardrail, status, passed, score, label, details, error, timestamps, }: AddEvaluationParams) => void;
416
+ evaluate(params: EvaluationParams): Promise<EvaluationResultModel>;
79
417
  getLangChainCallback(): LangWatchCallbackHandler;
80
418
  onEnd(span: Span): void;
81
419
  delayedSendSpans(): void;
@@ -99,6 +437,8 @@ declare class LangWatchSpan implements PendingBaseSpan {
99
437
  startSpan(params: Omit<Partial<PendingBaseSpan>, "parentId">): LangWatchSpan;
100
438
  startLLMSpan(params: Omit<Partial<PendingLLMSpan>, "parentId">): LangWatchLLMSpan;
101
439
  startRAGSpan(params: Omit<Partial<PendingRAGSpan>, "parentId">): LangWatchRAGSpan;
440
+ addEvaluation(params: AddEvaluationParams): void;
441
+ evaluate(params: EvaluationParams): Promise<EvaluationResultModel>;
102
442
  end(params?: Partial<Omit<PendingBaseSpan, "spanId" | "parentId">>): void;
103
443
  }
104
444
  declare class LangWatchLLMSpan extends LangWatchSpan implements PendingLLMSpan {