refactor: unify SDK model factories into internal/models

Move CreateModel, BuildReasoningOptions, ReasoningBudgetTokens and
related types from internal/agent to internal/models as NewSDKChatModel,
SDKModelConfig, etc. This eliminates duplicate ClientType constants and
centralises all Twilight AI SDK instance creation in a single package.

NewSDKEmbeddingModel now accepts a clientType parameter and dispatches
to the native Google embedding provider for google-generative-ai,
instead of always using the OpenAI-compatible endpoint.
This commit is contained in:
Acbox
2026-03-26 20:08:35 +08:00
parent 03ba13e7e5
commit 65b2797626
12 changed files with 96 additions and 86 deletions
@@ -35,6 +35,7 @@ type denseRuntime struct {
type denseModelSpec struct {
modelID string
clientType string
baseURL string
apiKey string
dimensions int
@@ -74,7 +75,7 @@ func newDenseRuntime(providerConfig map[string]any, queries *dbsqlc.Queries, cfg
return nil, fmt.Errorf("dense runtime: %w", err)
}
embedModel := models.NewSDKEmbeddingModel(spec.baseURL, spec.apiKey, spec.modelID, denseEmbedTimeout)
embedModel := models.NewSDKEmbeddingModel(spec.clientType, spec.baseURL, spec.apiKey, spec.modelID, denseEmbedTimeout)
return &denseRuntime{
qdrant: qClient,
@@ -565,6 +566,7 @@ func resolveDenseEmbeddingModel(ctx context.Context, queries *dbsqlc.Queries, mo
}
return denseModelSpec{
modelID: strings.TrimSpace(row.ModelID),
clientType: strings.TrimSpace(provider.ClientType),
baseURL: strings.TrimSpace(provider.BaseUrl),
apiKey: strings.TrimSpace(provider.ApiKey),
dimensions: *cfg.Dimensions,
+2 -1
View File
@@ -11,6 +11,7 @@ import (
"github.com/memohai/memoh/internal/agent"
adapters "github.com/memohai/memoh/internal/memory/adapters"
"github.com/memohai/memoh/internal/models"
)
const (
@@ -42,7 +43,7 @@ func New(cfg Config) *Client {
}
func (c *Client) model() *sdk.Model {
return agent.CreateModel(agent.ModelConfig{
return models.NewSDKChatModel(models.SDKModelConfig{
ModelID: c.cfg.ModelID,
ClientType: c.cfg.ClientType,
APIKey: c.cfg.APIKey,