Files
fizzy/app/models/ai/list_users_tool.rb
T
2025-08-13 15:14:12 +02:00

53 lines
1.5 KiB
Ruby

class Ai::ListUsersTool < Ai::Tool
description <<-MD
Lists all users accessible by the current user.
The response is paginated so you may need to iterate through multiple pages to get the full list.
URLs are valid if they are just a path - don't change them!
Each user object has the following fields:
- id [Integer, not null]
- name [String, not null]
- role [String, not null]
- url [String, not null]
MD
param :page,
type: :string,
desc: "Which page to return. Leave blank to get the first page",
required: false
param :collection_id,
type: :integer,
desc: "For which collection to list users",
required: true
param :ids,
type: :string,
desc: "If provided, will return only the users with the given IDs (comma-separated)",
required: false
attr_reader :user
def initialize(user:)
@user = user
end
def execute(**params)
collection = user.collections.find(params[:collection_id])
users = Filter.new(scope: collection.users.active, filters: params).filter
# TODO: The serialization here is temporary until we add an API,
# then we can re-use the jbuilder views and caching from that
paginated_response(users, page: params[:page], ordered_by: { name: :asc, id: :desc }) do |user|
user_attributes(user)
end
end
private
def user_attributes(user)
{
id: user.id,
name: user.name,
role: user.role,
url: user_url(user)
}
end
end