POST
/
api
/
v1
/
Analytics
Benutzerdefinierte Analytics-Abfrage
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": {}
        }
      ]
    }
  ]
}

Übersicht

Die Custom Analytics-API bietet flexible Abfragemöglichkeiten für Autocomplete-, Chat- und Command-Daten mit anpassbaren selections, Filtern, aggregations und Sortierungen.

Anfrage

service_key
string
required
Ihr Service Key mit Berechtigung “Teams Nur-Lesen”
group_name
string
Ergebnisse auf Benutzer in einer bestimmten Gruppe filtern (optional)
query_requests
array
required
Array von Abfrageanforderungsobjekten, die die abzurufenden Daten definieren

Struktur der Query-Anfrage

Jedes Query-Request-Objekt enthält:
data_source
string
required
Abzufragende Datenquelle. Optionen:
  • QUERY_DATA_SOURCE_USER_DATA - Autocomplete-Daten
  • QUERY_DATA_SOURCE_CHAT_DATA - Chat-Daten
  • QUERY_DATA_SOURCE_COMMAND_DATA - Command-Daten
  • QUERY_DATA_SOURCE_PCW_DATA - Percent-Code-Written-Daten
selections
array
required
Array von Feldselections, die abgerufen werden sollen (siehe Abschnitt Selections)
filters
array
Array von Filtern, die angewendet werden sollen (siehe Abschnitt Filters)
aggregations
array
Array von Aggregations zum Gruppieren (siehe Abschnitt Aggregations)

Selections

Selections legen fest, welche Felder abgerufen werden und wie sie aggregiert werden.
field
string
required
Name des auszuwählenden Felds (siehe Abschnitt „Available Fields“)
name
string
Alias für das Feld. Wenn nicht angegeben, lautet der Standardwert {aggregation_function}_{field_name} (kleingeschrieben)
aggregation_function
string
Anzuwendende Aggregationsfunktion:
  • QUERY_AGGREGATION_UNSPECIFIED (Standard)
  • QUERY_AGGREGATION_COUNT
  • QUERY_AGGREGATION_SUM
  • QUERY_AGGREGATION_AVG
  • QUERY_AGGREGATION_MAX
  • QUERY_AGGREGATION_MIN

Beispielauswahl

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

Filter

Filter verengen Daten auf Elemente, die bestimmte Kriterien erfüllen.
name
string
required
Feldname, nach dem gefiltert werden soll
value
string
required
Vergleichswert
filter
string
required
Filteroperation:
  • QUERY_FILTER_EQUAL
  • QUERY_FILTER_NOT_EQUAL
  • QUERY_FILTER_GREATER_THAN
  • QUERY_FILTER_LESS_THAN
  • QUERY_FILTER_GE (größer oder gleich)
  • QUERY_FILTER_LE (kleiner oder gleich)

Beispiel für einen Filter

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

Aggregations

Aggregations gruppieren Daten anhand angegebener Kriterien.
field
string
required
Feldname, nach dem gruppiert wird
name
string
required
Alias für das Aggregationsfeld

Beispiel für Aggregation

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

Verfügbare Felder

Benutzerdaten

Alle Benutzerdaten werden pro Benutzer und pro Stunde aggregiert.
FeldnameBeschreibungGültige Aggregationen
api_keyHash des Benutzer-API-SchlüsselsUNSPECIFIED, COUNT
dateUTC-Datum der Autocomplete-VorschlägeUNSPECIFIED, COUNT
date UTC-xDatum mit Zeitzonenoffset (z. B. „date UTC-8“ für PST)UNSPECIFIED, COUNT
hourUTC-Stunde der Autocomplete-VorschlägeUNSPECIFIED, COUNT
languageProgrammierspracheUNSPECIFIED, COUNT
ideVerwendetes IDEUNSPECIFIED, COUNT
versionWindsurf-VersionUNSPECIFIED, COUNT
num_acceptancesAnzahl der Autocomplete-AnnahmenSUM, MAX, MIN, AVG
num_lines_acceptedAkzeptierte CodezeilenSUM, MAX, MIN, AVG
num_bytes_acceptedAkzeptierte BytesSUM, MAX, MIN, AVG
distinct_usersEindeutige BenutzerUNSPECIFIED, COUNT
distinct_developer_daysEindeutige (Benutzer, Tag)-TupelUNSPECIFIED, COUNT
distinct_developer_hoursEindeutige (Benutzer, Stunde)-TupelUNSPECIFIED, COUNT

Chat-Daten

Alle Chat-Daten beziehen sich auf Antworten des Chat-AI-Modells, nicht auf Benutzerfragen.
Field NameDescriptionValid Aggregations
api_keyHash des Benutzer-API-SchlüsselsUNSPECIFIED, COUNT
model_idChat-AI-Modell-IDUNSPECIFIED, COUNT
dateUTC-Datum der Chat-AntwortUNSPECIFIED, COUNT
date UTC-xDatum mit Zeitzonen-OffsetUNSPECIFIED, COUNT
ideVerwendetes IDEUNSPECIFIED, COUNT
versionWindsurf-VersionUNSPECIFIED, COUNT
latest_intent_typeChat-Intent-Typ (siehe Intent-Typen unten)UNSPECIFIED, COUNT
num_chats_receivedAnzahl empfangener Chat-NachrichtenSUM, MAX, MIN, AVG
chat_acceptedOb der Chat angenommen wurde (Daumen hoch)SUM, COUNT
chat_inserted_at_cursorOb die Schaltfläche „Insert“ geklickt wurdeSUM, COUNT
chat_appliedOb die Schaltfläche „Apply Diff“ geklickt wurdeSUM, COUNT
chat_loc_usedAus dem Chat verwendete CodezeilenSUM, MAX, MIN, AVG

Chat-Intent-Typen

  • CHAT_INTENT_GENERIC - Regulärer Chat
  • CHAT_INTENT_FUNCTION_EXPLAIN - CodeLens: Funktions­erklärung
  • CHAT_INTENT_FUNCTION_DOCSTRING - CodeLens: Funktions-Docstring
  • CHAT_INTENT_FUNCTION_REFACTOR - CodeLens: Funktions-Refactoring
  • CHAT_INTENT_CODE_BLOCK_EXPLAIN - CodeLens: Erklärung des Codeblocks
  • CHAT_INTENT_CODE_BLOCK_REFACTOR - CodeLens: Refactoring des Codeblocks
  • CHAT_INTENT_PROBLEM_EXPLAIN - CodeLens: Problemerklärung
  • CHAT_INTENT_FUNCTION_UNIT_TESTS - CodeLens: Unit-Tests für die Funktion

Command-Daten

Command-Daten umfassen alle Befehle, einschließlich abgelehnter. Verwenden Sie das Feld accepted, um nur akzeptierte Befehle zu filtern.
FeldnameBeschreibungGültige aggregations
api_keyHash des Benutzer-API-SchlüsselsUNSPECIFIED, COUNT
dateUTC-Datum des BefehlsUNSPECIFIED, COUNT
timestampUTC-Zeitstempel des BefehlsUNSPECIFIED, COUNT
languageProgrammierspracheUNSPECIFIED, COUNT
ideVerwendetes IDEUNSPECIFIED, COUNT
versionWindsurf-VersionUNSPECIFIED, COUNT
command_sourceAuslöserquelle von Command (siehe Command Sources unten)UNSPECIFIED, COUNT
provider_sourceGenerierungs- oder BearbeitungsmodusUNSPECIFIED, COUNT
lines_addedHinzugefügte CodezeilenSUM, MAX, MIN, AVG
lines_removedEntfernte CodezeilenSUM, MAX, MIN, AVG
bytes_addedHinzugefügte BytesSUM, MAX, MIN, AVG
bytes_removedEntfernte BytesSUM, MAX, MIN, AVG
selection_linesAusgewählte Zeilen (0 bei Generierungen)SUM, MAX, MIN, AVG
selection_bytesAusgewählte Bytes (0 bei Generierungen)SUM, MAX, MIN, AVG
acceptedOb der Befehl akzeptiert wurdeSUM, COUNT

Command-Quellen

  • COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS
  • COMMAND_REQUEST_SOURCE_DEFAULT - Typische Command-Verwendung
  • 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

Anbieterdatenquellen

  • PROVIDER_SOURCE_COMMAND_GENERATE - Generierungsmodus
  • PROVIDER_SOURCE_COMMAND_EDIT - Bearbeitungsmodus

PCW-Daten

Prozentual geschriebener Code mit separater Erfassung der Beiträge von Autocomplete und Command.
FeldnameBeschreibungGültige Aggregationen
percent_code_writtenBerechnet als codeium_bytes / (codeium_bytes + user_bytes)UNSPECIFIED
codeium_bytesSumme der von Codeium generierten BytesUNSPECIFIED
user_bytesSumme der vom Benutzer geschriebenen BytesUNSPECIFIED
total_bytescodeium_bytes + user_bytesUNSPECIFIED
codeium_bytes_by_autocompleteCodeium-Bytes durch AutocompleteUNSPECIFIED
codeium_bytes_by_commandCodeium-Bytes durch CommandUNSPECIFIED

PCW-Filter

FeldnameBeschreibungBeispiele
languageProgrammierspracheKOTLIN, GO, JAVA
ideVerwendete IDEjetbrains, vscode
versionWindsurf-Version1.28.0, 130.0
Für Datumsfilter in PCW-Abfragen verwenden Sie start_timestamp und end_timestamp im Hauptanforderungstext der Anfrage.

Beispielanfragen

Beispiel für Nutzerdaten

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

Beispiel für Chat-Daten

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "ihr_service_key_hier",
  "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

Beispiel für Command-Daten

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "ihr_service_key_hier",
  "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-Datenbeispiel

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "ihr_service_key_hier",
  "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

Antwort

queryResults
array
Array von Abfrageergebnissen, jeweils eines pro Abfrage
responseItems
array
Array von Ergebnisobjekten
item
object
Objekt mit den ausgewählten Feldern und deren Werten

Beispielantworten

Antwort mit Benutzerdaten

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

Chat-Datenantwort

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

Command-Datenantwort

{
  "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-Datenantwort

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

Wichtige Hinweise

  • PCW (Percent Code Written) weist an einzelnen Tagen oder bei einzelnen Nutzern eine hohe Varianz auf – für bessere Einblicke über Wochen aggregieren
  • Alle Auswahlfelder müssen entweder Aggregationsfunktionen haben oder keine (nicht mischen)
  • Felder mit dem Muster „distinct_*“ können nicht in aggregations verwendet werden
  • Feldaliasnamen müssen über alle selections und aggregations hinweg eindeutig sein
  • Wenn keine Aggregationsfunktion angegeben ist, lautet der Standardwert UNSPECIFIED