File size: 985 Bytes
02c783d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from typing import Optional, List, Any
from dataclasses import dataclass, asdict
from dataloaders.ProblemState import ProblemState


class MemoryClassMeta(type):
    def __new__(cls, name, bases, namespace, field_names=None):
        # Inject type annotations for dataclass to use
        if field_names:
            annotations = {}
            for field in field_names:
                annotations[field] = Any  # or a specific type
            namespace['__annotations__'] = annotations
        clsobj = super().__new__(cls, name, bases, namespace)
        return dataclass(clsobj)  # Apply @dataclass dynamically
    
class BaseMemory(metaclass=MemoryClassMeta, field_names=["ps"]):
    pass


class ReflexionMemory(metaclass=MemoryClassMeta, field_names=["ps", "err_msg", "reflection"]):
    pass


# class FunctionSignatureMemory(BaseMemory):
#     function_signatures: Optional[List] = None


# @dataclass
# class OneshotMemory(BaseMemory):
#     oneshot: Optional[str] = None