Source code for ai2_kit.core.artifact

from .pydantic import BaseModel
from typing import Optional, Mapping, TypedDict
import os
import copy


[docs] class ArtifactDict(TypedDict): """ A dict representation of Artifact. Use this when you need to run a remote function call as pydantic model is not pickleable. referrer is not included in this dict as it is not pickleable. """ url: str attrs: dict executor: Optional[str] format: Optional[str] includes: Optional[str] key: Optional[str]
[docs] class Artifact(BaseModel): key: Optional[str] = None executor: Optional[str] = None url: str format: Optional[str] = None includes: Optional[str] = None attrs: dict = dict()
[docs] @classmethod def of(cls, url: str, key: Optional[str] = None, executor: Optional[str] = None, includes: Optional[str] = None, attrs: Optional[dict] = None, format: Optional[str] = None,): """ Create an Artifact instance. Use this instead of __init__ to avoid type error of pydantic This method should be deprecated. """ return cls(url=url, executor=executor, format=format, includes=includes, attrs=dict() if attrs is None else copy.deepcopy(attrs), # deepcopy to reduce chance of mistake key=key)
[docs] def to_dict(self) -> ArtifactDict: """Convert to a dict representation. Use this when you need to run a remote function call as pydantic model is not pickleable.""" return self.dict() # type: ignore
[docs] def join(self, *paths, **kwargs): url = os.path.join(self.url, *paths) return Artifact.of(url=url, executor=self.executor, **kwargs)
ArtifactMap = Mapping[str, Artifact]