llm provider supports Anthropic and Anthropic compatibility api
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
package anthropic
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
||||
"github.com/mayswind/ezbookkeeping/pkg/llm/provider"
|
||||
"github.com/mayswind/ezbookkeeping/pkg/settings"
|
||||
)
|
||||
|
||||
const anthropicCompatibleMessagesPath = "messages"
|
||||
|
||||
// AnthropicCompatibleMessagesAPIProvider defines the structure of Anthropic compatible messages API provider
|
||||
type AnthropicCompatibleMessagesAPIProvider struct {
|
||||
AnthropicMessagesAPIProvider
|
||||
AnthropicCompatibleBaseURL string
|
||||
AnthropicCompatibleAPIVersion string
|
||||
AnthropicCompatibleAPIKey string
|
||||
AnthropicCompatibleModelID string
|
||||
AnthropicCompatibleMaxTokens uint32
|
||||
}
|
||||
|
||||
// BuildMessagesHttpRequest returns the messages http request by Anthropic compatible messages API provider
|
||||
func (p *AnthropicCompatibleMessagesAPIProvider) BuildMessagesHttpRequest(c core.Context, uid int64) (*http.Request, error) {
|
||||
req, err := http.NewRequest("POST", p.getFinalMessagesRequestUrl(), nil)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if p.AnthropicCompatibleAPIVersion != "" {
|
||||
req.Header.Set("anthropic-version", p.AnthropicCompatibleAPIVersion)
|
||||
}
|
||||
|
||||
if p.AnthropicCompatibleAPIKey != "" {
|
||||
req.Header.Set("X-Api-Key", p.AnthropicCompatibleAPIKey)
|
||||
}
|
||||
|
||||
return req, nil
|
||||
}
|
||||
|
||||
// GetModelID returns the model id of Anthropic compatible messages API provider
|
||||
func (p *AnthropicCompatibleMessagesAPIProvider) GetModelID() string {
|
||||
return p.AnthropicCompatibleModelID
|
||||
}
|
||||
|
||||
// GetMaxTokens returns the max tokens to generate of Anthropic compatible messages API provider
|
||||
func (p *AnthropicCompatibleMessagesAPIProvider) GetMaxTokens() uint32 {
|
||||
return p.AnthropicCompatibleMaxTokens
|
||||
}
|
||||
|
||||
func (p *AnthropicCompatibleMessagesAPIProvider) getFinalMessagesRequestUrl() string {
|
||||
url := p.AnthropicCompatibleBaseURL
|
||||
|
||||
if url[len(url)-1] != '/' {
|
||||
url += "/"
|
||||
}
|
||||
|
||||
url += anthropicCompatibleMessagesPath
|
||||
return url
|
||||
}
|
||||
|
||||
// NewAnthropicCompatibleLargeLanguageModelProvider creates a new Anthropic compatible large language model provider instance
|
||||
func NewAnthropicCompatibleLargeLanguageModelProvider(llmConfig *settings.LLMConfig, enableResponseLog bool) provider.LargeLanguageModelProvider {
|
||||
return newCommonAnthropicMessagesAPILargeLanguageModelAdapter(llmConfig, enableResponseLog, &AnthropicCompatibleMessagesAPIProvider{
|
||||
AnthropicCompatibleBaseURL: llmConfig.AnthropicCompatibleBaseURL,
|
||||
AnthropicCompatibleAPIVersion: llmConfig.AnthropicCompatibleAPIVersion,
|
||||
AnthropicCompatibleAPIKey: llmConfig.AnthropicCompatibleAPIKey,
|
||||
AnthropicCompatibleModelID: llmConfig.AnthropicCompatibleModelID,
|
||||
AnthropicCompatibleMaxTokens: llmConfig.AnthropicCompatibleMaxTokens,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user