Skip to content

Commit 32d83bc

Browse files
committed
freeze FixResult and child attr classes
1 parent 2198dd8 commit 32d83bc

File tree

2 files changed

+14
-23
lines changed

2 files changed

+14
-23
lines changed

src/codemodder/codetf/common.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,14 @@ class DiffSide(CaseInsensitiveEnum):
6161

6262

6363
class PackageAction(BaseModel):
64+
model_config = ConfigDict(frozen=True)
6465
action: Action
6566
result: PackageResult
6667
package: str
6768

6869

6970
class Change(BaseModel):
71+
model_config = ConfigDict(frozen=True)
7072
lineNumber: int
7173
description: Optional[str]
7274
diffSide: DiffSide = DiffSide.RIGHT
@@ -87,11 +89,13 @@ def validate_description(self):
8789

8890

8991
class Rating(BaseModel):
92+
model_config = ConfigDict(frozen=True)
9093
score: int
9194
description: Optional[str] = None
9295

9396

9497
class FixQuality(BaseModel):
98+
model_config = ConfigDict(frozen=True)
9599
safetyRating: Rating
96100
effectivenessRating: Rating
97101
cleanlinessRating: Rating

src/codemodder/codetf/v3/codetf.py

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
from enum import Enum
44
from typing import Optional
55

6-
from pydantic import BaseModel, model_validator
6+
from pydantic import BaseModel, ConfigDict, model_validator
77

8-
from codemodder.llm import TokenUsage
98
from codemodder.logging import logger
109

1110
from ..common import Change, CodeTFWriter, Finding, FixQuality
@@ -39,6 +38,7 @@ class Run(BaseModel):
3938
class FixStatusType(str, Enum):
4039
"""Status of a fix"""
4140

41+
model_config = ConfigDict(frozen=True)
4242
fixed = "fixed"
4343
skipped = "skipped"
4444
failed = "failed"
@@ -48,12 +48,15 @@ class FixStatusType(str, Enum):
4848
class FixStatus(BaseModel):
4949
"""Metadata describing fix outcome"""
5050

51+
model_config = ConfigDict(frozen=True)
52+
5153
status: FixStatusType
5254
reason: Optional[str] = None
5355
details: Optional[str] = None
5456

5557

5658
class ChangeSet(BaseModel):
59+
model_config = ConfigDict(frozen=True)
5760
path: str
5861
diff: str
5962
changes: list[Change] = []
@@ -76,6 +79,7 @@ class Strategy(str, Enum):
7679

7780

7881
class AIMetadata(BaseModel):
82+
model_config = ConfigDict(frozen=True)
7983
provider: Optional[str] = None
8084
models: Optional[list[str]] = None
8185
total_tokens: Optional[int] = None
@@ -84,12 +88,14 @@ class AIMetadata(BaseModel):
8488

8589

8690
class GenerationMetadata(BaseModel):
91+
model_config = ConfigDict(frozen=True)
8792
strategy: Strategy
8893
ai: Optional[AIMetadata] = None
8994
provisional: bool
9095

9196

9297
class FixMetadata(BaseModel):
98+
model_config = ConfigDict(frozen=True)
9399
# Fix provider ID, corresponds to legacy codemod ID
94100
id: str
95101
# A brief summary of the fix
@@ -103,6 +109,8 @@ class FixMetadata(BaseModel):
103109
class FixResult(BaseModel):
104110
"""Result corresponding to a single finding"""
105111

112+
model_config = ConfigDict(frozen=True)
113+
106114
finding: Finding
107115
fixStatus: FixStatus
108116
changeSets: list[ChangeSet] = []
@@ -120,27 +128,6 @@ def validate_fixMetadata(self):
120128
raise ValueError("fixMetadata must be provided for fixed results")
121129
return self
122130

123-
def store_token_data(self, token_usage: TokenUsage):
124-
if token_usage == TokenUsage() or not self.fixMetadata:
125-
return
126-
127-
if not self.fixMetadata.generation.ai:
128-
self.fixMetadata.generation.ai = AIMetadata(
129-
total_tokens=token_usage.total,
130-
completion_tokens=token_usage.completion_tokens,
131-
prompt_tokens=token_usage.prompt_tokens,
132-
)
133-
else:
134-
self.fixMetadata.generation.ai.completion_tokens = (
135-
self.fixMetadata.generation.ai.completion_tokens or 0
136-
) + token_usage.completion_tokens
137-
self.fixMetadata.generation.ai.prompt_tokens = (
138-
self.fixMetadata.generation.ai.prompt_tokens or 0
139-
) + token_usage.prompt_tokens
140-
self.fixMetadata.generation.ai.total_tokens = (
141-
self.fixMetadata.generation.ai.total_tokens or 0
142-
) + token_usage.total
143-
144131

145132
class CodeTF(CodeTFWriter, BaseModel):
146133
run: Run

0 commit comments

Comments
 (0)