Die Custom Analytics-API bietet flexible Abfragemöglichkeiten für Autocomplete-, Chat- und Command-Daten mit anpassbaren selections, Filtern, aggregations und Sortierungen.
Ihr Service Key mit Berechtigung “Teams Nur-Lesen”
Ergebnisse auf Benutzer in einer bestimmten Gruppe filtern (optional)
Array von Abfrageanforderungsobjekten, die die abzurufenden Daten definieren
Struktur der Query-Anfrage
Jedes Query-Request-Objekt enthält:
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
Array von Feldselections, die abgerufen werden sollen (siehe Abschnitt Selections)
Array von Filtern, die angewendet werden sollen (siehe Abschnitt Filters)
Array von Aggregations zum Gruppieren (siehe Abschnitt Aggregations)
Selections legen fest, welche Felder abgerufen werden und wie sie aggregiert werden.
Name des auszuwählenden Felds (siehe Abschnitt „Available Fields“)
Alias für das Feld. Wenn nicht angegeben, lautet der Standardwert {aggregation_function}_{field_name} (kleingeschrieben)
Anzuwendende Aggregationsfunktion:
QUERY_AGGREGATION_UNSPECIFIED (Standard)
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"
}
Filter verengen Daten auf Elemente, die bestimmte Kriterien erfüllen.
Feldname, nach dem gefiltert werden soll
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 gruppieren Daten anhand angegebener Kriterien.
Feldname, nach dem gruppiert wird
Alias für das Aggregationsfeld
{
"field": "ide",
"name": "ide_type"
}
Alle Benutzerdaten werden pro Benutzer und pro Stunde aggregiert.
| Feldname | Beschreibung | Gültige Aggregationen |
|---|
api_key | Hash des Benutzer-API-Schlüssels | UNSPECIFIED, COUNT |
date | UTC-Datum der Autocomplete-Vorschläge | UNSPECIFIED, COUNT |
date UTC-x | Datum mit Zeitzonenoffset (z. B. „date UTC-8“ für PST) | UNSPECIFIED, COUNT |
hour | UTC-Stunde der Autocomplete-Vorschläge | UNSPECIFIED, COUNT |
language | Programmiersprache | UNSPECIFIED, COUNT |
ide | Verwendetes IDE | UNSPECIFIED, COUNT |
version | Windsurf-Version | UNSPECIFIED, COUNT |
num_acceptances | Anzahl der Autocomplete-Annahmen | SUM, MAX, MIN, AVG |
num_lines_accepted | Akzeptierte Codezeilen | SUM, MAX, MIN, AVG |
num_bytes_accepted | Akzeptierte Bytes | SUM, MAX, MIN, AVG |
distinct_users | Eindeutige Benutzer | UNSPECIFIED, COUNT |
distinct_developer_days | Eindeutige (Benutzer, Tag)-Tupel | UNSPECIFIED, COUNT |
distinct_developer_hours | Eindeutige (Benutzer, Stunde)-Tupel | UNSPECIFIED, COUNT |
Alle Chat-Daten beziehen sich auf Antworten des Chat-AI-Modells, nicht auf Benutzerfragen.
| Field Name | Description | Valid Aggregations |
|---|
api_key | Hash des Benutzer-API-Schlüssels | UNSPECIFIED, COUNT |
model_id | Chat-AI-Modell-ID | UNSPECIFIED, COUNT |
date | UTC-Datum der Chat-Antwort | UNSPECIFIED, COUNT |
date UTC-x | Datum mit Zeitzonen-Offset | UNSPECIFIED, COUNT |
ide | Verwendetes IDE | UNSPECIFIED, COUNT |
version | Windsurf-Version | UNSPECIFIED, COUNT |
latest_intent_type | Chat-Intent-Typ (siehe Intent-Typen unten) | UNSPECIFIED, COUNT |
num_chats_received | Anzahl empfangener Chat-Nachrichten | SUM, MAX, MIN, AVG |
chat_accepted | Ob der Chat angenommen wurde (Daumen hoch) | SUM, COUNT |
chat_inserted_at_cursor | Ob die Schaltfläche „Insert“ geklickt wurde | SUM, COUNT |
chat_applied | Ob die Schaltfläche „Apply Diff“ geklickt wurde | SUM, COUNT |
chat_loc_used | Aus dem Chat verwendete Codezeilen | SUM, MAX, MIN, AVG |
CHAT_INTENT_GENERIC - Regulärer Chat
CHAT_INTENT_FUNCTION_EXPLAIN - CodeLens: Funktionserklä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 umfassen alle Befehle, einschließlich abgelehnter. Verwenden Sie das Feld accepted, um nur akzeptierte Befehle zu filtern.
| Feldname | Beschreibung | Gültige aggregations |
|---|
api_key | Hash des Benutzer-API-Schlüssels | UNSPECIFIED, COUNT |
date | UTC-Datum des Befehls | UNSPECIFIED, COUNT |
timestamp | UTC-Zeitstempel des Befehls | UNSPECIFIED, COUNT |
language | Programmiersprache | UNSPECIFIED, COUNT |
ide | Verwendetes IDE | UNSPECIFIED, COUNT |
version | Windsurf-Version | UNSPECIFIED, COUNT |
command_source | Auslöserquelle von Command (siehe Command Sources unten) | UNSPECIFIED, COUNT |
provider_source | Generierungs- oder Bearbeitungsmodus | UNSPECIFIED, COUNT |
lines_added | Hinzugefügte Codezeilen | SUM, MAX, MIN, AVG |
lines_removed | Entfernte Codezeilen | SUM, MAX, MIN, AVG |
bytes_added | Hinzugefügte Bytes | SUM, MAX, MIN, AVG |
bytes_removed | Entfernte Bytes | SUM, MAX, MIN, AVG |
selection_lines | Ausgewählte Zeilen (0 bei Generierungen) | SUM, MAX, MIN, AVG |
selection_bytes | Ausgewählte Bytes (0 bei Generierungen) | SUM, MAX, MIN, AVG |
accepted | Ob der Befehl akzeptiert wurde | SUM, COUNT |
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
PROVIDER_SOURCE_COMMAND_GENERATE - Generierungsmodus
PROVIDER_SOURCE_COMMAND_EDIT - Bearbeitungsmodus
Prozentual geschriebener Code mit separater Erfassung der Beiträge von Autocomplete und Command.
| Feldname | Beschreibung | Gültige Aggregationen |
|---|
percent_code_written | Berechnet als codeium_bytes / (codeium_bytes + user_bytes) | UNSPECIFIED |
codeium_bytes | Summe der von Codeium generierten Bytes | UNSPECIFIED |
user_bytes | Summe der vom Benutzer geschriebenen Bytes | UNSPECIFIED |
total_bytes | codeium_bytes + user_bytes | UNSPECIFIED |
codeium_bytes_by_autocomplete | Codeium-Bytes durch Autocomplete | UNSPECIFIED |
codeium_bytes_by_command | Codeium-Bytes durch Command | UNSPECIFIED |
| Feldname | Beschreibung | Beispiele |
|---|
language | Programmiersprache | KOTLIN, GO, JAVA |
ide | Verwendete IDE | jetbrains, vscode |
version | Windsurf-Version | 1.28.0, 130.0 |
Für Datumsfilter in PCW-Abfragen verwenden Sie start_timestamp und end_timestamp im Hauptanforderungstext der Anfrage.
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
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
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
Array von Abfrageergebnissen, jeweils eines pro AbfrageArray von ErgebnisobjektenObjekt mit den ausgewählten Feldern und deren Werten
Antwort mit Benutzerdaten
{
"queryResults": [
{
"responseItems": [
{
"item": {
"total_acceptances": "125",
"total_lines": "863"
}
}
]
}
]
}
{
"queryResults": [
{
"responseItems": [
{
"item": {
"lines_used": "74",
"ide_type": "jetbrains"
}
},
{
"item": {
"lines_used": "41",
"ide_type": "vscode"
}
}
]
}
]
}
{
"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"
}
}
]
}
]
}
{
"queryResults": [
{
"responseItems": [
{
"item": {
"ai_bytes": "6018",
"autocomplete_bytes": "4593",
"command_bytes": "1425",
"pcw": "0.61",
"total": "9900"
}
}
]
}
]
}
- 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