FunctionManager reload can execute stale bytecode after same-size source edits
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 74/100
Piste de recherche
L’issue identifie utils/function_manager.py et fournit une reproduction qui montre des résultats obsolètes après reload_functions(). Lisez le chargeur et exécutez la reproduction décrite pour confirmer l’échec ; le résultat attendu est que les rechargements et les gestionnaires nouvellement créés exécutent le code source actuel, tandis que l’encodage existant du code source, le filtrage des fonctions et le comportement de suppression lors du rechargement continuent de fonctionner.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
FunctionManager.reload_functions() can continue executing a tool's old source after the file has been edited. The dynamic loader accepts a timestamp-based .pyc when the source has the same integer-second mtime and byte length. Two same-length saves within one second can therefore survive an explicit reload.
Reproduced against main a2ea4a263cebe9a7abd01ee3b5b0bf95698ed328 on Windows with Python 3.12.13:
import os
import tempfile
from pathlib import Path
from utils.function_manager import FunctionManager
with tempfile.TemporaryDirectory() as directory:
tool = Path(directory) / "tool.py"
tool.write_text("def value(): return 1\n", encoding="utf-8")
os.utime(tool, (1700000000, 1700000000))
manager = FunctionManager(directory)
assert manager.call_function("value") == 1
tool.write_text("def value(): return 2\n", encoding="utf-8")
os.utime(tool, (1700000000, 1700000000))
manager.reload_functions()
assert manager.call_function("value") == 2 # fails: still returns 1
The fixed timestamp makes the cache collision deterministic; ordinary same-second edits can have the same effect. Creating a new manager also accepts a stale existing bytecode cache.
A focused fix is to execute compiled current source in the module namespace already prepared by module_from_spec, rather than reading the timestamp-based bytecode cache. Three tests against the real module give 2 failed, 1 passed on main and 3 passed with this change; the control checks source encoding, function filtering, and removing a tool on reload. No model/provider calls are involved.
This concerns source freshness, independently of the dataclass/module-registration issue #681 and closed PR #682. Searches for FunctionManager, reload, and bytecode found no matching report or PR. Prepared with Codex assistance; the reproduction and tests were run locally.
- Langage dominant
- Python
- Étoiles
- 34.6k
- Forks
- 4.3k
- Merge moyen
- 9 h 21 min
- PR mergées (30 j)
- 1
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Aucun modèle de pull request
- Aucun 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 OpenBMB/ChatDev
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
-
CodeReviewModification never shows the programmer the six review regulations, so fixes are made blind to the checklist they are re-reviewed againstPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 1/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
Les mainteneurs répondent en général sous 1 jour
-
FunctionManager silently drops tool modules containing dataclasses with postponed annotationsPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de OpenBMB/ChatDev
Issues similaires
-
Support .aac audio uploadsPeut-être pris @julien731 l’a pris aujourd’hui. Ouvertefeature
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
nimblehq/audio-transcriber#153 ·
-
help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
antonyrag/ragleap-core#1062 ·
-
needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
gke-labs/kube-agents#4321 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Git-Hospital/githealthcheck#61 ·
Les mainteneurs répondent en général sous 1 jour
-
changelog investigate
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
ramnes/notion-sdk-py#433 ·