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>"
}
]
}
]
}
'import requests
url = "https://server.codeium.com/api/v1/Analytics"
payload = {
"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>"
}
]
}
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
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>'}]
}
]
})
};
fetch('https://server.codeium.com/api/v1/Analytics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.codeium.com/api/v1/Analytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'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>'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v1/Analytics"
payload := strings.NewReader("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://server.codeium.com/api/v1/Analytics")
.header("Content-Type", "application/json")
.body("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v1/Analytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"queryResults": [
{
"responseItems": [
{
"item": {}
}
]
}
]
}Analytics-API
Benutzerdefinierte Analytics-Abfrage
Flexible Analytics-Abfrage mit benutzerdefinierten selections, Filtern und aggregations für Autocomplete-, Chat-, Command- und PCW-Daten.
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>"
}
]
}
]
}
'import requests
url = "https://server.codeium.com/api/v1/Analytics"
payload = {
"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>"
}
]
}
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
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>'}]
}
]
})
};
fetch('https://server.codeium.com/api/v1/Analytics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.codeium.com/api/v1/Analytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'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>'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v1/Analytics"
payload := strings.NewReader("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://server.codeium.com/api/v1/Analytics")
.header("Content-Type", "application/json")
.body("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v1/Analytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"queryResults": [
{
"responseItems": [
{
"item": {}
}
]
}
]
}Übersicht
Anfrage
string
erforderlich
Ihr Service Key mit Berechtigungen „Analytics Read“
string
Ergebnisse auf Benutzer in einer bestimmten Gruppe einschränken (optional)
array
erforderlich
Array von Query-Request-Objekten, die die abzurufenden Daten definieren
Anzeigen Query Request Object
Anzeigen Query Request Object
string
erforderlich
Abzufragende Datenquelle. Optionen:
QUERY_DATA_SOURCE_USER_DATA- Autocomplete-DatenQUERY_DATA_SOURCE_CHAT_DATA- Chat-DatenQUERY_DATA_SOURCE_COMMAND_DATA- Command-DatenQUERY_DATA_SOURCE_PCW_DATA- Percent-Code-Written-Daten
array
erforderlich
Array der abzurufenden Feldauswahlen
Anzeigen Selection Object
Anzeigen Selection Object
string
erforderlich
Name des auszuwählenden Felds (siehe Abschnitt „Available Fields“)
string
Alias für das Feld. Wenn nicht angegeben, lautet der Standardwert
{aggregation_function}_{field_name} (kleingeschrieben)string
Anzuwendende Aggregationsfunktion:
QUERY_AGGREGATION_UNSPECIFIED(Standard)QUERY_AGGREGATION_COUNTQUERY_AGGREGATION_SUMQUERY_AGGREGATION_AVGQUERY_AGGREGATION_MAXQUERY_AGGREGATION_MIN
array
Array der anzuwendenden Filter
Anzeigen Filter Object
Anzeigen Filter Object
Struktur der Query-Anfrage
- 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
- 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
- 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
- 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
| 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 |
Chat-Daten
| 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-Typen
CHAT_INTENT_GENERIC- Regulärer ChatCHAT_INTENT_FUNCTION_EXPLAIN- CodeLens: FunktionserklärungCHAT_INTENT_FUNCTION_DOCSTRING- CodeLens: Funktions-DocstringCHAT_INTENT_FUNCTION_REFACTOR- CodeLens: Funktions-RefactoringCHAT_INTENT_CODE_BLOCK_EXPLAIN- CodeLens: Erklärung des CodeblocksCHAT_INTENT_CODE_BLOCK_REFACTOR- CodeLens: Refactoring des CodeblocksCHAT_INTENT_PROBLEM_EXPLAIN- CodeLens: ProblemerklärungCHAT_INTENT_FUNCTION_UNIT_TESTS- CodeLens: Unit-Tests für die Funktion
Command-Daten
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-Quellen
COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENSCOMMAND_REQUEST_SOURCE_DEFAULT- Typische Command-VerwendungCOMMAND_REQUEST_SOURCE_RIGHT_CLICK_REFACTORCOMMAND_REQUEST_SOURCE_FUNCTION_CODE_LENSCOMMAND_REQUEST_SOURCE_FOLLOWUPCOMMAND_REQUEST_SOURCE_CLASS_CODE_LENSCOMMAND_REQUEST_SOURCE_PLANCOMMAND_REQUEST_SOURCE_SELECTION_HINT_CODE_LENS
Anbieterdatenquellen
PROVIDER_SOURCE_COMMAND_GENERATE- GenerierungsmodusPROVIDER_SOURCE_COMMAND_EDIT- Bearbeitungsmodus
PCW-Daten
| 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 |
PCW-Filter
| Feldname | Beschreibung | Beispiele |
|---|---|---|
language | Programmiersprache | KOTLIN, GO, JAVA |
ide | Verwendete IDE | jetbrains, vscode |
version | Windsurf-Version | 1.28.0, 130.0 |
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
array
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