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 der Berechtigung “Analytics 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 schränken Daten auf Elemente ein, die bestimmte Kriterien erfüllen.
Feldname, nach dem gefiltert werden soll
Wert, mit dem verglichen werden soll
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 einen Filter
{
"name": "language",
"filter": "QUERY_FILTER_EQUAL",
"value": "PYTHON"
}
Aggregationen fassen Daten anhand angegebener Kriterien zusammen.
Feldname, nach dem gruppiert werden soll
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": "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
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
Array mit Abfrageergebnissen, eines für jede AbfrageArray mit ErgebniseinträgenObjekt, das die ausgewählten Felder und ihre Werte enthält
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 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