Skip to content

Commit 17f5c02

Browse files
committed
Fixes and prompt support
1 parent d8804ea commit 17f5c02

File tree

2 files changed

+70
-37
lines changed

2 files changed

+70
-37
lines changed

app/models/assistant/configurable.rb

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,13 @@ def langfuse_default_instructions(preferred_currency, preferred_date_format)
4646

4747
prompt = langfuse_client.get_prompt("default_instructions")
4848
return if prompt.nil?
49+
50+
# TODO: remove after we make the code resilient to chat vs. text types of prompts
51+
Rails.logger.warn("Langfuse prompt retrieved: #{prompt.name} #{prompt.version}")
52+
Rails.logger.warn("Langfuse prompt retrieved: #{prompt.prompt}")
53+
4954
compiled_prompt = compile_langfuse_prompt(
50-
prompt,
55+
prompt.prompt.dig(0, "content"),
5156
preferred_currency: preferred_currency,
5257
preferred_date_format: preferred_date_format
5358
)
@@ -56,6 +61,7 @@ def langfuse_default_instructions(preferred_currency, preferred_date_format)
5661
return if content.blank?
5762

5863
{
64+
id: prompt.respond_to?(:id) ? prompt.id : (prompt[:id] rescue nil),
5965
name: prompt.name,
6066
version: prompt.version,
6167
template: prompt.prompt,
@@ -78,7 +84,30 @@ def compile_langfuse_prompt(prompt, preferred_currency:, preferred_date_format:)
7884
current_date: Date.current
7985
}.transform_values { |value| value.nil? ? "" : value.to_s }
8086

81-
prompt.compile(**variables)
87+
# If the prompt object supports compilation, use it. Otherwise, perform
88+
# a lightweight local interpolation for String/Array/Hash templates.
89+
if prompt.respond_to?(:compile)
90+
prompt.compile(**variables)
91+
else
92+
interpolate_template(prompt, variables)
93+
end
94+
end
95+
96+
def interpolate_template(template, variables)
97+
case template
98+
when String
99+
# Replace {{ variable }} placeholders with provided variables
100+
template.gsub(/\{\{\s*(\w+)\s*\}\}/) do
101+
key = Regexp.last_match(1)
102+
variables[key] || ""
103+
end
104+
when Array
105+
template.map { |item| interpolate_template(item, variables) }
106+
when Hash
107+
template.transform_values { |v| interpolate_template(v, variables) }
108+
else
109+
template
110+
end
82111
end
83112

84113
def extract_prompt_content(compiled_prompt)

app/models/provider/openai.rb

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -144,41 +144,45 @@ def langfuse_client
144144
@langfuse_client = Langfuse.new
145145
end
146146

147-
def log_langfuse_generation(name:, model:, input:, output:, usage: nil, session_id: nil, user_identifier: nil, prompt: nil)
148-
return unless langfuse_client
149-
150-
trace = langfuse_client.trace(
151-
name: "openai.#{name}",
152-
input: input,
153-
session_id: session_id,
154-
user_id: user_identifier
155-
)
156-
generation_options = {
157-
name: name,
158-
model: model,
159-
input: input,
160-
output: output,
161-
usage: usage,
162-
session_id: session_id,
163-
user_id: user_identifier
164-
}
165-
166-
if prompt.present?
167-
generation_options[:version] = prompt[:version] if prompt[:version]
168-
metadata = {
169-
prompt: {
170-
name: prompt[:name],
171-
version: prompt[:version],
172-
content: prompt[:content],
173-
template: prompt[:template]
174-
}.compact
147+
def log_langfuse_generation(name:, model:, input:, output:, usage: nil, session_id: nil, user_identifier: nil, prompt: nil)
148+
return unless langfuse_client
149+
150+
trace = langfuse_client.trace(
151+
name: "openai.#{name}",
152+
input: input,
153+
session_id: session_id,
154+
user_id: user_identifier
155+
)
156+
generation_options = {
157+
name: name,
158+
model: model,
159+
input: input,
160+
output: output,
161+
usage: usage,
162+
session_id: session_id,
163+
user_id: user_identifier
175164
}
176-
generation_options[:metadata] = metadata
177-
end
178165

179-
trace.generation(**generation_options)
180-
trace.update(output: output)
181-
rescue => e
182-
Rails.logger.warn("Langfuse logging failed: #{e.message}")
183-
end
166+
if prompt.present?
167+
generation_options[:prompt_name] = prompt[:name] if prompt[:name]
168+
generation_options[:prompt_version] = prompt[:version] if prompt[:version]
169+
generation_options[:prompt_id] = prompt[:id] if prompt[:id]
170+
171+
metadata = {
172+
prompt: {
173+
id: prompt[:id],
174+
name: prompt[:name],
175+
version: prompt[:version],
176+
content: prompt[:content],
177+
template: prompt[:template]
178+
}.compact
179+
}
180+
generation_options[:metadata] = metadata
181+
end
182+
183+
trace.generation(**generation_options)
184+
trace.update(output: output)
185+
rescue => e
186+
Rails.logger.warn("Langfuse logging failed: #{e.message}")
187+
end
184188
end

0 commit comments

Comments
 (0)