Saltar al contenido principal
POST
/
api
/
v1
/
Analytics
Consulta personalizada de Analytics
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": [
        {
          "field": "<string>",
          "name": "<string>",
          "aggregation_function": "<string>"
        }
      ],
      "filters": [
        {
          "name": "<string>",
          "filter": "<string>",
          "value": "<string>"
        }
      ],
      "aggregations": [
        {
          "field": "<string>",
          "name": "<string>"
        }
      ]
    }
  ]
}
'
{
  "queryResults": [
    {
      "responseItems": [
        {
          "item": {}
        }
      ]
    }
  ]
}

Descripción general

La Analytics API personalizada ofrece capacidades de consulta flexibles para datos de Autocomplete, Chat y Command, con selections, filtros, aggregations y criterios de ordenación personalizables.

Request

service_key
string
requerido
Tu clave de servicio con permisos “Analytics Read”
group_name
string
Filtra los resultados para usuarios de un grupo específico (opcional)
query_requests
array
requerido
Array de objetos de solicitud de consulta que definen los datos a recuperar

Estructura de la solicitud de consulta

Cada objeto de solicitud de consulta contiene:
  • data_source (obligatorio): Fuente de datos a consultar
  • selections (obligatorio): Arreglo de selecciones de campos para recuperar
  • filters (opcional): Arreglo de filtros a aplicar
  • aggregations (opcional): Arreglo de aggregations para agrupar

Selections

Las selections definen qué campos recuperar y cómo agregarlos.
  • field (obligatorio): Nombre del campo a seleccionar
  • name (opcional): Alias del campo
  • aggregation_function (opcional): Función de agregación que se aplicará

Ejemplo de selección

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

Filtros

Los filtros restringen los datos a los elementos que cumplen criterios específicos.
  • name (obligatorio): Nombre del campo por el que filtrar
  • filter (obligatorio): Operación de filtro
  • value (obligatorio): Valor a comparar

Ejemplo de filtrado

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

Aggregations

Las aggregations agrupan los datos según los criterios especificados.
  • field (obligatorio): Nombre del campo por el que agrupar
  • name (obligatorio): Alias para el campo de agregación

Ejemplo de agregación

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

Campos disponibles

Datos de usuario

Todos los datos de usuario se agregan por usuario y por hora.
Nombre del campoDescripciónAgregaciones válidas
api_keyHash de la clave de API del usuarioUNSPECIFIED, COUNT
dateFecha UTC de autocompletadoUNSPECIFIED, COUNT
date UTC-xFecha con desfase de zona horaria (p. ej., “date UTC-8” para PST)UNSPECIFIED, COUNT
hourHora UTC de autocompletadoUNSPECIFIED, COUNT
languageLenguaje de programaciónUNSPECIFIED, COUNT
ideIDE utilizadoUNSPECIFIED, COUNT
versionVersión de WindsurfUNSPECIFIED, COUNT
num_acceptancesNúmero de aceptaciones de AutocompleteSUM, MAX, MIN, AVG
num_lines_acceptedLíneas de código aceptadasSUM, MAX, MIN, AVG
num_bytes_acceptedBytes aceptadosSUM, MAX, MIN, AVG
distinct_usersUsuarios únicosUNSPECIFIED, COUNT
distinct_developer_daysTuplas únicas (usuario, día)UNSPECIFIED, COUNT
distinct_developer_hoursTuplas únicas (usuario, hora)UNSPECIFIED, COUNT

Datos de Chat

Los datos de Chat están separados de los datos de Cascade y representan el uso de nuestros plugins heredados, no agentivos
Todos los datos de Chat corresponden a respuestas del modelo de IA de chat, no a preguntas del usuario.
Field NameDescriptionValid Aggregations
api_keyHash de la clave de API del usuarioUNSPECIFIED, COUNT
model_idID del modelo de ChatUNSPECIFIED, COUNT
dateFecha en UTC de la respuesta de chatUNSPECIFIED, COUNT
date UTC-xFecha con desplazamiento de zona horariaUNSPECIFIED, COUNT
ideIDE en usoUNSPECIFIED, COUNT
versionVersión de WindsurfUNSPECIFIED, COUNT
latest_intent_typeTipo de intención de Chat (ver Tipos de intención más abajo)UNSPECIFIED, COUNT
num_chats_receivedNúmero de mensajes de chat recibidosSUM, MAX, MIN, AVG
chat_acceptedSi el chat fue aceptado (pulgar arriba)SUM, COUNT
chat_inserted_at_cursorSi se hizo clic en el botón “Insert”SUM, COUNT
chat_appliedSi se hizo clic en el botón “Apply Diff”SUM, COUNT
chat_loc_usedLíneas de código usadas desde el chatSUM, MAX, MIN, AVG

Tipos de intención de Chat

  • CHAT_INTENT_GENERIC - Chat normal
  • CHAT_INTENT_FUNCTION_EXPLAIN - Indicador Code Lens de explicación de función
  • CHAT_INTENT_FUNCTION_DOCSTRING - Indicador Code Lens de docstring de función
  • CHAT_INTENT_FUNCTION_REFACTOR - Indicador Code Lens de refactorización de función
  • CHAT_INTENT_CODE_BLOCK_EXPLAIN - Indicador Code Lens de explicación de bloque de código
  • CHAT_INTENT_CODE_BLOCK_REFACTOR - Indicador Code Lens de refactorización de bloque de código
  • CHAT_INTENT_PROBLEM_EXPLAIN - Indicador Code Lens de explicación de problema
  • CHAT_INTENT_FUNCTION_UNIT_TESTS - Indicador Code Lens de pruebas unitarias de función

Datos de Command

Los datos de Command incluyen todos los comandos, incluidos los rechazados. Usa el campo accepted para filtrar únicamente los comandos aceptados.
Nombre del campoDescripciónAgregaciones válidas
api_keyHash de la clave de API del usuarioUNSPECIFIED, COUNT
dateFecha UTC del comandoUNSPECIFIED, COUNT
timestampMarca de tiempo UTC del comandoUNSPECIFIED, COUNT
languageLenguaje de programaciónUNSPECIFIED, COUNT
ideIDE en usoUNSPECIFIED, COUNT
versionVersión de WindsurfUNSPECIFIED, COUNT
command_sourceOrigen del disparador de Command (ver Command Sources más abajo)UNSPECIFIED, COUNT
provider_sourceModo de generación o ediciónUNSPECIFIED, COUNT
lines_addedLíneas de código agregadasSUM, MAX, MIN, AVG
lines_removedLíneas de código eliminadasSUM, MAX, MIN, AVG
bytes_addedBytes agregadosSUM, MAX, MIN, AVG
bytes_removedBytes eliminadosSUM, MAX, MIN, AVG
selection_linesLíneas seleccionadas (cero en generaciones)SUM, MAX, MIN, AVG
selection_bytesBytes seleccionados (cero en generaciones)SUM, MAX, MIN, AVG
acceptedSi el comando fue aceptadoSUM, COUNT

Fuentes de Command

  • COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS
  • COMMAND_REQUEST_SOURCE_DEFAULT - Uso típico 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

Fuentes del proveedor

  • PROVIDER_SOURCE_COMMAND_GENERATE - Modo generación
  • PROVIDER_SOURCE_COMMAND_EDIT - Modo edición

Datos de PCW

Datos del porcentaje de código escrito con seguimiento separado de las contribuciones de Autocomplete y Command.
Field NameDescriptionValid Aggregations
percent_code_writtenCalculado como codeium_bytes / (codeium_bytes + user_bytes)UNSPECIFIED
codeium_bytesTotal de bytes generados por CodeiumUNSPECIFIED
user_bytesTotal de bytes escritos por el usuarioUNSPECIFIED
total_bytescodeium_bytes + user_bytesUNSPECIFIED
codeium_bytes_by_autocompleteBytes de Codeium provenientes de AutocompleteUNSPECIFIED
codeium_bytes_by_commandBytes de Codeium provenientes de CommandUNSPECIFIED

Filtros de PCW

Nombre del campoDescripciónEjemplos
languageLenguaje de programaciónKOTLIN, GO, JAVA
ideIDE en usojetbrains, vscode
versionVersión de Windsurf1.28.0, 130.0
Para filtrar por fecha en las consultas de PCW, utiliza start_timestamp y end_timestamp en el cuerpo principal de la solicitud.

Ejemplos de solicitudes

Ejemplo de datos del usuario

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

Ejemplo de datos 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

Ejemplo de datos de 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

Ejemplo de datos de 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

Respuesta

queryResults
array
Array de resultados de consulta, uno por cada solicitud de consulta
responseItems
array
Array de elementos de resultado
item
object
Objeto que contiene los campos seleccionados y sus valores

Ejemplos de respuestas

Respuesta de datos del usuario

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

Respuesta de datos de Chat

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

Respuesta de datos 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"
          }
        }
      ]
    }
  ]
}

Respuesta de datos de PCW

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

Notas importantes

  • PCW (Percent Code Written) presenta una gran variabilidad dentro de un mismo día o entre usuarios; agrégalo por semanas para obtener información más útil
  • Todos los campos de selección deben tener funciones de agregación o ninguno debe tenerlas (no se pueden mezclar)
  • Los campos con el patrón “distinct_*” no se pueden usar en aggregations
  • Los alias de campos deben ser únicos en todas las selections y aggregations
  • Si no se especifica ninguna función de agregación, el valor predeterminado es UNSPECIFIED