Zum Hauptinhalt springen
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": [
        {
          "field": "<string>",
          "name": "<string>",
          "aggregation_function": "<string>"
        }
      ],
      "filters": [
        {
          "name": "<string>",
          "filter": "<string>",
          "value": "<string>"
        }
      ],
      "aggregations": [
        {
          "field": "<string>",
          "name": "<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
erforderlich
Ihr Service Key mit Berechtigungen „Analytics Read“
group_name
string
Ergebnisse auf Benutzer in einer bestimmten Gruppe einschränken (optional)
query_requests
array
erforderlich
Array von Query-Request-Objekten, die die abzurufenden Daten definieren

Struktur der Query-Anfrage

Jedes Query-Request-Objekt enthält:
  • data_source (erforderlich): Abzufragende Datenquelle
  • selections (erforderlich): Array von Feldselections, die abgerufen werden sollen
  • filters (optional): Array von Filtern, die angewendet werden sollen
  • aggregations (optional): Array von Aggregationen zur Gruppierung

Selections

Selections legen fest, welche Felder abgerufen werden und wie sie aggregiert werden.
  • field (erforderlich): Name des auszuwählenden Felds
  • name (optional): Alias für das Feld
  • aggregation_function (optional): Anzuwendende Aggregationsfunktion

Beispielauswahl

{
  "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 (erforderlich): Feldname, nach dem gefiltert werden soll
  • filter (erforderlich): Filteroperation
  • value (erforderlich): Wert, mit dem verglichen werden soll

Beispiel für einen Filter

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

Aggregations

Aggregationen fassen Daten anhand angegebener Kriterien zusammen.
  • field (erforderlich): Feldname, nach dem gruppiert werden soll
  • name (erforderlich): 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": "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

Beispiel für Chat-Daten

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

Beispiel für Command-Daten

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

Antwort

queryResults
array
Array mit Abfrageergebnissen, eines für jede Abfrage
responseItems
array
Array mit Ergebniseinträgen
item
object
Objekt, das die ausgewählten Felder und ihre Werte enthält

Beispielantworten

Antwort mit Benutzerdaten

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

Antwort mit Chatdaten

{
  "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 aussagekräftigere Erkenntnisse über mehrere Wochen aggregieren
  • Alle Auswahlfelder müssen entweder Aggregationsfunktionen haben oder keines darf eine haben (Mischformen sind nicht zulässig)
  • 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, wird standardmäßig UNSPECIFIED verwendet