elastic / elastic/elastic-evals-sdk-python
[kbn-evals] HTTP efficiency: connection pooling and score batching
- Lenguaje dominante
- Python
- Estrellas
- 2
- Forks
- 0
- Merge medio
- 1 d 13 h
- PR fusionados (30 d)
- 18
Descripción
### Summary
Every request to Kibana opens a new `httpx.AsyncClient`, makes one call, and closes it. For N examples x R repetitions, every score ingest is a separate TCP connection to the same host. The scores API supports batching but each evaluator result is sent alone.
The [httpx async docs](https://www.python-httpx.org/async/#opening-and-closing-clients) say: "do not instantiate multiple client instances inside a hot loop."
### Problem
- `datasets_client.py:61-62`, `scores_client.py:39`, `evaluators_client.py:83-88`, `inference/client.py:179-180` all use `async with httpx.AsyncClient(...) as client:` per request
- Score ingest sends one `POST` per evaluator result; the scores API accepts a list of scores per request
### Fix
- Create one `httpx.AsyncClient` per API client class in `__init__`, close it in `aclose()`
- `ElasticEvalsClient` manages the lifecycle via `async with` or a `finally` block
- Batch score ingest calls per example rather than per evaluator result
### Done when
- [ ] Each API client holds one `httpx.AsyncClient` for the lifetime of a run
- [ ] `ElasticEvalsClient` supports `async with client:` or `await client.aclose()`
- [ ] Score ingest sends one request per example instead of one per evaluator result
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
Lee datasets_client.py, scores_client.py, evaluators_client.py e inference/client.py para comparar sus ciclos de vida de AsyncClient por solicitud y, a continuación, rastrea la propiedad de ElasticEvalsClient. Verifica el trabajo completado comprobando que los clientes reutilicen un cliente HTTP por ejecución, admitan la limpieza asíncrona y envíen una solicitud de ingestión de scores por ejemplo.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- api, networking, performance
- Tipo de issue
- Refactorización
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Tranquilo
- Claridad
- Bien especificado
- Aptitud para principiantes
- 55/100