thread-master/internal/model/ai/domain/usecase/ai.go

67 lines
1.5 KiB
Go

package usecase
import (
"context"
"haixun-backend/internal/model/ai/domain/enum"
)
type Message struct {
Role string
Content string
}
type Credential struct {
APIKey string
}
type GenerateRequest struct {
Provider enum.ProviderID
Model string
Credential Credential
System string
Messages []Message
Temperature *float64
MaxTokens *int
}
type GenerateResult struct {
Text string
FinishReason string
}
type StreamEvent struct {
Type string `json:"type"`
Text string `json:"text,omitempty"`
FinishReason string `json:"finish_reason,omitempty"`
Error string `json:"error,omitempty"`
}
type ProviderOption struct {
ID string
Label string
Streams bool
}
type ProviderModels struct {
ID string
Label string
Models []string
Streams bool
Error string
}
type Provider interface {
ID() enum.ProviderID
ListModels(ctx context.Context, credential Credential) ([]string, error)
GenerateText(ctx context.Context, req GenerateRequest) (*GenerateResult, error)
StreamText(ctx context.Context, req GenerateRequest) (<-chan StreamEvent, error)
}
type UseCase interface {
ListProviders(ctx context.Context) []ProviderOption
ListProviderModels(ctx context.Context, provider enum.ProviderID, credential Credential) ProviderModels
GenerateText(ctx context.Context, req GenerateRequest) (*GenerateResult, error)
StreamText(ctx context.Context, req GenerateRequest) (<-chan StreamEvent, error)
}