Documentation
¶
Overview ¶
Package modelfetch은 크기와 체크섬을 고정한 모델 파일을 받고 검증한다.
표준 라이브러리만 쓴다. 그것이 이 패키지가 따로 있는 이유다. internal/embed 에 두면 그 패키지의 추론 의존(hugot, gomlx)이 함께 링크되어, 임베딩을 쓰지 않는 바이너리가 추론 스택을 통째로 지고 간다. voice 모듈이 그 경우다(ADR 0080, 0081).
어떤 모델인지는 이 패키지가 모른다. 호출자가 ModelFile 목록을 준다.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrChecksum은 받은 파일의 sha256 이 기대값과 다를 때의 오류다. ErrChecksum = errors.New("체크섬 불일치") // ErrSize은 받은 파일의 크기가 기대값과 다를 때의 오류다. ErrSize = errors.New("크기 불일치") // ErrMissingFile은 오프라인 자료에 기대한 파일이 없을 때의 오류이다. ErrMissingFile = errors.New("파일 없음") )
내려받기 실패의 종류다. 호출자가 문구를 고르게 보내는 값이다.
Functions ¶
func Download ¶
func Download(ctx context.Context, client *http.Client, base, dir string, files []ModelFile, prog ProgressFn) ([]string, error)
Download는 files 를 dir 로 받는다. 이미 있고 체크섬이 맞은 파일은 받지 않고 그 이름을 돌려준다. 파일에 Base 가 있으면 그것을 쓰고 없으면 인자로 받은 base 를 쓴다.
이어받기는 Range 로 한다. 부분 파일이 있으면 그 지점부터 받고 서버가 206 을 주지 않으면 처음부터 받는다. Ctrl-C 로 죽어도 다음 실행이 이어 받을 수 있도록 임시 파일을 쓰지 않고 대상 파일에 직접 쓰며 검증은 다 받은 뒤에 한다. hugot 의 DownloadModel 을 쓰지 않는 이유는 체크섬 고정도 이어받기도 진행률도 호출자 손에 없기 때문이다(ADR 0074).
Types ¶
type FileStatus ¶
type FileStatus struct {
Name string `json:"name"`
Exists bool `json:"exists"`
Size int64 `json:"size"`
ExpectedSize int64 `json:"expectedSize"`
SizeMatches bool `json:"sizeMatches"`
ExpectedSHA256 string `json:"expectedSha256"`
ChecksumMatches *bool `json:"checksumMatches,omitempty"`
}
FileStatus는 model status 가 낼 파일 하나의 상태다.
type ModelFile ¶
type ModelFile struct {
// Base는 이 파일만의 내려받기 URL 앞부분이다. 비면 호출자가 준
// 기본 base 를 쓴다.
//
// 모델 하나가 호스트 하나에서 오지 않는 경우가 있다. 음성 모델이
// 그렇다. whisper 는 HuggingFace 에, 화자 임베딩은 GitHub 릴리스에
// 있다(ADR 0081). 그때 파일마다 호스트를 준다.
Base string
// Remote는 base 뒤에 붙는 경로다.
Remote string
// Name은 모델 디렉토리 안에 놓이는 파일 이름이다. Remote 와 달리
// 평평하다. 원격의 디렉토리 계층을 만들지 않는다.
Name string
// Size는 바이트 크기다.
Size int64
// SHA256은 기대 체크섬이다.
SHA256 string
}
ModelFile은 모델을 이루는 파일 하나의 기대값이다.
type ProgressFn ¶
ProgressFn은 내려받기 진행률을 받는 콜백이다. received 가 total 에 이르면 그 파일이 끝난 것이다. 이미 있어 건너뛴 파일에는 부르지 않는다. 건너뜀은 Download 의 반환값으로 안다.