llm_logs 0.1.4 → 0.1.6
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/app/helpers/llm_logs/formatting_helper.rb +9 -1
- data/app/models/llm_logs/span.rb +2 -2
- data/lib/llm_logs/tracer.rb +19 -10
- data/lib/llm_logs/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e59977f8fa67dd219ec626f20f5320c325b0eab9349c7b7b69ba75c200353513
|
|
4
|
+
data.tar.gz: cc78c8b7ed85a03e2b2b85ebee10107c51089dc1fe012de14e2fdd3de93cb126
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f97806146008910196d8072f6c7c051fc67362705c6a28ed6486afe465bc0d58865e0f590efee24b41be57ef2fc853eac942741b64b940d705212a096ac5577e
|
|
7
|
+
data.tar.gz: 166a50f08ab90b2568a2cd8bc6b0942ab1bcd75e97839e82d9ceb8f6b91e3a8e5aec7f23cc318af444b96f3b2eafea31f2c8ea10f4f1059678761bd356b34b27
|
|
@@ -16,8 +16,16 @@ module LlmLogs
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def render_markdown(text)
|
|
19
|
+
# Escape HTML metacharacters before Markdown so prompt delimiters such as
|
|
20
|
+
# <user_request> render as visible text instead of being parsed as unknown
|
|
21
|
+
# HTML tags and then stripped by `sanitize`. `&` is escaped first so the
|
|
22
|
+
# `&` in `<`/`>` is not double-escaped. Markdown syntax (#, *, -, `,
|
|
23
|
+
# tables) is untouched, so headings/bold/lists/code still render. Caveat:
|
|
24
|
+
# <, >, & that appear inside fenced or inline code are shown as entities.
|
|
25
|
+
escaped = text.to_s.gsub("&", "&").gsub("<", "<").gsub(">", ">")
|
|
26
|
+
|
|
19
27
|
html = Kramdown::Document.new(
|
|
20
|
-
|
|
28
|
+
escaped,
|
|
21
29
|
input: "GFM",
|
|
22
30
|
hard_wrap: true,
|
|
23
31
|
syntax_highlighter: nil
|
data/app/models/llm_logs/span.rb
CHANGED
|
@@ -15,8 +15,8 @@ module LlmLogs
|
|
|
15
15
|
duration_ms: (Time.current - started_at) * 1000
|
|
16
16
|
)
|
|
17
17
|
|
|
18
|
-
# Restore parent span as current
|
|
19
|
-
|
|
18
|
+
# Restore parent span as current (Fiber[] so child fibers inherit it)
|
|
19
|
+
LlmLogs::Tracer.current_span = parent_span
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def record_response(message)
|
data/lib/llm_logs/tracer.rb
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
module LlmLogs
|
|
2
2
|
module Tracer
|
|
3
|
+
# Trace/span context is kept in Fiber-local storage (Fiber[]), which child
|
|
4
|
+
# fibers inherit on creation. This matters for fiber-based schedulers such as
|
|
5
|
+
# socketry/async: work driven inside a child fiber still sees the active
|
|
6
|
+
# trace. The legacy Thread.current[:key] store is *not* inherited by child
|
|
7
|
+
# fibers, which caused spans to auto-create orphan traces instead of nesting.
|
|
3
8
|
def self.current_trace
|
|
4
|
-
|
|
9
|
+
Fiber[:llm_logs_trace]
|
|
5
10
|
end
|
|
6
11
|
|
|
7
12
|
def self.current_span
|
|
8
|
-
|
|
13
|
+
Fiber[:llm_logs_span]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.current_span=(span)
|
|
17
|
+
Fiber[:llm_logs_span] = span
|
|
9
18
|
end
|
|
10
19
|
|
|
11
20
|
def self.start_trace(name, metadata: {})
|
|
@@ -16,10 +25,10 @@ module LlmLogs
|
|
|
16
25
|
started_at: Time.current
|
|
17
26
|
)
|
|
18
27
|
|
|
19
|
-
previous_trace =
|
|
20
|
-
previous_span =
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
previous_trace = Fiber[:llm_logs_trace]
|
|
29
|
+
previous_span = Fiber[:llm_logs_span]
|
|
30
|
+
Fiber[:llm_logs_trace] = trace
|
|
31
|
+
Fiber[:llm_logs_span] = nil
|
|
23
32
|
|
|
24
33
|
begin
|
|
25
34
|
yield trace
|
|
@@ -28,8 +37,8 @@ module LlmLogs
|
|
|
28
37
|
raise
|
|
29
38
|
ensure
|
|
30
39
|
trace.complete! if trace.status == "running"
|
|
31
|
-
|
|
32
|
-
|
|
40
|
+
Fiber[:llm_logs_trace] = previous_trace
|
|
41
|
+
Fiber[:llm_logs_span] = previous_span
|
|
33
42
|
end
|
|
34
43
|
end
|
|
35
44
|
|
|
@@ -50,7 +59,7 @@ module LlmLogs
|
|
|
50
59
|
started_at: Time.current
|
|
51
60
|
)
|
|
52
61
|
|
|
53
|
-
|
|
62
|
+
Fiber[:llm_logs_span] = span
|
|
54
63
|
span
|
|
55
64
|
end
|
|
56
65
|
|
|
@@ -60,7 +69,7 @@ module LlmLogs
|
|
|
60
69
|
status: "running",
|
|
61
70
|
started_at: Time.current
|
|
62
71
|
)
|
|
63
|
-
|
|
72
|
+
Fiber[:llm_logs_trace] = trace
|
|
64
73
|
trace
|
|
65
74
|
end
|
|
66
75
|
end
|
data/lib/llm_logs/version.rb
CHANGED