Salt la conținutul principal
POST
/
api
/
v1
/
Analytics
Interogare personalizată în Analytics
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, filtre, agregations și ordonări personalizabile.

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
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:
data_source
string
required
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
selections
array
required
Array de selecții de câmp de returnat (vezi secțiunea Selections)
filters
array
Array de filtre de aplicat (vezi secțiunea Filters)
aggregations
array
Array de agregări pentru grupare (vezi 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 după care se filtrează
value
string
required
Valoarea de comparat
filter
string
required
Operațiune de filtrare:
  • QUERY_FILTER_EQUAL
  • QUERY_FILTER_NOT_EQUAL
  • QUERY_FILTER_GREATER_THAN
  • QUERY_FILTER_LESS_THAN
  • QUERY_FILTER_GE (mai mare sau egal cu)
  • QUERY_FILTER_LE (mai mic sau egal cu)

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ă.
Nume câmpDescriereAgregări valide
api_keyHash-ul cheii API a utilizatoruluiNESPECIFICAT, COUNT
dateData UTC a completării automateNESPECIFICAT, COUNT
date UTC-xDată cu decalaj de fus orar (de ex., „date UTC-8” pentru PST)NESPECIFICAT, COUNT
hourOra UTC a completării automateNESPECIFICAT, COUNT
languageLimbaj de programareNESPECIFICAT, COUNT
ideIDE utilizatNESPECIFICAT, COUNT
versionVersiunea WindsurfNESPECIFICAT, 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 uniciNESPECIFICAT, COUNT
distinct_developer_daysPerechi distincte (utilizator, zi)NESPECIFICAT, COUNT
distinct_developer_hoursPerechi distincte (utilizator, oră)NESPECIFICAT, COUNT

Date de Chat

Toate datele de Chat reprezintă răspunsuri ale modelului de inteligență artificială din chat, nu întrebări ale utilizatorilor.
Field NameDescriptionValid Aggregations
api_keyHash-ul cheii API a utilizatoruluiUNSPECIFIED, COUNT
model_idID-ul modelului de ChatUNSPECIFIED, COUNT
dateData UTC a răspunsului din chatUNSPECIFIED, COUNT
date UTC-xData 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 (apreciere cu thumbs up)SUM, COUNT
chat_inserted_at_cursorDacă a fost apăsat butonul „Insert”SUM, COUNT
chat_appliedDacă a fost apăsat butonul „Apply Diff”SUM, COUNT
chat_loc_usedLinii de cod folosite din chatSUM, MAX, MIN, AVG

Tipuri de intent Chat

  • 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

Date despre Command

Datele despre 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_addedOcteți adăugațiSUM, MAX, MIN, AVG
bytes_removedOcteți eliminațiSUM, MAX, MIN, AVG
selection_linesLinii selectate (zero pentru generări)SUM, MAX, MIN, AVG
selection_bytesOcteți 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 ale furnizorului

  • PROVIDER_SOURCE_COMMAND_GENERATE - Modul de generare
  • PROVIDER_SOURCE_COMMAND_EDIT - Modul de editare

Date PCW

Date despre Percent Code Written, cu urmărire separată pentru contribuțiile din Autocomplete și Command.
Numele câmpuluiDescriereAgregări valide
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

Numele câmpuluiDescriereExemple
languageLimbaj de programareKOTLIN, GO, JAVA
ideIDE utilizatjetbrains, vscode
versionVersiunea Windsurf1.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.

Exemple de solicitări

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

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_utilizate",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "tipul_ultimei_intentii",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "CHAT_INTENT_FUNCTION_DOCSTRING"
        }
      ],
      "aggregations": [
        {
          "field": "ide",
          "name": "tipul_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"
        }
      ],
      "agregations": [
        {
          "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
Array de rezultate ale interogării, câte unul pentru fiecare cerere de interogare
responseItems
array
Array de elemente de rezultat
item
object
Obiect care conține câmpurile selectate și valorile acestora

Exemple de răspuns

Răspuns privind datele utilizatorului

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

Răspunsul datelor Chat

{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {
            "lines_used": "74",
            "ide_type": "jetbrains"
          }
        },
        {
          "item": {
            "lines_used": "41",
            "ide_type": "vscode"
          }
        }
      ]
    }
  ]
}

Răspunsul 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ăspunsul 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 avea o variație mare în aceeași zi sau pentru același utilizator – agregați la nivel săptămânal 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ă nicio funcție de agregare, valoarea implicită este UNSPECIFIED
I