33from enum import Enum
44from 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
98from codemodder .logging import logger
109
1110from ..common import Change , CodeTFWriter , Finding , FixQuality
@@ -39,6 +38,7 @@ class Run(BaseModel):
3938class 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):
4848class 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
5658class 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
7881class 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
8690class GenerationMetadata (BaseModel ):
91+ model_config = ConfigDict (frozen = True )
8792 strategy : Strategy
8893 ai : Optional [AIMetadata ] = None
8994 provisional : bool
9095
9196
9297class 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):
103109class 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
145132class CodeTF (CodeTFWriter , BaseModel ):
146133 run : Run
0 commit comments