From 2198dd876ff9b5959c7f13f1d9940b043bd6908b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Jul 2025 11:37:52 -0300 Subject: [PATCH 1/4] Update dependency openai to >=1.95,<1.96 (#1082) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 28f84fbf..24521b2a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -66,7 +66,7 @@ test = [ "Jinja2~=3.1.2", "jsonschema~=4.24.0", "lxml>=6.0.0,<6.1.0", - "openai>=1.93,<1.94", + "openai>=1.95,<1.96", "mock==5.2.*", "pre-commit<5", "Pyjwt~=2.10.0", @@ -93,7 +93,7 @@ complexity = [ "xenon==0.9.*", ] openai = [ - "openai>=1.93,<1.94", + "openai>=1.95,<1.96", ] azure = [ "azure-ai-inference>=1.0.0b1,<2.0", From 21d033f4959c82e7316f1dda92f4f083d8ba1571 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 18 Jul 2025 08:06:53 -0300 Subject: [PATCH 2/4] Update dependency openai to >=1.97,<1.98 (#1083) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 24521b2a..c43e2cb0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -66,7 +66,7 @@ test = [ "Jinja2~=3.1.2", "jsonschema~=4.24.0", "lxml>=6.0.0,<6.1.0", - "openai>=1.95,<1.96", + "openai>=1.97,<1.98", "mock==5.2.*", "pre-commit<5", "Pyjwt~=2.10.0", @@ -93,7 +93,7 @@ complexity = [ "xenon==0.9.*", ] openai = [ - "openai>=1.95,<1.96", + "openai>=1.97,<1.98", ] azure = [ "azure-ai-inference>=1.0.0b1,<2.0", From a992b929489dc5ef65b5d412ec8b6e5339eefc0f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 09:03:49 -0300 Subject: [PATCH 3/4] Update dependency jsonschema to ~=4.25.0 (#1084) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index c43e2cb0..ced0b2e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,7 @@ test = [ "Flask<4", "httpx~=0.27", "Jinja2~=3.1.2", - "jsonschema~=4.24.0", + "jsonschema~=4.25.0", "lxml>=6.0.0,<6.1.0", "openai>=1.97,<1.98", "mock==5.2.*", From 61d556dcaa98a89827048053b6e49e3fe7231ac4 Mon Sep 17 00:00:00 2001 From: Dani Alcala <112832187+clavedeluna@users.noreply.github.com> Date: Tue, 22 Jul 2025 15:17:27 -0300 Subject: [PATCH 4/4] freeze FixResult and child attr classes (#1085) --- src/codemodder/codetf/common.py | 4 ++++ src/codemodder/codetf/v3/codetf.py | 33 +++++++++--------------------- 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/src/codemodder/codetf/common.py b/src/codemodder/codetf/common.py index 7bfdee6d..f2cb5a9d 100644 --- a/src/codemodder/codetf/common.py +++ b/src/codemodder/codetf/common.py @@ -61,12 +61,14 @@ class DiffSide(CaseInsensitiveEnum): class PackageAction(BaseModel): + model_config = ConfigDict(frozen=True) action: Action result: PackageResult package: str class Change(BaseModel): + model_config = ConfigDict(frozen=True) lineNumber: int description: Optional[str] diffSide: DiffSide = DiffSide.RIGHT @@ -87,11 +89,13 @@ def validate_description(self): class Rating(BaseModel): + model_config = ConfigDict(frozen=True) score: int description: Optional[str] = None class FixQuality(BaseModel): + model_config = ConfigDict(frozen=True) safetyRating: Rating effectivenessRating: Rating cleanlinessRating: Rating diff --git a/src/codemodder/codetf/v3/codetf.py b/src/codemodder/codetf/v3/codetf.py index b4036472..d60e140c 100644 --- a/src/codemodder/codetf/v3/codetf.py +++ b/src/codemodder/codetf/v3/codetf.py @@ -3,9 +3,8 @@ from enum import Enum from typing import Optional -from pydantic import BaseModel, model_validator +from pydantic import BaseModel, ConfigDict, model_validator -from codemodder.llm import TokenUsage from codemodder.logging import logger from ..common import Change, CodeTFWriter, Finding, FixQuality @@ -39,6 +38,7 @@ class Run(BaseModel): class FixStatusType(str, Enum): """Status of a fix""" + model_config = ConfigDict(frozen=True) fixed = "fixed" skipped = "skipped" failed = "failed" @@ -48,12 +48,15 @@ class FixStatusType(str, Enum): class FixStatus(BaseModel): """Metadata describing fix outcome""" + model_config = ConfigDict(frozen=True) + status: FixStatusType reason: Optional[str] = None details: Optional[str] = None class ChangeSet(BaseModel): + model_config = ConfigDict(frozen=True) path: str diff: str changes: list[Change] = [] @@ -76,6 +79,7 @@ class Strategy(str, Enum): class AIMetadata(BaseModel): + model_config = ConfigDict(frozen=True) provider: Optional[str] = None models: Optional[list[str]] = None total_tokens: Optional[int] = None @@ -84,12 +88,14 @@ class AIMetadata(BaseModel): class GenerationMetadata(BaseModel): + model_config = ConfigDict(frozen=True) strategy: Strategy ai: Optional[AIMetadata] = None provisional: bool class FixMetadata(BaseModel): + model_config = ConfigDict(frozen=True) # Fix provider ID, corresponds to legacy codemod ID id: str # A brief summary of the fix @@ -103,6 +109,8 @@ class FixMetadata(BaseModel): class FixResult(BaseModel): """Result corresponding to a single finding""" + model_config = ConfigDict(frozen=True) + finding: Finding fixStatus: FixStatus changeSets: list[ChangeSet] = [] @@ -120,27 +128,6 @@ def validate_fixMetadata(self): raise ValueError("fixMetadata must be provided for fixed results") return self - def store_token_data(self, token_usage: TokenUsage): - if token_usage == TokenUsage() or not self.fixMetadata: - return - - if not self.fixMetadata.generation.ai: - self.fixMetadata.generation.ai = AIMetadata( - total_tokens=token_usage.total, - completion_tokens=token_usage.completion_tokens, - prompt_tokens=token_usage.prompt_tokens, - ) - else: - self.fixMetadata.generation.ai.completion_tokens = ( - self.fixMetadata.generation.ai.completion_tokens or 0 - ) + token_usage.completion_tokens - self.fixMetadata.generation.ai.prompt_tokens = ( - self.fixMetadata.generation.ai.prompt_tokens or 0 - ) + token_usage.prompt_tokens - self.fixMetadata.generation.ai.total_tokens = ( - self.fixMetadata.generation.ai.total_tokens or 0 - ) + token_usage.total - class CodeTF(CodeTFWriter, BaseModel): run: Run