Bug: accumulate_delta corrupts tool call items on out-of-order delta indexes
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 72/100
Piste de recherche
Commencez dans openai/lib/streaming/_deltas.py, au niveau de accumulate_delta, et reproduisez le cas signalé où l’index 1 arrive avant l’index 0. Examinez les tests existants pour l’accumulation des deltas et ajoutez des tests couvrant les index clairsemés et reçus dans le désordre. Le travail est terminé lorsque chaque appel d’outil reste à l’index qui lui est destiné, sans que des champs d’appels distincts soient concaténés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
In openai.lib.streaming._deltas.accumulate_delta, list delta entries with index attributes are inserted into acc_value via acc_value.insert(index, delta_entry) when IndexError occurs:
try:
acc_entry = acc_value[index]
except IndexError:
acc_value.insert(index, delta_entry)
In Python, list.insert(index, obj) on a list shorter than index inserts the element at the end of the list (len(list)). When an out-of-order or sparse stream chunk arrives where index > len(acc_value) (for example, index = 1 arrives when acc_value is empty []), acc_value.insert(1, delta_entry) places the item at index 0.
When a subsequent chunk for index = 0 arrives, acc_value[0] matches the entry intended for index 1, causing accumulate_delta(acc_entry, delta_entry) to concatenate strings across distinct tool calls:
id:"call_1" + "call_0"->"call_1call_0"function.name:"func_1" + "func_0"->"func_1func_0"function.arguments:'{"b": 2}{"a": 1}'(invalid JSON syntax)
To Reproduce
from openai.lib.streaming._deltas import accumulate_delta
acc = {}
# Chunk for index 1 arrives first
accumulate_delta(
acc,
{
"tool_calls": [
{"index": 1, "id": "call_1", "type": "function", "function": {"name": "func_1", "arguments": '{"b": 2}'}}
]
},
)
# Chunk for index 0 arrives second
accumulate_delta(
acc,
{
"tool_calls": [
{"index": 0, "id": "call_0", "type": "function", "function": {"name": "func_0", "arguments": '{"a": 1}'}}
]
},
)
print(acc["tool_calls"])
# Corrupted Output: [{'index': 0, 'id': 'call_1call_0', 'type': 'function', 'function': {'name': 'func_1func_0', 'arguments': '{"b": 2}{"a": 1}'}}]
Expected Behavior
List items should occupy their exact numerical index without collisions or string concatenations between different tool calls.
- Langage dominant
- Python
- Étoiles
- 32k
- Forks
- 7.3k
- Merge moyen
- 16 h 38 min
- PR mergées (30 j)
- 170
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de openai/openai-python
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
openai/openai-python#4156 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
fix(auth): SubjectTokenProviderError drops response and duplicates error message in workload identity providersPeut-être pris @mohmedmm l’a pris il y a 26 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
openai/openai-python#4017 · 5 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Define + export `ServiceTiers` string literalPeut-être pris @SparshGarg999 l’a pris il y a 75 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
openai/openai-python#3556 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Empty OPENAI_BASE_URL prevents fallback to default API endpointPeut-être pris @Sehastrajit-S l’a pris il y a 41 jours. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
openai/openai-python#2927 · 7 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Incomplete responses are not handled by `parse_response` when using Structured OutputPeut-être pris @LuminaX-alt l’a pris il y a 455 jours. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
openai/openai-python#2486 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de openai/openai-python
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
Les mainteneurs répondent en général sous 1 jour
-
[oblt-aw][autodoc] Document obs-aw-automerge contract and fix automerge doc inconsistenciesPeut-être pris @github-actions l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
-
admission-deferred priority: medium status: ready work-class: scoped
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
melodic-software/claude-code-plugins#10887 · 4 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
backend bug good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
PoCInnovation/Distribox#255 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
google/langextract#598 ·
Les mainteneurs répondent en général sous 1 jour