v6 version first commit

This commit is contained in:
Luis Pater
2025-09-22 01:40:24 +08:00
parent d42384cdb7
commit 4999fce7f4
171 changed files with 7626 additions and 7494 deletions

View File

@@ -1,77 +0,0 @@
// Package interfaces defines the core interfaces and shared structures for the CLI Proxy API server.
// These interfaces provide a common contract for different components of the application,
// such as AI service clients, API handlers, and data models.
package interfaces
import (
"context"
"sync"
)
// Client defines the interface that all AI API clients must implement.
// This interface provides methods for interacting with various AI services
// including sending messages, streaming responses, and managing authentication.
type Client interface {
// Type returns the client type identifier (e.g., "gemini", "claude").
Type() string
// GetRequestMutex returns the mutex used to synchronize requests for this client.
// This ensures that only one request is processed at a time for quota management.
GetRequestMutex() *sync.Mutex
// GetUserAgent returns the User-Agent string used for HTTP requests.
GetUserAgent() string
// SendRawMessage sends a raw JSON message to the AI service without translation.
// This method is used when the request is already in the service's native format.
SendRawMessage(ctx context.Context, modelName string, rawJSON []byte, alt string) ([]byte, *ErrorMessage)
// SendRawMessageStream sends a raw JSON message and returns streaming responses.
// Similar to SendRawMessage but for streaming responses.
SendRawMessageStream(ctx context.Context, modelName string, rawJSON []byte, alt string) (<-chan []byte, <-chan *ErrorMessage)
// SendRawTokenCount sends a token count request to the AI service.
// This method is used to estimate the number of tokens in a given text.
SendRawTokenCount(ctx context.Context, modelName string, rawJSON []byte, alt string) ([]byte, *ErrorMessage)
// SaveTokenToFile saves the client's authentication token to a file.
// This is used for persisting authentication state between sessions.
SaveTokenToFile() error
// IsModelQuotaExceeded checks if the specified model has exceeded its quota.
// This helps with load balancing and automatic failover to alternative models.
IsModelQuotaExceeded(model string) bool
// GetEmail returns the email associated with the client's authentication.
// This is used for logging and identification purposes.
GetEmail() string
// CanProvideModel checks if the client can provide the specified model.
CanProvideModel(modelName string) bool
// Provider returns the name of the AI service provider (e.g., "gemini", "claude").
Provider() string
// RefreshTokens refreshes the access tokens if needed
RefreshTokens(ctx context.Context) error
// IsAvailable returns true if the client is available for use.
IsAvailable() bool
// SetUnavailable sets the client to unavailable.
SetUnavailable()
}
// UnregisterReason describes the context for unregistering a client instance.
type UnregisterReason string
const (
// UnregisterReasonReload indicates a full reload is replacing the client.
UnregisterReasonReload UnregisterReason = "reload"
// UnregisterReasonShutdown indicates the service is shutting down.
UnregisterReasonShutdown UnregisterReason = "shutdown"
// UnregisterReasonAuthFileRemoved indicates the underlying auth file was deleted.
UnregisterReasonAuthFileRemoved UnregisterReason = "auth-file-removed"
// UnregisterReasonAuthFileUpdated indicates the auth file content was modified.
UnregisterReasonAuthFileUpdated UnregisterReason = "auth-file-updated"
)

View File

@@ -1,54 +1,12 @@
// Package interfaces defines the core interfaces and shared structures for the CLI Proxy API server.
// These interfaces provide a common contract for different components of the application,
// such as AI service clients, API handlers, and data models.
package interfaces
import "context"
import sdktranslator "github.com/router-for-me/CLIProxyAPI/v6/sdk/translator"
// TranslateRequestFunc defines a function type for translating API requests between different formats.
// It takes a model name, raw JSON request data, and a streaming flag, returning the translated request.
//
// Parameters:
// - string: The model name
// - []byte: The raw JSON request data
// - bool: A flag indicating whether the request is for streaming
//
// Returns:
// - []byte: The translated request data
type TranslateRequestFunc func(string, []byte, bool) []byte
// Backwards compatible aliases for translator function types.
type TranslateRequestFunc = sdktranslator.RequestTransform
// TranslateResponseFunc defines a function type for translating streaming API responses.
// It processes response data and returns an array of translated response strings.
//
// Parameters:
// - ctx: The context for the request
// - modelName: The model name
// - rawJSON: The raw JSON response data
// - param: Additional parameters for translation
//
// Returns:
// - []string: An array of translated response strings
type TranslateResponseFunc func(ctx context.Context, modelName string, originalRequestRawJSON, requestRawJSON, rawJSON []byte, param *any) []string
type TranslateResponseFunc = sdktranslator.ResponseStreamTransform
// TranslateResponseNonStreamFunc defines a function type for translating non-streaming API responses.
// It processes response data and returns a single translated response string.
//
// Parameters:
// - ctx: The context for the request
// - modelName: The model name
// - rawJSON: The raw JSON response data
// - param: Additional parameters for translation
//
// Returns:
// - string: A single translated response string
type TranslateResponseNonStreamFunc func(ctx context.Context, modelName string, originalRequestRawJSON, requestRawJSON, rawJSON []byte, param *any) string
type TranslateResponseNonStreamFunc = sdktranslator.ResponseNonStreamTransform
// TranslateResponse contains both streaming and non-streaming response translation functions.
// This structure allows clients to handle both types of API responses appropriately.
type TranslateResponse struct {
// Stream handles streaming response translation.
Stream TranslateResponseFunc
// NonStream handles non-streaming response translation.
NonStream TranslateResponseNonStreamFunc
}
type TranslateResponse = sdktranslator.ResponseTransform