Tablebox のプログラム
Tablebox は、すべてのプロジェクトで五つのプログラムを動かします。プログラムは参加者と同じように Relay に接続し、自分のパスの木を受け持つので、アプリはほかのものと同じ呼び出しでプログラムを使えます。
| プログラム | アプリが読むもの | すること | ページ |
|---|---|---|---|
| Aggregation | .aggregation/{name} |
{name} の下に大勢の書き手が書いたものをまとめる |
Aggregation |
| Persistence | .persistence/{path} |
{path} の JSON を保存し続け、保存したものを受け取る |
Persistence |
| Egress | .egress/{source}/{dest} |
{source} を録るか、配信サービスへ送る |
Egress |
| Agent | .agent/{source} |
{source} を聞く AI と話す |
Agent |
| Ingress | (なし) | 配信ソフトのストリームをパスに出す | Ingress |
プログラムを呼ぶ
プログラムを呼ぶことは、その木の中のパスを読むことです。最初の読み出しで動き始め、そのパスを読む人全員で共有し、最後の読み手が去ってから 20 秒で止まります(Aggregation は書き手がいる間も動きます)。subscribe のパターンがそのパスに一致するセッションは、それを呼べます。木は、その入力と同じように許してください。.persistence/{path} を読むと {path} の中身が分かり、.egress/{source}/… を読むと {source} がプロジェクトの外へ送られます。subscribe が ** のトークンは、ルートの下のすべてで、すべてのプログラムを呼べます。
ルートから見た木
プロジェクトのルートより下の R をルートにするセッションは、.aggregation/{rest} をプロジェクトの .aggregation/{R}/{rest} として読みます。.persistence、.egress、.agent も同じです。プロジェクトのルートをルートにするセッションは、そのまま読みます。そのため、アプリはどのルートでも同じパスを使え、二つのルートがプログラムの出力を共有することはありません。この木は読むだけで、書くのはプログラムだけです。
環境変数
プログラムが使うキーや送り先は、プロジェクトの環境変数です。Console の環境変数の画面か管理 API で設定します。値は書き込むだけです。変更は 5 秒以内にプログラムに届きます。要る変数がない間に各プログラムがどうするかは、それぞれのページにあります。
| プログラム | 環境変数 |
|---|---|
| Aggregation | まとめた文書のための、Persistence のストレージの変数 |
| Persistence | STORAGE_BUCKET, STORAGE_ACCESS_KEY_ID, STORAGE_SECRET_ACCESS_KEY, STORAGE_ENDPOINT, STORAGE_REGION, STORAGE_PREFIX |
| Egress | 配信の送り先ごとの EXPORT_{NAME}_URL と、録画のためのストレージの変数 |
| Agent | AGENT_PROVIDER, OPENAI_API_KEY か GEMINI_API_KEY, AGENT_MODEL, AGENT_VOICE, AGENT_INSTRUCTIONS, AGENT_TOOLS |
| Ingress | なし |
拒否と状態
プログラムは、依頼やトラックを受け持つ側のコード、bad-request、missing-variable、failed、too-large で断ります。拒否はコードだけを運ぶので、Egress と Agent は status.json のトラックも出します。state と、何かがうまくいかなかったときの code と message(たとえば足りない環境変数の名前)を持つ JSON スナップショットです。
動き方
- プログラムはグループの番号を始めた時刻(Unix エポックからのミリ秒)から作るので、別のインスタンスが引き継いだ後に読み直した読み手は、前に受け取ったものの続きを受け取ります。
- 各プロジェクトは、プログラムごとに一度に一つのインスタンスが受け持ち、インスタンスはプロジェクトを分け合います。一つが止まると、その読み出しは終わり、読み直すと引き継いだインスタンスに届きます。そのとき何が失われるかは、各プログラムのページにあります。Ingress はどのインスタンスでもどのストリームでも受けます。
- Manager が止まっている間も、プログラムは最後に読んだ環境変数で動き続けます。
自分のプログラムを書くには、SDK で自分のパスのプレフィックスを受け持ちます(パスを受け持つ)。