mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
package providers
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
anthropicprovider "github.com/sipeed/picoclaw/pkg/providers/anthropic"
|
|
)
|
|
|
|
type ClaudeProvider struct {
|
|
delegate *anthropicprovider.Provider
|
|
}
|
|
|
|
func NewClaudeProvider(token string) *ClaudeProvider {
|
|
return &ClaudeProvider{
|
|
delegate: anthropicprovider.NewProvider(token),
|
|
}
|
|
}
|
|
|
|
func NewClaudeProviderWithBaseURL(token, apiBase string) *ClaudeProvider {
|
|
return &ClaudeProvider{
|
|
delegate: anthropicprovider.NewProviderWithBaseURL(token, apiBase),
|
|
}
|
|
}
|
|
|
|
func NewClaudeProviderWithTokenSource(token string, tokenSource func() (string, error)) *ClaudeProvider {
|
|
return &ClaudeProvider{
|
|
delegate: anthropicprovider.NewProviderWithTokenSource(token, tokenSource),
|
|
}
|
|
}
|
|
|
|
func NewClaudeProviderWithTokenSourceAndBaseURL(token string, tokenSource func() (string, error), apiBase string) *ClaudeProvider {
|
|
return &ClaudeProvider{
|
|
delegate: anthropicprovider.NewProviderWithTokenSourceAndBaseURL(token, tokenSource, apiBase),
|
|
}
|
|
}
|
|
|
|
func newClaudeProviderWithDelegate(delegate *anthropicprovider.Provider) *ClaudeProvider {
|
|
return &ClaudeProvider{delegate: delegate}
|
|
}
|
|
|
|
func (p *ClaudeProvider) Chat(ctx context.Context, messages []Message, tools []ToolDefinition, model string, options map[string]interface{}) (*LLMResponse, error) {
|
|
resp, err := p.delegate.Chat(ctx, messages, tools, model, options)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
func (p *ClaudeProvider) GetDefaultModel() string {
|
|
return p.delegate.GetDefaultModel()
|
|
}
|
|
|
|
func createClaudeTokenSource() func() (string, error) {
|
|
return func() (string, error) {
|
|
cred, err := getCredential("anthropic")
|
|
if err != nil {
|
|
return "", fmt.Errorf("loading auth credentials: %w", err)
|
|
}
|
|
if cred == nil {
|
|
return "", fmt.Errorf("no credentials for anthropic. Run: picoclaw auth login --provider anthropic")
|
|
}
|
|
return cred.AccessToken, nil
|
|
}
|
|
}
|