mirror of
https://github.com/leejet/stable-diffusion.cpp
synced 2026-04-28 17:51:17 +02:00
67 lines
1.9 KiB
C++
67 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include <condition_variable>
|
|
#include <cstdint>
|
|
#include <deque>
|
|
#include <memory>
|
|
#include <mutex>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
|
|
#include "runtime.h"
|
|
|
|
enum class AsyncJobKind {
|
|
ImgGen,
|
|
VidGen,
|
|
};
|
|
|
|
enum class AsyncJobStatus {
|
|
Queued,
|
|
Generating,
|
|
Completed,
|
|
Failed,
|
|
Cancelled,
|
|
};
|
|
|
|
const char* async_job_kind_name(AsyncJobKind kind);
|
|
const char* async_job_status_name(AsyncJobStatus status);
|
|
|
|
struct AsyncGenerationJob {
|
|
std::string id;
|
|
AsyncJobKind kind = AsyncJobKind::ImgGen;
|
|
AsyncJobStatus status = AsyncJobStatus::Queued;
|
|
int64_t created_at = unix_timestamp_now();
|
|
int64_t started_at = 0;
|
|
int64_t completed_at = 0;
|
|
ImgGenJobRequest img_gen;
|
|
std::vector<std::string> result_images_b64;
|
|
std::string error_code;
|
|
std::string error_message;
|
|
};
|
|
|
|
struct AsyncJobManager {
|
|
std::mutex mutex;
|
|
std::condition_variable cv;
|
|
std::unordered_map<std::string, std::shared_ptr<AsyncGenerationJob>> jobs;
|
|
std::unordered_map<std::string, int64_t> expired_jobs;
|
|
std::deque<std::string> queue;
|
|
uint64_t next_id = 0;
|
|
bool stop = false;
|
|
size_t max_pending_jobs = 64;
|
|
int64_t completed_ttl_seconds = 600;
|
|
int64_t failed_ttl_seconds = 600;
|
|
};
|
|
|
|
void purge_expired_jobs(AsyncJobManager& manager);
|
|
size_t count_pending_jobs(const AsyncJobManager& manager);
|
|
std::string make_async_job_id(AsyncJobManager& manager);
|
|
bool cancel_queued_job(AsyncJobManager& manager, AsyncGenerationJob& job);
|
|
json make_async_job_json(const AsyncJobManager& manager, const AsyncGenerationJob& job);
|
|
bool execute_img_gen_job(ServerRuntime& runtime,
|
|
AsyncGenerationJob& job,
|
|
std::vector<std::string>& output_images,
|
|
std::string& error_message);
|
|
void async_job_worker(ServerRuntime& runtime);
|