From cd88589413c0a60a8f0206f5cf0697a1de3574af Mon Sep 17 00:00:00 2001 From: false200 <214800619+false200@users.noreply.github.com> Date: Sat, 18 Jul 2026 20:03:34 +0530 Subject: [PATCH] fix: make Agent.prompt/embed generate_later perform correctly --- lib/active_agent/generation_job.rb | 14 +++++++++++++- test/features/parameterized_direct_test.rb | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/lib/active_agent/generation_job.rb b/lib/active_agent/generation_job.rb index 1b3232a8..f3a58768 100644 --- a/lib/active_agent/generation_job.rb +++ b/lib/active_agent/generation_job.rb @@ -18,7 +18,19 @@ class GenerationJob < ActiveJob::Base # :nodoc: rescue_from StandardError, with: :handle_exception_with_agent_class - def perform(agent, agent_method, generation_method, args:, kwargs: nil, params: nil) + def perform(agent, agent_method, generation_method, args:, kwargs: nil, params: nil, + direct_generation_type: nil, direct_args: nil, direct_options: nil) + if direct_generation_type + generation = ActiveAgent::Parameterized::DirectGeneration.new( + agent.constantize, + direct_generation_type.to_sym, + params || {}, + *Array(direct_args), + **(direct_options || {}).to_h.deep_symbolize_keys + ) + return generation.send(generation_method) + end + agent_class = params ? agent.constantize.with(params) : agent.constantize prompt = if kwargs agent_class.public_send(agent_method, *args, **kwargs) diff --git a/test/features/parameterized_direct_test.rb b/test/features/parameterized_direct_test.rb index 198b9cd2..011660ce 100644 --- a/test/features/parameterized_direct_test.rb +++ b/test/features/parameterized_direct_test.rb @@ -1,6 +1,8 @@ require "test_helper" class ParameterizedDirectTest < ActiveSupport::TestCase + include ActiveJob::TestHelper + class TestAgent < ActiveAgent::Base generate_with :mock, model: "mock-model", instructions: "You are a helpful assistant." embed_with :mock, model: "mock-embedding-model" @@ -107,6 +109,14 @@ def enqueue_options assert_equal({ queue: :prompts, priority: :high }, generation.enqueue_options) end + test "Agent.prompt(...).generate_later performs the job" do + assert_nothing_raised do + perform_enqueued_jobs only: ActiveAgent::GenerationJob do + TestAgent.prompt(message: "Background task").generate_later + end + end + end + test "Agent.embed returns a generation proxy" do generation = TestAgent.embed(input: "Text to embed") @@ -212,6 +222,14 @@ def enqueue_options assert_equal({ queue: :embeddings, priority: :low }, generation.enqueue_options) end + test "Agent.embed(...).embed_later performs the job" do + assert_nothing_raised do + perform_enqueued_jobs only: ActiveAgent::GenerationJob do + TestAgent.embed(input: "Background embedding").embed_later + end + end + end + test "prompt() works alongside existing with() method" do # Original with() method still works agent_class_with_action = Class.new(TestAgent) do