Salt la conținutul principal
POST
/
api
/
v1
/
Analytics
Interogare Analytics personalizată
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": [
    {}
  ],
  "filters": [
    {}
  ],
  "aggregations": [
    {}
  ],
  "field": "<string>",
  "name": "<string>",
  "aggregation_function": "<string>",
  "value": "<string>",
  "filter": "<string>"
}'
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {}
        }
      ]
    }
  ]
}

Prezentare generală

Analytics API personalizat oferă capabilități flexibile de interogare pentru datele Autocomplete, Chat și Command, cu selections personalizabile, filtre, agregations și ordonări.

Cerere

service_key
string
required
Cheia ta de serviciu cu permisiuni „Teams Read-only”
group_name
string
Filtrează rezultatele la utilizatorii dintr-un anumit grup (opțional)
query_requests
array
required
Listă de obiecte de cerere de interogare care definesc datele de extras

Structura cererii de interogare

Fiecare obiect de cerere de interogare conține:
data_source
string
required
Sursa de date de interogat. 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
selections
array
required
Array de selecții de câmp de recuperat (consultați secțiunea Selections)
filters
array
Array de filtre de aplicat (consultați secțiunea Filters)
aggregations
array
Array de agregări pentru grupare (consultați secțiunea Aggregations)

Selections

Selections definesc ce câmpuri să fie preluate și cum să fie agregate.
field
string
required
Numele câmpului de selectat (vezi secțiunea Available Fields)
name
string
Alias pentru câmp. Dacă nu este specificat, valoarea implicită este {aggregation_function}_{field_name} (cu litere mici)
aggregation_function
string
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

Exemplu de selecție

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

Filtre

Filtrele restrâng datele la elementele care îndeplinesc anumite criterii.
name
string
required
Numele câmpului pe care se aplică filtrarea
value
string
required
Valoarea de comparat
filter
string
required
Operația 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)

Exemplu de filtrare

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

Agregations

Agregations grupează datele după criterii specificate.
field
string
required
Numele câmpului după care se grupează
name
string
required
Alias pentru câmpul de agregare

Exemplu de agregare

{
  "field": "ide",
  "name": "tip_ide"
}

Câmpuri disponibile

Date despre utilizator

Toate datele despre utilizator sunt agregate per utilizator, pe oră.
Numele câmpuluiDescriereAgregări valide
api_keyHash-ul cheii API a utilizatoruluiUNSPECIFIED, COUNT
dateData UTC a AutocompleteUNSPECIFIED, COUNT
date UTC-xDată cu decalaj de fus orar (de ex., „date UTC-8” pentru PST)UNSPECIFIED, COUNT
hourOra UTC a AutocompleteUNSPECIFIED, COUNT
languageLimbaj de programareUNSPECIFIED, COUNT
ideIDE utilizatUNSPECIFIED, COUNT
versionVersiunea WindsurfUNSPECIFIED, COUNT
num_acceptancesNumăr de acceptări AutocompleteSUM, MAX, MIN, AVG
num_lines_acceptedLinii de cod acceptateSUM, MAX, MIN, AVG
num_bytes_acceptedOcteți acceptațiSUM, MAX, MIN, AVG
distinct_usersUtilizatori uniciUNSPECIFIED, COUNT
distinct_developer_daysPerechi distincte (utilizator, zi)UNSPECIFIED, COUNT
distinct_developer_hoursPerechi distincte (utilizator, oră)UNSPECIFIED, COUNT

Date Chat

Toate datele Chat reprezintă răspunsuri ale modelului de chat, nu întrebările utilizatorului.
Field NameDescriptionValid Aggregations
api_keyHash-ul cheii API a utilizatoruluiUNSPECIFIED, COUNT
model_idID-ul modelului de ChatUNSPECIFIED, COUNT
dateData UTC a răspunsului de chatUNSPECIFIED, COUNT
date UTC-xDată cu decalaj de fus orarUNSPECIFIED, COUNT
ideIDE utilizatUNSPECIFIED, COUNT
versionVersiunea WindsurfUNSPECIFIED, COUNT
latest_intent_typeTipul intenției din Chat (vezi Tipuri de intenții mai jos)UNSPECIFIED, COUNT
num_chats_receivedNumărul de mesaje de chat primiteSUM, MAX, MIN, AVG
chat_acceptedDacă chatul a fost acceptat (thumbs up)SUM, COUNT
chat_inserted_at_cursorDacă s-a făcut clic pe butonul „Insert”SUM, COUNT
chat_appliedDacă s-a făcut clic pe butonul „Apply Diff”SUM, COUNT
chat_loc_usedLinii de cod utilizate din chatSUM, MAX, MIN, AVG

Tipuri de intenție Chat

  • CHAT_INTENT_GENERIC - Chat obișnuit
  • CHAT_INTENT_FUNCTION_EXPLAIN - CodeLens pentru explicarea funcției
  • CHAT_INTENT_FUNCTION_DOCSTRING - CodeLens pentru docstringul funcției
  • CHAT_INTENT_FUNCTION_REFACTOR - CodeLens pentru refactorizarea funcției
  • CHAT_INTENT_CODE_BLOCK_EXPLAIN - CodeLens pentru explicarea blocului de cod
  • CHAT_INTENT_CODE_BLOCK_REFACTOR - CodeLens pentru refactorizarea blocului de cod
  • CHAT_INTENT_PROBLEM_EXPLAIN - CodeLens pentru explicarea problemei
  • CHAT_INTENT_FUNCTION_UNIT_TESTS - CodeLens pentru testele unitare ale funcției

Date Command

Datele Command includ toate comenzile, inclusiv pe cele respinse. Folosiți câmpul accepted pentru a filtra doar comenzile acceptate.
Numele câmpuluiDescriereAgregări valide
api_keyHash-ul cheii API a utilizatoruluiUNSPECIFIED, COUNT
dateData UTC a comenziiUNSPECIFIED, COUNT
timestampMarcajul temporal UTC al comenziiUNSPECIFIED, COUNT
languageLimbaj de programareUNSPECIFIED, COUNT
ideIDE utilizatUNSPECIFIED, COUNT
versionVersiunea WindsurfUNSPECIFIED, COUNT
command_sourceSursa declanșării Command (vedeți Command Sources mai jos)UNSPECIFIED, COUNT
provider_sourceMod de generare sau editareUNSPECIFIED, COUNT
lines_addedLinii de cod adăugateSUM, MAX, MIN, AVG
lines_removedLinii de cod eliminateSUM, MAX, MIN, AVG
bytes_addedBytes adăugațiSUM, MAX, MIN, AVG
bytes_removedBytes eliminațiSUM, MAX, MIN, AVG
selection_linesLinii selectate (zero pentru generări)SUM, MAX, MIN, AVG
selection_bytesBytes selectați (zero pentru generări)SUM, MAX, MIN, AVG
acceptedDacă a fost acceptată comandaSUM, COUNT

Surse Command

  • 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

Surse de furnizor

  • PROVIDER_SOURCE_COMMAND_GENERATE - Mod generare
  • PROVIDER_SOURCE_COMMAND_EDIT - Mod editare

Date PCW

Date despre procentul de cod scris (Percent Code Written), cu urmărire separată pentru contribuțiile din Autocomplete și Command.
Field NameDescriptionValid Aggregations
percent_code_writtenCalculat ca codeium_bytes / (codeium_bytes + user_bytes)UNSPECIFIED
codeium_bytesTotalul de bytes generați de CodeiumUNSPECIFIED
user_bytesTotalul de bytes scriși de utilizatorUNSPECIFIED
total_bytescodeium_bytes + user_bytesUNSPECIFIED
codeium_bytes_by_autocompleteBytes Codeium din AutocompleteUNSPECIFIED
codeium_bytes_by_commandBytes Codeium din CommandUNSPECIFIED

Filtre PCW

Denumire câmpDescriereExemple
languageLimbaj de programareKOTLIN, GO, JAVA
ideIDE utilizatjetbrains, vscode
versionVersiune Windsurf1.28.0, 130.0
Pentru filtrarea după dată în interogările PCW, utilizați start_timestamp și end_timestamp în corpul principal al cererii.

Exemple de solicitări

Exemplu de date de utilizator

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "cheia_ta_de_serviciu_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

Exemplu de date Chat

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "cheia_ta_de_serviciu_aici",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
      "selections": [
        {
          "field": "chat_loc_used",
          "name": "linii_folosite",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "tip_ultima_intentie",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "CHAT_INTENT_FUNCTION_DOCSTRING"
        }
      ],
      "aggregations": [
        {
          "field": "ide",
          "name": "tip_ide"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Exemplu de date pentru Command

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "cheia_ta_de_serviciu_aici",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
      "selections": [
        {
          "field": "lines_added",
          "name": "total_linii_adaugate",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "lines_removed",
          "name": "total_linii_eliminate",
          "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": "limbaj_programare"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Exemplu de date PCW

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "cheia_ta_de_serviciu_aici",
  "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

Răspuns

queryResults
array
Listă de rezultate ale interogării, câte unul pentru fiecare cerere de interogare
responseItems
array
Listă de elemente de rezultat
item
object
Obiect care conține câmpurile selectate și valorile acestora

Exemple de răspuns

Răspuns pentru datele utilizatorilor

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

Răspuns de date 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 PCW

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "ai_bytes": "6018",
            "autocomplete_bytes": "4593",
            "command_bytes": "1425",
            "pcw": "0.61",
            "total": "9900"
          }
        }
      ]
    }
  ]
}

Note importante

  • PCW (Percent Code Written) poate varia semnificativ în cadrul aceleiași zile sau pentru același utilizator — agregați pe perioade de câteva săptămâni pentru informații mai bune
  • Toate câmpurile de selecție trebuie fie să aibă funcții de agregare, fie niciunul (nu se pot combina)
  • Câmpurile cu modelul „distinct_*” nu pot fi folosite în agregations
  • Aliasurile câmpurilor trebuie să fie unice în toate selections și aggregations
  • Dacă nu este specificată o funcție de agregare, valoarea implicită este UNSPECIFIED
I