Passer au contenu principal
POST
/
api
/
v1
/
Analytics
Requête d’analyse personnalisée
curl --request POST \
  --url https://server.codeium.com/api/v1/Analytics \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "service_key": "<string>",
  "group_name": "<string>",
  "query_requests": [
    {
      "data_source": "<string>",
      "selections": [
        {
          "field": "<string>",
          "name": "<string>",
          "aggregation_function": "<string>"
        }
      ],
      "filters": [
        {
          "name": "<string>",
          "filter": "<string>",
          "value": "<string>"
        }
      ],
      "aggregations": [
        {
          "field": "<string>",
          "name": "<string>"
        }
      ]
    }
  ]
}
'
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {}
        }
      ]
    }
  ]
}

Documentation Index

Fetch the complete documentation index at: https://docs.devin.ai/llms.txt

Use this file to discover all available pages before exploring further.

Vue d’ensemble

L’API d’analyse personnalisée permet d’interroger de manière flexible les données d’autocomplétion, de chat et de Command, avec des sélections, filtres, agrégations et tris personnalisables.

Requête

service_key
string
requis
Votre clé de service avec les autorisations « Analytics Read »
group_name
string
Filtrer les résultats pour n’inclure que les utilisateurs d’un groupe spécifique (facultatif)
query_requests
array
requis
Tableau d’objets de requête définissant les données à récupérer

Structure de l’objet de requête

Chaque objet de requête contient :
  • data_source (obligatoire) : source de données à interroger
  • selections (obligatoire) : tableau des sélections de champs à récupérer
  • filters (facultatif) : tableau des filtres à appliquer
  • aggregations (facultatif) : tableau des agrégations à utiliser pour le regroupement

Sélections

Les sélections définissent les champs à récupérer et la manière de les agréger.
  • field (obligatoire) : Nom du champ à sélectionner
  • name (facultatif) : Alias du champ
  • aggregation_function (facultatif) : Fonction d’agrégation à appliquer

Exemple de sélection

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

Filtres

Les filtres permettent de restreindre les données aux éléments qui répondent à des critères spécifiques.
  • name (obligatoire) : Nom du champ sur lequel appliquer le filtre
  • filter (obligatoire) : Opération de filtrage
  • value (obligatoire) : Valeur à laquelle comparer

Exemple de filtre

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

Agrégations

Les agrégations regroupent les données selon des critères spécifiés.
  • field (obligatoire) : Nom du champ selon lequel regrouper
  • name (obligatoire) : Alias du champ d’agrégation

Exemple d’agrégation

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

Champs disponibles

Données utilisateur

Toutes les données utilisateur sont agrégées par utilisateur, 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 PST)UNSPECIFIED, COUNT
hourHeure UTC de l’autocomplétionUNSPECIFIED, COUNT
languageLangage de programmationUNSPECIFIED, COUNT
ideIDE utiliséUNSPECIFIED, COUNT
versionVersion de Devin DesktopUNSPECIFIED, COUNT
num_acceptancesNombre de suggestions d’autocomplétion acceptéesSUM, MAX, MIN, AVG
num_lines_acceptedNombre de lignes de code acceptéesSUM, MAX, MIN, AVG
num_bytes_acceptedNombre d’octets acceptésSUM, MAX, MIN, AVG
distinct_usersNombre d’utilisateurs distinctsUNSPECIFIED, COUNT
distinct_developer_daysNombre de tuples (utilisateur, jour) distinctsUNSPECIFIED, COUNT
distinct_developer_hoursNombre de tuples (utilisateur, heure) distinctsUNSPECIFIED, COUNT

Données de chat

Les données de chat sont distinctes des données Cascade et correspondent à l’utilisation de nos anciens plugins non agentiques
Toutes les données de chat correspondent aux réponses du modèle de chat, et non aux questions des utilisateurs.
Nom du champDescriptionAgrégations valides
api_keyHachage de l’API key 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 Devin DesktopUNSPECIFIED, 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_usedNombre de lignes de code utilisées depuis le chatSUM, MAX, MIN, AVG

Types d’intention du chat

  • CHAT_INTENT_GENERIC - Chat standard
  • CHAT_INTENT_FUNCTION_EXPLAIN - Code lens d’explication de fonction
  • CHAT_INTENT_FUNCTION_DOCSTRING - Code lens de docstring de fonction
  • CHAT_INTENT_FUNCTION_REFACTOR - Code lens de refactorisation de fonction
  • CHAT_INTENT_CODE_BLOCK_EXPLAIN - Code lens d’explication de bloc de code
  • CHAT_INTENT_CODE_BLOCK_REFACTOR - Code lens de refactorisation de bloc de code
  • CHAT_INTENT_PROBLEM_EXPLAIN - Code lens d’explication du problème
  • CHAT_INTENT_FUNCTION_UNIT_TESTS - Code lens de tests unitaires pour une fonction

Données de Command

Les données de Command incluent toutes les commandes, y compris celles qui ont été rejeté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 Devin DesktopUNSPECIFIED, COUNT
command_sourceSource de déclenchement de Command (voir Sources de Command 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

Origines de Command

  • COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS
  • COMMAND_REQUEST_SOURCE_DEFAULT - Usage 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 de génération
  • PROVIDER_SOURCE_COMMAND_EDIT - Mode d’édition

Données PCW

Données sur le pourcentage de code écrit, avec un suivi distinct des contributions de l’autocomplétion et de Command.
Nom du champDescriptionAgrégations valides
percent_code_writtenCalculé selon 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 de l’autocomplétionUNSPECIFIED
codeium_bytes_by_commandOctets Codeium provenant de CommandUNSPECIFIED

Filtres PCW

Nom du champDescriptionExemples
languageLangage de programmationKOTLIN, GO, JAVA
ideIDE utiliséjetbrains, vscode
versionVersion de Devin Desktop1.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 requêtes

Exemple de données utilisateur

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "your_service_key_here",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_USER_DATA",
      "selections": [
        {
          "field": "num_acceptances",
          "name": "total_acceptances",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "num_lines_accepted",
          "name": "total_lines",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "date",
          "filter": "QUERY_FILTER_GE",
          "value": "2024-01-01"
        },
        {
          "name": "date",
          "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": "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

Exemple de données 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

Exemple de données PCW

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

Réponse

queryResults
array
Tableau des résultats de requête, un pour chaque requête
responseItems
array
Tableau des é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 des données de 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"
          }
        }
      ]
    }
  ]
}

Remarques importantes

  • Le PCW (Percent Code Written) présente une forte variabilité d’un jour à l’autre ou d’un utilisateur à l’autre - agréguez sur plusieurs semaines pour obtenir des résultats plus pertinents
  • Tous les champs de sélection doivent soit avoir une fonction d’agrégation, soit n’en avoir aucune (impossible de mélanger)
  • Les champs avec le motif “distinct_*” ne peuvent pas être utilisés dans des agrégations
  • Les alias de champ doivent être uniques dans l’ensemble des sélections et des agrégations
  • Si aucune fonction d’agrégation n’est spécifiée, la valeur par défaut est UNSPECIFIED