modelfetch

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Overview

Package modelfetch은 크기와 체크섬을 고정한 모델 파일을 받고 검증한다.

표준 라이브러리만 쓴다. 그것이 이 패키지가 따로 있는 이유다. internal/embed 에 두면 그 패키지의 추론 의존(hugot, gomlx)이 함께 링크되어, 임베딩을 쓰지 않는 바이너리가 추론 스택을 통째로 지고 간다. voice 모듈이 그 경우다(ADR 0080, 0081).

어떤 모델인지는 이 패키지가 모른다. 호출자가 ModelFile 목록을 준다.

Index

Constants

This section is empty.

Variables

View Source
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).

func Import

func Import(src, dir string, files []ModelFile) ([]string, error)

Import는 오프라인 자료에서 files 를 가져와 dir 에 놓는다. src 는 디렉토리 또는 tar 아카이브다. tar 는 묶음 그대로와 gzip 으로 묶은 것 둘 다 받는다. 항목 이름은 평평한 파일 이름이거나 저장소처럼 onnx/ 아래에 있는 경로다. 어떤 배치로 와도 ModelDir 에는 평평하게 놓는다. 가져온 파일은 내려받기와 같은 검증을 지나므로 내용이 기대값과 다르면 실패한다. 가져다 놓은 파일 이름 목록을 돌려준다.

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 가 낼 파일 하나의 상태다.

func Inspect

func Inspect(dir string, files []ModelFile, verify bool) ([]FileStatus, error)

Inspect는 dir 안 모델 파일의 상태를 낸다. verify 가 참일 때만 sha256 을 계산한다. 기가바이트를 읽는 비용을 기본으로 물지 않게 하기 위해서다.

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

type ProgressFn func(name string, received, total int64)

ProgressFn은 내려받기 진행률을 받는 콜백이다. received 가 total 에 이르면 그 파일이 끝난 것이다. 이미 있어 건너뛴 파일에는 부르지 않는다. 건너뜀은 Download 의 반환값으로 안다.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL