59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
package openai_compat
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"iop/packages/go/config"
|
|
)
|
|
|
|
const Name = "openai_compat"
|
|
|
|
// Adapter is the OpenAI-compatible adapter. It carries an explicit provider
|
|
// label, per-request auth/header injection and top-level option passthrough so
|
|
// a provider boundary and its config contract stay distinct.
|
|
type Adapter struct {
|
|
instanceName string
|
|
provider string
|
|
endpoint string
|
|
headers map[string]string
|
|
capacity int
|
|
maxQueue int
|
|
queueTimeoutMS int
|
|
requestTimeoutMS int
|
|
client *http.Client
|
|
logger *zap.Logger
|
|
}
|
|
|
|
// New creates an OpenAI-compatible adapter. The optional instanceName is the
|
|
// registry instance key used to disambiguate multiple instances on a node.
|
|
func New(cfg config.OpenAICompatConf, logger *zap.Logger, instanceName ...string) *Adapter {
|
|
endpoint := strings.TrimRight(cfg.Endpoint, "/")
|
|
name := Name
|
|
if len(instanceName) > 0 && instanceName[0] != "" {
|
|
name = instanceName[0]
|
|
}
|
|
var headers map[string]string
|
|
if len(cfg.Headers) > 0 {
|
|
headers = make(map[string]string, len(cfg.Headers))
|
|
for k, v := range cfg.Headers {
|
|
headers[k] = v
|
|
}
|
|
}
|
|
return &Adapter{
|
|
instanceName: name,
|
|
provider: cfg.Provider,
|
|
endpoint: endpoint,
|
|
headers: headers,
|
|
capacity: cfg.Capacity,
|
|
maxQueue: cfg.MaxQueue,
|
|
queueTimeoutMS: cfg.QueueTimeoutMS,
|
|
requestTimeoutMS: cfg.RequestTimeoutMS,
|
|
client: &http.Client{},
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
func (a *Adapter) Name() string { return Name }
|