module Elelem::States::Working

def normalize(message)

def normalize(message)
  message.reject { |_key, value| value.empty? }
end

def run(agent)

def run(agent)
  done = false
  state = Waiting.new(agent)
  loop do
    agent.api.chat(agent.conversation.history) do |chunk|
      response = JSON.parse(chunk)
      message = normalize(response["message"] || {})
      done = response["done"]
      agent.logger.debug("#{state.display_name}: #{message}")
      state = state.run(message)
    end
    break if state.nil?
    break if done && agent.conversation.history.last[:role] != :tool
  end
  agent.transition_to(States::Idle.new)
end