POST
/
api
/
v1
/
Analytics
カスタム Analytics クエリ
curl --request POST \
  --url https://server.codeium.com/api/v1/Analytics \
  --header 'Content-Type: application/json' \
  --data '{
  "service_key": "<string>",
  "group_name": "<string>",
  "query_requests": [
    {}
  ],
  "data_source": "<string>",
  "selections": [
    {}
  ],
  "filters": [
    {}
  ],
  "aggregations": [
    {}
  ],
  "field": "<string>",
  "name": "<string>",
  "aggregation_function": "<string>",
  "value": "<string>",
  "filter": "<string>"
}'
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {}
        }
      ]
    }
  ]
}

概要

Custom Analytics API は、Autocomplete、Chat、Command のデータに対して、柔軟なクエリ機能を提供します。カスタマイズ可能な selections、フィルタ、集計、並び順を指定できます。

リクエスト

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

クエリリクエストの構造

各クエリリクエストオブジェクトには以下が含まれます:
data_source
string
required
クエリ対象のデータソース。選択肢:
  • QUERY_DATA_SOURCE_USER_DATA - Autocomplete データ
  • QUERY_DATA_SOURCE_CHAT_DATA - Chat データ
  • QUERY_DATA_SOURCE_COMMAND_DATA - Command データ
  • QUERY_DATA_SOURCE_PCW_DATA - Percent Code Written データ
selections
array
required
取得するフィールド selections の配列(Selections セクションを参照)
filters
array
適用するフィルターの配列(Filters セクションを参照)
aggregations
array
グループ化に使用する集計の配列(Aggregations セクションを参照)

Selections

Selections は、取得するフィールドとその集計方法を定義します。
field
string
required
選択するフィールド名(「Available Fields」セクションを参照)
name
string
フィールドのエイリアス。未指定の場合、デフォルトは {aggregation_function}_{field_name}(すべて小文字)です
aggregation_function
string
適用する集計関数:
  • QUERY_AGGREGATION_UNSPECIFIED(デフォルト)
  • QUERY_AGGREGATION_COUNT
  • QUERY_AGGREGATION_SUM
  • QUERY_AGGREGATION_AVG
  • QUERY_AGGREGATION_MAX
  • QUERY_AGGREGATION_MIN

選択例

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

フィルター

フィルターは、特定の条件に合致する要素だけにデータを絞り込みます。
name
string
required
絞り込み対象のフィールド名
value
string
required
比較する値
filter
string
required
フィルターの種類:
  • QUERY_FILTER_EQUAL
  • QUERY_FILTER_NOT_EQUAL
  • QUERY_FILTER_GREATER_THAN
  • QUERY_FILTER_LESS_THAN
  • QUERY_FILTER_GE (以上)
  • QUERY_FILTER_LE (以下)

フィルターの例

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

集計

集計は、指定した条件でデータをグループ化します。
field
string
required
グループ化に使用するフィールド名
name
string
required
集計フィールドの別名(エイリアス)

集約の例

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

使用可能なフィールド

ユーザーデータ

すべてのユーザーデータはユーザーごとに、1時間単位で集計されます。
フィールド名説明有効な集計
api_keyユーザーのAPIキーのハッシュUNSPECIFIED, COUNT
dateAutocompleteのUTC日付UNSPECIFIED, COUNT
date UTC-xタイムゾーンオフセット付きの日付(例: “date UTC-8” はPST)UNSPECIFIED, COUNT
hourAutocompleteのUTC時UNSPECIFIED, COUNT
languageプログラミング言語UNSPECIFIED, COUNT
ide使用しているIDEUNSPECIFIED, COUNT
versionWindsurfのバージョンUNSPECIFIED, COUNT
num_acceptancesAutocompleteの受入回数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一意の(ユーザー、日)組UNSPECIFIED, COUNT
distinct_developer_hours一意の(ユーザー、時)組UNSPECIFIED, COUNT

Chat データ

すべての Chat データはユーザーの質問ではなく、Chat の AI モデルによる応答を表します。
フィールド名説明有効な集計
api_keyユーザー API キーのハッシュUNSPECIFIED, COUNT
model_idChat の AI モデル IDUNSPECIFIED, COUNT
dateチャット応答の UTC 日付UNSPECIFIED, COUNT
date UTC-xタイムゾーンオフセット付き日付UNSPECIFIED, COUNT
ide使用している IDEUNSPECIFIED, COUNT
versionWindsurf のバージョンUNSPECIFIED, COUNT
latest_intent_typeChat のインテント種別(下記の Intent Types を参照)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 のインテント種別

  • CHAT_INTENT_GENERIC - 通常の Chat
  • CHAT_INTENT_FUNCTION_EXPLAIN - 関数の説明用コードレンズ
  • CHAT_INTENT_FUNCTION_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 キーのハッシュUNSPECIFIED, COUNT
dateコマンドの UTC 日付UNSPECIFIED, COUNT
timestampコマンドの UTC タイムスタンプUNSPECIFIED, COUNT
languageプログラミング言語UNSPECIFIED, COUNT
ide使用中の IDEUNSPECIFIED, COUNT
versionWindsurf のバージョンUNSPECIFIED, COUNT
command_sourceCommand のトリガー元(下記の Command Sources を参照)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選択行数(生成時は 0)SUM, MAX, MIN, AVG
selection_bytes選択バイト数(生成時は 0)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 データ

Autocomplete と 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_autocompleteAutocomplete による Codeium のバイト数UNSPECIFIED
codeium_bytes_by_commandCommand による Codeium のバイト数UNSPECIFIED

PCW フィルター

フィールド名説明
languageプログラミング言語KOTLIN, GO, JAVA
ide使用している IDEjetbrains, vscode
versionWindsurf のバージョン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": "hour",
          "filter": "QUERY_FILTER_GE",
          "value": "2024-01-01"
        },
        {
          "name": "hour",
          "filter": "QUERY_FILTER_LE",
          "value": "2024-02-01"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Chat データ例

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"
        }
      ],
      "集計": [
        {
          "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
各クエリリクエストに対応するクエリ結果の配列
responseItems
array
結果項目の配列
item
object
選択されたフィールドとその値を含むオブジェクト

返答例

ユーザーデータの応答

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

Chat データ応答

{
  "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_*” パターンのフィールドは集計に使用できません
  • フィールドのエイリアスは、すべての selections および 集計 の中で一意でなければなりません
  • 集計関数が指定されていない場合、デフォルトは UNSPECIFIED です