From df1a733d82479c76dc945d438d7f43d5692db809 Mon Sep 17 00:00:00 2001 From: Alexey Penkov Date: Thu, 23 May 2024 19:13:16 +0000 Subject: [PATCH] README --- README.md | 21 +++++++++++++++++++-- doc/node.png | Bin 0 -> 41053 bytes 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 doc/node.png diff --git a/README.md b/README.md index 929d681..d3dc5f5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,20 @@ -## Genai network client +# Project GenAi client node -This is a client implementation for GenAI network project. `tauri-app` package contains client node with UI and `client-package` contains a separate NPM package that can be used via CLI or as an NPM library. \ No newline at end of file +Node is the serving component of the [project](https://paipe.io/) backend: an image generation and pipeline builder infrastructure as a service. Node is hosted on the client side and interacts with the [server](https://github.com/paipe-labs/project-genai/) as follows: +- node recieves an image generation request +- node performs the task generation, using client computing resources +- node sends the generation result to the server + +Node components: +- `SessionManager` class acts as a coordinator: it establishes a session by creating a WebSocket connection to the server and serves the process of data flow between the server and the node +- `TasksManager` class is responsible for creating and managing image generation tasks +- `InferenceServer` class declares the interface of interaction with Inference. Currently the following types are available depending on the type of inference: + - `AutomaticInferenceServer` + - `ComfyUIInferenceServer` + - `VoltaMLInferenceServer` + - `TestInferenceServer` + +![node](doc/node.png) + +# Inference +Inference is a node part responsible for the image generation process. [Сog-comfyui](https://github.com/fofr/cog-comfyui) and [ai-dock comfyui](https://github.com/ai-dock/comfyui/) are integrated into node component as base Docker images - configuration can be found in `build` directory. diff --git a/doc/node.png b/doc/node.png new file mode 100644 index 0000000000000000000000000000000000000000..ee7e8af099b1da2ff1262709413375bf549adc38 GIT binary patch literal 41053 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 Rd<6b($|zmSzhe0C{{dzN4vGK( literal 0 HcmV?d00001