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": {}
        }
      ]
    }
  ]
}

Überblick

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 einer bestimmten Gruppe filtern (optional)
query_requests
array
required
Array von Abfrageanforderungsobjekten, die die abzurufenden Daten definieren

Struktur der Query-Anfrage

Jedes Query-Anfrageobjekt 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 Feldes (siehe Abschnitt Available Fields)
name
string
Alias für das Feld. Wenn nicht angegeben, lautet der Standardwert {aggregation_function}_{field_name} (in Kleinbuchstaben)
aggregation_function
string
Anzuwendende Aggregationsfunktion:
  • QUERY_AGGREGATION_UNSPECIFIED (Standard)
  • QUERY_AGGREGATION_COUNT
  • QUERY_AGGREGATION_SUM
  • QUERY_AGGREGATION_AVG
  • QUERY_AGGREGATION_MAX
  • QUERY_AGGREGATION_MIN

Beispiel zur Auswahl

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

Filter

Filter schränken Daten auf Elemente ein, 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 als oder gleich)
  • QUERY_FILTER_LE (kleiner als oder gleich)

Beispiel für Filter

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

Aggregations

Aggregations fassen Daten anhand angegebener Kriterien zusammen.
field
string
required
Feldname, nach dem gruppiert werden soll
name
string
required
Alias für das Aggregationsfeld

Beispiel für Aggregation

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

Verfügbare Felder

Nutzerdaten

Alle Nutzerdaten werden pro Nutzer und pro Stunde aggregiert.
FeldnameBeschreibungGültige Aggregationen
api_keyHash des Benutzer-API-SchlüsselsUNSPECIFIED, COUNT
dateUTC-Datum der Autocomplete-VorgängeUNSPECIFIED, COUNT
date UTC-xDatum mit Zeitzonenversatz (z. B. „date UTC-8“ für PST)UNSPECIFIED, COUNT
hourUTC-Stunde der Autocomplete-VorgängeUNSPECIFIED, COUNT
languageProgrammierspracheUNSPECIFIED, COUNT
ideVerwendete IDEUNSPECIFIED, COUNT
versionWindsurf-VersionUNSPECIFIED, COUNT
num_acceptancesAnzahl der Autocomplete-AnnahmenSUM, MAX, MIN, AVG
num_lines_acceptedAngenommene CodezeilenSUM, MAX, MIN, AVG
num_bytes_acceptedAngenommene BytesSUM, MAX, MIN, AVG
distinct_usersEindeutige NutzerUNSPECIFIED, COUNT
distinct_developer_daysEindeutige (Nutzer, Tag)-TupelUNSPECIFIED, COUNT
distinct_developer_hoursEindeutige (Nutzer, Stunde)-TupelUNSPECIFIED, COUNT

Chat-Daten

Alle Chat-Daten beziehen sich auf Antworten des Chat-AI-Modells, nicht auf Nutzerfragen.
Field NameDescriptionValid Aggregations
api_keyHash des Nutzer-API-SchlüsselsUNSPECIFIED, COUNT
model_idChat-AI-Modell-IDUNSPECIFIED, COUNT
dateUTC-Datum der Chat-AntwortUNSPECIFIED, COUNT
date UTC-xDatum mit ZeitzonenversatzUNSPECIFIED, COUNT
ideVerwendete 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 - Normales Chat
  • CHAT_INTENT_FUNCTION_EXPLAIN - CodeLens zur Erklärung einer Funktion
  • CHAT_INTENT_FUNCTION_DOCSTRING - CodeLens für den Docstring einer Funktion
  • CHAT_INTENT_FUNCTION_REFACTOR - CodeLens zum Refactoring einer Funktion
  • CHAT_INTENT_CODE_BLOCK_EXPLAIN - CodeLens zur Erklärung eines Codeblocks
  • CHAT_INTENT_CODE_BLOCK_REFACTOR - CodeLens zum Refactoring eines Codeblocks
  • CHAT_INTENT_PROBLEM_EXPLAIN - CodeLens zur Erklärung eines Problems
  • CHAT_INTENT_FUNCTION_UNIT_TESTS - CodeLens für Unit-Tests einer Funktion

Command-Daten

Command-Daten umfassen alle Commands, einschließlich abgelehnter. Verwenden Sie das Feld accepted, um nur nach akzeptierten Commands zu filtern.
FeldnameBeschreibungGültige Aggregationen
api_keyHash des API-Schlüssels des NutzersUNSPECIFIED, COUNT
dateUTC-Datum des CommandsUNSPECIFIED, COUNT
timestampUTC-Zeitstempel des CommandsUNSPECIFIED, COUNT
languageProgrammierspracheUNSPECIFIED, COUNT
ideVerwendetes IDEUNSPECIFIED, COUNT
versionWindsurf-VersionUNSPECIFIED, COUNT
command_sourceAuslöserquelle des Commands (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 Command 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

Providerquellen

  • PROVIDER_SOURCE_COMMAND_GENERATE - Generierungsmodus
  • PROVIDER_SOURCE_COMMAND_EDIT - Bearbeitungsmodus

PCW-Daten

Prozentsatz des geschriebenen Codes mit getrennter Erfassung der Beiträge von Autocomplete und Command.
FeldnameBeschreibungGültige Aggregationen
percent_code_writtenBerechnet als codeium_bytes / (codeium_bytes + user_bytes)UNSPECIFIED
codeium_bytesGesamtanzahl der von Codeium generierten BytesUNSPECIFIED
user_bytesGesamtanzahl der vom Benutzer geschriebenen BytesUNSPECIFIED
total_bytescodeium_bytes + user_bytesUNSPECIFIED
codeium_bytes_by_autocompleteVon Autocomplete stammende Codeium-BytesUNSPECIFIED
codeium_bytes_by_commandVon Command stammende Codeium-BytesUNSPECIFIED

PCW-Filter

FeldnameBeschreibungBeispiele
languageProgrammierspracheKOTLIN, GO, JAVA
ideVerwendete IDEjetbrains, vscode
versionWindsurf-Version1.28.0, 130.0
Für die Datumsfilterung in PCW-Abfragen verwende die Parameter start_timestamp und end_timestamp im Hauptteil 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

Beispiel für PCW-Daten

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 mit Abfrageergebnissen, jeweils eines pro Abfrage
responseItems
array
Array mit Ergebniseinträgen
item
object
Objekt mit den ausgewählten Feldern und ihren 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-Datenrückgabe

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

Wichtige Hinweise

  • PCW (Percent Code Written) weist innerhalb einzelner Tage oder Nutzer eine hohe Varianz auf – für bessere Einblicke über Wochen aggregieren
  • Alle Auswahlfelder müssen entweder Aggregationsfunktionen haben oder keine (keine Mischung möglich)
  • Felder mit dem Muster “distinct_*” können nicht in aggregations verwendet werden
  • Feldaliase müssen über alle selections und aggregations hinweg eindeutig sein
  • Wenn keine Aggregationsfunktion angegeben ist, lautet der Standardwert UNSPECIFIED