POST
/
api
/
v1
/
Analytics
Requête Analytics personnalisée
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": {}
        }
      ]
    }
  ]
}

Vue d’ensemble

L’Analytics API personnalisée offre des capacités de requête flexibles pour les données Autocomplete, Chat et Command, avec des selections, des filtres, des aggregations et des tris personnalisables.

Requête

service_key
string
required
Votre clé de service avec l’autorisation “Teams Read-only”
group_name
string
Filtrer les résultats pour les utilisateurs d’un groupe spécifique (facultatif)
query_requests
array
required
Tableau d’objets de requête définissant les données à récupérer

Structure de la requête

Chaque objet de requête contient :
data_source
string
required
Source de données à interroger. Options :
  • QUERY_DATA_SOURCE_USER_DATA - Données Autocomplete
  • QUERY_DATA_SOURCE_CHAT_DATA - Données de Chat
  • QUERY_DATA_SOURCE_COMMAND_DATA - Données de Command
  • QUERY_DATA_SOURCE_PCW_DATA - Données Percent Code Written
selections
array
required
Tableau de sélections de champs à récupérer (voir la section Selections)
filters
array
Tableau de filtres à appliquer (voir la section Filters)
aggregations
array
Tableau d’aggregations pour le regroupement (voir la section Aggregations)

Selections

Les selections définissent les champs à récupérer et la façon de les agréger.
field
string
required
Nom du champ à sélectionner (voir la section Available Fields)
name
string
Alias du champ. S’il n’est pas spécifié, la valeur par défaut est {aggregation_function}_{field_name} (en minuscules)
aggregation_function
string
Fonction d’agrégation à appliquer :
  • QUERY_AGGREGATION_UNSPECIFIED (par défaut)
  • QUERY_AGGREGATION_COUNT
  • QUERY_AGGREGATION_SUM
  • QUERY_AGGREGATION_AVG
  • QUERY_AGGREGATION_MAX
  • QUERY_AGGREGATION_MIN

Exemple de sélection

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

Filtres

Les filtres limitent les données aux éléments qui répondent à des critères spécifiques.
name
string
required
Nom du champ à filtrer
value
string
required
Valeur de comparaison
filter
string
required
Opération de filtrage :
  • QUERY_FILTER_EQUAL
  • QUERY_FILTER_NOT_EQUAL
  • QUERY_FILTER_GREATER_THAN
  • QUERY_FILTER_LESS_THAN
  • QUERY_FILTER_GE (supérieur ou égal)
  • QUERY_FILTER_LE (inférieur ou égal)

Exemple de filtre

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

Aggregations

Les aggregations regroupent les données selon des critères spécifiés.
field
string
required
Nom du champ utilisé pour le regroupement
name
string
required
Alias du champ d’aggregation

Exemple d’agrégation

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

Champs disponibles

Données utilisateur

Toutes les données utilisateur sont agrégées par utilisateur et par heure.
Nom du champDescriptionAgrégations valides
api_keyHachage de la clé API de l’utilisateurUNSPECIFIED, COUNT
dateDate UTC de l’AutocompletionUNSPECIFIED, COUNT
date UTC-xDate avec décalage de fuseau horaire (p. ex. « date UTC-8 » pour PST)UNSPECIFIED, COUNT
hourHeure UTC de l’AutocompletionUNSPECIFIED, COUNT
languageLangage de programmationUNSPECIFIED, COUNT
ideIDE utiliséUNSPECIFIED, COUNT
versionVersion de WindsurfUNSPECIFIED, COUNT
num_acceptancesNombre d’acceptations d’AutocompleteSUM, MAX, MIN, AVG
num_lines_acceptedLignes de code acceptéesSUM, MAX, MIN, AVG
num_bytes_acceptedOctets acceptésSUM, MAX, MIN, AVG
distinct_usersUtilisateurs distinctsUNSPECIFIED, COUNT
distinct_developer_daysPaires distinctes (utilisateur, jour)UNSPECIFIED, COUNT
distinct_developer_hoursPaires distinctes (utilisateur, heure)UNSPECIFIED, COUNT

Données de Chat

Toutes les données de Chat correspondent aux réponses du modèle d’IA, et non aux questions des utilisateurs.
Field NameDescriptionValid Aggregations
api_keyHachage de la clé API de l’utilisateurUNSPECIFIED, COUNT
model_idID du modèle de ChatUNSPECIFIED, COUNT
dateDate UTC de la réponse du chatUNSPECIFIED, COUNT
date UTC-xDate avec décalage de fuseau horaireUNSPECIFIED, COUNT
ideIDE utiliséUNSPECIFIED, COUNT
versionVersion de WindsurfUNSPECIFIED, COUNT
latest_intent_typeType d’intention du Chat (voir Types d’intention ci‑dessous)UNSPECIFIED, COUNT
num_chats_receivedNombre de messages de chat reçusSUM, MAX, MIN, AVG
chat_acceptedIndique si le chat a été accepté (pouce levé)SUM, COUNT
chat_inserted_at_cursorIndique si le bouton « Insert » a été cliquéSUM, COUNT
chat_appliedIndique si le bouton « Apply Diff » a été cliquéSUM, COUNT
chat_loc_usedLignes de code utilisées à partir du chatSUM, MAX, MIN, AVG

Types d’intentions de Chat

  • CHAT_INTENT_GENERIC - Chat classique
  • CHAT_INTENT_FUNCTION_EXPLAIN - CodeLens d’explication de fonction
  • CHAT_INTENT_FUNCTION_DOCSTRING - CodeLens de docstring de fonction
  • CHAT_INTENT_FUNCTION_REFACTOR - CodeLens de refactorisation de fonction
  • CHAT_INTENT_CODE_BLOCK_EXPLAIN - CodeLens d’explication de bloc de code
  • CHAT_INTENT_CODE_BLOCK_REFACTOR - CodeLens de refactorisation de bloc de code
  • CHAT_INTENT_PROBLEM_EXPLAIN - CodeLens d’explication de problème
  • CHAT_INTENT_FUNCTION_UNIT_TESTS - CodeLens de tests unitaires de fonction

Données de Command

Les données de Command incluent toutes les commandes, y compris celles refusées. Utilisez le champ accepted pour filtrer uniquement les commandes acceptées.
Nom du champDescriptionAgrégations valides
api_keyHachage de la clé API de l’utilisateurUNSPECIFIED, COUNT
dateDate UTC de la commandeUNSPECIFIED, COUNT
timestampHorodatage UTC de la commandeUNSPECIFIED, COUNT
languageLangage de programmationUNSPECIFIED, COUNT
ideIDE utiliséUNSPECIFIED, COUNT
versionVersion de WindsurfUNSPECIFIED, COUNT
command_sourceSource de déclenchement de Command (voir Command Sources ci-dessous)UNSPECIFIED, COUNT
provider_sourceMode de génération ou d’éditionUNSPECIFIED, COUNT
lines_addedLignes de code ajoutéesSUM, MAX, MIN, AVG
lines_removedLignes de code suppriméesSUM, MAX, MIN, AVG
bytes_addedOctets ajoutésSUM, MAX, MIN, AVG
bytes_removedOctets supprimésSUM, MAX, MIN, AVG
selection_linesLignes sélectionnées (zéro pour les générations)SUM, MAX, MIN, AVG
selection_bytesOctets sélectionnés (zéro pour les générations)SUM, MAX, MIN, AVG
acceptedIndique si la commande a été acceptéeSUM, COUNT

Sources de Command

  • COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS
  • COMMAND_REQUEST_SOURCE_DEFAULT - Utilisation typique de 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

Sources du fournisseur

  • PROVIDER_SOURCE_COMMAND_GENERATE - Mode génération
  • PROVIDER_SOURCE_COMMAND_EDIT - Mode édition

Données PCW

Données « Percent Code Written » avec un suivi distinct des contributions d’Autocomplete et de Command.
Nom du champDescriptionAgrégations valides
percent_code_writtenCalculé comme codeium_bytes / (codeium_bytes + user_bytes)UNSPECIFIED
codeium_bytesNombre total d’octets générés par CodeiumUNSPECIFIED
user_bytesNombre total d’octets écrits par l’utilisateurUNSPECIFIED
total_bytescodeium_bytes + user_bytesUNSPECIFIED
codeium_bytes_by_autocompleteOctets Codeium issus d’AutocompleteUNSPECIFIED
codeium_bytes_by_commandOctets Codeium issus de CommandUNSPECIFIED

Filtres PCW

Nom du champDescriptionExemples
languageLangage de programmationKOTLIN, GO, JAVA
ideIDE utiliséjetbrains, vscode
versionVersion de Windsurf1.28.0, 130.0
Pour filtrer par date dans les requêtes PCW, utilisez start_timestamp et end_timestamp dans le corps principal de la requête.

Exemples de demandes

Exemple de données utilisateur

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "votre_cle_de_service_ici",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_USER_DATA",
      "selections": [
        {
          "field": "num_acceptances",
          "name": "acceptations_totales",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "num_lines_accepted",
          "name": "lignes_totales",
          "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

Exemple de données de Chat

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

Exemple de données de Command

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

Exemple de données PCW

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

queryResults
array
Tableau de résultats de requête, un par requête
responseItems
array
Tableau d’éléments de résultat
item
object
Objet contenant les champs sélectionnés et leurs valeurs

Exemples de réponses

Réponse de données de l’utilisateur

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

Réponse de données du Chat

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

Réponse de données de 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éponse de données PCW

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

Notes importantes

  • Le PCW (Percent Code Written) peut fortement varier au cours d’une même journée ou d’un même utilisateur — regroupez par semaines pour des analyses plus pertinentes
  • Tous les champs de sélection doivent soit tous avoir des fonctions d’agrégation, soit aucun (pas de mélange possible)
  • Les champs correspondant au motif “distinct_*” ne peuvent pas être utilisés dans des aggregations
  • Les alias de champs doivent être uniques dans l’ensemble des selections et aggregations
  • Si aucune fonction d’agrégation n’est spécifiée, la valeur par défaut est UNSPECIFIED