bug(scores): create_score sends numpy.bool_ as JSON `true` and Decimal as "<Decimal>" since v5.0.2
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 74/100
Línea de trabajo
Empieza por leer el cambio en #2006 e inspecciona la construcción del payload de create_score y el comportamiento de EventSerializer mencionados en la reproducción. Ejecuta la reproducción offline proporcionada con numpy.bool_ y decimal.Decimal y comprueba después que todos los valores que no sean cadenas y que float() acepte se serialicen como números JSON, mientras que las cadenas sigan siendo cadenas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
#2006 (perf: build create_score body without Fern's dict(), in v5.0.2) replaced CreateScoreRequest(...) with a hand-built dict and kept only the bool/int → float coercion the model used to do. The model coerced every non-str value to float, so other numeric types now go out differently:
value passed to create_score |
v5.0.1 (before #2006) | main (ab861f1) |
|---|---|---|
True |
1.0 |
1.0 |
numpy.bool_(True) (e.g. np.mean(hits) > 0.5) |
1.0 |
true |
decimal.Decimal("0.75") |
0.75 |
"<Decimal>" |
numpy.int64(3) |
3.0 |
3 |
The server's score body takes z.union([z.string(), z.number()]) for value, so a JSON boolean is rejected. "<Decimal>" is accepted as a string, so the numeric score quietly turns into a categorical value "<Decimal>". This goes through every scoring path: create_score, span.score(), score_current_span/trace, and experiment item and run evaluators (Evaluation(value=...)), where numpy results are common.
To reproduce (no network, the score queue is captured)
import json, decimal, numpy as np
from langfuse import Langfuse
from langfuse._utils.serializer import EventSerializer
lf = Langfuse(public_key="pk-lf-test", secret_key="sk-lf-test", base_url="http://127.0.0.1:9")
sent = []
lf._resources.add_score_task = lambda score, **kw: sent.append(score)
for v in [np.bool_(True), decimal.Decimal("0.75")]:
lf.create_score(name="accuracy", value=v, trace_id="0" * 31 + "1")
print([json.loads(json.dumps(s, cls=EventSerializer))["value"] for s in sent])
# main: [True, '<Decimal>'] v5.0.1: [1.0, 0.75]
Expected
Same payload as before #2006: any non-str value that float() accepts is sent as a float.
SDK: langfuse-python main ab861f1 (v5.0.4), Python 3.12.
- Lenguaje dominante
- Python
- Estrellas
- 504
- Forks
- 391
- Merge medio
- 1 d 1 h
- PR fusionados (30 d)
- 64
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de langfuse/langfuse-python
-
tests/unit/test_prompt.py fails on a fresh clone without LANGFUSE_* env varsPosiblemente ocupada @Mathoholic la tomó hace 18 días. Abiertobug feat-prompt-management sdk-python
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
langfuse/langfuse-python#1976 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
bug(openai): a stream that fails mid-iteration ends the generation without level ERRORPosiblemente ocupada @hassiebp la tomó hace 7 días. Abiertobug integration-openai sdk-python
langfuse/langfuse-python#2039 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
fix(serializer): handle single-string __slots__ and detect cycles in slotted objectsPosiblemente ocupada @hassiebp la tomó hace 13 días. Abiertobug sdk-python
langfuse/langfuse-python#2014 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
bug: ChatPromptClient.compile appends str(whole list) once per non-dict placeholder itemPosiblemente ocupada @nimarb la tomó hace 8 días. Abiertobug feat-prompt-management sdk-python
langfuse/langfuse-python#1971 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
bug: GCS upload detection in MediaManager uses substring match on the full URLPosiblemente ocupada @hassiebp la tomó hace 29 días. Abiertobug feat-multimodal-media sdk-python
langfuse/langfuse-python#1913 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
Todos los issues de langfuse/langfuse-python
Issues similares
-
factory
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Arize-ai/phoenix#17420 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
FireDynamics/LEDSmokeAnalysis#176 ·
Los mantenedores suelen responder en 1 día
-
PC
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 1 día
-
Make `ocifs` optionalAbiertodependencies
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
dlt-contrib/dlt-filesystem#51 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día