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": [
    {}
  ],
  "filters": [
    {}
  ],
  "aggregations": [
    {}
  ],
  "field": "<string>",
  "name": "<string>",
  "aggregation_function": "<string>",
  "value": "<string>",
  "filter": "<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.

Solicitud

service_key
string
required
Tu clave de servicio con permisos “Teams Read-only”
group_name
string
Filtra los resultados a los usuarios de un grupo específico (opcional)
query_requests
array
required
Matriz de objetos de solicitud de consulta que definen los datos que se deben recuperar

Estructura de la solicitud de consulta

Cada objeto de solicitud de consulta contiene:
data_source
string
required
Fuente de datos a consultar. Opciones:
  • QUERY_DATA_SOURCE_USER_DATA - Datos de Autocomplete
  • QUERY_DATA_SOURCE_CHAT_DATA - Datos de Chat
  • QUERY_DATA_SOURCE_COMMAND_DATA - Datos de Command
  • QUERY_DATA_SOURCE_PCW_DATA - Datos de Percent Code Written
selections
array
required
Arreglo de selecciones de campos para recuperar (consulta la sección Selections)
filters
array
Arreglo de filtros a aplicar (consulta la sección Filters)
aggregations
array
Arreglo de aggregations para agrupar (consulta la sección Aggregations)

Selections

Las selections definen qué campos recuperar y cómo agregarlos.
field
string
required
Nombre del campo a seleccionar (consulta la sección Available Fields)
name
string
Alias del campo. Si no se especifica, el valor predeterminado es {aggregation_function}_{field_name} (en minúsculas)
aggregation_function
string
Función de agregación a aplicar:
  • QUERY_AGGREGATION_UNSPECIFIED (valor predeterminado)
  • QUERY_AGGREGATION_COUNT
  • QUERY_AGGREGATION_SUM
  • QUERY_AGGREGATION_AVG
  • QUERY_AGGREGATION_MAX
  • QUERY_AGGREGATION_MIN

Ejemplo de selección

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

Filtros

Los filtros limitan los datos a los elementos que cumplen criterios específicos.
name
string
required
Nombre del campo por el que se va a filtrar
value
string
required
Valor contra el que se comparará
filter
string
required
Operación de filtro:
  • QUERY_FILTER_EQUAL
  • QUERY_FILTER_NOT_EQUAL
  • QUERY_FILTER_GREATER_THAN
  • QUERY_FILTER_LESS_THAN
  • QUERY_FILTER_GE (mayor o igual que)
  • QUERY_FILTER_LE (menor o igual que)

Ejemplo de filtrado

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

Aggregations

Las aggregations agrupan datos según los criterios especificados.
field
string
required
Nombre del campo por el que agrupar
name
string
required
Alias para el campo de aggregation

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

Todos los Datos de Chat representan respuestas del modelo de Chat, no preguntas del usuario.
Field NameDescriptionValid Aggregations
api_keyHash de la clave de API del usuarioUNSPECIFIED, COUNT
model_idID del modelo de ChatUNSPECIFIED, COUNT
dateFecha UTC de la respuesta de ChatUNSPECIFIED, COUNT
date UTC-xFecha con desfase 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 se aceptó el chat (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 utilizadas 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": "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

Ejemplo de datos de Chat

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "tu_clave_de_servicio_aquí",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
      "selections": [
        {
          "field": "chat_loc_used",
          "name": "líneas_utilizadas",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        }
      ],
      "filters": [
        {
          "name": "tipo_de_intención_más_reciente",
          "filter": "QUERY_FILTER_EQUAL",
          "value": "CHAT_INTENT_FUNCTION_DOCSTRING"
        }
      ],
      "aggregations": [
        {
          "field": "ide",
          "name": "tipo_de_ide"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Ejemplo de datos de Command

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "tu_clave_de_servicio_aquí",
  "query_requests": [
    {
      "data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
      "selections": [
        {
          "field": "lines_added",
          "name": "total_líneas_agregadas",
          "aggregation_function": "QUERY_AGGREGATION_SUM"
        },
        {
          "field": "lines_removed",
          "name": "total_líneas_eliminadas",
          "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": "lenguaje_de_programación"
        }
      ]
    }
  ]
}' \
https://server.codeium.com/api/v1/Analytics

Ejemplo de datos de PCW

curl -X POST --header "Content-Type: application/json" \
--data '{
  "service_key": "tu_service_key_aquí",
  "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
Matriz de resultados de consulta, uno por cada solicitud de consulta
responseItems
array
Matriz de elementos de resultados
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) puede variar mucho en un mismo día o entre usuarios; agrupa por semanas para obtener mejores conclusiones
  • 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 una función de agregación, el valor predeterminado es UNSPECIFIED