File size: 2,457 Bytes
c84055e
c2d58b3
 
c84055e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
461c1a0
 
 
 
 
 
c84055e
 
 
 
 
 
 
 
 
 
 
 
 
cadf158
c84055e
ac89508
c84055e
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from pydantic import BaseSettings, Field

class Settings(BaseSettings):
    # Default values for the processor and model
    processor: str = Field(default="senga-ml/donut-v16")
    model: str = Field(default="senga-ml/donut-v16")
    dataset: str = Field(default="senga-ml/dnotes-data-v6")
    base_config: str = Field(default="naver-clova-ix/donut-base")
    base_processor: str = Field(default="naver-clova-ix/donut-base")
    base_model: str = Field(default="naver-clova-ix/donut-base")
    inference_stats_file: str = Field(default="data/donut_inference_stats.json")
    training_stats_file: str = Field(default="data/donut_training_stats.json")
    evaluate_stats_file: str = Field(default="data/donut_evaluate_stats.json")
    
    # The shipper_id to dynamically select model and processor
    shipper_id: str = Field(default="default_shipper")
    
    class Config:
        # This enables the automatic reloading of values when they change
        validate_assignment = True
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.set_model()
    
    # Function to dynamically select model and processor based on shipper_id
    def set_model(self):
        shipper_model_map = {
            "61": {"model": "senga-ml/donut-16", "processor": "senga-ml/donut-v16"},
            "81": {"model": "senga-ml/donut-16", "processor": "senga-ml/donut-v16"},
            "139": {"model": "senga-ml/donut-16", "processor": "senga-ml/donut-v16"},
            "165": {"model": "senga-ml/donut-17", "processor": "senga-ml/donut-v17"},
            "127": {"model": "senga-ml/donut-17", "processor": "senga-ml/donut-v17"},
            "145": {"model": "senga-ml/donut-17", "processor": "senga-ml/donut-v17"},
        }
        
        config = shipper_model_map.get(
            self.shipper_id, 
            {"model": self.base_model, "processor": self.base_processor}
        )
        
        self.model = config["model"]
        self.processor = config["processor"]
        
        # For debugging
        print(f"Selected model for shipper {self.shipper_id}: {self.model}")
        print(f"Selected processor for shipper {self.shipper_id}: {self.processor}")

# Create a singleton instance
settings = Settings()

# Example of how to update shipper_id and trigger model change
def update_shipper(new_shipper_id):
    settings.shipper_id = new_shipper_id
    settings.set_model()
    return settings.model, settings.processor