13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/legion/llm/call/structured_output.rb', line 13
def generate(messages:, schema:, model: nil, provider: nil, **)
model ||= Legion::LLM.settings[:default_model]
result = call_with_schema(messages, schema, model, provider: provider, **)
log.info "[llm][structured_output] model=#{model} provider=#{provider} valid=true"
content = result.respond_to?(:content) ? result.content : result[:content]
raw_model = result.respond_to?(:model_id) ? result.model_id : result[:model]
parsed = Legion::JSON.load(content)
{ data: parsed, raw: content, model: raw_model, valid: true }
rescue ::JSON::ParserError => e
log.warn "[llm][structured_output] model=#{model} provider=#{provider} parse_error=#{e.message}"
handle_parse_error(e, messages, schema, model, provider, result, **)
end
|