Documentation
¶
Overview ¶
Package qwencli предоставляет Go клиент для Qwen AI API с OAuth 2.0 аутентификацией.
Библиотека поддерживает как потоковую (streaming), так и непотоковую генерацию текста, автоматическое обновление токенов и предоставляет совместимый с OpenAI интерфейс для легкой интеграции с существующим кодом.
Аутентификация ¶
Библиотека использует OAuth 2.0 device flow с PKCE для аутентификации. Credentials хранятся локально и автоматически обновляются при необходимости.
Базовое использование ¶
Простой пример создания клиента и генерации текста:
client, err := qwencli.NewQwenClient()
if err != nil {
log.Fatal(err)
}
defer client.Close()
ctx := context.Background()
response, err := client.GenText(ctx, "Привет, Qwen!")
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
Потоковая генерация (Streaming) ¶
Для получения ответа в реальном времени используйте GenerateContentStream:
messages := []qwencli.Message{
{
Role: "user",
Content: []qwencli.MessageContent{
{Type: "text", Text: "Расскажи короткую историю"},
},
},
}
ctx := context.Background()
resultChan, errChan := client.GenerateContentStream(ctx, messages, qwencli.ModelQwen3CoderPlus)
for {
select {
case text, ok := <-resultChan:
if !ok {
return
}
fmt.Print(text)
case err := <-errChan:
log.Fatal(err)
}
}
Конфигурация ¶
Используйте паттерн опций для кастомной конфигурации:
logger := qwencli.NewDefaultLogger(true)
client, err := qwencli.NewQwenClient(
qwencli.WithLogger(logger),
qwencli.WithCredentialsPath("/custom/path/creds.json"),
qwencli.WithDefaultModel(qwencli.ModelQwen3CoderFlash),
)
Совместимость с OpenAI ¶
Библиотека предоставляет методы, совместимые с OpenAI API:
openAIReq := openai.ChatCompletionRequest{
Model: qwencli.ModelQwen3CoderPlus,
Messages: []openai.ChatCompletionMessage{
{Role: "user", Content: "Привет!"},
},
}
response, err := client.GenerateContentOpenAI(ctx, openAIReq)
Больше примеров доступно в директории examples/.
Index ¶
- Constants
- Variables
- func ConvertQwenResponseToOpenAI(qwenResp *QwenChatCompletionResponse) *openai.ChatCompletionResponse
- type Candidate
- type ClientOption
- func WithBackgroundRefresh(enabled bool) ClientOption
- func WithBaseURL(baseURL string) ClientOption
- func WithClientID(clientID string) ClientOption
- func WithCredentialsPath(path string) ClientOption
- func WithDefaultModel(model string) ClientOption
- func WithLogger(logger Logger) ClientOption
- func WithRefreshInterval(interval time.Duration) ClientOption
- func WithTimeout(timeout time.Duration) ClientOption
- type Config
- type Content
- type DefaultLogger
- type DeviceAuthorizationResponse
- type DeviceTokenResponse
- type GenerationConfig
- type ImageData
- type InlineData
- type Logger
- type Message
- type MessageContent
- type NoOpLogger
- type OAuthCredentials
- type OauthConfig
- type OnboardUserRequest
- type OnboardUserResponse
- type Part
- type ProjectDiscoveryRequest
- type ProjectDiscoveryResponse
- type QwenAPIResponseMessage
- type QwenAuthenticator
- type QwenChatCompletionRequest
- type QwenChatCompletionResponse
- type QwenChatCompletionStreamChoice
- type QwenChatCompletionStreamResponse
- type QwenChoice
- type QwenClient
- func (q *QwenClient) Close() error
- func (q *QwenClient) GenText(ctx context.Context, msg string) (string, error)
- func (q *QwenClient) GenerateContent(ctx context.Context, messages []Message, model string) (*QwenChatCompletionResponse, error)
- func (q *QwenClient) GenerateContentOpenAI(ctx context.Context, openAIReq openai.ChatCompletionRequest) (*openai.ChatCompletionResponse, error)
- func (q *QwenClient) GenerateContentStream(ctx context.Context, messages []Message, model string) (<-chan string, <-chan error)
- func (q *QwenClient) GenerateContentStreamOpenAI(ctx context.Context, openAIReq openai.ChatCompletionRequest) (<-chan openai.ChatCompletionStreamResponse, <-chan error)
- func (q *QwenClient) HealthCheck(ctx context.Context) error
- type QwenResponse
- type QwenStreamOptions
- type SafetySetting
- type SimpleLogger
- type TokenRefresher
- type UsageMetadata
Constants ¶
const ( QWEN_OAUTH_BASE_URL = "https://chat.qwen.ai" QWEN_OAUTH_DEVICE_CODE_URL = QWEN_OAUTH_BASE_URL + "/api/v1/oauth2/device/code" QWEN_OAUTH_TOKEN_URL = QWEN_OAUTH_BASE_URL + "/api/v1/oauth2/token" QWEN_OAUTH_CLIENT_ID = "f0304373b74a44d2b584a3fb70ca9e56" QWEN_OAUTH_SCOPE = "openid profile email model.completion" TOKEN_REFRESH_BUFFER_MS = 30 * 1000 // 30 секунд буфер )
OAuth константы
const ( // ModelQwen3CoderPlus - модель Qwen 3 Coder Plus для сложных задач программирования ModelQwen3CoderPlus = "qwen3-coder-plus" // ModelQwen3CoderFlash - быстрая модель Qwen 3 Coder Flash для простых задач ModelQwen3CoderFlash = "qwen3-coder-flash" )
Variables ¶
var ( // ErrCredentialsNotFound возвращается когда файл с credentials не найден ErrCredentialsNotFound = errors.New("credentials file not found") // ErrInvalidCredentials возвращается когда credentials невалидны или повреждены ErrInvalidCredentials = errors.New("invalid credentials") // ErrTokenExpired возвращается когда токен истек и не может быть обновлен ErrTokenExpired = errors.New("token expired") // ErrAuthenticationFailed возвращается при неудачной аутентификации ErrAuthenticationFailed = errors.New("authentication failed") // ErrRefreshTokenFailed возвращается когда не удается обновить токен ErrRefreshTokenFailed = errors.New("failed to refresh token") // ErrDeviceFlowFailed возвращается при неудачной авторизации через device flow ErrDeviceFlowFailed = errors.New("device flow authorization failed") // ErrAPIRequestFailed возвращается при неудачном API запросе ErrAPIRequestFailed = errors.New("API request failed") )
Functions ¶
func ConvertQwenResponseToOpenAI ¶
func ConvertQwenResponseToOpenAI(qwenResp *QwenChatCompletionResponse) *openai.ChatCompletionResponse
ConvertQwenResponseToOpenAI преобразует ответ от Qwen API в формат OpenAI API. Используется для обеспечения совместимости с OpenAI SDK и существующим кодом.
Types ¶
type Candidate ¶
type Candidate struct {
Index int `json:"index"` // Индекс варианта ответа
Message QwenAPIResponseMessage `json:"message"` // Сообщение с ответом
FinishReason string `json:"finish_reason,omitempty"` // Причина завершения генерации (stop, length, etc.)
}
Candidate структура кандидата ответа. Представляет один вариант ответа от модели.
type ClientOption ¶
type ClientOption func(*Config)
ClientOption - функция для настройки Config
func WithBackgroundRefresh ¶
func WithBackgroundRefresh(enabled bool) ClientOption
WithBackgroundRefresh включает или отключает фоновое обновление токенов
func WithBaseURL ¶
func WithBaseURL(baseURL string) ClientOption
WithBaseURL устанавливает базовый URL для API
func WithClientID ¶
func WithClientID(clientID string) ClientOption
WithClientID устанавливает кастомный OAuth client ID
func WithCredentialsPath ¶
func WithCredentialsPath(path string) ClientOption
WithCredentialsPath устанавливает путь к файлу credentials
func WithDefaultModel ¶
func WithDefaultModel(model string) ClientOption
WithDefaultModel устанавливает модель по умолчанию
func WithLogger ¶
func WithLogger(logger Logger) ClientOption
WithLogger устанавливает кастомный логгер
func WithRefreshInterval ¶
func WithRefreshInterval(interval time.Duration) ClientOption
WithRefreshInterval устанавливает интервал проверки токенов
func WithTimeout ¶
func WithTimeout(timeout time.Duration) ClientOption
WithTimeout устанавливает таймаут для HTTP запросов
type Config ¶
type Config struct {
// ClientID - OAuth client ID для авторизации
ClientID string
// OAuthBaseURL - базовый URL для OAuth авторизации
OAuthBaseURL string
// TokenRefreshBuffer - буфер времени (в миллисекундах) для обновления токена до истечения
TokenRefreshBuffer int64
// CredentialsPath - путь к файлу с OAuth credentials
CredentialsPath string
// BaseURL - базовый URL для API запросов
BaseURL string
// DefaultModel - модель по умолчанию для генерации
DefaultModel string
// Timeout - таймаут для HTTP запросов
Timeout time.Duration
// Logger - интерфейс логгера для вывода сообщений
Logger Logger
// EnableBackgroundRefresh - включить фоновое обновление токенов
EnableBackgroundRefresh bool
// RefreshCheckInterval - интервал проверки токенов для фонового обновления
RefreshCheckInterval time.Duration
}
Config содержит настройки конфигурации для Qwen клиента
func DefaultConfig ¶
func DefaultConfig() *Config
DefaultConfig возвращает конфигурацию по умолчанию
type Content ¶
type Content struct {
Role string `json:"role"` // Роль отправителя сообщения (user, assistant, system)
Parts []Part `json:"parts"` // Части сообщения (текст или медиа контент)
}
Content структура для содержимого сообщения. Используется в более старом формате API, сейчас используется Message.
func ConvertMessagesToContents ¶
ConvertMessagesToContents преобразует массив Message в формате OpenAI API в массив Content в формате Qwen API. Эта функция используется для конвертации сообщений перед отправкой запроса в Qwen API. Функция обрабатывает как текстовые, так и изображения, преобразуя их в соответствующий формат Qwen.
type DefaultLogger ¶
type DefaultLogger struct {
// EnableDebug - включить отладочные сообщения
EnableDebug bool
// contains filtered or unexported fields
}
DefaultLogger - простой логгер, который выводит сообщения в stdout/stderr
func NewDefaultLogger ¶
func NewDefaultLogger(enableDebug bool) *DefaultLogger
NewDefaultLogger создает новый экземпляр DefaultLogger
func (*DefaultLogger) Debug ¶
func (l *DefaultLogger) Debug(msg string, args ...interface{})
Debug выводит отладочное сообщение (только если EnableDebug = true)
func (*DefaultLogger) Error ¶
func (l *DefaultLogger) Error(msg string, args ...interface{})
Error выводит сообщение об ошибке
func (*DefaultLogger) Info ¶
func (l *DefaultLogger) Info(msg string, args ...interface{})
Info выводит информационное сообщение
func (*DefaultLogger) Warn ¶
func (l *DefaultLogger) Warn(msg string, args ...interface{})
Warn выводит предупреждающее сообщение
type DeviceAuthorizationResponse ¶
type DeviceAuthorizationResponse struct {
DeviceCode string `json:"device_code"`
UserCode string `json:"user_code"`
VerificationURI string `json:"verification_uri"`
VerificationURIComplete string `json:"verification_uri_complete"`
ExpiresIn int `json:"expires_in"`
Interval int `json:"interval"`
}
DeviceAuthorizationResponse представляет ответ от device authorization endpoint
type DeviceTokenResponse ¶
type DeviceTokenResponse struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
TokenType string `json:"token_type"`
ExpiresIn int64 `json:"expires_in"`
ResourceURL string `json:"resource_url"`
}
DeviceTokenResponse представляет ответ от device token endpoint
type GenerationConfig ¶
type GenerationConfig struct {
Temperature float64 `json:"temperature,omitempty"` // Температура генерации (0.0-1.0), контролирует случайность
MaxOutputTokens int `json:"maxOutputTokens,omitempty"` // Максимальное количество токенов в ответе
TopP float64 `json:"topP,omitempty"` // Nucleus sampling параметр
TopK int `json:"topK,omitempty"` // Top-K sampling параметр
}
GenerationConfig структура для конфигурации генерации. Позволяет настроить параметры генерации текста.
type ImageData ¶
type ImageData struct {
MimeType string // MIME тип изображения
Data string // Данные изображения в base64
}
ImageData структура для данных изображения. Упрощенная структура для работы с изображениями.
type InlineData ¶
type InlineData struct {
MimeType string `json:"mimeType"` // MIME тип данных (например, "image/png")
Data string `json:"data"` // Данные в base64 кодировке
}
InlineData структура для inline данных (например, изображений). Используется для передачи медиа контента в base64 формате.
type Logger ¶
type Logger interface {
// Debug выводит отладочное сообщение
Debug(msg string, args ...interface{})
// Info выводит информационное сообщение
Info(msg string, args ...interface{})
// Warn выводит предупреждающее сообщение
Warn(msg string, args ...interface{})
// Error выводит сообщение об ошибке
Error(msg string, args ...interface{})
}
Logger - интерфейс для логирования, позволяет пользователям использовать свой логгер
type Message ¶
type Message struct {
Role string `json:"role"` // Роль отправителя: "user", "assistant" или "system"
Content []MessageContent `json:"content"` // Массив содержимого сообщения, может содержать текст и/или изображения
}
Message представляет сообщение в истории чата в формате, совместимом с OpenAI API. Используется для передачи сообщений пользователя и ассистента в API запросах. Структура содержит роль (user, assistant, system) и массив содержимого.
func ConvertOpenAIMessagesToMessages ¶
func ConvertOpenAIMessagesToMessages(openaiMessages []openai.ChatCompletionMessage) []Message
ConvertOpenAIMessagesToMessages преобразует массив openai.ChatCompletionMessage (внешняя библиотека OpenAI) в массив Message (внутренний формат). Эта функция используется для конвертации сообщений, полученных из OpenAI API, во внутренний формат, совместимый с остальной частью приложения. Поддерживает как простые текстовые сообщения, так и мультимедийные сообщения (с изображениями).
type MessageContent ¶
type MessageContent struct {
Type string `json:"type"` // Тип содержимого: "text" или "image_url"
Text string `json:"text,omitempty"` // Текстовое содержимое (используется при Type="text")
ImageURL struct {
URL string `json:"url"` // URL изображения в формате data:image/... (используется при Type="image_url")
} `json:"image_url,omitempty"`
}
MessageContent представляет содержимое сообщения в формате, совместимом с OpenAI API. Используется для передачи текста или изображений в сообщениях. Может содержать либо текст (type="text"), либо URL изображения (type="image_url").
type NoOpLogger ¶
type NoOpLogger struct{}
NoOpLogger - пустой логгер, который ничего не выводит (используется по умолчанию)
func (*NoOpLogger) Debug ¶
func (l *NoOpLogger) Debug(msg string, args ...interface{})
Debug не выводит ничего
func (*NoOpLogger) Error ¶
func (l *NoOpLogger) Error(msg string, args ...interface{})
Error не выводит ничего
func (*NoOpLogger) Info ¶
func (l *NoOpLogger) Info(msg string, args ...interface{})
Info не выводит ничего
func (*NoOpLogger) Warn ¶
func (l *NoOpLogger) Warn(msg string, args ...interface{})
Warn не выводит ничего
type OAuthCredentials ¶
type OAuthCredentials struct {
AccessToken string `json:"access_token"` // Токен доступа для API запросов
RefreshToken string `json:"refresh_token"` // Токен для обновления access token
TokenType string `json:"token_type"` // Тип токена (обычно "Bearer")
ExpiryDate int64 `json:"expiry_date"` // Время истечения токена в миллисекундах (Unix timestamp * 1000)
ResourceURL string `json:"resource_url,omitempty"` // Базовый URL для API запросов
}
OAuthCredentials структура для хранения OAuth учетных данных. Используется для сохранения и загрузки токенов аутентификации из файла.
type OauthConfig ¶
type OauthConfig struct {
OauthClientId string `json:"oauthClientId"` // Идентификатор OAuth клиента
OauthClientSecret string `json:"oauthClientSecret"` // Секрет OAuth клиента
}
OauthConfig структура для OAuth конфигурации. Используется для хранения параметров OAuth авторизации.
type OnboardUserRequest ¶
type OnboardUserRequest struct {
TierId string `json:"tierId"` // Идентификатор уровня доступа
Project string `json:"project"` // Идентификатор проекта
Metadata struct {
IdeType string `json:"ideType"` // Тип IDE
Platform string `json:"platform"` // Платформа
PluginType string `json:"pluginType"` // Тип плагина
DuetProject string `json:"duetProject"` // Проект Duet
} `json:"metadata"`
}
OnboardUserRequest структура для запроса регистрации пользователя. Используется при onboarding новых пользователей.
type OnboardUserResponse ¶
type OnboardUserResponse struct {
Done bool `json:"done"` // Флаг завершения операции
Response struct {
Project struct {
Id string `json:"id"` // Идентификатор созданного проекта
} `json:"project"`
} `json:"response"`
}
OnboardUserResponse структура ответа регистрации пользователя. Содержит результат операции onboarding.
type Part ¶
type Part struct {
Text string `json:"text,omitempty"` // Текстовое содержимое
InlineData *InlineData `json:"inlineData,omitempty"` // Встроенные данные (изображения, файлы)
}
Part структура для части сообщения. Может содержать либо текст, либо inline данные (например, изображения).
type ProjectDiscoveryRequest ¶
type ProjectDiscoveryRequest struct {
Project string `json:"project"` // Идентификатор проекта
Metadata struct {
IdeType string `json:"ideType"` // Тип IDE
Platform string `json:"platform"` // Платформа
PluginType string `json:"pluginType"` // Тип плагина
DuetProject string `json:"duetProject"` // Проект Duet
} `json:"metadata"`
}
ProjectDiscoveryRequest структура для запроса обнаружения проекта. Используется в специфических API методах для работы с проектами.
type ProjectDiscoveryResponse ¶
type ProjectDiscoveryResponse struct {
Project interface{} `json:"project"` // Информация о проекте
AllowedTiers []struct {
Id string `json:"id"` // Идентификатор уровня
IsDefault bool `json:"isDefault"` // Является ли уровень по умолчанию
} `json:"allowedTiers"` // Доступные уровни доступа
}
ProjectDiscoveryResponse структура ответа обнаружения проекта. Содержит информацию о найденном проекте и доступных уровнях.
type QwenAPIResponseMessage ¶
type QwenAPIResponseMessage struct {
Role string `json:"role"` // Роль отправителя (обычно "assistant")
Content string `json:"content"` // Сгенерированный текст
}
QwenAPIResponseMessage структура сообщения в ответе. Содержит сгенерированный текст и метаданные.
type QwenAuthenticator ¶
type QwenAuthenticator struct {
// contains filtered or unexported fields
}
QwenAuthenticator структура для аутентификации с использованием OAuth
func LoadOAuthCredentialsFromCurrentDir ¶
func LoadOAuthCredentialsFromCurrentDir(logger Logger) (*QwenAuthenticator, error)
LoadOAuthCredentialsFromCurrentDir загружает OAuth учетные данные из текущей директории
func LoadOAuthCredentialsFromHome ¶
func LoadOAuthCredentialsFromHome(logger Logger) (*QwenAuthenticator, error)
LoadOAuthCredentialsFromHome загружает OAuth учетные данные из домашней директории
func NewQwenAuthenticator ¶
func NewQwenAuthenticator(credsPath string, logger Logger) (*QwenAuthenticator, error)
NewQwenAuthenticator создает новый экземпляр аутентификатора Qwen
func (*QwenAuthenticator) GetAccessToken ¶
func (q *QwenAuthenticator) GetAccessToken() string
GetAccessToken возвращает текущий access token
func (*QwenAuthenticator) GetAuthenticatedClient ¶
func (q *QwenAuthenticator) GetAuthenticatedClient() (*http.Client, error)
GetAuthenticatedClient возвращает HTTP клиент с аутентификацией
func (*QwenAuthenticator) GetResourceURL ¶
func (q *QwenAuthenticator) GetResourceURL() string
GetResourceURL возвращает базовый URL для API запросов
type QwenChatCompletionRequest ¶
type QwenChatCompletionRequest struct {
Model string `json:"model"` // Название модели (ModelQwen3CoderPlus или ModelQwen3CoderFlash)
Messages []Message `json:"messages"` // Массив сообщений в диалоге
Temperature float64 `json:"temperature,omitempty"` // Температура генерации (0.0-2.0)
MaxTokens int `json:"max_tokens,omitempty"` // Максимальное количество токенов в ответе
Stream bool `json:"stream,omitempty"` // Включить потоковую передачу ответа
StreamOptions *QwenStreamOptions `json:"stream_options,omitempty"` // Опции для потоковой передачи
TopP float64 `json:"top_p,omitempty"` // Nucleus sampling параметр
TopK int `json:"top_k,omitempty"` // Top-K sampling параметр
SafetySettings []SafetySetting `json:"safety_settings,omitempty"` // Настройки безопасности контента
Tools interface{} `json:"tools,omitempty"` // Определения инструментов для function calling
ToolChoice interface{} `json:"tool_choice,omitempty"` // Выбор использования инструментов
}
QwenChatCompletionRequest структура для запроса к Qwen API в формате OpenAI. Совместима с OpenAI Chat Completion API.
type QwenChatCompletionResponse ¶
type QwenChatCompletionResponse struct {
Id string `json:"id"` // Уникальный идентификатор запроса
Object string `json:"object"` // Тип объекта (обычно "chat.completion")
Created int64 `json:"created"` // Время создания в Unix timestamp
Model string `json:"model"` // Использованная модель
Choices []QwenChoice `json:"choices"` // Массив вариантов ответов
Usage UsageMetadata `json:"usage,omitempty"` // Статистика использования токенов
SystemFingerprint string `json:"system_fingerprint,omitempty"` // Fingerprint системы
}
QwenChatCompletionResponse структура ответа от Qwen API в формате OpenAI. Совместима с OpenAI Chat Completion Response.
type QwenChatCompletionStreamChoice ¶
type QwenChatCompletionStreamChoice struct {
Index int `json:"index"` // Индекс варианта
Delta QwenAPIResponseMessage `json:"delta"` // Дельта (частичное содержимое)
FinishReason *string `json:"finish_reason"` // Причина завершения (null до последнего чанка)
}
QwenChatCompletionStreamChoice структура выбора в потоковом ответе. Представляет частичный фрагмент ответа в потоковом режиме.
type QwenChatCompletionStreamResponse ¶
type QwenChatCompletionStreamResponse struct {
Id string `json:"id"` // Уникальный идентификатор запроса
Object string `json:"object"` // Тип объекта ("chat.completion.chunk")
Created int64 `json:"created"` // Время создания в Unix timestamp
Model string `json:"model"` // Использованная модель
Choices []QwenChatCompletionStreamChoice `json:"choices"` // Массив вариантов с частичными ответами
Usage *UsageMetadata `json:"usage,omitempty"` // Статистика использования (в финальном чанке)
SystemFingerprint string `json:"system_fingerprint,omitempty"` // Fingerprint системы
}
QwenChatCompletionStreamResponse структура потокового ответа. Используется для SSE (Server-Sent Events) потоковой передачи.
type QwenChoice ¶
type QwenChoice struct {
Index int `json:"index"` // Индекс варианта
Message QwenAPIResponseMessage `json:"message"` // Сообщение с ответом
FinishReason string `json:"finish_reason"` // Причина завершения (stop, length, tool_calls, etc.)
}
QwenChoice структура выбора в ответе. Представляет один вариант ответа в непотоковом режиме.
type QwenClient ¶
type QwenClient struct {
// contains filtered or unexported fields
}
QwenClient структура для работы с Qwen API
func NewQwenClient ¶
func NewQwenClient(opts ...ClientOption) (*QwenClient, error)
NewQwenClient создает новый клиент для работы с Qwen API с возможностью конфигурации через опции
func (*QwenClient) Close ¶
func (q *QwenClient) Close() error
Close корректно завершает работу QwenClient и останавливает фоновое обновление токенов. Рекомендуется вызывать этот метод с использованием defer после создания клиента.
func (*QwenClient) GenText ¶
GenText реализует простой интерфейс для генерации текста: GenText(ctx context.Context, msg string) (string, error). Это удобный метод для быстрой генерации ответа на текстовое сообщение.
func (*QwenClient) GenerateContent ¶
func (q *QwenClient) GenerateContent(ctx context.Context, messages []Message, model string) (*QwenChatCompletionResponse, error)
GenerateContent генерирует контент с помощью Qwen API (непотоковый метод). Возвращает полный ответ после завершения генерации.
func (*QwenClient) GenerateContentOpenAI ¶
func (q *QwenClient) GenerateContentOpenAI(ctx context.Context, openAIReq openai.ChatCompletionRequest) (*openai.ChatCompletionResponse, error)
GenerateContentOpenAI генерирует контент с помощью Qwen API в формате OpenAI (непотоковый метод). Обеспечивает совместимость с OpenAI API интерфейсом.
func (*QwenClient) GenerateContentStream ¶
func (q *QwenClient) GenerateContentStream(ctx context.Context, messages []Message, model string) (<-chan string, <-chan error)
GenerateContentStream универсальная функция для потоковой обработки текстовых и изображений запросов к Qwen API. Эта функция использует Server-Sent Events (SSE) для получения данных в реальном времени. Для надежной обработки потока используется bufio.Scanner, который читает ответ построчно.
Возвращает два канала: resultChan для получения фрагментов текста и errChan для ошибок. Каналы закрываются автоматически по завершении потока.
func (*QwenClient) GenerateContentStreamOpenAI ¶
func (q *QwenClient) GenerateContentStreamOpenAI(ctx context.Context, openAIReq openai.ChatCompletionRequest) (<-chan openai.ChatCompletionStreamResponse, <-chan error)
GenerateContentStreamOpenAI обеспечивает совместимость с форматом OpenAI API. Принимает запрос в формате OpenAI и возвращает каналы для потокового ответа.
func (*QwenClient) HealthCheck ¶
func (q *QwenClient) HealthCheck(ctx context.Context) error
HealthCheck проверяет доступность API и валидность токена. Выполняет простой запрос к /models endpoint для проверки аутентификации.
type QwenResponse ¶
type QwenResponse struct {
Candidates []Candidate `json:"choices"` // Варианты ответов от модели
UsageMetadata UsageMetadata `json:"usage,omitempty"` // Метаданные использования токенов
}
QwenResponse структура ответа от Qwen API. Используется в более старом формате API.
type QwenStreamOptions ¶
type QwenStreamOptions struct {
IncludeUsage bool `json:"include_usage,omitempty"` // Включить информацию об использовании токенов в поток
}
QwenStreamOptions опции для потокового ответа. Позволяет настроить параметры SSE потока.
type SafetySetting ¶
type SafetySetting struct {
Category string `json:"category"` // Категория безопасности
Threshold string `json:"threshold"` // Порог фильтрации
}
SafetySetting структура для настроек безопасности. Позволяет контролировать фильтрацию контента по различным категориям.
type SimpleLogger ¶
type SimpleLogger struct{}
SimpleLogger - минималистичный логгер без префиксов и временных меток
func NewSimpleLogger ¶
func NewSimpleLogger() *SimpleLogger
NewSimpleLogger создает новый экземпляр SimpleLogger
func (*SimpleLogger) Debug ¶
func (l *SimpleLogger) Debug(msg string, args ...interface{})
Debug выводит отладочное сообщение
func (*SimpleLogger) Error ¶
func (l *SimpleLogger) Error(msg string, args ...interface{})
Error выводит сообщение об ошибке
func (*SimpleLogger) Info ¶
func (l *SimpleLogger) Info(msg string, args ...interface{})
Info выводит информационное сообщение
func (*SimpleLogger) Warn ¶
func (l *SimpleLogger) Warn(msg string, args ...interface{})
Warn выводит предупреждающее сообщение
type TokenRefresher ¶
type TokenRefresher struct {
// contains filtered or unexported fields
}
TokenRefresher обрабатывает фоновое обновление токенов для предотвращения истечения во время API вызовов
func NewTokenRefresher ¶
func NewTokenRefresher(authenticator *QwenAuthenticator) *TokenRefresher
NewTokenRefresher создает новый token refresher для заданного authenticator
func (*TokenRefresher) StartBackgroundRefresh ¶
func (tr *TokenRefresher) StartBackgroundRefresh()
StartBackgroundRefresh запускает процедуру фонового обновления токенов
func (*TokenRefresher) StopBackgroundRefresh ¶
func (tr *TokenRefresher) StopBackgroundRefresh()
StopBackgroundRefresh останавливает процедуру фонового обновления токенов
type UsageMetadata ¶
type UsageMetadata struct {
PromptTokens int `json:"prompt_tokens"` // Количество токенов в промпте
CompletionTokens int `json:"completion_tokens"` // Количество токенов в ответе
TotalTokens int `json:"total_tokens"` // Общее количество токенов
}
UsageMetadata структура метаданных использования токенов. Содержит информацию о количестве использованных токенов.