Analytics API personalizat oferă capabilități flexibile de interogare pentru datele Autocomplete, Chat și Command, cu selections, filtre, agregations și ordonări personalizabile.
Cheia ta de serviciu cu permisiuni „Analytics Read”
Filtrează rezultatele la utilizatorii dintr-un anumit grup (opțional)
Array de obiecte de solicitare a interogării care definesc datele de extras
Structura cererii de interogare
Fiecare obiect de cerere de interogare conține:
Sursa de date pentru interogare. Opțiuni:
QUERY_DATA_SOURCE_USER_DATA - date Autocomplete
QUERY_DATA_SOURCE_CHAT_DATA - date Chat
QUERY_DATA_SOURCE_COMMAND_DATA - date Command
QUERY_DATA_SOURCE_PCW_DATA - date Percent Code Written
Array de selecții de câmp de returnat (vezi secțiunea Selections)
Array de filtre de aplicat (vezi secțiunea Filters)
Array de agregări pentru grupare (vezi secțiunea Aggregations)
Selections definesc ce câmpuri să fie preluate și cum să fie agregate.
Numele câmpului de selectat (vezi secțiunea Available Fields)
Alias pentru câmp. Dacă nu este specificat, valoarea implicită este {aggregation_function}_{field_name} (cu litere mici)
Funcția de agregare de aplicat:
QUERY_AGGREGATION_UNSPECIFIED (implicit)
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"
}
Filtrele restrâng datele la elementele care îndeplinesc anumite criterii.
Numele câmpului după care se filtrează
Valoarea cu care se compară
Operațiunea de filtrare:
QUERY_FILTER_EQUAL
QUERY_FILTER_NOT_EQUAL
QUERY_FILTER_GREATER_THAN
QUERY_FILTER_LESS_THAN
QUERY_FILTER_GE (mai mare sau egal)
QUERY_FILTER_LE (mai mic sau egal)
{
"name": "language",
"filter": "QUERY_FILTER_EQUAL",
"value": "PYTHON"
}
Aggregations grupează datele după criteriile specificate.
Numele câmpului după care se face gruparea
Alias pentru câmpul de agregare
{
"field": "ide",
"name": "tip_ide"
}
Toate datele despre utilizator sunt agregate per utilizator, pe oră.
| Nume câmp | Descriere | Agregări valide |
|---|
api_key | Hash-ul cheii API a utilizatorului | NESPECIFICAT, COUNT |
date | Data UTC a completării automate | NESPECIFICAT, COUNT |
date UTC-x | Dată cu decalaj de fus orar (de ex., „date UTC-8” pentru PST) | NESPECIFICAT, COUNT |
hour | Ora UTC a completării automate | NESPECIFICAT, COUNT |
language | Limbaj de programare | NESPECIFICAT, COUNT |
ide | IDE utilizat | NESPECIFICAT, COUNT |
version | Versiunea Windsurf | NESPECIFICAT, COUNT |
num_acceptances | Număr de acceptări Autocomplete | SUM, MAX, MIN, AVG |
num_lines_accepted | Linii de cod acceptate | SUM, MAX, MIN, AVG |
num_bytes_accepted | Octeți acceptați | SUM, MAX, MIN, AVG |
distinct_users | Utilizatori unici | NESPECIFICAT, COUNT |
distinct_developer_days | Perechi distincte (utilizator, zi) | NESPECIFICAT, COUNT |
distinct_developer_hours | Perechi distincte (utilizator, oră) | NESPECIFICAT, COUNT |
Datele Chat sunt separate de datele Cascade și reflectă utilizarea pluginurilor noastre vechi, non‑agentice
Toate datele Chat reprezintă răspunsuri ale modelului AI din chat, nu întrebările utilizatorilor.
| Field Name | Description | Valid Aggregations |
|---|
api_key | Hash al cheii API a utilizatorului | UNSPECIFIED, COUNT |
model_id | ID-ul modelului Chat | UNSPECIFIED, COUNT |
date | Data UTC a răspunsului din chat | UNSPECIFIED, COUNT |
date UTC-x | Dată cu decalaj de fus orar | UNSPECIFIED, COUNT |
ide | IDE utilizat | UNSPECIFIED, COUNT |
version | Versiunea Windsurf | UNSPECIFIED, COUNT |
latest_intent_type | Tipul intenției din Chat (vedeți Tipuri de intenții mai jos) | UNSPECIFIED, COUNT |
num_chats_received | Numărul de mesaje de chat primite | SUM, MAX, MIN, AVG |
chat_accepted | Dacă chatul a fost acceptat (thumbs up) | SUM, COUNT |
chat_inserted_at_cursor | Dacă a fost apăsat butonul „Insert” | SUM, COUNT |
chat_applied | Dacă a fost apăsat butonul „Apply Diff” | SUM, COUNT |
chat_loc_used | Linii de cod utilizate din chat | SUM, MAX, MIN, AVG |
CHAT_INTENT_GENERIC - Chat obișnuit
CHAT_INTENT_FUNCTION_EXPLAIN - Code Lens pentru explicarea funcției
CHAT_INTENT_FUNCTION_DOCSTRING - Code Lens pentru docstringul funcției
CHAT_INTENT_FUNCTION_REFACTOR - Code Lens pentru refactorizarea funcției
CHAT_INTENT_CODE_BLOCK_EXPLAIN - Code Lens pentru explicarea blocului de cod
CHAT_INTENT_CODE_BLOCK_REFACTOR - Code Lens pentru refactorizarea blocului de cod
CHAT_INTENT_PROBLEM_EXPLAIN - Code Lens pentru explicarea problemei
CHAT_INTENT_FUNCTION_UNIT_TESTS - Code Lens pentru testele unitare ale funcției
Datele despre Command includ toate comenzile, inclusiv pe cele respinse. Folosiți câmpul accepted pentru a filtra doar comenzile acceptate.
| Numele câmpului | Descriere | Agregări valide |
|---|
api_key | Hash-ul cheii API a utilizatorului | UNSPECIFIED, COUNT |
date | Data UTC a comenzii | UNSPECIFIED, COUNT |
timestamp | Marcajul temporal (UTC) al comenzii | UNSPECIFIED, COUNT |
language | Limbaj de programare | UNSPECIFIED, COUNT |
ide | IDE utilizat | UNSPECIFIED, COUNT |
version | Versiunea Windsurf | UNSPECIFIED, COUNT |
command_source | Sursa declanșării Command (vedeți Command Sources mai jos) | UNSPECIFIED, COUNT |
provider_source | Mod de generare sau editare | UNSPECIFIED, COUNT |
lines_added | Linii de cod adăugate | SUM, MAX, MIN, AVG |
lines_removed | Linii de cod eliminate | SUM, MAX, MIN, AVG |
bytes_added | Octeți adăugați | SUM, MAX, MIN, AVG |
bytes_removed | Octeți eliminați | SUM, MAX, MIN, AVG |
selection_lines | Linii selectate (zero pentru generări) | SUM, MAX, MIN, AVG |
selection_bytes | Octeți selectați (zero pentru generări) | SUM, MAX, MIN, AVG |
accepted | Dacă a fost acceptată comanda | SUM, COUNT |
COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS
COMMAND_REQUEST_SOURCE_DEFAULT - Utilizare tipică a Command
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 - Modul de generare
PROVIDER_SOURCE_COMMAND_EDIT - Modul de editare
Date despre Percent Code Written, cu urmărire separată pentru contribuțiile din Autocomplete și Command.
| Numele câmpului | Descriere | Agregări valide |
|---|
percent_code_written | Calculat ca codeium_bytes / (codeium_bytes + user_bytes) | UNSPECIFIED |
codeium_bytes | Totalul de bytes generați de Codeium | UNSPECIFIED |
user_bytes | Totalul de bytes scriși de utilizator | UNSPECIFIED |
total_bytes | codeium_bytes + user_bytes | UNSPECIFIED |
codeium_bytes_by_autocomplete | Bytes Codeium din Autocomplete | UNSPECIFIED |
codeium_bytes_by_command | Bytes Codeium din Command | UNSPECIFIED |
| Numele câmpului | Descriere | Exemple |
|---|
language | Limbaj de programare | KOTLIN, GO, JAVA |
ide | IDE utilizat | jetbrains, vscode |
version | Versiunea Windsurf | 1.28.0, 130.0 |
Pentru filtrarea după timp în interogările PCW, folosiți start_timestamp și end_timestamp în corpul principal al solicitării.
Exemplu de date de utilizator
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "cheia_serviciului_dvs_aici",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_USER_DATA",
"selections": [
{
"field": "num_acceptances",
"name": "acceptari_totale",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "num_lines_accepted",
"name": "linii_totale",
"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
Exemplu de date pentru Command
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"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
Tablou de rezultate de interogare, câte unul pentru fiecare cerere de interogareTablou de elemente de rezultatObiect care conține câmpurile selectate și valorile acestora
Răspuns privind datele utilizatorului
{
"queryResults": [
{
"responseItems": [
{
"item": {
"total_acceptances": "125",
"total_lines": "863"
}
}
]
}
]
}
Răspuns de date pentru Chat
{
"queryResults": [
{
"responseItems": [
{
"item": {
"lines_used": "74",
"ide_type": "jetbrains"
}
},
{
"item": {
"lines_used": "41",
"ide_type": "vscode"
}
}
]
}
]
}
Răspuns de date pentru Command
{
"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"
}
}
]
}
]
}
Răspuns de date pentru PCW
{
"queryResults": [
{
"responseItems": [
{
"item": {
"ai_bytes": "6018",
"autocomplete_bytes": "4593",
"command_bytes": "1425",
"pcw": "0.61",
"total": "9900"
}
}
]
}
]
}
- PCW (Percent Code Written) are o variabilitate mare în cadrul aceleiași zile sau pentru același utilizator – agregați pe perioade săptămânale pentru informații mai relevante
- Toate câmpurile selection trebuie să aibă fie funcții de agregare, fie niciunul (nu se pot combina)
- Câmpurile cu modelul „distinct_*” nu pot fi utilizate în aggregations
- Aliasurile câmpurilor trebuie să fie unice în toate selections și aggregations
- Dacă nu este specificată nicio funcție de agregare, valoarea implicită este UNSPECIFIED