44 lines
2.0 KiB
Go
44 lines
2.0 KiB
Go
package store
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
)
|
|
|
|
// GetRuntimeModelCandidateForRemoteTask restores the exact platform model used
|
|
// to submit an asynchronous provider task. It deliberately ignores enabled
|
|
// state so a task can still be cancelled after its platform is disabled.
|
|
func (s *Store) GetRuntimeModelCandidateForRemoteTask(ctx context.Context, platformModelID string, platformID string) (RuntimeModelCandidate, bool, error) {
|
|
platformModelID = strings.TrimSpace(platformModelID)
|
|
platformID = strings.TrimSpace(platformID)
|
|
if platformModelID == "" || platformID == "" {
|
|
return RuntimeModelCandidate{}, false, nil
|
|
}
|
|
var candidate RuntimeModelCandidate
|
|
var credentials, config []byte
|
|
err := s.pool.QueryRow(ctx, `
|
|
SELECT p.id::text, p.platform_key, p.name, p.provider,
|
|
COALESCE(NULLIF(p.config->>'specType', ''), p.provider), COALESCE(p.base_url, ''), p.auth_type,
|
|
p.credentials, p.config, m.id::text, COALESCE(NULLIF(m.provider_model_name, ''), m.model_name),
|
|
m.model_name, COALESCE(m.model_alias, ''),
|
|
COALESCE((m.model_type->>0), 'video_generate')
|
|
FROM platform_models m
|
|
JOIN integration_platforms p ON p.id = m.platform_id
|
|
WHERE m.id = $1::uuid AND p.id = $2::uuid AND p.deleted_at IS NULL`, platformModelID, platformID).Scan(
|
|
&candidate.PlatformID, &candidate.PlatformKey, &candidate.PlatformName, &candidate.Provider,
|
|
&candidate.SpecType, &candidate.BaseURL, &candidate.AuthType, &credentials, &config,
|
|
&candidate.PlatformModelID, &candidate.ProviderModelName, &candidate.ModelName, &candidate.ModelAlias, &candidate.ModelType,
|
|
)
|
|
if IsNotFound(err) {
|
|
return RuntimeModelCandidate{}, false, nil
|
|
}
|
|
if err != nil {
|
|
return RuntimeModelCandidate{}, false, err
|
|
}
|
|
candidate.Credentials = decodeObject(credentials)
|
|
candidate.PlatformConfig = decodeObject(config)
|
|
candidate.ClientID = candidate.PlatformKey + ":" + candidate.ModelType + ":" + firstNonEmpty(candidate.ProviderModelName, candidate.ModelName)
|
|
candidate.QueueKey = candidate.ClientID
|
|
return candidate, true, nil
|
|
}
|