Local models
============

AIDBは2種類のローカルモデルをサポートしています。どちらも外部APIを必要とせずにPostgresホストで直接実行されます。

- **デフォルトモデル** —
  AIDBは、サポートされている各モデルタイプのデフォルトバリアントをバンドルし、自動的に登録します。使用を開始するために構成は必要ありませんが、モデルのファイルは、初めて使用するときにHuggingFaceからダウンロードされます。
  :ref:`ローカルモデルのダウンロード <ローカルモデルのダウンロード>` を参照してください。

- **カスタムモデル**
  別のモデルバリアント、微調整モデル、または特定のローカルパスが必要な場合は、
  ``aidb.create_model()`` を使用してカスタムバージョンを登録できます。

ローカルモデルは、2つの推論ランタイムCandleまたはllama.cppのいずれかで実行されます。日常の使用法\ ``aidb.create_model()``
、\ ``aidb.encode_text()`` 、\ ``aidb.generate_text()`` など -
いずれの方法でも同じです。以下の各モデルのプロバイダーは、使用するランタイムをノートするだけです。

デフォルトモデル
----------------

次のモデルは、構成なしですべてのAIDBインストールで使用できます。プロバイダー列の意味については、
:ref:`モデルプロバイダー <モデルプロバイダー>` を参照してください。

.. csv-table::
  :header: Model name,Provider,Use
  :widths: 12,25,15
  :align: left
  :class: longtable

  `bert`,`bert_local` (Candle),Text embeddings
  `clip`,`clip_local` (Candle),Multimodal embeddings (text and image)
  `t5`,`t5_local` (Candle),Text-to-text generation
  `llama`,`llama_instruct_local` (Candle),Text-to-text generation
  `bge-small-en-v1.5-f16`,`llamacpp_embeddings` (llama.cpp),Text embeddings
  `nomic-embed-text-v1.5-Q8_0`,`llamacpp_embeddings` (llama.cpp),Text embeddings
  `bge-m3-f16`,`llamacpp_embeddings` (llama.cpp),Text embeddings
  `qwen3-embedding-0.6b-Q8_0`,`llamacpp_embeddings` (llama.cpp),Text embeddings
  `qwen3-embedding-4b-Q8_0`,`llamacpp_embeddings` (llama.cpp),Text embeddings
  `qwen3.5-0.8b-Q8_0`,`llamacpp_generate` (llama.cpp),Text-to-text generation
  `llama-3.2-1b-instruct-Q8_0`,`llamacpp_generate` (llama.cpp),Text-to-text generation
  `lightonocr-2-1b-Q8_0`,`llamacpp_ocr` (llama.cpp),OCR (text extraction from images)
  `dummy`,`dummy`,Testing and development (returns zeros)

AIDB
SQLファンクションまたはパイプラインステップ構成で、名前で直接使用します。

.. code:: sql

   - - Text embedding with the default BERT model
   SELECT aidb.encode_text(bert, The quick brown fox);

   - - Image embedding with the default CLIP model
   SELECT aidb.encode_image(clip, pg_read_binary_file(/tmp/photo.jpg)::BYTEA);

   - - Text generation with the default T5 model
   SELECT aidb.generate_text(t5, Translate to French: Hello, world.);

   - - Text embedding with a default llama.cpp embedding model
   SELECT aidb.encode_text(bge-small-en-v1.5-f16, The quick brown fox);

   - - Text generation with a default llama.cpp model
   SELECT aidb.generate_text(qwen3.5-0.8b-Q8_0, Translate to French: Hello, world.);

モデルプロバイダー
------------------

**provider**
は、モデルにどの推論エンジンを使用するか\ ``aidb.create_model()``
に指示します。これはSQLの列挙型ではありません。これは、AIDBのモデルレジストリに登録されているPostgres外部サーバーの名前であり、モデル作成時にアダプターと照合されます。インストールに登録されているプロバイダーとその説明をリストします。

.. code:: sql

   SELECT server_name, server_description FROM aidb.model_providers ORDER BY server_name;

AIDBのローカルプロバイダー、それぞれの背後にあるランタイム、およびそれらの目的

.. csv-table::
  :header: Provider,Runtime,Description
  :widths: 12,15,25
  :align: left
  :class: longtable

  `bert_local`,Candle,シンプルな言語モデル、テキストのエンコードに最適です。
  `clip_local`,Candle,ビジョン/テキストモデル、テキストと画像のエンコードに最適です。
  `t5_local`,Candle,翻訳、要約、質問回答に最適です。
  `llama_instruct_local`,Candle,Metaの大規模言語モデルファミリーの命令バリアント。
  `llamacpp_generate`,llama.cpp,llama.cpp GGUF形式を介したローカルLLM推論。
  `llamacpp_embeddings`,llama.cpp,llama.cpp GGUF形式を介したローカルテキスト埋め込み。
  `llamacpp_reranking`,llama.cpp,llama.cpp GGUF形式を介したローカルリランキング。
  `llamacpp_ocr`,llama.cpp,llama.cpp GGUF形式を介したローカルOCR画像からのテキスト抽出。
  `dummy`,—,テストに最適な偽のデータを提供します。

``aidb.model_providers`` は、外部APIプロバイダーOpenAI、NVIDIA
NIM、Gemini、OpenRouterなどもリストします。これらについては、
:ref:`External model connections <External model connections>` を参照してください。完全な列リファレンスについては、
:ref:`helpb.model_providers <helpb.model_providers>` を参照してください。

モデルファイル形式とタスクに一致するプロバイダーを選択し、
:ref:`カスタムモデル <カスタムモデル>` の下の一致する構成ヘルパーで構成します。または、上記のすぐに使用できる :ref:`デフォルトモデル <デフォルトモデル>` のいずれかを使用します。

カスタムモデル
--------------

別のモデルバージョン、微調整されたモデル、または特定のローカルパスが必要な場合、
``aidb.create_model()`` を使用してカスタムバリアントを登録します。

.. code:: sql

   SELECT aidb.create_model(
       name     => my_model,
       provider => <provider>,
       config   => <config_helper>(...)
   );

.. csv-table::
  :header: Parameter,Type,Description
  :widths: 12,15,25
  :align: left
  :class: longtable

  `name`,TEXT,このモデルの一意の名前。パイプラインおよびSQLファンクションで参照するために使用されます。
  `provider`,TEXT,モデルプロバイダー。 AIDBが使用する推論エンジンを決定します。
  `config`,JSONB,プロバイダー固有の構成、構成ヘルパー機能で構築されています。

以下のBERT、CLIP、T5、およびLlamaはCandleで実行され、それぞれに独自の構成ヘルパーがあります。
llama.cpp独自のサブセクション、最後は別のランタイムを実行し、構成ヘルパーがまだありません。

BERT
^^^^

``aidb.bert_config()``
を使用して、HuggingFaceモデル識別子、オプションのリビジョン、およびオプションのローカルキャッシュディレクトリを指定します。

.. code:: sql

   SELECT aidb.create_model(
       my_bert,
       bert_local,
       config => aidb.bert_config(sentence-transformers/all-MiniLM-L6-v2)
   );

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required,モデル名またはパスHuggingFace識別子。
  `revision`,TEXT,NULL,モデルのリビジョンまたはブランチ。
  `cache_dir`,TEXT,NULL,モデルファイルをキャッシュするためのローカルディレクトリ。

クリップ
^^^^^^^^

``aidb.clip_config()``
を使用して、ジョイントテキストと画像埋め込みのCLIPベースのマルチモーダルモデルを構成します。

.. code:: sql

   SELECT aidb.create_model(
       my_clip,
       clip_local,
       config => aidb.clip_config(openai/clip-vit-base-patch32)
   );

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required,モデル名またはパスHuggingFace識別子。
  `revision`,TEXT,NULL,モデルのリビジョンまたはブランチ。
  `cache_dir`,TEXT,NULL,モデルファイルをキャッシュするためのローカルディレクトリ。
  `image_size`,INTEGER,NULL,ピクセル単位の入力画像サイズ。

T5
^^

``aidb.t5_config()``
を使用して、T5テキスト対テキストモデルを構成します。
T5モデルは、バリアントに応じて、翻訳、要約、質問応答などのタスクをサポートします。

.. code:: sql

   SELECT aidb.create_model(
       my_t5,
       t5_local,
       config => aidb.t5_config(google/flan-t5-base)
   );

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required,モデル名またはパス。
  `revision`,TEXT,NULL,モデルのリビジョンまたはブランチ。
  `temperature`,DOUBLE PRECISION,NULL,サンプリング温度。
  `seed`,BIGINT,NULL,再現可能な出力のランダムシード。
  `max_tokens`,INTEGER,NULL,生成する最大トークン。
  `repeat_penalty`,REAL,NULL,繰り返されるトークンに適用されるペナルティ。
  `repeat_last_n`,INTEGER,NULL,リピートペナルティの対象とされる後続トークンの数。
  `model_path`,TEXT,NULL,モデルの重みへの明示的なローカルパス `model`をオーバーライドします。
  `cache_dir`,TEXT,NULL,モデルファイルをキャッシュするためのローカルディレクトリ。
  `top_p`,DOUBLE PRECISION,NULL,nucleusサンプリングしきい値。

ラマ
^^^^

``aidb.llama_config()``
を使用して、テキスト生成用のLlamaファミリー言語モデルを構成します。
Llamaモデルは、温度、top-pサンプリング、コンテキスト長、およびその他の生成パラメーターをサポートしています。

.. code:: sql

   SELECT aidb.create_model(
       my_llama,
       llama_instruct_local,
       config => aidb.llama_config(
           meta-llama/Llama-3.2-3B-Instruct,
           temperature => 0.5
       )
   );

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required,モデル名またはパス。
  `revision`,TEXT,NULL,モデルのリビジョンまたはブランチ。
  `cache_dir`,TEXT,NULL,モデルファイルをキャッシュするためのローカルディレクトリ。
  `system_prompt`,TEXT,NULL,デフォルトのシステムプロンプト。
  `use_flash_attention`,BOOLEAN,NULL,フラッシュアテンションを有効にします。
  `model_path`,TEXT,NULL,モデルの重みへの明示的なローカルパス `model`をオーバーライドします。
  `seed`,BIGINT,NULL,再現可能な出力のランダムシード。
  `temperature`,DOUBLE PRECISION,NULL,サンプリング温度。
  `top_p`,DOUBLE PRECISION,NULL,nucleusサンプリングしきい値。
  `sample_len`,INTEGER,NULL,生成する最大トークン。
  `use_kv_cache`,BOOLEAN,NULL,KVキャッシュを有効にします。
  `repeat_penalty`,REAL,NULL,繰り返されるトークンに適用されるペナルティ。
  `repeat_last_n`,INTEGER,NULL,リピートペナルティの対象とされる後続トークンの数。

!!!note
ローカルモデルファイルはHuggingFaceからダウンロードされ、最初に使用するときにキャッシュされます。
Postgresプロセスには、ネットワークアクセスとキャッシュディレクトリへの書き込みアクセスが必要です。エアギャップ環境の場合、モデルファイルを事前ダウンロードし、
``model_path`` または\ ``cache_dir``
を使用してローカルコピーをポイントします。

llama.cpp
^^^^^^^^^

llama.cppは、GGUF形式のモデルファイル—量子化されたオープンウェイトモデルの一般的な配布形式—を4つのプロバイダーを介して実行します。テキスト生成は\ ``llamacpp_generate``
、テキスト埋め込みは\ ``llamacpp_embeddings``
、リランキングは\ ``llamacpp_reranking``
、OCR画像からテキスト抽出は\ ``llamacpp_ocr``
。それらのいずれかを、HuggingFaceからダウンロードした、または既にディスク上にあるGGUFファイルをポイントします。
AIDBの事前登録されたGGUFモデルについては、上記の :ref:`デフォルトモデル <デフォルトモデル>` を参照してください。以下のレシピを使用して、別のレシピを登録します。

llamacpp_generate
^^^^^^^^^^^^^^^^^

.. code:: sql

   SELECT aidb.create_model(
       name => my_llamacpp_chat,
       provider => llamacpp_generate,
       config => jsonb_build_object(
           local_path, /var/lib/aidb/models/qwen2.5-3b-instruct-q4_k_m.gguf,
           n_ctx, 4096,
           temperature, 0.2
       )
   );

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required unless `local_path` is set,HuggingFaceリポIDたとえば `Qwen/Qwen2-0.5B-Instruct-GGUF`。
  `model_file`,TEXT,Required unless `local_path` is set,リポジトリ内の`.gguf`のファイル名。分割GGUFの場合、任意の1つのシャードを名前付けます。すべてのシャードがダウンロードされ、llama.cppがそれらを再アセンブルします。
  `revision`,TEXT,`main`,HuggingFaceリビジョン。
  `local_path`,TEXT,NULL,ローカルの`.gguf`ファイルへの絶対パス。 `model`/`model_file`/`revision`をオーバーライドします。
  `cache_dir`,TEXT,NULL,ダウンロードしたモデルファイルをキャッシュするためのローカルディレクトリ。
  `n_ctx`,INTEGER,4096,コンテキストウィンドウ、トークン単位。 GGUFがトレーニングされた値に制限されます。
  `chat_template`,TEXT,NULL,GGUFに焼き付けられたチャットテンプレートをオーバーライドします。
  `temperature`,DOUBLE PRECISION,0.7,サンプリング温度。
  `top_p`,DOUBLE PRECISION,0.9,nucleusサンプリングしきい値。
  `max_tokens`,INTEGER,512,生成する最大トークン。
  `seed`,BIGINT,NULL,再現可能な出力のランダムシード。
  `system_prompt`,TEXT,NULL,すべての要求の先頭に追加されるシステムプロンプト。
  `repeat_penalty`,REAL,1.1,繰り返されるトークンに適用されるペナルティ。
  `repeat_last_n`,INTEGER,64,リピートペナルティの対象とされる後続トークンの数。
  `thinking`,BOOLEAN,NULL (keeps tags),レスポンスでの`<think>`タグ処理を制御します。`false`はそれらをストリップし、`true`/unsetはそれらを保持します。

``llamacpp_generate`` は、ネイティブの\ ``openai_responses``
および\ ``anthropic_messages``
プロバイダーと同様に、ツール呼び出しと構造化出力のために\ ``tools``
、\ ``tool_choice`` 、および\ ``response_format`` をサポートします
:ref:`External model connections <External model connections>` を参照してください — :ref:`ツール呼び出しと構造化出力 <ツール呼び出しと構造化出力>` を参照してください。

llamacpp_embeddings
^^^^^^^^^^^^^^^^^^^

.. code:: sql

   SELECT aidb.create_model(
       name => my_llamacpp_embed,
       provider => llamacpp_embeddings,
       config => jsonb_build_object(
           model, nomic-ai/nomic-embed-text-v1.5-GGUF,
           model_file, nomic-embed-text-v1.5.Q4_K_M.gguf,
           revision, 0188c9bf409793f810680a5a431e7b899c46104c,
           n_ctx, 2048,
           normalize, true
       )
   );

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required unless `local_path` is set,HuggingFaceリポIDたとえば `nomic-ai/nomic-embed-text-v1.5-GGUF`。
  `model_file`,TEXT,Required unless `local_path` is set,リポジトリ内の`.gguf`のファイル名。分割GGUFの場合、任意の1つのシャードを名前付けます。すべてのシャードがダウンロードされ、llama.cppがそれらを再アセンブルします。
  `revision`,TEXT,`main`,HuggingFaceリビジョン。
  `local_path`,TEXT,NULL,ローカルの`.gguf`ファイルへの絶対パス。 `model`/`model_file`/`revision`をオーバーライドします。
  `cache_dir`,TEXT,NULL,ダウンロードしたモデルファイルをキャッシュするためのローカルディレクトリ。
  `n_ctx`,INTEGER,2048,コンテキストウィンドウ、トークン単位。 GGUFがトレーニングされた値に制限されます。
  `pooling`,TEXT,`unspecified`,プーリング戦略 `unspecified` GGUF独自のメタデータを使用 、 `none`、 `mean`、 `cls`、または`last`
  `normalize`,BOOLEAN,`true`,出力埋め込みベクトルをL2正規化します。

llamacpp_reranking
^^^^^^^^^^^^^^^^^^

1つのプロバイダーの背後で2つの異なるリランカーアーキテクチャを提供します。スコアリングメカニズムはGGUFのメタデータから自動検出するか、明示的に設定できます。

.. code:: sql

   - - Cross-encoder (auto-detected from the GGUFs architecture)
   SELECT aidb.create_model(
       name => my_llamacpp_reranker,
       provider => llamacpp_reranking,
       config => jsonb_build_object(
           model, gpustack/bge-reranker-v2-m3-GGUF,
           model_file, bge-reranker-v2-m3-Q4_K_M.gguf,
           revision, 3093af03b1a635e67b084b1d8c03c5f5e020fd05,
           n_ctx, 2048
       )
   );

   - - Decoder-only (Qwen3-Reranker family), with a custom task instruction
   SELECT aidb.create_model(
       name => my_llamacpp_reranker_decoder,
       provider => llamacpp_reranking,
       config => jsonb_build_object(
           model, ggml-org/Qwen3-Reranker-0.6B-Q8_0-GGUF,
           model_file, qwen3-reranker-0.6b-q8_0.gguf,
           revision, a02f48bb4f057028298c21fa033da2b30d7742d5,
           n_ctx, 2048,
           instruction, Retrieve legal passages relevant to the query
       )
   );

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required unless `local_path` is set,HuggingFaceリポIDたとえば `gpustack/bge-reranker-v2-m3-GGUF`。
  `model_file`,TEXT,Required unless `local_path` is set,リポジトリ内の`.gguf`のファイル名。分割GGUFの場合、任意の1つのシャードを名前付けます。すべてのシャードがダウンロードされ、llama.cppがそれらを再アセンブルします。
  `revision`,TEXT,`main`,HuggingFaceリビジョン。
  `local_path`,TEXT,NULL,ローカルの`.gguf`ファイルへの絶対パス。 `model`/`model_file`/`revision`をオーバーライドします。
  `cache_dir`,TEXT,NULL,ダウンロードしたモデルファイルをキャッシュするためのローカルディレクトリ。
  `n_ctx`,INTEGER,2048,コンテキストウィンドウ、トークン単位。クエリ/ドキュメントのペアは、適合しない場合、呼び出し時にサイレントに切り捨てられるのではなく、拒否されます。
  `reranker_type`,TEXT,NULL (auto-detected),スコアリングメカニズム`cross_encoder`または`decoder_only`を強制します。誤検出を修正する場合にのみ必要です。
  `instruction`,TEXT,Built-in generic retrieval instruction,デコーダー専用のリランカーQwen3-Rerankerファミリーのタスク指示。クロスエンコーダーによって無視されます。

``llamacpp_reranking`` は、GGUFの\ ``general.architecture``
メタデータからスコアリングメカニズムを自動検出します。 ``qwen3``
アーキテクチャは、Qwen3-Rerankerファミリーのyes/noverdict-tokenプロンプトを使用して、デコーダーのみとしてスコアします。他のアーキテクチャはモデルのロード時に拒否されます。誤検出されたにもかかわらず、モデルがこれらの2つのスコアパスのいずれかに一致することを確認している場合にのみ、
``reranker_type`` を明示的に設定します。

!!!note ``nim_reranking``
や他のリモートリランキングプロバイダーとは異なり、\ ``llamacpp_reranking``
の\ ``logit_score``
は、正規化された0〜1の関連性スコアではなく、生の無制限のモデルロジットです。プロバイダーまたは呼び出し全体ではなく、1つの\ ``aidb.rerank_text()``
呼び出し内のスコアを比較します。

!!!note
llama.cppにはまだ構成ヘルパー機能がありません。上記のように、\ ``jsonb_build_object()``
を使用して\ ``config`` をビルドします。また、今日はCPUのみです。
GPUオフロードオプションはありません。
:ref:`promoteb.max_threads <promoteb.max_threads>` およびCandleランタイムが使用できるスレッドの数を制御するには、
:ref:`promoteb.max_threads <promoteb.max_threads>` を参照してください。

llamacpp_ocr
^^^^^^^^^^^^

ローカルビジョン言語のGGUFモデルとそのマルチモーダルプロジェクターmmprojファイルを使用して、画像からテキストを抽出します。

.. code:: sql

   SELECT aidb.create_model(
       name => my_llamacpp_ocr,
       provider => llamacpp_ocr,
       config => jsonb_build_object(
           model, ggml-org/LightOnOCR-2-1B-GGUF,
           model_file, LightOnOCR-2-1B-Q8_0.gguf,
           mmproj_file, mmproj-LightOnOCR-2-1B-Q8_0.gguf,
           revision, 7d4daf70c2856a155b1413def00f4ae59843a9cf,
           n_ctx, 8192
       )
   );

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required unless `local_path` is set,HuggingFaceリポIDたとえば `ggml-org/LightOnOCR-2-1B-GGUF`。
  `model_file`,TEXT,Required unless `local_path` is set,リポジトリ内のベースモデル`.gguf`のファイル名。
  `mmproj_file`,TEXT,Required unless `mmproj_local_path` is set,ベースモデルと同じHuggingFaceリポジトリ/リビジョンにあるマルチモーダルプロジェクターmmproj `.gguf`のファイル名。
  `mmproj_local_path`,TEXT,NULL,ローカルmmproj `.gguf`ファイルへの絶対パス。 HuggingFaceベースの`mmproj_file`ダウンロードをオーバーライドします。
  `revision`,TEXT,`main`,HuggingFaceリビジョン。
  `local_path`,TEXT,NULL,ローカルベースモデル`.gguf`ファイルへの絶対パス。 `model`/`model_file`/`revision`をオーバーライドします。
  `cache_dir`,TEXT,NULL,ダウンロードしたモデルファイルをキャッシュするためのローカルディレクトリ。
  `n_ctx`,INTEGER,8192,コンテキストウィンドウ、トークン単位。
  `prompt`,TEXT,Built-in transcription instruction,各画像とともに送信されるOCR指示。プロンプトの影響はモデルによって異なります。
  `temperature`,DOUBLE PRECISION,0.0,サンプリング温度。クリエイティブなサンプリングではなく忠実な文字起こしには、デフォルトの`0.0`が使用されます。

作成時にモデルの検証
--------------------

デフォルトでは、\ ``aidb.create_model()``
は登録の一部としてモデルを検証します。モデルファイルをダウンロードしてロードし、小さなプローブ推論を実行して、登録がコミットする前にモデルが機能していることを確認します。ローカルモデルの場合、これにより、大規模な可能性のあるダウンロードとロードが、最初に使用するのではなく作成時に移動します。

検証が失敗した場合たとえば、モデル識別子がHuggingFaceに存在しない、\ ``model_path``
が間違っている、または重みをロードできない場合、すぐにエラーが報告され、モデルは登録されません。

.. code:: sql

   - - Validated by default: downloads, loads, and probes the model now.
   SELECT aidb.create_model(my_bert, bert_local,
       config => aidb.bert_config(sentence-transformers/all-MiniLM-L6-v2));

``validate => false``
を渡して、ダウンロードまたはロードせずにモデルを登録します。ダウンロードを最初に使用するまで延期したり、ネットワークアクセスがまだない環境にモデルを登録したりするのに役立ちます。

.. code:: sql

   SELECT aidb.create_model(my_bert, bert_local,
       config    => aidb.bert_config(sentence-transformers/all-MiniLM-L6-v2),
       validate  => false);

:ref:`aidb.validate_model() <Pipelines API reference>` を使用して、モデルを後で検証したり、既存のモデルを再チェックしたりできます。

ローカルモデルのダウンロード
----------------------------

ローカルモデルが初めて使用されるとき、またはそのキャッシュが欠落または破損しているとき、AIDBはHuggingFaceから構成済みの\ ``cache_dir``
にモデルファイルをダウンロードします。ダウンローダーは進行状況メッセージを発行し、一時的なネットワーク障害を自動的に再試行します。

進行状況メッセージ
^^^^^^^^^^^^^^^^^^

AIDBは、ファイルごとに、要求の開始時に\ ``downloading``
行を生成し、終了時に\ ``complete``
行を生成します。マルチギガバイトのファイルの場合、ハートビートラインは、累積バイト数と完了パーセントを約30秒ごとにレポートするため、大規模なダウンロード中にセッションがフリーズしたように見えません。

.. code:: sql

   SELECT aidb.generate_text(t5, test);
   __OUTPUT__
   NOTICE:  [t5_local] loading t5-small (rev refs/pr/15) -> /var/.../snapshots/refs/pr/15
   NOTICE:  [hf] downloading https://huggingface.co/t5-small/resolve/refs%2Fpr%2F15/config.json (expected: 1.2 KB)
   NOTICE:  [hf] complete: https://huggingface.co/t5-small/resolve/refs%2Fpr%2F15/config.json (1.2 KB) in 0.9s
   NOTICE:  [hf] downloading https://huggingface.co/t5-small/resolve/refs%2Fpr%2F15/model.safetensors (size unknown)
   NOTICE:  [hf] downloading t5-small/model.safetensors: 115.4 MB / 230.8 MB (50.0%)
   NOTICE:  [hf] downloading t5-small/model.safetensors: 216.4 MB / 230.8 MB (93.7%)
   NOTICE:  [hf] complete: https://huggingface.co/t5-small/resolve/refs%2Fpr%2F15/model.safetensors (230.8 MB) in 83.5s

デフォルトでは、これらの行は\ ``NOTICE``
レベルでクライアントに送信されます。
:ref:`helpb.download_log_level <helpb.download_log_level>` パラメーターを使用して、代わりにサーバーログにルーティングするか、完全に抑制します。

再試行と再開
^^^^^^^^^^^^

マルチギガバイトのダウンロードの途中で接続をドロップするCDNは、要求を完全に失敗しません。

- 再試行ごとに、以前の試行が停止した場所から\ ``Range``
  ヘッダーが送信されるため、進行状況はゼロからリスタートするのではなく、試行にわたって蓄積されます。

- AIDBは、「まだ新しいバイトを受信している」と「ゼロの進行状況」を区別し、
  :ref:`quietb.download_max_attempts <quietb.download_max_attempts>` 
  に対するストールした試行のみをカウントし、試行間の指数関数的なバックオフを使用します。

- ``psql`` からの\ ``Ctrl-C``
  は、現在の要求がタイムアウトするのを待機する代わりに、再試行の間に着陸します。

ファイルごとの試行の合計数は、 :ref:`quietb.download_max_attempts <quietb.download_max_attempts>` デフォルト\ ``30``
によって制限されます。

検証と自己修復
^^^^^^^^^^^^^^

AIDBは、HuggingFaceによって宣伝されるサイズとSHA-256ハッシュを使用してダウンロードされたファイルを検証し、これらの値を記録する完了した各ダウンロードの横に小さなサイドカーファイルを書き込みます。キャッシュヒットするたびに、AIDBはサイドカーに対してファイルサイズを再チェックするため、元のダウンロードの後に切り詰められたファイルは、使用される前にキャッチされます。

モデルのロード時に、キャッシュされたファイルが破損していると検出された場合、AIDBは影響を受けたスナップショットをパージし、自動的に1回再ダウンロードします。

登録されたモデルを使用する
--------------------------

登録されると、モデルはAIDBファンクションで名前で参照されます。カスタムモデルとデフォルトモデルは交換可能です。

.. code:: sql

   - - Use a custom BERT model for embedding
   SELECT aidb.encode_text(my_bert, Hello world);

   - - Use a custom BERT model in a pipeline step
   SELECT aidb.create_pipeline(
       name => my_pipeline,
       source => my_source_table,
       source_key_column => id,
       source_data_column => content,
       step_1 => KnowledgeBase,
       step_1_options => aidb.knowledge_base_config(model => my_bert, data_format => Text)
   );

すべてのモデル構成ヘルパーファンクションの完全なパラメーターの詳細については、
:ref:`Models reference <Models reference>` を参照してください。一部のファンクション\ ``generate_text()``
、\ ``summarize_text()``
は、呼び出しごとの構成オーバーライドも受け入れます。作成時と呼び出し時間の設定については、
:ref:`構成モデル <構成モデル>` を参照してください。

AIDBのローカルプロバイダーで動作するようにテストおよび検証されたHuggingFaceモデルバリアントのリストについては、
:ref:`Support matrix <Support matrix>` を参照してください。

障害対応
--------

llama.cppモデルのロードと推論の問題
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

``llamacpp_generate`` 、\ ``llamacpp_embeddings``
、または\ ``llamacpp_reranking``
モデルのロードに失敗したり、タイムアウトしたり、その他の予期しない動作をした場合、AIDB自分自身のエラーメッセージには、診断するための十分な詳細がない場合があります。
llama.cppのネイティブ診断ログを有効にして、サーバーログに独自の出力GGUFメタデータ、テンソル形状、およびバックエンド/モデルの初期化を表示します。

.. code:: ini

   aidb.enable_llamacpp_logs = true

このパラメーターは、拡張機能の初期化時に1回読み込まれるため、Postgresを再起動して変更を有効にします。\ ``SET``
および\ ``pg_reload_conf()``
だけでは適用されません。完全なパラメーターリファレンスについては、
:ref:`agentb.enable_llamacpp_logs <agentb.enable_llamacpp_logs>` を参照してください。

llama.cppのネイティブ出力が冗長であるためモデルロードごとに数百行があるため、デフォルトではオフになっているため、問題を調査しているときにのみオンにして、その後オフに戻します。これはllama.cppモデルにのみ適用されます。
Candleベースモデル\ ``bert_local`` 、\ ``clip_local`` 、\ ``t5_local``
、\ ``llama_instruct_local`` は影響を受けません。
