feat: allow production provider bootstrap
This commit is contained in:
1 parent
6480e503eb
commit
22fc7a56d8
21 files changed
+192
-18
No files matched your search
@@ -92,9 +92,10 @@ func (scope Scope) Owns(job Job) bool {
|
||||
type ErrorKind string
|
||||
|
||||
const (
|
||||
ErrorInvalid ErrorKind = "invalid"
|
||||
ErrorNotFound ErrorKind = "not_found"
|
||||
ErrorConflict ErrorKind = "conflict"
|
||||
ErrorInvalid ErrorKind = "invalid"
|
||||
ErrorNotFound ErrorKind = "not_found"
|
||||
ErrorConflict ErrorKind = "conflict"
|
||||
ErrorUnavailable ErrorKind = "unavailable"
|
||||
)
|
||||
|
||||
type Error struct {
|
||||
|
||||
@@ -121,6 +121,7 @@ type ProviderJobBuilder struct {
|
||||
ImageEngine, VideoEngine string
|
||||
ImageEngines map[string]ProviderTarget
|
||||
VideoEngines map[string]ProviderTarget
|
||||
UnavailableProviders map[string]string
|
||||
NewID func() string
|
||||
}
|
||||
|
||||
@@ -141,6 +142,9 @@ func (b ProviderJobBuilder) Build(_ context.Context, owner, client, capability,
|
||||
if err != nil {
|
||||
return CreateCommand{}, err
|
||||
}
|
||||
if message := strings.TrimSpace(b.UnavailableProviders[target.Provider]); message != "" {
|
||||
return CreateCommand{}, &Error{Kind: ErrorUnavailable, Status: 503, Message: message}
|
||||
}
|
||||
if target.Provider == "" || target.Model == "" || b.NewID == nil {
|
||||
return CreateCommand{}, errors.New("provider job builder is not configured")
|
||||
}
|
||||
|
||||
@@ -40,6 +40,23 @@ func TestProviderJobBuilderPreparesImageRequestAndEngineOverride(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestProviderJobBuilderRejectsUnconfiguredProviderBeforeCreation(t *testing.T) {
|
||||
b := testProviderBuilder()
|
||||
b.UnavailableProviders = map[string]string{
|
||||
"evolink": "EvoLink 服务商未配置,请先配置 EVOLINK_API_KEY。",
|
||||
}
|
||||
_, err := b.Build(context.Background(), "owner", "client", "image.generate", "idem", map[string]any{
|
||||
"engine": "evolink", "prompt": "hello",
|
||||
})
|
||||
if err == nil || err.Error() != "EvoLink 服务商未配置,请先配置 EVOLINK_API_KEY。" {
|
||||
t.Fatalf("error = %v", err)
|
||||
}
|
||||
var unavailable *Error
|
||||
if !errors.As(err, &unavailable) || unavailable.Kind != ErrorUnavailable || unavailable.Status != 503 {
|
||||
t.Fatalf("error = %#v, want unavailable 503", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestProviderJobBuilderUsesPublicInputURLsForImageMaterialCoverage(t *testing.T) {
|
||||
b := testProviderBuilder()
|
||||
cmd, err := b.Build(context.Background(), "owner", "client", "image.generate", "", map[string]any{
|
||||
|
||||
Reference in new issue
Block a user