メインコンテンツへスキップ
POST
/
api
/
v1
/
Analytics
カスタム分析クエリ
curl --request POST \
  --url https://server.codeium.com/api/v1/Analytics \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "service_key": "<string>",
  "group_name": "<string>",
  "query_requests": [
    {
      "data_source": "<string>",
      "selections": [
        {
          "field": "<string>",
          "name": "<string>",
          "aggregation_function": "<string>"
        }
      ],
      "filters": [
        {
          "name": "<string>",
          "filter": "<string>",
          "value": "<string>"
        }
      ],
      "aggregations": [
        {
          "field": "<string>",
          "name": "<string>"
        }
      ]
    }
  ]
}
'
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {}
        }
      ]
    }
  ]
}

Documentation Index

Fetch the complete documentation index at: https://docs.devin.ai/llms.txt

Use this file to discover all available pages before exploring further.

概要

Custom Analytics API では、オートコンプリート、チャット、Command のデータに対して、選択項目、フィルター、集計、並べ替えを柔軟にカスタマイズしてクエリできます。

リクエスト

service_key
string
必須
“Analytics Read” 権限を持つサービスキー
group_name
string
結果を特定のグループ内のユーザーに絞り込むための条件です (任意)
query_requests
array
必須
取得するデータを定義するクエリリクエストオブジェクトの配列

クエリリクエストの構造

各クエリリクエストオブジェクトには、次のものが含まれます:
  • data_source (必須) : クエリ対象のデータソース
  • selections (必須) : 取得するフィールド選択の配列
  • filters (任意) : 適用するフィルターの配列
  • aggregations (任意) : グループ化に使用する集計の配列

Selections

Selections では、取得するフィールドとその集計方法を定義します。
  • field (必須) : 選択するフィールドの名前
  • name (任意) : フィールドのエイリアス
  • aggregation_function (任意) : 適用する集計関数

選択例

{
  "field": "num_acceptances",
  "name": "total_acceptances",
  "aggregation_function": "QUERY_AGGREGATION_SUM"
}

フィルター

フィルターを使用すると、特定の条件に一致する要素だけにデータを絞り込めます。
  • name (必須) : フィルター対象のフィールド名
  • filter (必須) : フィルター操作
  • value (必須) : 比較対象の値

フィルターの使用例

{
  "name": "language",
  "filter": "QUERY_FILTER_EQUAL",
  "value": "PYTHON"
}

集計

集計では、指定した条件でデータをグループ化します。
  • field (必須) : グループ化するフィールド名
  • name (必須) : 集計フィールドの別名

集計の例

{
  "field": "ide",
  "name": "ide_type"
}

利用可能なフィールド

ユーザーデータ

すべてのユーザーデータは、ユーザー単位・時間単位で集計されます。
フィールド名説明有効な集計
api_keyユーザーのAPIキーのhashUNSPECIFIED, COUNT
dateオートコンプリートのUTC日付UNSPECIFIED, COUNT
date UTC-xタイムゾーンオフセット付きの日付 (例: PST の場合は “date UTC-8”)UNSPECIFIED, COUNT
hourオートコンプリートのUTC時刻UNSPECIFIED, COUNT
languageプログラミング言語UNSPECIFIED, COUNT
ide使用中のIDEUNSPECIFIED, COUNT
versionDevin DesktopのバージョンUNSPECIFIED, COUNT
num_acceptancesオートコンプリートの受け入れ回数SUM, MAX, MIN, AVG
num_lines_accepted受け入れられたコードの行数SUM, MAX, MIN, AVG
num_bytes_accepted受け入れられたバイト数SUM, MAX, MIN, AVG
distinct_users一意のユーザー数UNSPECIFIED, COUNT
distinct_developer_days一意の (user, day) タプル数UNSPECIFIED, COUNT
distinct_developer_hours一意の (user, hour) タプル数UNSPECIFIED, COUNT

チャットデータ

チャットデータはCascade dataとは別で、レガシーな非エージェント型プラグインの使用量を表します
チャットデータ はすべて、ユーザーの質問ではなく、チャットモデルの応答を表します。
フィールド名説明有効な集計
api_keyユーザーのAPIキーのhashUNSPECIFIED, COUNT
model_idチャットモデルのIDUNSPECIFIED, COUNT
dateチャット応答のUTC日付UNSPECIFIED, COUNT
date UTC-xタイムゾーンオフセット付きの日付UNSPECIFIED, COUNT
ide使用中のIDEUNSPECIFIED, COUNT
versionDevin DesktopのバージョンUNSPECIFIED, COUNT
latest_intent_typeチャットのインテントタイプ (以下のチャットインテントの種類を参照)UNSPECIFIED, COUNT
num_chats_received受信したチャットメッセージ数SUM, MAX, MIN, AVG
chat_acceptedチャットが承認されたかどうか (高評価)SUM, COUNT
chat_inserted_at_cursor「Insert」ボタンがクリックされたかどうかSUM, COUNT
chat_applied「Apply Diff」ボタンがクリックされたかどうかSUM, COUNT
chat_loc_usedチャットから利用されたコード行数SUM, MAX, MIN, AVG

チャットインテントの種類

  • CHAT_INTENT_GENERIC - 通常のチャット
  • CHAT_INTENT_FUNCTION_EXPLAIN - 関数の説明用コードレンズ
  • CHAT_INTENT_FUNCTION_DOCSTRING - 関数のdocstring用コードレンズ
  • CHAT_INTENT_FUNCTION_REFACTOR - 関数のリファクタリング用コードレンズ
  • CHAT_INTENT_CODE_BLOCK_EXPLAIN - コードブロックの説明用コードレンズ
  • CHAT_INTENT_CODE_BLOCK_REFACTOR - コードブロックのリファクタリング用コードレンズ
  • CHAT_INTENT_PROBLEM_EXPLAIN - 問題の説明用コードレンズ
  • CHAT_INTENT_FUNCTION_UNIT_TESTS - 関数の単体テスト用コードレンズ

Command データ

Command データには、却下されたものを含むすべてのコマンドが含まれます。受け入れられたコマンドのみに絞り込むには、accepted フィールドを利用してください。
Field NameDescriptionValid Aggregations
api_keyユーザーのAPIキーのhash値UNSPECIFIED, COUNT
dateコマンドのUTC日付UNSPECIFIED, COUNT
timestampコマンドのUTCタイムスタンプUNSPECIFIED, COUNT
languageプログラミング言語UNSPECIFIED, COUNT
ide利用中のIDEUNSPECIFIED, COUNT
versionDevin DesktopのバージョンUNSPECIFIED, COUNT
command_sourceCommand のトリガー元 (以下の「Command の発生元」を参照)UNSPECIFIED, COUNT
provider_source生成または編集のモードUNSPECIFIED, COUNT
lines_added追加されたコード行数SUM, MAX, MIN, AVG
lines_removed削除されたコード行数SUM, MAX, MIN, AVG
bytes_added追加されたバイト数SUM, MAX, MIN, AVG
bytes_removed削除されたバイト数SUM, MAX, MIN, AVG
selection_lines選択された行数 (生成時はゼロ)SUM, MAX, MIN, AVG
selection_bytes選択されたバイト数 (生成時はゼロ)SUM, MAX, MIN, AVG
acceptedコマンドが受け入れられたかどうかSUM, COUNT

Command の発生元

  • COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS
  • COMMAND_REQUEST_SOURCE_DEFAULT - 通常の Command の使用
  • COMMAND_REQUEST_SOURCE_RIGHT_CLICK_REFACTOR
  • COMMAND_REQUEST_SOURCE_FUNCTION_CODE_LENS
  • COMMAND_REQUEST_SOURCE_FOLLOWUP
  • COMMAND_REQUEST_SOURCE_CLASS_CODE_LENS
  • COMMAND_REQUEST_SOURCE_PLAN
  • COMMAND_REQUEST_SOURCE_SELECTION_HINT_CODE_LENS

プロバイダーソース

  • PROVIDER_SOURCE_COMMAND_GENERATE - 生成モード
  • PROVIDER_SOURCE_COMMAND_EDIT - 編集モード

PCW データ

オートコンプリートと Command の寄与を個別に追跡した Percent Code Written データ。
Field NameDescriptionValid Aggregations
percent_code_writtencodeium_bytes / (codeium_bytes + user_bytes) として計算UNSPECIFIED
codeium_bytesCodeium が生成した合計バイト数UNSPECIFIED
user_bytesユーザーが記述した合計バイト数UNSPECIFIED
total_bytescodeium_bytes + user_bytesUNSPECIFIED
codeium_bytes_by_autocompleteオートコンプリートによる Codeium バイト数UNSPECIFIED
codeium_bytes_by_commandCommand による Codeium バイト数UNSPECIFIED

PCWフィルタ

フィールド名説明使用例
languageプログラミング言語KOTLIN, GO, JAVA
ide使用している IDEjetbrains, vscode
versionDevin Desktop のバージョン1.28.0, 130.0
PCW クエリで日付によるフィルタリングを行うには、メインのリクエストボディ内で start_timestampend_timestamp を利用します。

リクエスト例

ユーザーデータの例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_USER_DATA",
      "selections": [
        {
          "field": "num_acceptances",
          "name": "total_acceptances",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "num_lines_accepted",
          "name": "total_lines",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "date",
          "filter": "QUERY_FILTER_GE",
          "value": "2024-01-01"
        },
        {
          "name": "date",
          "filter": "QUERY_FILTER_LE",
          "value": "2024-02-01"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

チャットデータの例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
      "selections": [
        {
          "field": "chat_loc_used",
          "name": "lines_used",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "latest_intent_type",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "CHAT_INTENT_FUNCTION_DOCSTRING"
        }
      ],
      "aggregations": [
        {
          "field": "ide",
          "name": "ide_type"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Command のデータ例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
      "selections": [
        {
          "field": "lines_added",
          "name": "total_lines_added",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "lines_removed",
          "name": "total_lines_removed",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "provider_source",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "PROVIDER_SOURCE_COMMAND_EDIT"
        },
        {
          "name": "accepted",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "true"
        }
      ],
      "aggregations": [
        {
          "field": "language",
          "name": "programming_language"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

PCWデータの例

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "start_timestamp": "2024-01-01T00:00:00Z",
  "end_timestamp": "2024-12-22T00:00:00Z",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_PCW_DATA",
      "selections": [
        {
          "field": "percent_code_written",
          "name": "pcw"
        },
        {
          "field": "codeium_bytes",
          "name": "ai_bytes"
        },
        {
          "field": "total_bytes",
          "name": "total"
        },
        {
          "field": "codeium_bytes_by_autocomplete",
          "name": "autocomplete_bytes"
        },
        {
          "field": "codeium_bytes_by_command",
          "name": "command_bytes"
        }
      ],
      "filters": [
        {
          "filter": "QUERY_FILTER_EQUAL",
          "name": "language",
          "value": "GO"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

レスポンス

queryResults
array
クエリ結果の配列。各クエリリクエストに対応する結果が1つずつ含まれます
responseItems
array
結果アイテムの配列
item
object
選択されたフィールドとその値を含むオブジェクト

レスポンス例

ユーザーデータレスポンス

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "total_acceptances": "125",
            "total_lines": "863"
          }
        }
      ]
    }
  ]
}

チャットデータのレスポンス

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "lines_used": "74",
            "ide_type": "jetbrains"
          }
        },
        {
          "item": {
            "lines_used": "41",
            "ide_type": "vscode"
          }
        }
      ]
    }
  ]
}

Command データレスポンス

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "programming_language": "PYTHON",
            "total_lines_added": "21",
            "total_lines_removed": "5"
          }
        },
        {
          "item": {
            "programming_language": "GO",
            "total_lines_added": "31",
            "total_lines_removed": "27"
          }
        }
      ]
    }
  ]
}

PCW データのレスポンス

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "ai_bytes": "6018",
            "autocomplete_bytes": "4593",
            "command_bytes": "1425",
            "pcw": "0.61",
            "total": "9900"
          }
        }
      ]
    }
  ]
}

重要な注意事項

  • PCW (Percent Code Written) は日単位やユーザー単位ではばらつきが大きいため、より有用な分析結果を得るには週単位で集計してください
  • すべての選択フィールドで集計関数を指定するか、どのフィールドでも指定しないようにする必要があります (混在は不可)
  • “distinct_*” パターンのフィールドは集計に利用できません
  • フィールドエイリアスは、すべての選択項目および集計全体で一意である必要があります
  • 集計関数が指定されていない場合、デフォルト値はUNSPECIFIEDになります