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

Überblick

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

Request

service_key
string
erforderlich
Ihr Service Key mit Berechtigung „Analytics Read“
group_name
string
Ergebnisse auf Nutzer in einer bestimmten Gruppe filtern (optional)
query_requests
array
erforderlich
Array von Query-Request-Objekten, die die abzurufenden Daten definieren

Struktur der Query-Anfrage

Jedes Query-Anfrageobjekt 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 Aggregations zum Gruppieren

Selections

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

Beispiel zur Auswahl

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

Filter

Filter schränken Daten auf diejenigen Elemente ein, die bestimmte Kriterien erfüllen.
  • name (erforderlich): Feldname, nach dem gefiltert werden soll
  • filter (erforderlich): Filter-Operation
  • value (erforderlich): Wert, mit dem verglichen werden soll

Beispiel für Filter

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

Aggregations

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

Chat-Daten sind von Cascade-Daten getrennt und erfassen die Nutzung unserer älteren, nicht-agentischen Plugins
Alle Chat-Daten beziehen sich auf Antworten des Chat-AI-Modells, nicht auf Benutzerfragen.
Field NameDescriptionValid Aggregations
api_keyHash des API-Schlüssels des BenutzersUNSPECIFIED, 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 akzeptiert 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 genutzte 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": "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 Chatdaten

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 Ergebniselementen
item
object
Objekt mit den ausgewählten Feldern und deren Werten

Beispielantworten

Antwort mit Benutzerdaten

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

Antwort mit Chat-Daten

{
  "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 innerhalb einzelner Tage oder bei einzelnen Nutzern eine hohe Varianz auf – aggregieren Sie über Wochen, um bessere Einblicke zu erhalten
  • Alle selection-Felder müssen entweder Aggregationsfunktionen haben oder keine (Mischformen sind nicht 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, wird standardmäßig UNSPECIFIED verwendet