正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

コード提案API

このAPIを使用してGitLab Duoのコード提案にアクセスします。

コード補完を生成する

  • ステータス: 実験的機能
POST /code_suggestions/completions

このエンドポイントは、ユーザーごとに1分間に60リクエストのレート制限を設けています。

AI抽象化レイヤーを使用して、コード補完を生成します。

このエンドポイントへのリクエストは、AIゲートウェイにプロキシされます。

パラメータは以下のとおりです:

属性必須説明
current_fileハッシュはいサジェストが生成されるファイルについて。属性この属性が受け入れる文字列のリストについては、ファイルの属性を参照してください。
intent文字列いいえ完了リクエストの目的。これはcompletionまたはgenerationのいずれかです。
streamブール値いいえ応答を準備ができた時点でより小さなチャンクとしてストリーミングするかどうか(該当する場合)。デフォルトはfalseです。
project_path文字列いいえプロジェクトのパス。
generation_type文字列いいえ生成リクエストのイベントタイプ。これはcommentempty_function、またはsmall_fileのいずれかです。
context配列いいえコード提案に使用される追加のコンテキスト。この属性が受け入れるパラメータのリストについては、コンテキスト属性を参照してください。
user_instruction文字列いいえユーザーのコード提案への指示。

ファイル属性

current_file属性は、以下の文字列を受け入れます:

  • file_name - ファイル名。必須。
  • content_above_cursor - 現在のカーソル位置より上のファイルコンテンツ。必須。
  • content_below_cursor - 現在のカーソル位置より下のファイルコンテンツ。オプション。

コンテキスト属性

context属性は、以下の属性を持つ要素のリストを受け入れます:

  • type - コンテキスト要素のタイプ。これはfileまたはsnippetのいずれかです。
  • name - コンテキスト要素の名前。ファイルまたはコードスニペットの名前。
  • content - コンテキスト要素のコンテンツ。ファイルまたは関数の本体。

リクエスト例:

curl --request POST \
  --header "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \
  --data '{
      "current_file": {
        "file_name": "car.py",
        "content_above_cursor": "class Car:\n    def __init__(self):\n        self.is_running = False\n        self.speed = 0\n    def increase_speed(self, increment):",
        "content_below_cursor": ""
      },
      "intent": "completion"
    }' \
  --url "https://gitlab.example.com/api/v4/code_suggestions/completions"

レスポンス例:

{
  "id": "id",
  "model": {
    "engine": "vertex-ai",
    "name": "code-gecko"
  },
  "object": "text_completion",
  "created": 1688557841,
  "choices": [
    {
      "text": "\n        if self.is_running:\n            self.speed += increment\n            print(\"The car's speed is now",
      "index": 0,
      "finish_reason": "length"
    }
  ]
}

コード提案が有効になっていることを検証する

このエンドポイントを使用して、次のいずれかを検証することができます:

  • プロジェクトでcode_suggestionsが有効になっている。
  • プロジェクトのグループで、code_suggestionsがそのネームスペースの設定で有効になっている。
POST code_suggestions/enabled

サポートされている属性は以下のとおりです:

属性必須説明
project_path文字列はい検証するプロジェクトのパス。

成功した場合、以下を返します:

  • 機能が有効な場合は200
  • 機能が無効な場合は403

さらに、パスが空であるか、またはプロジェクトが存在しない場合は、404を返します。

リクエスト例:

curl --request POST \
  --url "https://gitlab.example.com/api/v4/code_suggestions/enabled" \
  --header "PRIVATE-TOKEN: <YOUR_ACCESS_TOKEN>" \
  --header "Content-Type: application/json" \
  --data '{
      "project_path": "group/project_name"
    }'

AIゲートウェイへの直接接続詳細をフェッチする

POST /code_suggestions/direct_access

このエンドポイントは、ユーザーごとに5分間に10リクエストのレート制限を設けています。

IDEやクライアントがAIゲートウェイにcompletionリクエストを直接送信するために使用できる、ユーザー固有の接続詳細を返します。これには、AIゲートウェイにプロキシする必要があるヘッダーと、必須の認証トークンが含まれます。

リクエスト例:

curl --request POST \
  --header "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \
  --url "https://gitlab.example.com/api/v4/code_suggestions/direct_access"

レスポンス例:

{
  "base_url": "http://0.0.0.0:5052",
  "token": "a valid token",
  "expires_at": 1713343569,
  "headers": {
    "X-Gitlab-Instance-Id": "292c3c7c-c5d5-48ec-b4bf-f00b724ce560",
    "X-Gitlab-Realm": "saas",
    "X-Gitlab-Global-User-Id": "Df0Jhs9xlbetQR8YoZCKDZJflhxO0ZBI8uoRzmpnd1w=",
    "X-Gitlab-Host-Name": "gitlab.example.com"
  }
}

接続詳細をフェッチする

POST /code_suggestions/connection_details

このエンドポイントは、ユーザーごとに1分間に10リクエストのレート制限を設けています。

IDEやクライアントがテレメトリーに使用できる、ユーザー固有の接続詳細を返します。これには、ユーザーが接続しているGitLabインスタンスに関するメタデータが含まれます。

リクエスト例:

curl --request POST \
  --header "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \
  --url "https://gitlab.example.com/api/v4/code_suggestions/connection_details"

レスポンス例:

{
  "instance_id": "292c3c7c-c5d5-48ec-b4bf-f00b724ce560",
  "instance_version": "18.2",
  "realm": "saas",
  "global_user_id": "Df0Jhs9xlbetQR8YoZCKDZJflhxO0ZBI8uoRzmpnd1w=",
  "host_name": "gitlab.example.com",
  "feature_enablement_type": "duo_pro",
  "saas_duo_pro_namespace_ids": "1000000"
}