Files
stable-diffusion-rpc/Sources/StableDiffusionNode/ImageGenerationService.swift

41 lines
1.5 KiB
Swift
Raw Normal View History

2023-04-22 14:52:27 -07:00
import Foundation
import GRPC
import StableDiffusionCore
2023-04-22 14:52:27 -07:00
import StableDiffusionProtos
class ImageGenerationServiceProvider: SdImageGenerationServiceAsyncProvider {
private let jobManager: JobManager
2023-04-22 14:52:27 -07:00
private let modelManager: ModelManager
init(jobManager: JobManager, modelManager: ModelManager) {
self.jobManager = jobManager
2023-04-22 14:52:27 -07:00
self.modelManager = modelManager
}
func generateImages(request: SdGenerateImagesRequest, context _: GRPCAsyncServerCallContext) async throws -> SdGenerateImagesResponse {
guard let state = await modelManager.getModelState(name: request.modelName) else {
throw SdCoreError.modelNotFound
2023-04-22 14:52:27 -07:00
}
let job = await jobManager.create()
DispatchQueue.main.async {
Task {
await self.jobManager.updateJobQueued(job)
}
}
return try await state.generate(request, job: job)
}
func generateImagesStreaming(request: SdGenerateImagesRequest, responseStream: GRPCAsyncResponseStreamWriter<SdGenerateImagesStreamUpdate>, context _: GRPCAsyncServerCallContext) async throws {
guard let state = await modelManager.getModelState(name: request.modelName) else {
throw SdCoreError.modelNotFound
}
let job = await jobManager.create()
DispatchQueue.main.async {
Task {
await self.jobManager.updateJobQueued(job)
}
}
_ = try await state.generate(request, job: job, stream: responseStream)
2023-04-22 14:52:27 -07:00
}
}