Buckets:
Mellon ile Özel Blokların Kullanımı
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.
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 bloğuyla çalışırken nasıl göründüğü aşağıdaki gibidir:
Mellon'da modüler diffusers özel bloğu kullanmak için:
- ModularDiffusers bölümünden bir Dynamic Block Node sürükleyin
repo_id(ör.diffusers/gemini-prompt-expander-mellon) girin- Özel Blok Yükle'ye tıklayın
- 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ı
- Parametreleriniz için Mellon türlerini belirtin - Her
InputParam/OutputParamiçin, Mellon'un hangi UI bileşenini render edeceğini söyleyen bir tür gereklidir (ör."textbox","dropdown","image"). mellon_pipeline_config.jsonoluştur - Yapılandırma şablonu oluşturmak için yardımcı aracımızı kullanın ve onu Hub deponuza gönderin.- (İ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 bölümüne bakın.
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:
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:
from diffusers.modular_pipelines.mellon_node_utils import MellonPipelineConfig
mellon_config = MellonPipelineConfig.from_custom_block(
blocks,
input_types={"prompt": "textbox"},
output_types={"prompt": "text"}
)
metadataveinput_types/output_typesbirlikte belirtildiğinde, argümanlarmetadatadeğ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:
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:
{
"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 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) vedefault: ""(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ıylaout_öneki otomatik olarak eklendi.display: "output"değerine sahip olup bir çıktı soketi olarak görüntülenir.old_prompt: Metadata belirtmediğimiz içintype: "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.
{
"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 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.
