Devin Desktop supporta un’API per l’analytics personalizzata. Consente di recuperare dati da completamento automatico, chat e comandi, con una varietà di filtri, raggruppamenti e aggregazioni.
Forniamo tutti gli esempi in curl; possono poi essere convertiti in richieste HTTP in altri linguaggi.
L’API di Analytics è disponibile per i piani Enterprise
Specifica dell’API di analisi dei dati utente
I dati della tabella Users nella pagina Teams possono essere ottenuti con il seguente comando:
SERVICE_KEY: La chiave di servizio: un utente amministratore può crearne una dalla sezione relativa alla chiave di servizio nella pagina Settings. Il ruolo della chiave di servizio deve disporre delle autorizzazioni “Teams sola lettura”.
GROUP_NAME: Il nome di un gruppo su cui filtrare. Questo campo è facoltativo.
START_TIMESTAMP/END_TIMESTAMP: Timestamp nel formato RFC 3339, quindi ad es. 2023-01-01T00:00:00Z
Specifica dell’API di Cascade Analytics
I dati specifici di Cascade visibili nella pagina analytics possono essere recuperati tramite API.
SERVICE_KEY: La chiave di servizio - un utente amministratore può crearne una nuova da Settings del team
GROUP_NAME: Il nome di un gruppo in base a cui filtrare. Questo campo è facoltativo. Non può essere impostato se è impostato il campo emails.
START_TIMESTAMP/END_TIMESTAMP: Timestamp in formato RFC 3339, quindi ad es. 2023-01-01T00:00:00Z
EMAILS: Un elenco di indirizzi email in base a cui filtrare. Questo campo è facoltativo. Non può essere impostato se è impostato il campo group_name.
IDE_TYPES: Un elenco di tipi di IDE in base a cui filtrare. Questo campo è facoltativo. I valori possibili sono descritti di seguito.
QUERY_REQUESTS: Un elenco di richieste di interrogazione da effettuare. Questo campo è obbligatorio. I valori possibili di CASCADE_DATA_SOURCE sono descritti di seguito.
Suddividiamo i dati di cascade in categorie in base al tipo di IDE. Se il campo ide_types non è incluso nella query, vengono restituiti i dati per tutti i tipi di IDE. Se desideri recuperare i dati di un solo IDE, puoi usare una delle seguenti opzioni:
- “editor” per Devin Desktop Editor
- “jetbrains” per il plugin JetBrains
- “cli” per Devin CLI
Quando filtri per Devin CLI ("cli"), solo cascade_runs restituisce dati. Le origini dati cascade_lines e cascade_tool_usage non sono supportate per Devin CLI e restituiranno risultati vuoti.
Origini dei dati di Cascade
Esistono tre possibili valori per CASCADE_DATA_SOURCE
Usa cascade_lines per recuperare i dati relativi alle linee cascade suggerite e accettate ogni giorno.
Output di esempio:
linesSuggested: Il numero di righe suggerite nel giorno indicato.
linesAccepted: Il numero di righe accettate nel giorno indicato.
Usa cascade_runs per recuperare i dati sull’utilizzo del modello, sul consumo di crediti e sulla modalità.
Output di esempio:
day: La data del run.
model: Il modello utilizzato per il messaggio.
mode: La modalità del run. Una tra CONVERSATIONAL_PLANNER_MODE_DEFAULT (per la modalità di scrittura), CONVERSATIONAL_PLANNER_MODE_READ_ONLY (per la modalità di sola lettura), CONVERSATIONAL_PLANNER_MODE_NO_TOOL (per la modalità legacy) oppure UNKNOWN.
messagesSent: Il numero di messaggi inviati.
cascadeId: L’ID del run. Questo ID può essere usato per capire quante conversazioni distinte sono state avviate (anziché quante volte l’utente invia un messaggio).
promptsUsed: Il numero di crediti utilizzati. Questo valore viene restituito in centesimi. Ad esempio, 0.25 crediti viene restituito come 25 e 1 credito come 100.
I dati restituiti dall’API sono in formato grezzo, il che può spiegare eventuali valori “UNKNOWN”. Se utilizzi questa origine dati per le tue metriche, è consigliabile aggregare in base alle metriche specifiche che ti interessano (ad esempio, sommando il campo promptsUsed per comprendere i modelli di utilizzo degli utenti, messagesSent per comprendere il coinvolgimento degli utenti, ecc.), poiché è possibile che i dati relativi a modalità e prompt siano distribuiti tra più voci.
Usa cascade_tool_usage per recuperare dati sull’utilizzo degli strumenti. Tieni presente che restituisce un conteggio aggregato degli utilizzi degli strumenti nel periodo specificato.
Esempio di output:
tool: Lo strumento usato per il messaggio.
count: Il numero di volte in cui lo strumento è stato usato.
Ecco una mappa degli enum restituiti e del nome leggibile associato, così come viene visualizzato nella UI:
- CODE_ACTION: ‘Modifica codice’
- VIEW_FILE: ‘Visualizza file’
- RUN_COMMAND: ‘Esegui comando’
- FIND: ‘Strumento di ricerca’
- GREP_SEARCH: ‘Ricerca Grep’
- VIEW_FILE_OUTLINE: ‘Struttura del file’
- MQUERY: ‘Riptide’
- LIST_DIRECTORY: ‘Elenca directory’
- MCP_TOOL: ‘Tool MCP’
- PROPOSE_CODE: ‘Proponi codice’
- SEARCH_WEB: ‘Cerca sul Web’
- MEMORY: ‘Memoria’
- PROXY_WEB_SERVER: ‘Anteprima nel Browser’
- DEPLOY_WEB_APP: ‘Distribuisci app web’
Specifica della Custom Analytics API
Alcune origini dati consentono query personalizzabili tramite la Custom Analytics API.
Gli schemi completi per selezioni, filtri, aggregazioni e ordinamenti sono riportati nella sezione seguente, in formato JSON. Alla fine del documento troverai esempi di query per ciascuna delle tre origini dati, insieme a suggerimenti per il debug delle query.
DATA_SOURCE: seleziona USER_DATA, CHAT_DATA, COMMAND_DATA, PCW_DATA oppure CASCADE_DATA, a seconda che tu stia cercando dati di completamento automatico, chat, Command, PCW o Cascade.
SERVICE_KEY: La chiave di servizio: un utente admin può crearne una nuova da Settings del team. Il ruolo della chiave di servizio deve disporre dell’autorizzazione “Analytics Read”.
GROUP_NAME: Il nome di un gruppo in base a cui filtrare. Questo campo è facoltativo.
Le selezioni sono obbligatorie. Ogni selezione corrisponde a un valore su cui eseguire la query.
FIELD_NAME: il campo che desideri recuperare. Vedi la sezione Campi disponibili di seguito.
NAME: un alias per il campo. Se non specificato, sarà la versione in minuscolo di <AGGREGATION_FUNCTION>_<FIELD_NAME>, ad es. sum_num_acceptances. Deve essere distinto da tutti gli altri nomi di campi e aggregazioni.
AGGREGATION_FUNCTION: deve essere uno dei seguenti: UNSPECIFIED, COUNT, SUM, AVG, MAX, MIN. Se “aggregation_function” non è specificato, il valore predefinito è UNSPECIFIED.
I filtri servono a restringere i dati in modo da includere solo gli elementi che soddisfano determinati criteri. Sono facoltativi.
NAME: il nome del campo che desideri filtrare. Se l’elemento filtrato coincide con una Selection/Aggregation, deve essere uguale al nome del campo/dell’aggregazione.
VALUE: il valore da confrontare.
FILTER: uno tra EQUAL, NOT_EQUAL, GREATER_THAN, LESS_THAN, GE (maggiore o uguale), LE (minore o uguale).
Le aggregazioni vengono utilizzate per suddividere i dati in gruppi in base a un criterio specifico. Sono facoltative.
FIELD_NAME: Il campo che desideri recuperare. Consulta la sezione Campi disponibili.
NAME: Un alias del campo. Deve essere distinto da tutti gli altri nomi di campi e aggregazioni.
Tutti i dati della sorgente USER_DATA sono aggregati per utente e per ora.
Nota: PCW (percentuale di codice scritto) ora ha una tabella dedicata e non dipende dalla tabella user_data.
Si noti che tutti i dati forniti nell’API dei dati della chat si riferiscono alle risposte del modello di chat, non alle domande degli utenti.
Nota che la sorgente dati del comando contiene tutti i comandi, inclusi quelli rifiutati. Il campo “accepted” può essere usato per filtrare solo i comandi accettati.
L’origine dati Cascade contiene una voce per ogni messaggio inviato a Cascade.
Per accedere a tutti i campi elencati di seguito, assicurati di utilizzare la versione 1.11.2 o successiva.
Per filtrare per data, usa start_timestamp e end_timestamp, che devono essere nel formato RFC 3339 (ad es. 2023-01-01T00:00:00Z, come nell’esempio seguente).
Questa query calcola la percentuale complessiva di codice scritto nel mese di gennaio 2024. Risposta di esempio (JSON formattato per migliorarne la leggibilità):
Questa query mostra il numero di righe di codice accettate tramite la code lens “Generate Docstring” dall’inizio, raggruppate per IDE.
Risposta di esempio:
Questa query recupera, per linguaggio di programmazione, il numero di righe aggiunte e rimosse dai comandi “edit”.
Risposta di esempio:
Questa query recupera i dati PCW (percentuale di codice scritto), insieme ai byte filtrati per il linguaggio Go.
Esempio di risposta:
A partire dalla versione 1.10.0, le query non valide restituiscono un messaggio di errore. Questa sezione raccoglie alcuni messaggi di errore comuni, il loro significato e come eseguire il debug delle query corrispondenti.
| Messaggio di errore | Spiegazione |
|---|
| at least one field or aggregation is required | Non è stata rilevata alcuna selezione o aggregazione: assicurati che la richiesta della query ne includa almeno una. |
| invalid aggregation function for string type field ide: QUERY_AGGREGATION_SUM | Una delle selezioni usa una funzione di aggregazione non valida. In questo caso, è stato usato SUM sul campo “ide”, ma questo campo supporta solo COUNT e UNSPECIFIED. |
| invalid query table: QUERY_DATA_SOURCE_UNSPECIFIED | Probabilmente c’è un errore di battitura nel campo data_source; verificane l’ortografia. |
| all selection fields should have an aggregation function, or none of them should | Se sono presenti più campi di selezione, tutti devono contenere un aggregation_function oppure nessuno deve contenerlo. Per esempio, questa selezione non è valida perché num_acceptances viene sommato, mentre num_lines_accepted no:Nota: PCW è sempre considerato aggregato. Se non viene scelto esplicitamente alcun aggregation_function, viene considerato non specificato. Se vuoi ottenere informazioni su entrambi questi campi, usa due query separate. |
| invalid aggregation function for string type field ide: QUERY_AGGREGATION_SUM | Non tutti i campi supportano tutte le funzioni di aggregazione; consulta la sezione dei campi disponibili per vedere le corrispondenze. In questo caso, la query usa la funzione di aggregazione QUERY_AGGREGATION_SUM con il campo “ide”, il che non è valido. |
| tried to aggregate on a distinct field: distinct_developer_days. Consider aggregating on the non-distinct fields instead: [api_key date] | I campi con il pattern “distinct_*” non possono comparire nella sezione aggregations; il messaggio di errore suggerisce invece uno o più campi alternativi su cui aggregare. Quindi, invece di:Prova: |
| duplicate field alias for selection/aggregation: num_acceptances | Tutte le selezioni e le aggregazioni devono avere un nome diverso. Tieni presente che, se il nome non è specificato, per default viene impostato su <AGGREGATION_FUNCTION>_<FIELD_NAME>. |
| invalid group name: GroupName | Il group con il nome specificato non è stato trovato; verificane l’ortografia. |