Sha256: 8ceb9dbcd25df594687c368506503b9aa6f971469ec96fa3cbf4398bb3eb56eb

Contents?: true

Size: 1.82 KB

Versions: 3

Compression:

Stored size: 1.82 KB

Contents

# frozen_string_literal: true

module Luo
  class OpenAIAgentRunner < AgentRunnerBase

    include Configurable

    setting :retires, default: 3
    setting :prompts do
      setting :input, default: Luo::Prompts.agent_input
      setting :system, default: Luo::Prompts.agent_system
      setting :tool_input, default: Luo::Prompts.agent_tool_input
    end

    setting :client, default: Luo::OpenAI.new

    on_request do
      context.messages = Messages.create(history: context.histories.search(context.user_input))
                         .system(prompt: config.prompts.system)
                         .user(prompt: config.prompts.input, context: {agents: self.class.agents, last_user_input: context.user_input})
      context.response = client.chat(context.messages)
    end

    on_result do
      begin
        actions = JSON.parse(context.response)
      rescue JSON::ParserError => e
        actions = JSON.parse ParserMarkdown.new(context.response).code
      end
      actions = [actions] if actions.is_a?(Hash)
      actions.each do |action|
        agent = self.class.agents[action['action']]&.new(
          context: context,
          action_input: action['action_input'],
          client: client
        )
        add_agent(agent) if agent
        if action['action'] == "Final Answer"
          context.final_result = action['action_input']

          save_history
        end
      end
    end

    after_run do
      if context.retries < config.retires && context.final_result.nil?
        context.messages = context.messages.assistant(
          prompt: config.prompts.tool_input,
          context: {
            tools_response: context.agent_results
          }
        )
        context.response = client.chat(context.messages)
        context.retries += 1
        on_result
        on_run
        after_run
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
luo-0.2.7 lib/luo/open_ai_agent_runner.rb
luo-0.2.6 lib/luo/open_ai_agent_runner.rb
luo-0.2.5 lib/luo/open_ai_agent_runner.rb