Ctrl K
ComunidadGuías…

internal/llm/key_file_authorization.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package llm

import (
	"context"
	"net/http"
	"strings"

	"github.com/yeomyeonggeori/blueclaw/internal/config"
	"github.com/yeomyeonggeori/blueprotocol/model"
	"github.com/yeomyeonggeori/blueprotocol/model/decisions"
)

func keyFilePath(endpointConfiguration config.ModelEndpointConfiguration) string {
	if strings.TrimSpace(endpointConfiguration.APIKeyEnvironment) != "" {
		return ""
	}
	return strings.TrimSpace(endpointConfiguration.APIKeyPath)
}

func keyFileClient(apiKeyPath string, requesterEmailHeader string) *http.Client {
	return &http.Client{Transport: keyFileAuthorization{apiKeyPath: apiKeyPath, requesterEmailHeader: strings.TrimSpace(requesterEmailHeader)}}
}

type keyFileAuthorization struct {
	apiKeyPath           string
	requesterEmailHeader string
}

func (authorization keyFileAuthorization) RoundTrip(request *http.Request) (*http.Response, error) {
	apiKey, errorValue := readAPIKey(authorization.apiKeyPath)
	if errorValue != nil {
		if request.Body != nil {
			request.Body.Close()
		}
		return nil, errorValue
	}
	authorized := request.Clone(request.Context())
	authorized.Header.Set("Authorization", "Bearer "+apiKey)
	nameRequester(authorized, authorization.requesterEmailHeader)
	return http.DefaultTransport.RoundTrip(authorized)
}

type keyFileDecisionModel struct {
	endpointURL          string
	modelName            string
	apiKeyPath           string
	requesterEmailHeader string
}

func (decisionModel keyFileDecisionModel) Decide(ctx context.Context, request model.DecisionRequest) (model.DecisionResponse, error) {
	apiKey, errorValue := readAPIKey(decisionModel.apiKeyPath)
	if errorValue != nil {
		return model.DecisionResponse{}, errorValue
	}
	endpoint := decisions.Endpoint{URL: decisionModel.endpointURL, ModelName: decisionModel.modelName, APIKey: apiKey, HTTPClient: requesterNamingDecisionClient(decisionModel.requesterEmailHeader)}
	return endpoint.DecisionModel().Decide(ctx, request)
}