Devin Desktop prend en charge une API d’analyse personnalisée. Elle permet d’interroger les données issues de l’autocomplétion, du chat et de Command, ainsi qu’un large éventail de filtres, de regroupements et d’agrégations.
Tous les exemples sont fournis en curl, puis peuvent être adaptés en requêtes HTTP dans d’autres langages.
L’API d’analyse est disponible avec les offres Enterprise
Spécification de l’API d’analyse des données des utilisateurs
Les données de la table Users de la page Teams peuvent être obtenues à l’aide de la commande suivante :
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "<SERVICE_KEY>",
"group_name": "<GROUP_NAME>",
"start_timestamp": "<START_TIMESTAMP>",
"end_timestamp": "<END_TIMESTAMP>"
}' \
https://server.codeium.com/api/v1/UserPageAnalytics
SERVICE_KEY: La clé de service : un utilisateur admin peut en créer une depuis la section des clés de service de la page Settings. Le rôle de la clé de service doit disposer de l’autorisation “Teams Read-only”.
GROUP_NAME: Le nom d’un groupe sur lequel filtrer. Ce champ est facultatif.
START_TIMESTAMP/END_TIMESTAMP: Horodatages au format RFC 3339, par exemple 2023-01-01T00:00:00Z
{
"userTableStats": [
{
"name": "Alice",
"email": "alice@cognition.ai",
"lastUpdateTime": "2024-10-10T22:56:10.771591Z",
"apiKey": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"activeDays": 178,
"teamStatus": "USER_TEAM_STATUS_APPROVED"
},
{
"name": "Bob",
"email": "bob@cognition.ai",
"lastUpdateTime": "2024-10-10T18:11:23.980237Z",
"apiKey": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"activeDays": 462,
"teamStatus": "USER_TEAM_STATUS_APPROVED"
},
{
"name": "Charlie",
"email": "charlie@cognition.ai",
"lastUpdateTime": "2024-10-10T16:43:46.117870Z",
"apiKey": "cccccccc-cccc-cccc-cccc-cccccccccccc",
"activeDays": 237,
"teamStatus": "USER_TEAM_STATUS_PENDING"
}
]
}
Spécification de l’API d’analyse de Cascade
Les données spécifiques à Cascade affichées sur la page d’analyse peuvent être récupérées via l’API.
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "<SERVICE_KEY>",
"group_name": "<GROUP_NAME>",
"start_timestamp": "<START_TIMESTAMP>",
"end_timestamp": "<END_TIMESTAMP>",
"emails": ["<EMAIL>","<EMAIL>,..."],
"ide_types": ["<IDE_TYPE>","<IDE_TYPE>,..."],
"query_requests": [
{
"<CASCADE_DATA_SOURCE>": {}
}
]
}' \
https://server.codeium.com/api/v1/CascadeAnalytics
SERVICE_KEY: La clé de service - un utilisateur admin peut en créer une nouvelle depuis Team Settings
GROUP_NAME: Le nom d’un groupe à utiliser pour le filtrage. Ce champ est facultatif. Il ne peut pas être défini si emails est défini.
START_TIMESTAMP/END_TIMESTAMP: Horodatages au format RFC 3339, par ex. 2023-01-01T00:00:00Z
EMAILS: Une liste d’adresses e-mail à utiliser pour le filtrage. Ce champ est facultatif. Il ne peut pas être défini si group_name est défini.
IDE_TYPES: Une liste de types d’IDE à utiliser pour le filtrage. Ce champ est facultatif. Les valeurs possibles sont décrites ci-dessous.
QUERY_REQUESTS: Une liste de requêtes à effectuer. Ce champ est obligatoire. Les valeurs possibles de CASCADE_DATA_SOURCE sont décrites ci-dessous.
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "my_random_test_key",
"group_name": "my_group_name",
"start_timestamp": "2025-01-01T00:00:00Z",
"end_timestamp": "2025-01-02T00:00:00Z",
"emails": ["my_email@cognition.ai", "my_email2@cognition.ai"],
"ide_types": ["editor"],
"query_requests": [
{
"cascade_lines": {}
},
{
"cascade_runs": {}
}
]
}' \
https://server.codeium.com/api/v1/CascadeAnalytics
Nous répartissons les données Cascade en catégories selon le type d’IDE. Si vous excluez le champ ide_types de la requête, les données pour tous les types sont renvoyées. Si vous souhaitez interroger les données pour un seul IDE, vous pouvez utiliser l’une des options suivantes :
- “editor” pour l’éditeur de bureau Devin
- “jetbrains” pour le plugin JetBrains
- “cli” pour Devin CLI
Lors du filtrage par Devin CLI ("cli"), seule la source cascade_runs renvoie des données. Les sources de données cascade_lines et cascade_tool_usage ne sont pas prises en charge pour Devin CLI et renverront des résultats vides.
Sources de données de Cascade
Il existe trois valeurs possibles pour CASCADE_DATA_SOURCE
Utilisez cascade_lines pour obtenir des données sur les lignes Cascade suggérées et acceptées chaque jour.
Exemple de sortie :
{
"queryResults": [
{
"cascadeLines": {
"cascadeLines": [
{
"day": "2025-05-01T00:00:00Z",
"linesSuggested": "206",
"linesAccepted": "157"
},
{
"day": "2025-05-02T00:00:00Z",
"linesSuggested": "16"
},
{
"day": "2025-05-03T00:00:00Z",
"linesSuggested": "169",
"linesAccepted": "168"
}
]
}
}
]
}
linesSuggested: Le nombre de lignes suggérées ce jour-là.
linesAccepted: Le nombre de lignes acceptées ce jour-là.
Utilisez cascade_runs pour interroger les données relatives à l’utilisation du modèle, à la consommation de crédits et au mode.
Exemple de sortie :
{
"queryResults": [
{
"cascadeRuns": {
"cascadeRuns": [
{
"day": "2025-05-01T00:00:00Z",
"model": "Claude 3.7 Sonnet (Thinking)",
"mode": "CONVERSATIONAL_PLANNER_MODE_DEFAULT",
"messagesSent": "1",
"cascadeId": "0d35c1f7-0a85-41d0-ac96-a04cd2d64444"
},
{
"day": "2025-05-01T00:00:00Z",
"model": "SWE-1",
"mode": "UNKNOWN",
"promptsUsed": "125",
"cascadeId": "0d35c1f7-0a85-41d0-ac96-a04cd2d64444"
},
{
"day": "2025-05-01T00:00:00Z",
"model": "GPT-4.1 (promo)",
"mode": "CONVERSATIONAL_PLANNER_MODE_DEFAULT",
"messagesSent": "5",
"cascadeId": "1f450ba3-06aa-4ba5-9e12-d3b98c2d33d3"
},
]
}
}
]
}
day : La date de l’exécution.
model : Le modèle utilisé pour le message.
mode : Le mode de l’exécution. L’une des valeurs suivantes : CONVERSATIONAL_PLANNER_MODE_DEFAULT (pour le mode écriture), CONVERSATIONAL_PLANNER_MODE_READ_ONLY (pour le mode lecture), CONVERSATIONAL_PLANNER_MODE_NO_TOOL (pour l’ancien mode), ou UNKNOWN.
messagesSent : Le nombre de messages envoyés.
cascadeId : L’ID de l’exécution. Cet ID peut être utilisé pour déterminer combien de conversations distinctes ont été lancées (par opposition au nombre de fois où l’utilisateur envoie un message).
promptsUsed : Le nombre de crédits utilisés. Cette valeur est renvoyée en centièmes. Par exemple, 0,25 crédit est renvoyé sous la forme 25, et 1 crédit est renvoyé sous la forme 100.
Les données renvoyées par l’API sont au format brut, ce qui peut expliquer les éventuelles valeurs “UNKNOWN”. Si vous utilisez cette source de données pour vos propres métriques, il est recommandé d’agréger selon les métriques spécifiques qui vous intéressent (par ex., additionner le champ promptsUsed pour comprendre les schémas d’utilisation des utilisateurs, messagesSent pour comprendre l’engagement des utilisateurs, etc.), car il est possible que les données de mode et de prompt soient réparties entre plusieurs entrées.
Utilisez cascade_tool_usage pour obtenir des données sur l’utilisation des outils. Notez que cela renvoie un décompte agrégé des outils sur la période indiquée.
Exemple de sortie :
{
"queryResults": [
{
"cascadeToolUsage": {
"cascadeToolUsage": [
{
"tool": "CODE_ACTION",
"count": "15"
},
{
"tool": "LIST_DIRECTORY",
"count": "20"
},
{
"tool": "MCP_TOOL",
"count": "12"
},
{
"tool": "MEMORY",
"count": "4"
}
]
}
}
]
}
tool : L’outil utilisé pour ce message.
count : Le nombre de fois que l’outil a été utilisé.
Voici la correspondance entre les énumérations renvoyées et leur libellé lisible, tel qu’il est affiché dans l’interface utilisateur :
- CODE_ACTION: ‘Modification du code’
- VIEW_FILE: ‘Afficher le fichier’
- RUN_COMMAND: ‘Exécuter la commande’
- FIND: ‘Outil de recherche’
- GREP_SEARCH: ‘Recherche grep’
- VIEW_FILE_OUTLINE: ‘Afficher le plan du fichier’
- MQUERY: ‘Riptide’
- LIST_DIRECTORY: ‘Lister le répertoire’
- MCP_TOOL: ‘Outil MCP’
- PROPOSE_CODE: ‘Proposer du code’
- SEARCH_WEB: ‘Recherche Web’
- MEMORY: ‘Mémoire’
- PROXY_WEB_SERVER: ‘Aperçu dans Browser’
- DEPLOY_WEB_APP: ‘Déployer l’application Web’
Spécification de l’API d’analyse personnalisée
Certaines sources de données permettent d’effectuer des requêtes personnalisées via l’API d’analyse personnalisée.
Les schémas complets des sélections, filtres, agrégations et ordres de tri figurent dans la section suivante, au format JSON. Des exemples de requêtes pour chacune des trois sources de données, ainsi que des conseils de débogage des requêtes, se trouvent à la fin du document.
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "<SERVICE_KEY>",
"group_name": "<GROUP_NAME>",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_<DATA_SOURCE>",
"selections": [
<LIST OF SELECTIONS>
],
"filters": [
<LIST OF FILTERS>
],
"aggregations": [
<LIST OF AGGREGATIONS>
],
}
]
}' \
https://server.codeium.com/api/v1/Analytics
DATA_SOURCE : sélectionnez USER_DATA, CHAT_DATA, COMMAND_DATA, PCW_DATA ou CASCADE_DATA, selon que vous recherchez des données d’autocomplétion, de chat, de Command, de PCW ou de Cascade.
SERVICE_KEY : La clé de service - un administrateur peut en créer une nouvelle depuis les Team Settings. Le rôle de la clé de service doit disposer de l’autorisation “Analytics Read”.
GROUP_NAME : Le nom d’un groupe sur lequel filtrer. Ce champ est facultatif.
Les sélections sont obligatoires. Chaque sélection correspond à une valeur sur laquelle effectuer une requête.
{
"field": "<FIELD_NAME>",
"name": "<NAME>",
"aggregation_function": "QUERY_AGGREGATION_<AGGREGATION_FUNCTION>"
}
FIELD_NAME: Le champ que vous souhaitez interroger. Voir la section Champs disponibles ci-dessous.
NAME: Un alias du champ. S’il n’est pas spécifié, il correspond à la version en minuscules de <AGGREGATION_FUNCTION>_<FIELD_NAME>, p. ex. sum_num_acceptances. Il doit être distinct de tous les autres noms de champs et d’agrégations.
AGGREGATION_FUNCTION: doit être l’une des valeurs suivantes : UNSPECIFIED, COUNT, SUM, AVG, MAX, MIN. Si “aggregation_function” n’est pas renseigné, la valeur par défaut est UNSPECIFIED.
Les filtres permettent de limiter les données aux seuls éléments répondant à certains critères. Ils sont facultatifs.
{
"name": "<NAME>",
"value": "<VALUE>",
"filter": "QUERY_FILTER_<FILTER>"
}
NOM : Le nom du champ à filtrer. Si l’élément filtré correspond à une Sélection/Agrégation, celui-ci doit être identique au nom du champ/de l’agrégation.
VALEUR : la valeur à comparer.
FILTRE : L’un des éléments suivants : EQUAL, NOT_EQUAL, GREATER_THAN, LESS_THAN, GE (supérieur ou égal), LE (inférieur ou égal).
Les agrégations servent à répartir les données en groupes sur la base d’un critère spécifié. Elles sont facultatives.
{
"field": <FIELD_NAME>,
"name": <NAME>
}
FIELD_NAME: Le champ que vous souhaitez interroger. Voir la section Champs disponibles.
NAME: Un alias du champ. Il doit être distinct de tous les autres noms de champ et d’agrégation.
Toutes les données de la source USER_DATA sont agrégées par utilisateur et par heure.
Remarque : le PCW (pourcentage de code écrit) dispose désormais de sa propre table et ne dépend pas de la table user_data.
| Nom du champ | Description | Agrégations valides |
|---|
| api_key | Le hash de la clé API de l’utilisateur. | UNSPECIFIED, COUNT |
| date | La date UTC de la ou des autocomplétions. | UNSPECIFIED, COUNT |
| date UTC-x | La date de l’autocomplétion, avec un décalage de fuseau horaire. Par exemple, le fuseau PST correspondrait à « date UTC-8 ». | UNSPECIFIED, COUNT |
| hour | L’heure UTC de la ou des autocomplétions. | UNSPECIFIED, COUNT |
| language | Le langage de programmation utilisé. | UNSPECIFIED, COUNT |
| ide | L’IDE utilisé. | UNSPECIFIED, COUNT |
| version | La version de Devin Desktop utilisée | UNSPECIFIED, COUNT |
| num_acceptances | Le nombre de fois où l’utilisateur a accepté une autocomplétion. Cela se produit lorsque l’utilisateur écrit du code, voit du texte grisé et appuie sur Tab. | SUM, MAX, MIN, AVG |
| num_lines_accepted | Lignes de code acceptées via l’autocomplétion. | SUM, MAX, MIN, AVG |
| num_bytes_accepted | Octets acceptés via l’autocomplétion. | SUM, MAX, MIN, AVG |
| distinct_users | Utilisateurs distincts. | UNSPECIFIED, COUNT |
| distinct_developer_days | Tuples distincts (utilisateurs, jour). | UNSPECIFIED, COUNT |
| distinct_developer_hours | Tuples distincts (utilisateurs, heure de la journée). | UNSPECIFIED, COUNT |
Notez que toutes les données fournies dans l’API de données de chat concernent les réponses du modèle de chat, et non les questions des utilisateurs.
| Nom du champ | Description | Agrégations valides |
|---|
| api_key | Un hash de la clé API de l’utilisateur | UNSPECIFIED, COUNT |
| model_id | L’ID du modèle de chat, défini au moment du déploiement. | UNSPECIFIED, COUNT |
| date | La date UTC de la réponse du chat. | UNSPECIFIED, COUNT |
| date UTC-x | La date de la réponse du chat, avec un décalage de fuseau horaire. Par exemple, le fuseau PST correspondrait à “date UTC-8”. | UNSPECIFIED, COUNT |
| ide | L’IDE utilisé | UNSPECIFIED, COUNT |
| version | La version de Devin Desktop utilisée | UNSPECIFIED, COUNT |
| latest_intent_type | Indique si la réponse du modèle est générée à partir d’un code lens ou d’un chat standard. Les chats standard correspondent à :
CHAT_INTENT_GENERIC
tandis que les code lenses correspondent à l’un des éléments suivants :
CHAT_INTENT_FUNCTION_EXPLAIN CHAT_INTENT_FUNCTION_DOCSTRING CHAT_INTENT_FUNCTION_REFACTOR CHAT_INTENT_CODE_BLOCK_EXPLAIN CHAT_INTENT_CODE_BLOCK_REFACTOR CHAT_INTENT_PROBLEM_EXPLAIN CHAT_INTENT_FUNCTION_UNIT_TESTS | UNSPECIFIED, COUNT |
| num_chats_received | Nombre de messages de chat envoyés depuis Devin Desktop à l’utilisateur. | SUM, MAX, MIN, AVG |
| chat_accepted | True si un bloc de code a été envoyé dans la réponse du chat de Devin Desktop et que le bouton Thumbs up est cliqué. | SUM, COUNT |
| chat_inserted_at_cursor | True si un bloc de code a été envoyé dans la réponse du chat de Devin Desktop et que le bouton “Insert” est cliqué. | SUM, COUNT |
| chat_applied | True si un bloc de code a été envoyé dans la réponse du chat de Devin Desktop et que le bouton “Apply Diff” est cliqué. | SUM, COUNT |
| chat_loc_used | Lignes de code utilisées si un bloc de code a été envoyé dans le chat de Devin Desktop et que l’un des boutons “Insert”, “Copy” ou “Apply Diff” est cliqué. | SUM, MAX, MIN, AVG |
Notez que la source de données Command contient toutes les commandes, y compris celles qui ont été refusées. Le champ “accepted” peut être utilisé pour filtrer uniquement les commandes acceptées.
| Nom du champ | Description | Agrégations valides |
|---|
| api_key | Le hash de la clé API de l’utilisateur. | UNSPECIFIED, COUNT |
| date | La date UTC de la commande. | UNSPECIFIED, COUNT |
| timestamp | L’horodatage UTC de la commande. | UNSPECIFIED, COUNT |
| language | Le langage de programmation utilisé. | UNSPECIFIED, COUNT |
| ide | L’IDE utilisé. | UNSPECIFIED, COUNT |
| version | La version de Devin Desktop utilisée | UNSPECIFIED, COUNT |
| command_source | La raison pour laquelle la commande a été déclenchée. Les valeurs valides sont :
COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS COMMAND_REQUEST_SOURCE_DEFAULT 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
COMMAND_REQUEST_SOURCE_DEFAULT correspond à l’utilisation standard de la commande. | UNSPECIFIED, COUNT |
| provider_source | Détermine si la commande a été déclenchée en mode génération ou modification. Les valeurs valides sont : PROVIDER_SOURCE_COMMAND_GENERATE PROVIDER_SOURCE_COMMAND_EDIT | UNSPECIFIED, COUNT |
| lines_added | Nombre de lignes de code ajoutées par la commande. | SUM, MAX, MIN, AVG |
| lines_removed | Nombre de lignes de code supprimées par la commande. | SUM, MAX, MIN, AVG |
| bytes_added | Nombre d’octets ajoutés par la commande. | SUM, MAX, MIN, AVG |
| bytes_removed | Nombre d’octets supprimés par la commande. | SUM, MAX, MIN, AVG |
| selection_lines | Nombre de lignes de code sélectionnées par la commande. Cette valeur doit toujours être égale à zéro pour les générations. | SUM, MAX, MIN, AVG |
| selection_bytes | Nombre d’octets sélectionnés par la commande. Cette valeur doit toujours être égale à zéro pour les générations. | SUM, MAX, MIN, AVG |
| accepted | Indique si la commande a été acceptée. | SUM, COUNT |
| Nom du champ | Description | Agrégations valides |
|---|
| percent_code_written | Pourcentage de code écrit. Calculé comme suit : (nombre d’octets Codeium générés) / (nombre d’octets Codeium générés + nombre d’octets utilisateur générés). Cette métrique peut fortement varier à l’échelle d’une journée ou d’un utilisateur ; nous vous recommandons donc de l’agréger sur plusieurs semaines. | UNSPECIFIED |
| codeium_bytes | nombre total d’octets Codeium, égal à codeium_bytes_by_autocomplete + codeium_bytes_by_command | UNSPECIFIED |
| user_bytes | nombre total d’octets utilisateur | UNSPECIFIED |
| total_bytes | codeium_bytes + user_bytes | UNSPECIFIED |
| codeium_bytes_by_autocomplete | nombre total d’octets Codeium générés via l’autocomplétion | UNSPECIFIED |
| codeium_bytes_by_command | nombre total d’octets Codeium générés via Command | UNSPECIFIED |
La source de données Cascade contient une entrée pour chaque message envoyé à Cascade.
Pour accéder à tous les champs listés ci-dessous, assurez-vous d’utiliser la version 1.11.2 ou une version ultérieure.
| Nom du champ | Description | Agrégations valides |
|---|
| api_key | Le hachage de la clé API de l’utilisateur. | UNSPECIFIED, COUNT |
| date | La date UTC de la commande. | UNSPECIFIED, COUNT |
| prompts_used | Le nombre de crédits de prompt utilisés dans un prompt envoyé à Cascade, renvoyé en centimes. Par exemple, 0.25 crédit est renvoyé sous la forme 25, et 1 crédit est renvoyé sous la forme 100. | UNSPECIFIED, SUM, AVG, MIN, MAX |
| flex_credits_used | Le nombre de crédits additionnels/mutualisés utilisés, parmi le total de prompts_used, dans un prompt envoyé à Cascade, renvoyé en centimes. Par exemple, 0.25 crédit est renvoyé sous la forme 25, et 1 crédit est renvoyé sous la forme 100. | UNSPECIFIED, SUM, AVG, MIN, MAX |
| model | Le modèle utilisé pour le message envoyé à Cascade. | UNSPECIFIED, COUNT |
| metadata | Un objet contenant des métadonnées liées à l’environnement de développement. Les champs actuellement renseignés incluent : ideVersion | UNSPECIFIED, COUNT |
| | |
|---|
| Nom du champ | Description | Quelques exemples |
| api_key | Le hash de la clé API de l’utilisateur. | |
| language | Le langage de programmation utilisé. | KOTLIN, GO, JAVA |
| ide | L’IDE utilisé. | jetbrains, vscode |
| version | La version de Devin Desktop utilisée | 1.28.0, 130.0 |
Pour filtrer par date, utilisez start_timestamp et end_timestamp, qui doivent être au format RFC 3339 (p. ex. 2023-01-01T00:00:00Z, voir l’exemple ci-dessous).
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": SERVICE_KEY,
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_USER_DATA",
"selections": [
{
"field": "num_acceptances",
"name": "num_acceptances",
"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
Cette requête calcule le pourcentage global de code écrit pour le mois de janvier 2024. Exemple de réponse (JSON formaté pour une meilleure lisibilité) :
{
"queryResults": [
{
"responseItems": [
{
"item": {
"num_acceptances": "125",
"num_lines_accepted": "863"
}
}
]
}
]
}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": SERVICE_KEY,
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
"selections": [
{
"field": "chat_loc_used",
"name": "chat_loc_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"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Cette requête indique le nombre de lignes de code acceptées via le code lens “Generate Docstring”, sur l’ensemble de la période, regroupées par IDE.
Exemple de réponse :
{
"queryResults": [
{
"responseItems": [
{
"item": {
"chat_loc_used": "74",
"ide": "jetbrains"
},
},
{
"item": {
"chat_loc_used":"41",
"ide":"vscode"
},
}
]
}
]
}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": SERVICE_KEY,
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
"selections": [
{
"field": "lines_added",
"name": "lines_added",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "lines_removed",
"name": "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": "language"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Cette requête renvoie, par langage de programmation, le nombre de lignes ajoutées et supprimées par les commandes “edit”.
Exemple de réponse :
{
"queryResults": [
{
"responseItems": [
{
"item": {
"language": "SHELL",
"lines_added": "5",
"lines_removed": "3"
}
},
{
"item": {
"language": "GO",
"lines_added": "31",
"lines_removed": "27"
}
},
{
"item": {
"language": "PYTHON",
"lines_added": "21",
"lines_removed": "5"
}
},
{
"item": {
"language": "UNSPECIFIED",
"lines_added": "91",
"lines_removed": "71"
}
},
{
"item": {
"language": "STARLARK",
"lines_added": "13",
"lines_removed": "1"
}
}
]
}
]
}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": SERVICE_KEY,
"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": "percent_code_written"
},
{
"field": "codeium_bytes",
"name": "codeium_bytes"
},
{
"field": "total_bytes",
"name": "total_bytes"
},
{
"field": "codeium_bytes_by_autocomplete",
"name": "codeium_bytes_by_autocomplete"
},
{
"field": "codeium_bytes_by_command",
"name": "codeium_bytes_by_command"
}
],
"filters": [
{
"filter": "QUERY_FILTER_EQUAL",
"name": "language",
"value": "GO"
}
]
}
],
}' \
https: //server.codeium.com/api/v1/Analytics
Cette requête récupère les données PCW (pourcentage de code écrit), ainsi que les octets filtrés pour le langage Go.
Exemple de réponse :
{
"queryResults": [
{
"responseItems": [
{
"item": {
"codeium_bytes": "6018",
"codeium_bytes_by_autocomplete": "4593",
"codeium_bytes_by_command": "1425",
"percent_code_written": "0.61",
"total_bytes": "9900"
}
}
]
}
]
}
À partir de la version 1.10.0, les requêtes non valides renverront un message d’erreur. Cette section présente quelques messages d’erreur courants, leur signification et comment déboguer les requêtes correspondantes.
| Message d’erreur | Explication |
|---|
| at least one field or aggregation is required | Aucune sélection ni agrégation n’a été détectée ; assurez-vous que la requête en contient au moins une. |
| invalid aggregation function for string type field ide: QUERY_AGGREGATION_SUM | L’une des sélections utilise une fonction d’agrégation non valide. Dans ce cas, nous avons essayé d’utiliser SUM sur le champ “ide”, mais il ne prend en charge que COUNT et UNSPECIFIED. |
| invalid query table: QUERY_DATA_SOURCE_UNSPECIFIED | Il y a probablement une faute de frappe dans le champ data_source ; vérifiez l’orthographe. |
| all selection fields should have an aggregation function, or none of them should | S’il y a plusieurs champs de sélection, soit ils doivent tous contenir une aggregation_function, soit aucun ne doit en contenir. Par exemple, cette sélection est non valide, car num_acceptances est additionné, mais num_lines_accepted ne l’est pas :"selections": [
{
"field": "num_acceptances",
"name": "total_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "num_lines_accepted",
"name": "total_lines_accepted",
"aggregation_function": "QUERY_AGGREGATION_UNSPECIFIED"
}
]
Remarque : PCW est toujours considéré comme agrégé. Si aucune aggregation_function n’est explicitement choisie, elle est considérée comme non spécifiée. Si vous souhaitez obtenir des informations sur ces deux champs, utilisez deux requêtes distinctes. |
| invalid aggregation function for string type field ide: QUERY_AGGREGATION_SUM | Tous les champs ne prennent pas en charge toutes les fonctions d’agrégation ; consultez la section des champs disponibles pour connaître les correspondances. Dans ce cas, la requête utilise la fonction d’agrégation QUERY_AGGREGATION_SUM avec le champ “ide”, ce qui n’est pas valide. |
| tried to aggregate on a distinct field: distinct_developer_days. Consider aggregating on the non-distinct fields instead: [api_key date] | Les champs correspondant au modèle “distinct_*” ne peuvent pas figurer dans la section aggregations ; l’erreur suggère un ou plusieurs champs alternatifs sur lesquels agréger à la place. Donc, au lieu de :"aggregations": [
{
"field": "distinct_developer_days",
"name": "distinct_developer_days"
}
]
Essayez :"aggregations": [
{
"field": "api_key",
"name": "api_key"
},
{
"field": "date",
"name": "date"
}
]
|
| duplicate field alias for selection/aggregation: num_acceptances | Toutes les sélections et agrégations doivent avoir un nom différent. Gardez à l’esprit que si le nom n’est pas spécifié, il est défini par défaut sur <AGGREGATION_FUNCTION>_<FIELD_NAME>. |
| invalid group name: GroupName | Le groupe portant le nom indiqué est introuvable ; vérifiez l’orthographe. |