Buckets:

mishig's picture
|
download
raw
11.4 kB
## Mellon ile Özel Blokların Kullanımı
[Mellon](https://github.com/cubiq/Mellon), Modular Diffusers ile entegre olan ve düğüm tabanlı iş akışları için tasarlanmış görsel bir iş akışı arayüzüdür.
> [!WARNING]
> Mellon henüz erken geliştirme aşamasındadır ve üretim kullanımı için hazır değildir. Bunu, entegrasyonun nasıl çalıştığına dair bir ön izleme olarak düşünün!
Özel bloklar Mellon'da hazır olarak çalışır - yalnızca repozitorunuza bir `mellon_pipeline_config.json` dosyası eklemeniz gerekir. Bu yapılandırma dosyası, Mellon'a bloğunuzun parametrelerini arayüz bileşenleri olarak nasıl görüntüleyeceğini belirtir.
[Gemini Prompt Expander](https://huggingface.co/diffusers/gemini-prompt-expander-mellon) bloğuyla çalışırken nasıl göründüğü aşağıdaki gibidir:
![Mellon custom block demo](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/modular_demo_dynamic.gif)
Mellon'da modüler diffusers özel bloğu kullanmak için:
1. ModularDiffusers bölümünden bir **Dynamic Block Node** sürükleyin
2. `repo_id` (ör. `diffusers/gemini-prompt-expander-mellon`) girin
3. **Özel Blok Yükle**'ye tıklayın
4. Düğüm, bloğunuzun girdilerini ve çıktılarını göstermek üzere dönüşür
Şimdi kendi özel bloğunuz için bu yapılandırmanın nasıl oluşturulacağını adım adım inceleyelim.
## Mellon yapılandırması oluşturma adımları
1. **Parametreleriniz için Mellon türlerini belirtin** - Her `InputParam`/`OutputParam` için, Mellon'un hangi UI bileşenini render edeceğini söyleyen bir tür gereklidir (ör. `"textbox"`, `"dropdown"`, `"image"`).
2. **`mellon_pipeline_config.json` oluştur** - Yapılandırma şablonu oluşturmak için yardımcı aracımızı kullanın ve onu Hub deponuza gönderin.
3. **(İsteğe bağlı) Yapılandırmayı manuel olarak ayarlayın** - Ürettiğiniz yapılandırmayı, özel ihtiyaçlarınıza göre ince ayarlayın.
## Parametreler için Mellon türlerini belirtin
Mellon tipleri, her bir parametrenin arayüzde nasıl görüntülendiğini belirler. Bir parametre için tip belirtmezseniz, varsayılan olarak `"custom"` kullanılır ve bu da basit bir bağlantı noktası olarak görüntülenir. Bunu daha sonra oluşturulan yapılandırmada her zaman ayarlayabilirsiniz.
| Tür | Giriş/Çıkış | Açıklama |
|------|--------------|-------------|
| `image` | Her ikisi | Görsel (PIL Image) |
| `video` | Her ikisi | Video |
| `text` | Her ikisi | Metin görüntüleme |
| `textbox` | Girdi | Metin girişi |
| `dropdown` | Girdi | Açılır seçim menüsü |
| `slider` | Girdi | Sayısal değerler için kaydırıcı |
| `number` | Girdi | Sayısal giriş |
| `checkbox` | Girdi | Boolean anahtarı |
Daha fazla yapılandırma gerektiren parametreler için (seçenekli açılır listeler veya min/max değerli kaydırıcılar gibi) bir `MellonParam` örneğini doğrudan bir dize yerine iletin. Aşağıdaki sınıf yöntemlerinden birini kullanabilir veya `MellonParam(name, label, type, ...)` ile tamamen özel bir tane oluşturabilirsiniz.
| Yöntem | Açıklama |
|--------|-------------|
| `MellonParam.Input.image(name)` | Görsel girişi |
| `MellonParam.Input.textbox(name, default)` | Textarea olarak metin girişi |
| `MellonParam.Input.dropdown(name, options, default)` | Açılır menü seçimi |
| `MellonParam.Input.slider(name, default, min, max, step)` | Sayısal değerler için kaydırıcı |
| `MellonParam.Input.number(name, default, min, max, step)` | Sayısal giriş (kaydırıcı yok) |
| `MellonParam.Input.seed(name, default)` | Rastgeleleştirme düğmesiyle girdi tohumu |
| `MellonParam.Input.checkbox(name, default)` | Boolean onay kutusu |
| `MellonParam.Input.model(name)` | Diffusers bileşenleri için model girişi |
| `MellonParam.Output.image(name)` | Görüntü çıktısı |
| `MellonParam.Output.video(name)` | Video çıktısı |
| `MellonParam.Output.text(name)` | Metin çıktısı |
| `MellonParam.Output.model(name)` | Diffusers bileşenleri için model çıktısı |
Bir Mellon türü belirtmek için aşağıdaki yöntemlerden birini seçin.
### Blok tanımlarında `metadata` kullanımı
Sıfırdan özel bir blok tanımlıyorsanız, `metadata={"mellon": "<type>"}` ifadesini doğrudan `InputParam` ve `OutputParam` tanımlarınıza ekleyin. Hub'dan mevcut bir özel bloğu düzenliyorsanız, onu yerel olarak nasıl indireceğinizi görmek için [Özel blokları düzenleme](./custom_blocks#editing-custom-blocks) bölümüne bakın.
```python
class GeminiPromptExpander(ModularPipelineBlocks):
@property
def inputs(self) -> List[InputParam]:
return [
InputParam(
"prompt",
type_hint=str,
required=True,
description="Prompt to use",
metadata={"mellon": "textbox"}, # Text input
)
]
@property
def intermediate_outputs(self) -> List[OutputParam]:
return [
OutputParam(
"prompt",
type_hint=str,
description="Expanded prompt by the LLM",
metadata={"mellon": "text"}, # Text output
),
OutputParam(
"old_prompt",
type_hint=str,
description="Old prompt provided by the user",
<CopyLLMTxtMenu containerStyle="float: inline-end; margin-inline-start: 10px; display: inline-flex; position: relative; z-index: 10;"></CopyLLMTxtMenu>
# No metadata - we don't want to render this in UI
)
]
```
Arayüz yapılandırması üzerinde tam kontrol için, doğrudan bir `MellonParam` örneği iletin:
```python
from diffusers.modular_pipelines.mellon_node_utils import MellonParam
InputParam(
"mode",
type_hint=str,
default="balanced",
metadata={"mellon": MellonParam.Input.dropdown("mode", options=["fast", "balanced", "quality"])},
)
```
### Yapılandırma Oluşturulurken `input_types` ve `output_types` Kullanımı
Mevcut bir pipeline üzerinde çalışıyorsanız veya blok tanımlarınızı temiz tutmayı tercih ediyorsanız, yapılandırmayı oluştururken `input_types/output_types` argümanını kullanarak türleri belirtin:
```python
from diffusers.modular_pipelines.mellon_node_utils import MellonPipelineConfig
mellon_config = MellonPipelineConfig.from_custom_block(
blocks,
input_types={"prompt": "textbox"},
output_types={"prompt": "text"}
)
```
> [!NOTE]
> `metadata` ve `input_types`/`output_types` birlikte belirtildiğinde, argümanlar `metadata` değerini geçersiz kılar.
## Mellon yapılandırmasını oluşturup it
Bloğunuza metadata ekledikten sonra varsayılan Mellon yapılandırma şablonunu oluşturun ve Hub'a gönderin:
```python
from diffusers import ModularPipelineBlocks
from diffusers.modular_pipelines.mellon_node_utils import MellonPipelineConfig
# load your custom blocks from your local dir
blocks = ModularPipelineBlocks.from_pretrained("/path/local/folder", trust_remote_code=True)
# Generate the default config template
mellon_config = MellonPipelineConfig.from_custom_block(blocks)
# push the default template to `repo_id`, you will need to pass the same local folder path so that it will save the config locally first
mellon_config.save(
local_dir="/path/local/folder",
repo_id= repo_id,
push_to_hub=True
)
```
Bu işlem, deposunuzda bir `mellon_pipeline_config.json` dosyası oluşturur.
## Yapılandırmayı gözden geçirin ve ayarlayın
Oluşturulan şablon bir başlangıç noktasıdır - ihtiyaçlarınıza göre ayarlamanız gerekebilir. Gemini Prompt Expander için oluşturulan yapılandırmayı inceleyelim:
```json
{
"label": "Gemini Prompt Expander",
"default_repo": "",
"default_dtype": "",
"node_params": {
"custom": {
"params": {
"prompt": {
"label": "Prompt",
"type": "string",
"display": "textarea",
"default": ""
},
"out_prompt": {
"label": "Prompt",
"type": "string",
"display": "output"
},
"old_prompt": {
"label": "Old Prompt",
"type": "custom",
"display": "output"
},
"doc": {
"label": "Doc",
"type": "string",
"display": "output"
}
},
"input_names": ["prompt"],
"model_input_names": [],
"output_names": ["out_prompt", "old_prompt", "doc"],
"block_name": "custom",
"node_type": "custom"
}
}
}
```
### Yapıyı Anlama
`params` sözlüğü, her bir UI öğesinin nasıl çizileceğini tanımlar. `input_names`, `model_input_names` ve `output_names` listeleri, bu UI öğelerini alttaki [ModularPipelineBlocks](/docs/diffusers/main/tr/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks) bileşenlerinin G/Ç arayüzüne eşler:
| Mellon Yapılandırması | ModülerPipelineBlokları |
|---------------|----------------------|
| `input_names` | `inputs` özelliği |
| `model_input_names` | `expected_components` özelliği |
| `output_names` | `intermediate_outputs` özelliği |
Bu örnekte: `prompt` tek girdidir. Model bileşenleri yoktur ve çıktılar `out_prompt`, `old_prompt` ve `doc` içerir.
Şimdi `params` sözlüğüne bakalım:
- **`prompt`**: `display: "textarea"` (bir metin giriş kutusu olarak görüntülenir), `label: "Prompt"` (arayüzde gösterilir) ve `default: ""` (boş başlar) içeren bir giriş parametresidir. `type: "string"` alanı Mellon'da önemlidir çünkü hangi düğümlerin birbirine bağlanabileceğini belirler - yalnızca eşleşen türler "noodles" ile bağlanabilir.
- **`out_prompt`**: Genişletilmiş istem çıktısı. Girdi ve çıktı aynı adı paylaştığı için (`prompt`) yapılandırma içinde ad çakışmalarını önlemek amacıyla `out_` öneki otomatik olarak eklendi. `display: "output"` değerine sahip olup bir çıktı soketi olarak görüntülenir.
- **`old_prompt`**: Metadata belirtmediğimiz için `type: "custom"` değerine sahip. Bu, arayüzde basit bir nokta olarak görüntülenir. Arayüzde bunu gerçekten göstermek istemediğimiz için kaldırabiliriz.
- **`doc`**: Belgeleme çıktısı, tüm özel bloklara otomatik olarak eklenir.
### Ayarlamalar Yapma
Kullanmayacağınız için `old_prompt`'ı hem `params` hem de `output_names` listesinden kaldırın.
```json
{
"label": "Gemini Prompt Expander",
"default_repo": "",
"default_dtype": "",
"node_params": {
"custom": {
"params": {
"prompt": {
"label": "Prompt",
"type": "string",
"display": "textarea",
"default": ""
},
"out_prompt": {
"label": "Prompt",
"type": "string",
"display": "output"
},
"doc": {
"label": "Doc",
"type": "string",
"display": "output"
}
},
"input_names": ["prompt"],
"model_input_names": [],
"output_names": ["out_prompt", "doc"],
"block_name": "custom",
"node_type": "custom"
}
}
}
```
Son yapılandırmayı [diffusers/gemini-prompt-expander-mellon](https://huggingface.co/diffusers/gemini-prompt-expander-mellon) adresinde görüntüleyin.

Xet Storage Details

Size:
11.4 kB
·
Xet hash:
3e3fc974b22cac63ba6a596e009d4d5fbbbccedffa79cc432b39f87d90332b5c

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.