Class: Rubino::API::Operations::Runs::CreateOperation

Inherits:
Object
  • Object
show all
Defined in:
lib/rubino/api/operations/runs/create_operation.rb

Overview

POST /v1/sessions/:id/runs Persists a new run for the session and hands it to the executor. The run is reported as “running” immediately; clients tail /v1/runs/:id/events for state transitions.

Returns:

  • ([Integer, Hash])

    201 + run payload.

Raises:

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(session_repository: nil, run_repository: nil, executor: nil) ⇒ CreateOperation

Accepts alternate collaborators (session repo, run repo, executor) for tests.



21
22
23
24
25
# File 'lib/rubino/api/operations/runs/create_operation.rb', line 21

def initialize(session_repository: nil, run_repository: nil, executor: nil)
  @session_repo = session_repository || ::Rubino::Session::Repository.new
  @run_repo = run_repository || ::Rubino::Run::Repository.new
  @executor = executor || ::Rubino::Run::Executor.new
end

Class Method Details

.call(request) ⇒ Object



16
17
18
# File 'lib/rubino/api/operations/runs/create_operation.rb', line 16

def self.call(request)
  new.call(request)
end

Instance Method Details

#call(request) ⇒ Object

Raises:



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/rubino/api/operations/runs/create_operation.rb', line 27

def call(request)
  session_id = request.params.fetch("id")
  raise NotFoundError.new("session", session_id) unless @session_repo.find(session_id)

  attrs = request.validate!(Schemas::CreateRun)
  ensure_input_or_attachments!(attrs)
  run = @run_repo.create(
    session_id: session_id,
    input_text: attrs[:input],
    attachments: attrs[:attachments] || [],
    skills: attrs[:skills] || [],
    model: attrs[:model],
    provider: attrs[:provider]
  )

  @executor.start(run)

  [201, serialize(run)]
end