For the complete documentation index, see llms.txt. This page is also available as Markdown.

ブロックをプラグインにバンドル

Workflowブロックをプラグインとしてパッケージ化します: 必要なインターフェース、型、初期化処理、シリアライザー、読み込み。

Workflowsエコシステムを効率的に管理するには、ブロックを構築して配布するための標準化された方法が不可欠です。これにより、ユーザーは独自のブロックを作成し、それらをWorkflowプラグインにまとめることができます。Workflowプラグインは本質的には、定義されたインターフェースを実装し、さまざまな方法で構成できるPythonライブラリです。

このページでは必須のインターフェース要件を説明し、 Workflowsのバージョン管理 ガイドラインに沿ったブロックの構成を提案します。

プラグインの提案構成

プラグインの構成は次のようにすることを提案します。

.
├── requirements.txt   # 要件を記載したファイル
├── setup.py           # 必要なら別のパッケージ作成方法を使ってください
├── {plugin_name}
│   ├── __init__.py    # ローダーを含むメインモジュール
│   ├── kinds.py       # 任意 - カスタムkindの定義
│   ├── {block_name}   # あなたのブロック用パッケージ
│   │   ├── v1.py      # あなたのブロックのバージョン1
│   │   ├── ...        # ... 次のバージョン
│   │   └── v5.py      # あなたのブロックのバージョン5
│   └── {block_name}   # 別のブロック用パッケージ
└── tests              # ブロックのテスト

必須インターフェース

プラグインは、標準のPythonライブラリに比べて __init__.py に対してメインパッケージ内でいくつかの拡張を提供するだけでよいです。

  • load_blocks() ブロックのクラス一覧を提供する関数(必須)

  • load_kinds() プラグインが定義するすべてのカスタム kinds を返す関数(任意)

  • REGISTERED_INITIALIZERS ブロックの初期化パラメータ名を既定値、またはその値を生成する引数なし関数に対応付ける辞書を持つモジュールプロパティ - 任意

load_blocks() 関数

この関数は、プラグイン内のすべてのブロックを列挙することを想定しています - 1つのブロックを一度だけ定義することができます。

例:

load_kinds() 関数

load_kinds() この関数は、プラグインが定義するすべてのカスタムkindを返します。ブロックがカスタムkindを必要としない場合もあるため、これは任意です。

例:

REGISTERED_INITIALIZERS 辞書

ご存じのとおり、 Workflows Compilerを説明するドキュメント および ブロック開発ガイドでは、Workflowブロックはコンパイル中に動的に初期化され、コンストラクタ引数を必要とする場合があります。これらの引数は、 REGISTERED_INITIALIZERS 辞書に登録された値を既定値として使えます。ブロックの初期化パラメータの既定値を公開するには、初期化パラメータ名とその値(またはその値を生成する関数)を辞書に登録するだけです。すべてのブロックがコンストラクタを必要とするわけではないため、これはプラグインインターフェースの任意の部分です。

例:

のシリアライザとデシリアライザ Kinds

カスタムシリアライザとデシリアライザのサポートは、Execution Engineで導入されました v1.3.0。このバージョン以降、Execution Engineが任意のものをシリアライズおよびデシリアライズするために使用すべきカスタム関数を指定できます。 種類.

デシリアライザは、ワイヤ経由で送信された入力を、ブロックで使用される内部データ表現にデコードする方法を決定します。一方、シリアライザは、Workflowの結果をワイヤ経由で送信する必要がある場合に有用です。

以下に、任意のkindに対するシリアライザとデシリアライザを追加する方法の例を示します。コードはメイン __init__.py に配置してください。

ヒントとコツ

  • 各シリアライザは、シリアライズする値を受け取り、シリアライズ済みの値(標準のPython JSONエンコーダーが受け付けるもの)を返す関数でなければなりません。

  • 各デシリアライザは、2つの引数を受け取る関数でなければなりません。1つはデシリアライズされるWorkflow入力の名前、もう1つはデシリアライズされる値です。この関数の目的は、入力データを期待される内部表現に合わせることです。

  • Kinds から roboflow_core プラグインには、すでに適切なシリアライザとデシリアライザがあります

  • でデータがシリアライズされる方法が気に入らない場合は roboflow_core プラグイン内で、次のためのシリアライズメソッドを自由に変更してください kinds、プラグインに関数を登録して Execution Engine に読み込むだけです。最後に定義された serializer/deserializer が使用されます。

Workflowsエコシステムでプラグインを有効にする

プラグインを読み込むには、次のことを行う必要があります。

  • Workflowsを実行する環境に、プラグインを含むPythonパッケージをインストールする

  • という名前の環境変数をエクスポートし、 WORKFLOWS_PLUGINS 読み込みたいプラグイン名をカンマ区切りで設定します。

    • 例: 2つのプラグインを読み込むには plugin_aplugin_b、次を実行する必要があります export WORKFLOWS_PLUGINS="plugin_a,plugin_b"

最終更新

役に立ちましたか?