コンテンツにスキップ

ソース観測

新しいメディアタイプを計画可能にする、低コストな構造的観測を追加します。

indx が観測できないメディアタイプは、記述子に何を書いても計画できません。SourceObserver はルーティングが判断に使う低コストな構造的証拠を供給するもので、それを宣言したディストリビューションをインストールすることが、新しい形式を計画可能にする唯一の方法です。indx が観測するすべての形式 —— PDF、画像、Office、テキスト、メール —— も、あなたが書くことになるのと同じ形の 5 つのディストリビューションから、まったく同じ経路で届きます。あなたの拡張が劣位に置かれる組み込み経路は存在しません。パッケージ化とインストールは概要の手順に従います。

from indx_interfaces import (
EMPTY_SIGNAL,
PageEvidence,
SourceObserver,
TextLayerState,
)
MEDIA_TYPE = "application/vnd.acme.purchase-order"
PAGE_BREAK = "\f"
class Observer:
def observe(self, content: bytes, media_type: str) -> tuple[PageEvidence, ...]:
# 空を返すのが「自分のものではない」という表明で、分岐は次の観測へ
# 進みます。例外を送出すると探索はそこで終わります。
if media_type != MEDIA_TYPE:
return ()
body = content.decode("utf-8", errors="replace").split(PAGE_BREAK)
return tuple(
PageEvidence(
page=number,
text_layer=TextLayerState.USABLE,
signals=(EMPTY_SIGNAL,) if not page.strip() else (),
)
for number, page in enumerate(body, start=1)
)
class Provider:
def descriptors(self) -> tuple[CapabilityDescriptor, ...]:
...
def source_observers(self) -> tuple[SourceObserver, ...]:
return (Observer(),)

source_observers()embedding_spaces() と同じく任意です。indx がすでに観測できる形式を読むだけのプロバイダーは実装しません。観測はすべての計画で実行されるため、プリフライトの予算を継承します。低コスト、ローカル、決定的で、OCR もレンダリングもモデルもネットワークもありません。プリフライトコンテキスト全体ではなくページ証拠を返してください。計画が束縛されるソースダイジェストは indx が生成するものであり、ページ数は返された証拠から導出されます。

インストールされた観測は indx 同梱のものより先に問われるため、indx がすでに観測できる形式を宣言し直すこともできます。自分が宣言したタイプなのに開けなかったバイト列は、空ではなく InvalidSourceError です。次の観測が同じバイト列を読み誤らないよう、そこで探索を終わらせます。

  • 観測が、宣言していないメディアタイプには空を返し、宣言したタイプの壊れたバイト列には例外を送出することをテストする。