50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from dataclasses import dataclass, field
|
|
from pathlib import Path
|
|
from .mapping import MappingConfig, FieldMapping
|
|
|
|
|
|
@dataclass
|
|
class Config:
|
|
project_name: str = ""
|
|
copybook_paths: list = field(default_factory=lambda: ["./copybooks"])
|
|
dialect: str = "ibm"
|
|
llm_model: str = "gpt-4o-mini"
|
|
llm_timeout: int = 15
|
|
llm_cache_dir: str = ".cache/llm"
|
|
coverage_default: str = "boundary"
|
|
rounding_mode: str = "TRUNCATE"
|
|
tolerance: float = 0.01
|
|
runner_mode: str = "native"
|
|
spark_master: str = "local[*]"
|
|
spark_input_format: str = "json"
|
|
num_records: int = 1000
|
|
branch_pass: float = 0.80
|
|
max_llm_cost: float = 0.50
|
|
|
|
@classmethod
|
|
def from_toml(cls, path="aurak.toml"):
|
|
import tomllib
|
|
try:
|
|
with open(path, "rb") as f:
|
|
d = tomllib.load(f)
|
|
except:
|
|
return cls()
|
|
c = cls()
|
|
p = d.get("project", {})
|
|
c.project_name = p.get("name", "")
|
|
c.copybook_paths = p.get("copybook_paths", c.copybook_paths)
|
|
c.dialect = p.get("dialect", "ibm")
|
|
ll = d.get("llm", {})
|
|
c.llm_model = ll.get("model", c.llm_model)
|
|
co = d.get("coverage", {})
|
|
c.coverage_default = co.get("default_target", "boundary")
|
|
cp = d.get("comparison", {})
|
|
c.rounding_mode = cp.get("rounding_mode", "TRUNCATE")
|
|
c.tolerance = cp.get("default_tolerance", c.tolerance)
|
|
r = d.get("runner", {})
|
|
c.runner_mode = r.get("mode", "native")
|
|
s = d.get("spark", {})
|
|
c.spark_master = s.get("master", "local[*]")
|
|
c.num_records = s.get("num_records", c.num_records)
|
|
return c
|