# frozen_string_literal: true

# langchainrb 0.19.5 only reads `parts[0]["text"]` for Gemini chat output.
# Gemini responses are multipart, and the first part is not guaranteed to be text
# after tool calling. Join all text parts so completed assistant answers are not
# dropped when a non-text part appears first.
module LangchainGoogleGeminiResponsePatch
  def chat_completion
    parts = raw_response.dig("candidates", 0, "content", "parts") || []
    parts.filter_map { |part| part["text"] }.join.presence
  end
end

Langchain::LLM::GoogleGeminiResponse.prepend(LangchainGoogleGeminiResponsePatch)
