add first-in-first-out queue for image prompts, and add pagination
This commit is contained in:
@@ -42,9 +42,9 @@ defmodule DiffuserWeb.PromptRequestLive.FormComponent do
|
||||
end
|
||||
|
||||
defp save_prompt_request(socket, :new, prompt_request_params) do
|
||||
with {:ok, prompt_request} <- Generator.create_prompt_request(prompt_request_params),
|
||||
{:ok, _pid} <-
|
||||
Diffuser.Generator.PromptRequestSupervisor.start_prompt_request(prompt_request) do
|
||||
with {:ok, prompt_request} <- Generator.create_prompt_request(prompt_request_params) do
|
||||
Diffuser.Generator.PromptRequestQueue.enqueue(prompt_request)
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(:info, "Prompt request created successfully")
|
||||
|
@@ -6,12 +6,14 @@ defmodule DiffuserWeb.PromptRequestLive.Index do
|
||||
|
||||
@impl true
|
||||
def mount(_params, _session, socket) do
|
||||
{:ok, assign(socket, :prompt_requests, list_prompt_requests())}
|
||||
{:ok, socket}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_params(params, _url, socket) do
|
||||
{:noreply, apply_action(socket, socket.assigns.live_action, params)}
|
||||
page = list_prompt_requests(params)
|
||||
socket = socket |> apply_action(socket.assigns.live_action, params) |> assign(:page, page)
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
defp apply_action(socket, :edit, %{"id" => id}) do
|
||||
@@ -37,10 +39,10 @@ defmodule DiffuserWeb.PromptRequestLive.Index do
|
||||
prompt_request = Generator.get_prompt_request!(id)
|
||||
{:ok, _} = Generator.delete_prompt_request(prompt_request)
|
||||
|
||||
{:noreply, assign(socket, :prompt_requests, list_prompt_requests())}
|
||||
{:noreply, assign(socket, :page, list_prompt_requests(%{"page" => "2"}))}
|
||||
end
|
||||
|
||||
defp list_prompt_requests do
|
||||
Generator.list_prompt_requests()
|
||||
defp list_prompt_requests(params) do
|
||||
Generator.paginate_prompt_requests(params)
|
||||
end
|
||||
end
|
||||
|
@@ -15,14 +15,20 @@
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Image</th>
|
||||
<th>Prompt</th>
|
||||
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="prompt_requests">
|
||||
<%= for prompt_request <- @prompt_requests do %>
|
||||
<%= for prompt_request <- @page.entries do %>
|
||||
<tr id={"prompt_request-#{prompt_request.id}"}>
|
||||
<td>
|
||||
<%= for result <- prompt_request.images do %>
|
||||
<img src={"#{Diffuser.Uploaders.Image.url({result.image, result})}"} />
|
||||
<% end %>
|
||||
</td>
|
||||
<td><%= prompt_request.prompt %></td>
|
||||
|
||||
<td>
|
||||
@@ -35,4 +41,18 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="pagination">
|
||||
<%= if @page.page_number > 1 do %>
|
||||
<%= live_patch "<< Prev Page",
|
||||
to: Routes.prompt_request_index_path(@socket, :index, page: @page.page_number - 1),
|
||||
class: "pagination-link" %>
|
||||
<% end %>
|
||||
|
||||
<%= if @page.page_number < @page.total_pages do %>
|
||||
<%= live_patch "Next Page >>",
|
||||
to: Routes.prompt_request_index_path(@socket, :index, page: @page.page_number + 1),
|
||||
class: "pagination-link" %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<span><%= live_patch "New Prompt request", to: Routes.prompt_request_index_path(@socket, :new) %></span>
|
||||
|
@@ -7,12 +7,16 @@ defmodule DiffuserWeb.PromptRequestLive.Show do
|
||||
alias Diffuser.Repo
|
||||
alias Phoenix.Socket.Broadcast
|
||||
alias DiffuserWeb.Endpoint
|
||||
alias Ecto.Association.NotLoaded
|
||||
|
||||
@impl true
|
||||
def mount(%{"id" => id}, _session, socket) do
|
||||
Endpoint.subscribe("request:#{id}")
|
||||
|
||||
{:ok, socket |> assign(:prompt_request, Generator.get_prompt_request!(id))}
|
||||
{:ok,
|
||||
socket
|
||||
|> assign(:prompt_request, Generator.get_prompt_request!(id))
|
||||
|> assign(:prompt_request_progress, 0)}
|
||||
end
|
||||
|
||||
@impl true
|
||||
@@ -38,6 +42,21 @@ defmodule DiffuserWeb.PromptRequestLive.Show do
|
||||
do:
|
||||
{:noreply,
|
||||
assign(socket, %{
|
||||
prompt_request: prompt_request
|
||||
prompt_request: prompt_request |> Repo.preload(:images)
|
||||
})}
|
||||
|
||||
@impl true
|
||||
def handle_info(
|
||||
%Broadcast{
|
||||
topic: _,
|
||||
event: "progress",
|
||||
payload: progress
|
||||
},
|
||||
socket
|
||||
),
|
||||
do:
|
||||
{:noreply,
|
||||
assign(socket, %{
|
||||
prompt_request_progress: progress
|
||||
})}
|
||||
end
|
||||
|
@@ -23,6 +23,14 @@
|
||||
<strong>Status:</strong>
|
||||
<%= @prompt_request.status %>
|
||||
</li>
|
||||
<%= if @prompt_request_progress > 0 do %>
|
||||
<li><strong>Progress:</strong>
|
||||
<%= @prompt_request_progress %> / <%= @prompt_request.steps %> steps
|
||||
</li>
|
||||
<% end %>
|
||||
<li><strong>Guidance Scale:</strong>
|
||||
<%= @prompt_request.guidance_scale %>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Images:</strong>
|
||||
<%= if @prompt_request.images do %>
|
||||
|
Reference in New Issue
Block a user