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": {}
        }
      ]
    }
  ]
}

Aperçu

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

Requête

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

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 Chat
  • QUERY_DATA_SOURCE_COMMAND_DATA - Données Command
  • QUERY_DATA_SOURCE_PCW_DATA - Données Percent Code Written
selections
array
required
Tableau des 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 manière 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 renseigné, la valeur par défaut est {aggregation_function}_{field_name} (en minuscules)
aggregation_function
string
Fonction d’agrégation à appliquer :
  • QUERY_AGGREGATION_UNSPECIFIED (valeur 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 permettent de restreindre les données aux éléments correspondant à 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 à utiliser 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’autocomplétionUNSPECIFIED, COUNT
date UTC-xDate avec décalage de fuseau horaire (p. ex. « date UTC-8 » pour le PST)UNSPECIFIED, COUNT
hourHeure UTC de l’autocomplétionUNSPECIFIED, COUNT
languageLangage de programmationUNSPECIFIED, COUNT
ideIDE utiliséUNSPECIFIED, COUNT
versionVersion de WindsurfUNSPECIFIED, COUNT
num_acceptancesNombre d’acceptations 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_daysCouples distincts (utilisateur, jour)UNSPECIFIED, COUNT
distinct_developer_hoursCouples distincts (utilisateur, heure)UNSPECIFIED, COUNT

Données Chat

Toutes les données 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 de 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 Chat

  • CHAT_INTENT_GENERIC - Chat standard
  • 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 Command

Les données Command incluent toutes les commandes, y compris celles refusées. Utilisez le champ accepted pour filtrer les seules commandes acceptées.
Field NameDescriptionValid Aggregations
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 du 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 classique 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 de génération
  • PROVIDER_SOURCE_COMMAND_EDIT - Mode d’édition

Données PCW

Données Percent Code Written avec suivi distinct des contributions Autocomplete et 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 provenant d’AutocompleteUNSPECIFIED
codeium_bytes_by_commandOctets Codeium provenant 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 les dates dans les requêtes PCW, utilisez start_timestamp et end_timestamp dans le corps 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 du 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 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 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 — agrégez sur plusieurs semaines pour des insights plus pertinents
  • Tous les champs de sélection doivent soit avoir des fonctions d’agrégation, soit n’en avoir aucune (impossible de les mélanger)
  • Les champs correspondant au motif “distinct_*” ne peuvent pas être utilisés dans des aggregations
  • Les alias de champs doivent être uniques dans toutes les selections et aggregations
  • Si aucune fonction d’agrégation n’est spécifiée, la valeur par défaut est UNSPECIFIED