langsmithrb_rails 0.1.1 → 0.3.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.
- checksums.yaml +4 -4
- data/.rspec_status +158 -79
- data/CHANGELOG.md +13 -0
- data/Gemfile.lock +1 -1
- data/README.md +153 -0
- data/langsmithrb_rails-0.1.1.gem +0 -0
- data/lib/langsmithrb_rails/client.rb +217 -2
- data/lib/langsmithrb_rails/config.rb +143 -46
- data/lib/langsmithrb_rails/evaluation/evaluator.rb +178 -0
- data/lib/langsmithrb_rails/evaluation/llm_evaluator.rb +154 -0
- data/lib/langsmithrb_rails/evaluation/string_evaluator.rb +158 -0
- data/lib/langsmithrb_rails/evaluation.rb +76 -0
- data/lib/langsmithrb_rails/otel/exporter.rb +120 -0
- data/lib/langsmithrb_rails/otel.rb +135 -0
- data/lib/langsmithrb_rails/run_trees.rb +157 -0
- data/lib/langsmithrb_rails/version.rb +1 -1
- data/lib/langsmithrb_rails/wrappers/anthropic.rb +146 -0
- data/lib/langsmithrb_rails/wrappers/base.rb +81 -0
- data/lib/langsmithrb_rails/wrappers/llm.rb +151 -0
- data/lib/langsmithrb_rails/wrappers/openai.rb +193 -0
- data/lib/langsmithrb_rails/wrappers.rb +41 -0
- data/lib/langsmithrb_rails.rb +121 -1
- data/pkg/langsmithrb_rails-0.3.0.gem +0 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7871f0c85cdbf0ec6ea8a29115cca1e5f3e86d8c42d34b69533efd6197b7bc4
|
4
|
+
data.tar.gz: f7fea4c3dc9aa3128602f6b2e7b1c43f0becb2256bbe595ed2963376737a7b2d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51dc0027ec369337c3df8ad62b827e5758053b0f11228927669b07c4cbbbb9e2f5617d03dc3766db906980baa5e50f33563ed24e5e8d81aff43d67b52138d4b6
|
7
|
+
data.tar.gz: ab000faf12fc4c9eb7fb70a0c36945e3da9868737f3a60e2fef01008f92bd25e9c827dfc2bc070aaf80a3f48081102e61af1381f47edac8e13d6ebe5e36c1fb0
|
data/.rspec_status
CHANGED
@@ -1,82 +1,161 @@
|
|
1
1
|
example_id | status | run_time |
|
2
2
|
-------------------------------------------------------------------------------------------------- | ------ | --------------- |
|
3
|
-
./spec/langsmithrb_rails/config_spec.rb[1:1:1] |
|
4
|
-
./spec/langsmithrb_rails/config_spec.rb[1:2:1] |
|
5
|
-
./spec/langsmithrb_rails/config_spec.rb[1:2:2] |
|
6
|
-
./spec/langsmithrb_rails/config_spec.rb[1:2:3] |
|
7
|
-
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:1:1] | passed | 0.
|
8
|
-
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:2:1] | passed | 0.
|
9
|
-
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:3:1] | passed | 0.
|
10
|
-
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:4:1] | passed | 0.
|
11
|
-
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:5:1:1:1] | passed | 0.
|
12
|
-
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:5:1:2:1] | passed | 0.
|
13
|
-
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:5:2:1] | passed | 0.
|
14
|
-
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:6:1] | passed | 0.
|
15
|
-
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:7:1] | passed | 0.
|
16
|
-
./spec/langsmithrb_rails/generators/ci_generator_spec.rb[1:1:1] | passed | 0.
|
17
|
-
./spec/langsmithrb_rails/generators/ci_generator_spec.rb[1:2:1] | passed | 0.
|
18
|
-
./spec/langsmithrb_rails/generators/ci_generator_spec.rb[1:3:1] | passed | 0.
|
19
|
-
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:1:1] | passed | 0.
|
20
|
-
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:2:1] | passed | 0.
|
21
|
-
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:3:1] | passed | 0.
|
22
|
-
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:4:1] | passed | 0.
|
23
|
-
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:5:1] | passed | 0.
|
24
|
-
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:6:1] | passed | 0.
|
25
|
-
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:7:1] | passed | 0.
|
26
|
-
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:8:1] | passed | 0.
|
27
|
-
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:9:1] | passed | 0.
|
28
|
-
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:1:1] | passed | 0.
|
29
|
-
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:2:1] | passed | 0.
|
30
|
-
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:3:1] | passed | 0.
|
31
|
-
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:4:1] | passed | 0.
|
32
|
-
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:5:1] | passed | 0.
|
33
|
-
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:6:1] | passed | 0.
|
34
|
-
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:1:1] | passed | 0.
|
35
|
-
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:2:1:1] | passed | 0.
|
36
|
-
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:2:2:1] | passed | 0.
|
37
|
-
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:2:3:1] | passed | 0.
|
38
|
-
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:3:1:1] | passed | 0.
|
39
|
-
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:3:2:1] | passed | 0.
|
40
|
-
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:3:3:1] | passed | 0.
|
41
|
-
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:4:1] | passed | 0.
|
42
|
-
./spec/langsmithrb_rails/generators/langsmithrb_rails/templates/langsmith_initializer_spec.rb[1:1] | passed | 0.
|
43
|
-
./spec/langsmithrb_rails/generators/langsmithrb_rails/templates/langsmith_initializer_spec.rb[1:2] | passed | 0.
|
44
|
-
./spec/langsmithrb_rails/generators/langsmithrb_rails/templates/langsmith_initializer_spec.rb[1:3] | passed | 0.
|
45
|
-
./spec/langsmithrb_rails/generators/privacy_generator_spec.rb[1:1:1] | passed | 0.
|
46
|
-
./spec/langsmithrb_rails/generators/privacy_generator_spec.rb[1:2:1] | passed | 0.
|
47
|
-
./spec/langsmithrb_rails/generators/privacy_generator_spec.rb[1:3:1] | passed | 0.
|
48
|
-
./spec/langsmithrb_rails/generators/privacy_generator_spec.rb[1:4:1] | passed | 0.
|
49
|
-
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:1:1] | passed | 0.
|
50
|
-
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:2:1] | passed | 0.
|
51
|
-
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:3:1] | passed | 0.
|
52
|
-
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:4:1:1:1] | passed | 0.
|
3
|
+
./spec/langsmithrb_rails/config_spec.rb[1:1:1] | failed | 0.00773 seconds |
|
4
|
+
./spec/langsmithrb_rails/config_spec.rb[1:2:1] | failed | 0.00029 seconds |
|
5
|
+
./spec/langsmithrb_rails/config_spec.rb[1:2:2] | failed | 0.0002 seconds |
|
6
|
+
./spec/langsmithrb_rails/config_spec.rb[1:2:3] | failed | 0.00016 seconds |
|
7
|
+
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:1:1] | passed | 0.00178 seconds |
|
8
|
+
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:2:1] | passed | 0.00623 seconds |
|
9
|
+
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:3:1] | passed | 0.00054 seconds |
|
10
|
+
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:4:1] | passed | 0.00068 seconds |
|
11
|
+
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:5:1:1:1] | passed | 0.00057 seconds |
|
12
|
+
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:5:1:2:1] | passed | 0.00069 seconds |
|
13
|
+
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:5:2:1] | passed | 0.00068 seconds |
|
14
|
+
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:6:1] | passed | 0.00037 seconds |
|
15
|
+
./spec/langsmithrb_rails/generators/buffer_generator_spec.rb[1:7:1] | passed | 0.0023 seconds |
|
16
|
+
./spec/langsmithrb_rails/generators/ci_generator_spec.rb[1:1:1] | passed | 0.00075 seconds |
|
17
|
+
./spec/langsmithrb_rails/generators/ci_generator_spec.rb[1:2:1] | passed | 0.00043 seconds |
|
18
|
+
./spec/langsmithrb_rails/generators/ci_generator_spec.rb[1:3:1] | passed | 0.00053 seconds |
|
19
|
+
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:1:1] | passed | 0.00051 seconds |
|
20
|
+
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:2:1] | passed | 0.00078 seconds |
|
21
|
+
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:3:1] | passed | 0.00051 seconds |
|
22
|
+
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:4:1] | passed | 0.00106 seconds |
|
23
|
+
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:5:1] | passed | 0.00135 seconds |
|
24
|
+
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:6:1] | passed | 0.00532 seconds |
|
25
|
+
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:7:1] | passed | 0.00074 seconds |
|
26
|
+
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:8:1] | passed | 0.00218 seconds |
|
27
|
+
./spec/langsmithrb_rails/generators/demo_generator_spec.rb[1:9:1] | passed | 0.06224 seconds |
|
28
|
+
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:1:1] | passed | 0.00531 seconds |
|
29
|
+
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:2:1] | passed | 0.00354 seconds |
|
30
|
+
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:3:1] | passed | 0.00707 seconds |
|
31
|
+
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:4:1] | passed | 0.00068 seconds |
|
32
|
+
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:5:1] | passed | 0.00037 seconds |
|
33
|
+
./spec/langsmithrb_rails/generators/evals_generator_spec.rb[1:6:1] | passed | 0.00064 seconds |
|
34
|
+
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:1:1] | passed | 0.00036 seconds |
|
35
|
+
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:2:1:1] | passed | 0.0007 seconds |
|
36
|
+
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:2:2:1] | passed | 0.00262 seconds |
|
37
|
+
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:2:3:1] | passed | 0.00075 seconds |
|
38
|
+
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:3:1:1] | passed | 0.0007 seconds |
|
39
|
+
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:3:2:1] | passed | 0.00043 seconds |
|
40
|
+
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:3:3:1] | passed | 0.00065 seconds |
|
41
|
+
./spec/langsmithrb_rails/generators/langsmith_generator_spec.rb[1:4:1] | passed | 0.00145 seconds |
|
42
|
+
./spec/langsmithrb_rails/generators/langsmithrb_rails/templates/langsmith_initializer_spec.rb[1:1] | passed | 0.00294 seconds |
|
43
|
+
./spec/langsmithrb_rails/generators/langsmithrb_rails/templates/langsmith_initializer_spec.rb[1:2] | passed | 0.00487 seconds |
|
44
|
+
./spec/langsmithrb_rails/generators/langsmithrb_rails/templates/langsmith_initializer_spec.rb[1:3] | passed | 0.0002 seconds |
|
45
|
+
./spec/langsmithrb_rails/generators/privacy_generator_spec.rb[1:1:1] | passed | 0.00067 seconds |
|
46
|
+
./spec/langsmithrb_rails/generators/privacy_generator_spec.rb[1:2:1] | passed | 0.00037 seconds |
|
47
|
+
./spec/langsmithrb_rails/generators/privacy_generator_spec.rb[1:3:1] | passed | 0.00052 seconds |
|
48
|
+
./spec/langsmithrb_rails/generators/privacy_generator_spec.rb[1:4:1] | passed | 0.00054 seconds |
|
49
|
+
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:1:1] | passed | 0.0004 seconds |
|
50
|
+
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:2:1] | passed | 0.00038 seconds |
|
51
|
+
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:3:1] | passed | 0.00037 seconds |
|
52
|
+
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:4:1:1:1] | passed | 0.00055 seconds |
|
53
53
|
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:4:1:2:1] | passed | 0.00049 seconds |
|
54
|
-
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:4:1:3:1] | passed | 0.
|
55
|
-
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:4:2:1] | passed | 0.
|
56
|
-
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:5:1] | passed | 0.
|
57
|
-
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:6:1] | passed | 0.
|
58
|
-
./spec/langsmithrb_rails/langsmith_spec.rb[1:1:1] | passed | 0.
|
59
|
-
./spec/langsmithrb_rails/langsmith_spec.rb[1:1:2] | passed | 0.
|
60
|
-
./spec/langsmithrb_rails/langsmith_spec.rb[1:1:3] | passed | 0.
|
61
|
-
./spec/langsmithrb_rails/langsmith_spec.rb[1:1:4] | passed | 0.
|
62
|
-
./spec/langsmithrb_rails/langsmith_spec.rb[1:1:5] | passed | 0.
|
63
|
-
./spec/langsmithrb_rails/langsmith_spec.rb[1:2:1] | passed | 0.
|
64
|
-
./spec/langsmithrb_rails/langsmith_spec.rb[1:2:2] | passed | 0.
|
65
|
-
./spec/langsmithrb_rails/langsmith_spec.rb[1:2:3] | passed | 0.
|
66
|
-
./spec/langsmithrb_rails/langsmith_spec.rb[1:3:1] | passed | 0.
|
67
|
-
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:1:1] | passed | 0.
|
68
|
-
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:1:2] | passed | 0.
|
69
|
-
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:1:3] | passed | 0.
|
70
|
-
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:2:1] | passed | 0.
|
71
|
-
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:2:2] | passed | 0.
|
72
|
-
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:2:3] | passed | 0.
|
73
|
-
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:3:1] | passed | 0.
|
74
|
-
./spec/langsmithrb_rails/railtie_spec.rb[1:1:1:1] | passed | 0.
|
75
|
-
./spec/langsmithrb_rails/railtie_spec.rb[1:1:2:1] | passed | 0.
|
76
|
-
./spec/langsmithrb_rails/railtie_spec.rb[1:2:1] | passed | 0.
|
77
|
-
./spec/langsmithrb_rails/railtie_spec.rb[1:3:1] | passed | 0.
|
78
|
-
./spec/langsmithrb_rails/version_spec.rb[1:1:1] | passed | 0.
|
79
|
-
./spec/langsmithrb_rails_spec.rb[1:1:1] | passed | 0.
|
80
|
-
./spec/langsmithrb_rails_spec.rb[1:1:2] | passed | 0.
|
81
|
-
./spec/langsmithrb_rails_spec.rb[1:2:1] | passed | 0.
|
82
|
-
./spec/langsmithrb_rails_spec.rb[1:2:2] | passed | 0.
|
54
|
+
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:4:1:3:1] | passed | 0.00069 seconds |
|
55
|
+
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:4:2:1] | passed | 0.00174 seconds |
|
56
|
+
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:5:1] | passed | 0.00053 seconds |
|
57
|
+
./spec/langsmithrb_rails/generators/tracing_generator_spec.rb[1:6:1] | passed | 0.00078 seconds |
|
58
|
+
./spec/langsmithrb_rails/langsmith_spec.rb[1:1:1] | passed | 0.00027 seconds |
|
59
|
+
./spec/langsmithrb_rails/langsmith_spec.rb[1:1:2] | passed | 0.00022 seconds |
|
60
|
+
./spec/langsmithrb_rails/langsmith_spec.rb[1:1:3] | passed | 0.00036 seconds |
|
61
|
+
./spec/langsmithrb_rails/langsmith_spec.rb[1:1:4] | passed | 0.00031 seconds |
|
62
|
+
./spec/langsmithrb_rails/langsmith_spec.rb[1:1:5] | passed | 0.00026 seconds |
|
63
|
+
./spec/langsmithrb_rails/langsmith_spec.rb[1:2:1] | passed | 0.0008 seconds |
|
64
|
+
./spec/langsmithrb_rails/langsmith_spec.rb[1:2:2] | passed | 0.00023 seconds |
|
65
|
+
./spec/langsmithrb_rails/langsmith_spec.rb[1:2:3] | passed | 0.0002 seconds |
|
66
|
+
./spec/langsmithrb_rails/langsmith_spec.rb[1:3:1] | passed | 0.00055 seconds |
|
67
|
+
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:1:1] | passed | 0.00019 seconds |
|
68
|
+
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:1:2] | passed | 0.00018 seconds |
|
69
|
+
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:1:3] | passed | 0.00018 seconds |
|
70
|
+
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:2:1] | passed | 0.00019 seconds |
|
71
|
+
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:2:2] | passed | 0.0002 seconds |
|
72
|
+
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:2:3] | passed | 0.00019 seconds |
|
73
|
+
./spec/langsmithrb_rails/langsmithrb_spec.rb[1:3:1] | passed | 0.00016 seconds |
|
74
|
+
./spec/langsmithrb_rails/railtie_spec.rb[1:1:1:1] | passed | 0.00019 seconds |
|
75
|
+
./spec/langsmithrb_rails/railtie_spec.rb[1:1:2:1] | passed | 0.00013 seconds |
|
76
|
+
./spec/langsmithrb_rails/railtie_spec.rb[1:2:1] | passed | 0.00056 seconds |
|
77
|
+
./spec/langsmithrb_rails/railtie_spec.rb[1:3:1] | passed | 0.00289 seconds |
|
78
|
+
./spec/langsmithrb_rails/version_spec.rb[1:1:1] | passed | 0.00107 seconds |
|
79
|
+
./spec/langsmithrb_rails_spec.rb[1:1:1] | passed | 0.00106 seconds |
|
80
|
+
./spec/langsmithrb_rails_spec.rb[1:1:2] | passed | 0.00025 seconds |
|
81
|
+
./spec/langsmithrb_rails_spec.rb[1:2:1] | passed | 0.00018 seconds |
|
82
|
+
./spec/langsmithrb_rails_spec.rb[1:2:2] | passed | 0.00014 seconds |
|
83
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:1:1] | passed | 0.00014 seconds |
|
84
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:2:1] | failed | 0.01119 seconds |
|
85
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:2:2:1] | failed | 0.00032 seconds |
|
86
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:3:1] | passed | 0.0002 seconds |
|
87
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:3:2] | passed | 0.00014 seconds |
|
88
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:3:3:1] | failed | 0.00014 seconds |
|
89
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:3:4:1] | failed | 0.00013 seconds |
|
90
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:4:1] | passed | 0.0002 seconds |
|
91
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:4:2] | passed | 0.00015 seconds |
|
92
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:4:3] | passed | 0.00015 seconds |
|
93
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:4:4] | passed | 0.00177 seconds |
|
94
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:5:1] | failed | 0.00037 seconds |
|
95
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:5:2] | passed | 0.00024 seconds |
|
96
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:6:1] | passed | 0.00031 seconds |
|
97
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:7:1] | passed | 0.00047 seconds |
|
98
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:7:2] | passed | 0.00019 seconds |
|
99
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:7:3] | passed | 0.00024 seconds |
|
100
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:8:1] | passed | 0.00014 seconds |
|
101
|
+
./spec/lib/langsmithrb_rails/config_spec.rb[1:9:1] | passed | 0.00015 seconds |
|
102
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[1:1:1:1] | passed | 0.00024 seconds |
|
103
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[1:1:2:1] | passed | 0.00022 seconds |
|
104
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[1:1:2:2] | passed | 0.00019 seconds |
|
105
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[1:1:3:1] | passed | 0.00018 seconds |
|
106
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[1:2:1] | passed | 0.00052 seconds |
|
107
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[1:3:1] | passed | 0.00052 seconds |
|
108
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[2:1:1] | passed | 0.00022 seconds |
|
109
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[2:2:1] | passed | 0.00047 seconds |
|
110
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[2:2:2:1] | passed | 0.00039 seconds |
|
111
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[2:3:1] | passed | 0.00059 seconds |
|
112
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[3:1:1:1] | passed | 0.00049 seconds |
|
113
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[3:1:1:2] | passed | 0.00758 seconds |
|
114
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[3:1:1:3:1] | passed | 0.00083 seconds |
|
115
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[3:1:2:1] | passed | 0.00025 seconds |
|
116
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[3:1:2:2] | passed | 0.00078 seconds |
|
117
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[3:1:3:1] | passed | 0.00043 seconds |
|
118
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[3:1:3:2] | passed | 0.00035 seconds |
|
119
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[3:1:3:3] | passed | 0.00125 seconds |
|
120
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[3:1:4:1] | passed | 0.00084 seconds |
|
121
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[3:1:5:1] | passed | 0.00037 seconds |
|
122
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[4:1:1:1] | passed | 0.00058 seconds |
|
123
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[4:1:2:1] | passed | 0.00033 seconds |
|
124
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[4:1:3:1] | passed | 0.0005 seconds |
|
125
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[4:1:4:1] | passed | 0.00037 seconds |
|
126
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[4:1:5:1] | failed | 0.00047 seconds |
|
127
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[4:1:6:1] | passed | 0.00023 seconds |
|
128
|
+
./spec/lib/langsmithrb_rails/evaluation_spec.rb[4:1:7:1] | passed | 0.00023 seconds |
|
129
|
+
./spec/lib/langsmithrb_rails/otel_spec.rb[1:1:1:1] | failed | 0.00062 seconds |
|
130
|
+
./spec/lib/langsmithrb_rails/otel_spec.rb[1:1:2:1] | passed | 0.00021 seconds |
|
131
|
+
./spec/lib/langsmithrb_rails/otel_spec.rb[1:2:1:1] | failed | 0.0002 seconds |
|
132
|
+
./spec/lib/langsmithrb_rails/otel_spec.rb[1:2:2:1] | passed | 0.00023 seconds |
|
133
|
+
./spec/lib/langsmithrb_rails/otel_spec.rb[1:2:3:1] | passed | 0.00024 seconds |
|
134
|
+
./spec/lib/langsmithrb_rails/otel_spec.rb[1:3:1:1] | failed | 0.0003 seconds |
|
135
|
+
./spec/lib/langsmithrb_rails/otel_spec.rb[2:1:1:1] | passed | 0.0004 seconds |
|
136
|
+
./spec/lib/langsmithrb_rails/otel_spec.rb[2:1:2:1] | passed | 0.00027 seconds |
|
137
|
+
./spec/lib/langsmithrb_rails/otel_spec.rb[2:1:3:1] | passed | 0.00038 seconds |
|
138
|
+
./spec/lib/langsmithrb_rails/otel_spec.rb[2:2:1] | passed | 0.00018 seconds |
|
139
|
+
./spec/lib/langsmithrb_rails/run_trees_spec.rb[1:1:1] | passed | 0.00096 seconds |
|
140
|
+
./spec/lib/langsmithrb_rails/run_trees_spec.rb[1:2:1] | failed | 0.00092 seconds |
|
141
|
+
./spec/lib/langsmithrb_rails/run_trees_spec.rb[1:3:1] | passed | 0.00046 seconds |
|
142
|
+
./spec/lib/langsmithrb_rails/run_trees_spec.rb[1:3:2:1] | passed | 0.00049 seconds |
|
143
|
+
./spec/lib/langsmithrb_rails/run_trees_spec.rb[1:3:3:1] | passed | 0.00058 seconds |
|
144
|
+
./spec/lib/langsmithrb_rails/run_trees_spec.rb[2:1:1] | passed | 0.00036 seconds |
|
145
|
+
./spec/lib/langsmithrb_rails/run_trees_spec.rb[2:1:2:1] | passed | 0.00037 seconds |
|
146
|
+
./spec/lib/langsmithrb_rails/wrappers_spec.rb[1:1:1:1] | passed | 0.0003 seconds |
|
147
|
+
./spec/lib/langsmithrb_rails/wrappers_spec.rb[1:1:2:1] | passed | 0.00039 seconds |
|
148
|
+
./spec/lib/langsmithrb_rails/wrappers_spec.rb[1:1:3:1] | passed | 0.00029 seconds |
|
149
|
+
./spec/lib/langsmithrb_rails/wrappers_spec.rb[1:1:4:1] | passed | 0.0004 seconds |
|
150
|
+
./spec/lib/langsmithrb_rails/wrappers_spec.rb[1:2:1] | passed | 0.00028 seconds |
|
151
|
+
./spec/lib/langsmithrb_rails_spec.rb[1:1:1] | passed | 0.00021 seconds |
|
152
|
+
./spec/lib/langsmithrb_rails_spec.rb[1:1:2] | passed | 0.00016 seconds |
|
153
|
+
./spec/lib/langsmithrb_rails_spec.rb[1:2:1] | passed | 0.00028 seconds |
|
154
|
+
./spec/lib/langsmithrb_rails_spec.rb[1:3:1] | passed | 0.00013 seconds |
|
155
|
+
./spec/lib/langsmithrb_rails_spec.rb[1:4:1] | passed | 0.00017 seconds |
|
156
|
+
./spec/lib/langsmithrb_rails_spec.rb[1:5:1] | passed | 0.00017 seconds |
|
157
|
+
./spec/lib/langsmithrb_rails_spec.rb[1:6:1] | passed | 0.00029 seconds |
|
158
|
+
./spec/lib/langsmithrb_rails_spec.rb[1:7:1] | failed | 0.00017 seconds |
|
159
|
+
./spec/lib/langsmithrb_rails_spec.rb[1:8:1] | passed | 0.00016 seconds |
|
160
|
+
./spec/lib/langsmithrb_rails_spec.rb[1:9:1] | passed | 0.00016 seconds |
|
161
|
+
./spec/lib/langsmithrb_rails_spec.rb[1:10:1] | passed | 0.00112 seconds |
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,19 @@
|
|
2
2
|
|
3
3
|
## [Unreleased]
|
4
4
|
|
5
|
+
## [0.3.0] - 2025-08-16
|
6
|
+
|
7
|
+
### Added
|
8
|
+
- OpenTelemetry integration for distributed tracing
|
9
|
+
- Advanced run trees for hierarchical tracing
|
10
|
+
- Enhanced evaluation framework with string and LLM-based evaluators
|
11
|
+
- LLM provider wrappers for OpenAI, Anthropic, and other providers
|
12
|
+
- Expanded API coverage to match langsmith-sdk capabilities
|
13
|
+
|
14
|
+
### Changed
|
15
|
+
- Improved configuration options for OpenTelemetry
|
16
|
+
- Enhanced documentation with more examples and use cases
|
17
|
+
|
5
18
|
## [0.1.0] - 2025-08-12
|
6
19
|
|
7
20
|
- Initial release with LangSmith integration for Rails applications
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -13,6 +13,10 @@ This gem makes it easy to add LangSmith tracing to your Rails application, allow
|
|
13
13
|
- 📊 **Evaluations**: Evaluate LLM responses with customizable criteria
|
14
14
|
- 🔄 **CI Integration**: Run evaluations in your CI pipeline
|
15
15
|
- 🚀 **Demo Application**: Get started quickly with a sample application
|
16
|
+
- 🔌 **LLM Provider Wrappers**: Trace OpenAI, Anthropic, and other LLM providers
|
17
|
+
- 🌳 **Advanced Tracing**: Hierarchical run trees for complex workflows
|
18
|
+
- 📡 **OpenTelemetry Integration**: Distributed tracing with OpenTelemetry
|
19
|
+
- 🧪 **Enhanced Evaluation Framework**: String and LLM-based evaluators
|
16
20
|
|
17
21
|
## Installation
|
18
22
|
|
@@ -95,6 +99,21 @@ LangsmithrbRails.configure do |config|
|
|
95
99
|
config.project_name = "your_project" # Optional project name
|
96
100
|
config.sampling_rate = 0.1 # Sample 10% of traces
|
97
101
|
config.redact_pii = true # Redact PII from traces
|
102
|
+
|
103
|
+
# Advanced tracing options
|
104
|
+
config.trace_all = true # Trace all operations
|
105
|
+
config.trace_level = "info" # Trace level (debug, info, warn, error, fatal)
|
106
|
+
|
107
|
+
# OpenTelemetry options
|
108
|
+
config.otel_enabled = false # Enable OpenTelemetry integration
|
109
|
+
config.otel_service_name = "my-rails-app" # Service name for OpenTelemetry
|
110
|
+
|
111
|
+
# Evaluation options
|
112
|
+
config.evaluation_enabled = true # Enable evaluation framework
|
113
|
+
|
114
|
+
# Logging options
|
115
|
+
config.log_level = "info" # Log level (debug, info, warn, error, fatal)
|
116
|
+
config.log_to_stdout = true # Log to STDOUT
|
98
117
|
end
|
99
118
|
```
|
100
119
|
|
@@ -209,6 +228,44 @@ class MyService
|
|
209
228
|
end
|
210
229
|
```
|
211
230
|
|
231
|
+
### LLM Provider Wrappers
|
232
|
+
|
233
|
+
You can wrap LLM providers to automatically trace all operations:
|
234
|
+
|
235
|
+
```ruby
|
236
|
+
# Wrap an OpenAI client
|
237
|
+
require "openai"
|
238
|
+
openai_client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"])
|
239
|
+
traced_client = LangsmithrbRails.wrap(openai_client, provider: :openai, project_name: "my-project")
|
240
|
+
|
241
|
+
# Use the traced client normally
|
242
|
+
response = traced_client.chat(
|
243
|
+
parameters: {
|
244
|
+
model: "gpt-4",
|
245
|
+
messages: [{ role: "user", content: "Hello, world!" }]
|
246
|
+
}
|
247
|
+
)
|
248
|
+
|
249
|
+
# Wrap an Anthropic client
|
250
|
+
require "anthropic"
|
251
|
+
anthropic_client = Anthropic::Client.new(api_key: ENV["ANTHROPIC_API_KEY"])
|
252
|
+
traced_client = LangsmithrbRails.wrap(anthropic_client, provider: :anthropic)
|
253
|
+
|
254
|
+
# Use the traced client normally
|
255
|
+
response = traced_client.messages(
|
256
|
+
model: "claude-3-opus-20240229",
|
257
|
+
max_tokens: 1024,
|
258
|
+
messages: [{ role: "user", content: "Hello, world!" }]
|
259
|
+
)
|
260
|
+
|
261
|
+
# Wrap any LLM client
|
262
|
+
custom_client = MyCustomLLM.new
|
263
|
+
traced_client = LangsmithrbRails.wrap(custom_client, provider: :llm)
|
264
|
+
|
265
|
+
# Make any method traceable
|
266
|
+
LangsmithrbRails.traceable(object, :method_name, run_name: "my-run")
|
267
|
+
```
|
268
|
+
|
212
269
|
### Tracing Background Jobs
|
213
270
|
|
214
271
|
For background jobs, use the `LangsmithTracedJob` concern:
|
@@ -224,6 +281,33 @@ class MyJob < ApplicationJob
|
|
224
281
|
end
|
225
282
|
```
|
226
283
|
|
284
|
+
### Advanced Tracing with Run Trees
|
285
|
+
|
286
|
+
For complex workflows, use run trees to create hierarchical traces:
|
287
|
+
|
288
|
+
```ruby
|
289
|
+
LangsmithrbRails.run(name: "parent-operation", run_type: "chain", inputs: { query: "Hello" }) do |parent_run|
|
290
|
+
# Do some work in the parent run
|
291
|
+
intermediate_result = process_query(parent_run.inputs[:query])
|
292
|
+
|
293
|
+
# Create a child run
|
294
|
+
child_run = parent_run.create_child(
|
295
|
+
name: "child-operation",
|
296
|
+
run_type: "llm",
|
297
|
+
inputs: { prompt: intermediate_result }
|
298
|
+
)
|
299
|
+
|
300
|
+
# Do some work in the child run
|
301
|
+
result = call_llm(child_run.inputs[:prompt])
|
302
|
+
|
303
|
+
# End the child run with outputs
|
304
|
+
child_run.end(outputs: { response: result })
|
305
|
+
|
306
|
+
# Return the final result
|
307
|
+
result
|
308
|
+
end
|
309
|
+
```
|
310
|
+
|
227
311
|
### Local Buffering
|
228
312
|
|
229
313
|
If you've set up buffering, traces will be stored locally and sent in batches. You can manually flush the buffer:
|
@@ -232,6 +316,38 @@ If you've set up buffering, traces will be stored locally and sent in batches. Y
|
|
232
316
|
$ rails langsmith:flush
|
233
317
|
```
|
234
318
|
|
319
|
+
### OpenTelemetry Integration
|
320
|
+
|
321
|
+
You can enable OpenTelemetry integration for distributed tracing:
|
322
|
+
|
323
|
+
```ruby
|
324
|
+
# Initialize OpenTelemetry
|
325
|
+
LangsmithrbRails::OTEL.init(
|
326
|
+
service_name: "my-rails-app",
|
327
|
+
service_version: "1.0.0"
|
328
|
+
)
|
329
|
+
|
330
|
+
# Trace an operation with OpenTelemetry
|
331
|
+
LangsmithrbRails::OTEL.trace("my-operation", attributes: { key: "value" }) do
|
332
|
+
# Your code here
|
333
|
+
result = do_something()
|
334
|
+
result
|
335
|
+
end
|
336
|
+
|
337
|
+
# Trace an LLM operation
|
338
|
+
LangsmithrbRails::OTEL.trace_llm(
|
339
|
+
"llm-operation",
|
340
|
+
inputs: { prompt: "Hello, world!" },
|
341
|
+
run_type: "llm",
|
342
|
+
project_name: "my-project",
|
343
|
+
tags: ["tag1", "tag2"]
|
344
|
+
) do
|
345
|
+
# Your LLM code here
|
346
|
+
response = llm.generate("Hello, world!")
|
347
|
+
response
|
348
|
+
end
|
349
|
+
```
|
350
|
+
|
235
351
|
### Running Evaluations
|
236
352
|
|
237
353
|
To run an evaluation:
|
@@ -245,6 +361,43 @@ Where:
|
|
245
361
|
- `http` is the target name
|
246
362
|
- `my_experiment` is the experiment name
|
247
363
|
|
364
|
+
### Enhanced Evaluation Framework
|
365
|
+
|
366
|
+
Use the enhanced evaluation framework to evaluate LLM responses:
|
367
|
+
|
368
|
+
```ruby
|
369
|
+
# Create a string evaluator
|
370
|
+
string_evaluator = LangsmithrbRails.evaluator(
|
371
|
+
:string,
|
372
|
+
match_type: :exact,
|
373
|
+
case_sensitive: false,
|
374
|
+
project_name: "my-project"
|
375
|
+
)
|
376
|
+
|
377
|
+
# Evaluate a prediction against a reference
|
378
|
+
result = string_evaluator.evaluate("Hello, world!", "hello, world!")
|
379
|
+
# => { score: 1.0, metadata: { match: true, match_type: "exact", case_sensitive: false } }
|
380
|
+
|
381
|
+
# Create an LLM-based evaluator
|
382
|
+
llm_client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"])
|
383
|
+
llm_evaluator = LangsmithrbRails.evaluator(
|
384
|
+
:llm,
|
385
|
+
llm: llm_client,
|
386
|
+
criteria: "Evaluate the response for accuracy and relevance.",
|
387
|
+
project_name: "my-project"
|
388
|
+
)
|
389
|
+
|
390
|
+
# Evaluate a run
|
391
|
+
result = llm_evaluator.evaluate_run("run-id")
|
392
|
+
|
393
|
+
# Evaluate a dataset
|
394
|
+
results = LangsmithrbRails::Evaluation.evaluate_dataset(
|
395
|
+
"dataset-id",
|
396
|
+
[string_evaluator, llm_evaluator],
|
397
|
+
experiment_name: "my-experiment"
|
398
|
+
)
|
399
|
+
```
|
400
|
+
|
248
401
|
### Comparing Experiments
|
249
402
|
|
250
403
|
To compare two experiments:
|
Binary file
|