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 personalizables, filtros, aggregations y ordenaciones.

Solicitud

service_key
string
required
Tu clave de servicio con permisos “Teams Read-only”
group_name
string
Filtra los resultados para usuarios de un grupo específico (opcional)
query_requests
array
required
Matriz 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
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
Matriz de selecciones de campos que se recuperarán (ver la sección Selections)
filters
array
Matriz de filtros que se aplicarán (ver la sección Filters)
aggregations
array
Matriz de aggregations para agrupar (ver 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 (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 acotan los datos a los elementos que cumplen criterios específicos.
name
string
required
Nombre del campo por el que filtrar
value
string
required
Valor con el que 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 filtro

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

Aggregations

Las aggregations agrupan datos según 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.
Field NameDescriptionValid Aggregations
api_keyHash de la clave de API del usuarioUNSPECIFIED, COUNT
dateFecha UTC del autocompletadoUNSPECIFIED, COUNT
date UTC-xFecha con desplazamiento de zona horaria (p. ej., “date UTC-8” para PST)UNSPECIFIED, COUNT
hourHora UTC del autocompletadoUNSPECIFIED, COUNT
languageLenguaje de programaciónUNSPECIFIED, COUNT
ideIDE en usoUNSPECIFIED, 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 IA del 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 del 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 del 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 usadas desde el ChatSUM, MAX, MIN, AVG

Tipos de intención de Chat

  • CHAT_INTENT_GENERIC - Chat normal
  • CHAT_INTENT_FUNCTION_EXPLAIN - Code Lens de explicación de función
  • CHAT_INTENT_FUNCTION_DOCSTRING - Code Lens de docstring de función
  • CHAT_INTENT_FUNCTION_REFACTOR - Code Lens de refactorización de función
  • CHAT_INTENT_CODE_BLOCK_EXPLAIN - Code Lens de explicación de bloque de código
  • CHAT_INTENT_CODE_BLOCK_REFACTOR - Code Lens de refactorización de bloque de código
  • CHAT_INTENT_PROBLEM_EXPLAIN - Code Lens de explicación de problema
  • CHAT_INTENT_FUNCTION_UNIT_TESTS - 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 solo los comandos aceptados.
Field NameDescriptionValid Aggregations
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_sourceFuente 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
acceptedIndica si el comando fue aceptadoSUM, COUNT

Orígenes 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 de generación
  • PROVIDER_SOURCE_COMMAND_EDIT - Modo de edición

Datos de PCW

Datos del Porcentaje de Código Escrito con seguimiento por 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 utilizadojetbrains, vscode
versionVersión de Windsurf1.28.0, 130.0
Para filtrar por fecha en consultas de PCW, utiliza start_timestamp y end_timestamp en el cuerpo principal de la solicitud.

Ejemplos de solicitudes

Ejemplo de datos de 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
Arreglo de resultados de consulta, uno por cada solicitud de consulta
responseItems
array
Arreglo de elementos de resultado
item
object
Objeto que contiene los campos seleccionados y sus valores

Ejemplos de respuestas

Respuesta de datos de 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 dentro de un mismo día o entre usuarios; agrégalo 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 pueden usarse en aggregations
  • Los alias de los 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