ai

package module
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2026 License: MIT Imports: 11 Imported by: 0

README

github.com/stelmakhdigital/stell-ai

Единый LLM-слой: типы сообщений, стриминг, tool defs, фабрики провайдеров, auth/OAuth и сгенерированный каталог моделей.

Возможности

  • Унифицированный интерфейс Provider.Chat и события стрима (ChatEvent)
  • Фабрики провайдеров через provider.Registry (import _ "github.com/stelmakhdigital/stell-ai/provider/all")
  • Auth store (Auth / LoadAuth) и OAuth (auth/oauth)
  • Compat/thinking helpers для wire-кодирования
  • Каталог BuiltinModels из models.generated.go

Карта директорий

Кластер Файлы
Сообщения / стрим types.go, blocks.go, stop_reason.go
Конфиг модели modelconfig.go, compat.go, thinking_helpers.go
Wire-хелперы convert.go, content_wire.go, replay.go
Auth store auth.go (Auth, LoadAuth)
Каталог models.generated.go, models.seed.json
Поддиректория Назначение
api/ HTTP wire-транспорты (Completions, Responses, Anthropic Messages)
auth/oauth/ OAuth / PKCE
images/ генерация изображений (OpenRouter)
provider/ реестр фабрик, StreamDelta
provider/<name>/ реализации провайдеров
provider/all/ blank-import регистрации
scripts/ codegen / sync каталога моделей

Использование

import (
	"github.com/stelmakhdigital/stell-ai"
	"github.com/stelmakhdigital/stell-ai/provider"
	_ "github.com/stelmakhdigital/stell-ai/provider/all"
)

reg, err := provider.BuildRegistry(ai.BuiltinModels, nil)
_ = reg
_ = err
_ = ai.BuiltinModels

Регенерация каталога моделей

В репозитории всегда лежат models.seed.json и models.generated.go.

# только из seed → generated (offline)
go run ./scripts/generate-models.go
go run ./scripts/generate-models.go --check

# sync из models.dev (сеть)
go run ./scripts/sync-models-dev --out models.dev.overlay.json --seed models.seed.json --merge
go run ./scripts/generate-models.go

models.generated.go править вручную нельзя.

CI (standalone)

go test ./...
go run ./scripts/generate-models.go --check

Documentation

Overview

Package ai — единый LLM-слой (типы, стриминг, auth, каталог моделей).

Роль: leaf-модуль `github.com/stelmakhdigital/stell-ai` (готов к отдельному репо). Его используют `stell/agent` и `stell/coding-agent`; сам ai не импортирует соседние пакеты.

Основные импорты:

  • github.com/stelmakhdigital/stell-ai — типы сообщений, Auth, compat/thinking helpers, BuiltinModels
  • github.com/stelmakhdigital/stell-ai/provider — реестр фабрик
  • github.com/stelmakhdigital/stell-ai/provider/all — blank-import регистрации всех провайдеров
  • github.com/stelmakhdigital/stell-ai/auth/oauth — OAuth-потоки логина

Корень пакета (публичный API, без подпакетов — в Go один каталог = один package):

  • сообщения / стрим: types.go, blocks.go, stop_reason.go
  • конфиг модели: modelconfig.go, compat.go, thinking_helpers.go
  • wire-хелперы: convert.go, content_wire.go, replay.go
  • auth store: auth.go (Auth, LoadAuth) — рядом с типами, не с OAuth
  • каталог: models.generated.go, models.seed.json

Поддиректории (отдельные import-пути):

  • api/ — общие HTTP wire-транспорты (OpenAI Completions/Responses, Anthropic)
  • auth/oauth/ — PKCE и OAuth для провайдеров
  • images/ — генерация изображений (OpenRouter)
  • provider/ — реестр + StreamDelta; provider/<name>/ — фабрики
  • provider/all/ — регистрация шлюзов и first-class провайдеров
  • scripts/ — генерация/синхронизация каталога моделей

Index

Constants

View Source
const (
	// DefaultMaxTokens — лимит выходных токенов модели по умолчанию.
	DefaultMaxTokens  = 16384
	MaxModelTokensCap = 32000
)

Variables

View Source
var BuiltinModels = []BuiltinModel{}/* 936 elements not displayed */

BuiltinModels — сгенерированный статический каталог моделей.

Functions

func AnthropicAssistantBlocks

func AnthropicAssistantBlocks(msg Message, opts ReplayOptions) []map[string]any

AnthropicAssistantBlocks собирает content-блоки Anthropic для replay.

func BlocksToRPCContent

func BlocksToRPCContent(blocks []ContentBlock) []map[string]any

BlocksToRPCContent преобразует блоки assistant в форму массива content для RPC.

func ClearPendingOAuthState

func ClearPendingOAuthState(globalDir string)

func CloneCompatMap

func CloneCompatMap(m map[string]any) map[string]any

CloneCompatMap делает поверхностную копию JSON-объекта для merge.

func DefaultThinkingBudget

func DefaultThinkingBudget(level string) int

DefaultThinkingBudget возвращает встроенный бюджет токенов для уровня thinking.

func ErrUnknownProvider

func ErrUnknownProvider(id string) error

ErrUnknownProvider возвращается, если id фабрики провайдера не зарегистрирован.

func HasAssistantOutput

func HasAssistantOutput(blocks []ContentBlock) bool

HasAssistantOutput сообщает, содержат ли blocks непустой вывод ассистента.

func HasAuthConfigured

func HasAuthConfigured(auth *Auth, mc ModelConfig) bool

HasAuthConfigured проверяет, вероятно ли настроена auth, без выполнения shell-команд.

func IsThinkingOff

func IsThinkingOff(level string) bool

IsThinkingOff сообщает, отключает ли уровень thinking.

func IsToolRole

func IsToolRole(r Role) bool

IsToolRole сообщает, является ли r ролью результата инструмента (канонической или legacy).

func LoadPendingOAuthState

func LoadPendingOAuthState(globalDir string) (oauth.PendingState, bool, error)

LoadPendingOAuthState читает незавершённое PKCE-состояние.

func MapThinkingLevel

func MapThinkingLevel(mc ModelConfig, level string) (mapped string, ok bool)

MapThinkingLevel применяет thinkingLevelMap модели, если настроен. При пустой карте уровень передаётся как есть (ok=true).

func MessageStopReason

func MessageStopReason(providerReason string, hasToolCalls bool) string

MessageStopReason возвращает канонический stopReason для сохранённого assistant-сообщения.

func ModelMaxTokens

func ModelMaxTokens(mc ModelConfig) int

ModelMaxTokens возвращает настроенный лимит выходных токенов модели.

func NormalizeMessage

func NormalizeMessage(msg *Message)

NormalizeMessage заполняет Blocks из legacy Content/ToolCalls и синхронизирует Content.

func NormalizeStopReason

func NormalizeStopReason(reason string) string

NormalizeStopReason приводит stop reason провайдера/сессии к enum assistant stopReason.

func OAuthBetaHeader

func OAuthBetaHeader() string

OAuthBetaHeader возвращает значение заголовка anthropic-beta для OAuth-токенов.

func OllamaAssistantWire

func OllamaAssistantWire(msg Message) (content, thinking string)

OllamaAssistantWire возвращает поля content и thinking для Ollama replay.

func OpenAIAssistantWire

func OpenAIAssistantWire(msg Message, opts ReplayOptions) (content any, reasoningContent string)

OpenAIAssistantWire собирает OpenAI wire-контент для assistant-сообщения, включая replay reasoning при необходимости по compat.

func ResolveAPIKey

func ResolveAPIKey(auth *Auth, mc ModelConfig) (string, error)

func ResolveChatTemplateKwargs

func ResolveChatTemplateKwargs(raw map[string]any, level string, thinkMap map[string]*string) map[string]any

ResolveChatTemplateKwargs разрешает плейсхолдеры $var в chatTemplateKwargs.

func SavePendingOAuthState

func SavePendingOAuthState(globalDir string, state oauth.PendingState) error

SavePendingOAuthState записывает незавершённое PKCE-состояние.

func TextFromBlocks

func TextFromBlocks(blocks []ContentBlock) string

TextFromBlocks объединяет текстовые blocks для legacy-поля Content.

func ThinkingFromBlocks

func ThinkingFromBlocks(blocks []ContentBlock) string

ThinkingFromBlocks возвращает склеенный текст blocks thinking.

Types

type Auth

type Auth struct {
	// contains filtered or unexported fields
}

Auth хранит credentials (обычно ~/.stell/agent/auth.json).

func LoadAuth

func LoadAuth(globalDir string) (*Auth, error)

func NewAuthForTest

func NewAuthForTest() *Auth

NewAuthForTest создаёт in-memory Auth для unit-тестов.

func (*Auth) Entry

func (a *Auth) Entry(provider string) (AuthEntry, bool)

Entry возвращает сохранённые credentials провайдера, если есть.

func (*Auth) IsOAuth

func (a *Auth) IsOAuth(provider string) bool

func (*Auth) Logout

func (a *Auth) Logout(provider string) error

func (*Auth) Providers

func (a *Auth) Providers() []string

func (*Auth) Resolve

func (a *Auth) Resolve(provider string) (string, error)

func (*Auth) Save

func (a *Auth) Save() error

func (*Auth) SetCLIOverride

func (a *Auth) SetCLIOverride(key string)

func (*Auth) SetOAuthCredentials

func (a *Auth) SetOAuthCredentials(provider, access, refresh string, expiresUnix int64)

func (*Auth) SetOAuthFromTokenSet

func (a *Auth) SetOAuthFromTokenSet(provider string, tokens oauth.TokenSet)

func (*Auth) SetOAuthToken

func (a *Auth) SetOAuthToken(provider, token string)

func (*Auth) SetProviderKey

func (a *Auth) SetProviderKey(provider, key string)

type AuthEntry

type AuthEntry struct {
	Type    string            `json:"type"`
	Key     string            `json:"key,omitempty"`
	Access  string            `json:"access,omitempty"`
	Refresh string            `json:"refresh,omitempty"`
	Expires int64             `json:"expires,omitempty"`
	Env     map[string]string `json:"env,omitempty"`
}

type BlockBuilder

type BlockBuilder struct {
	// contains filtered or unexported fields
}

BlockBuilder накапливает блоки ассистента при стриминге в порядке появления.

func (*BlockBuilder) AppendText

func (b *BlockBuilder) AppendText(delta string)

func (*BlockBuilder) AppendThinking

func (b *BlockBuilder) AppendThinking(delta string)

func (*BlockBuilder) AppendThinkingSignature

func (b *BlockBuilder) AppendThinkingSignature(delta string)

func (*BlockBuilder) AppendToolCall

func (b *BlockBuilder) AppendToolCall(tc ToolCall)

func (*BlockBuilder) Blocks

func (b *BlockBuilder) Blocks() []ContentBlock

func (*BlockBuilder) HasText

func (b *BlockBuilder) HasText() bool

HasText сообщает, есть ли у builder непустой текстовый блок.

func (*BlockBuilder) HasThinking

func (b *BlockBuilder) HasThinking() bool

HasThinking сообщает, начат ли у builder блок thinking.

func (*BlockBuilder) Reset

func (b *BlockBuilder) Reset()

type BlockType

type BlockType string
const (
	BlockTypeText     BlockType = "text"
	BlockTypeThinking BlockType = "thinking"
	BlockTypeToolCall BlockType = "toolCall"
)

type BuiltinModel

type BuiltinModel struct {
	Provider      string
	ID            string
	Name          string
	APIType       string
	ContextWindow int
	MaxTokens     int
	Reasoning     bool
	Input         []string
}

BuiltinModel — запись каталога для модели с поддержкой tools.

type ChatEvent

type ChatEvent struct {
	Type              EventType
	Token             string
	ThinkingSignature string
	ToolCall          *ToolCall
	ToolCallDelta     string
	ToolCallIndex     int
	ToolCallID        string
	ToolCallName      string
	Usage             *Usage
	// StopReason на EventDone: "" (норма), "length" (лимит вывода),
	// "incomplete" (стрим оборвался без finish-сигнала).
	StopReason string
	Err        error
}

type ChatRequest

type ChatRequest struct {
	Model          string
	Messages       []Message
	Tools          []ToolDef
	MaxTokens      int
	ThinkingLevel  string
	ThinkingBudget int
	SessionID      string
	CacheRetention string // "none" отключает prompt cache key / affinity
}

type CompatSettings

type CompatSettings struct {
	SupportsDeveloperRole   *bool `json:"supportsDeveloperRole,omitempty"`
	SupportsReasoningEffort *bool `json:"supportsReasoningEffort,omitempty"`
	// ReasoningAsContent — legacy Stell; предпочтительнее requiresThinkingAsText.
	ReasoningAsContent *bool `json:"reasoningAsContent,omitempty"`
	// флаги compat
	ThinkingFormat                              *string        `json:"thinkingFormat,omitempty"`
	ChatTemplateKwargs                          map[string]any `json:"chatTemplateKwargs,omitempty"`
	RequiresThinkingAsText                      *bool          `json:"requiresThinkingAsText,omitempty"`
	RequiresReasoningContentOnAssistantMessages *bool          `json:"requiresReasoningContentOnAssistantMessages,omitempty"`
	SupportsUsageInStreaming                    *bool          `json:"supportsUsageInStreaming,omitempty"`
	MaxTokensField                              *string        `json:"maxTokensField,omitempty"`
	AllowEmptySignature                         *bool          `json:"allowEmptySignature,omitempty"`
	// совместимость OpenAI wire
	SupportsStore                    *bool          `json:"supportsStore,omitempty"`
	RequiresToolResultName           *bool          `json:"requiresToolResultName,omitempty"`
	RequiresAssistantAfterToolResult *bool          `json:"requiresAssistantAfterToolResult,omitempty"`
	SupportsStrictMode               *bool          `json:"supportsStrictMode,omitempty"`
	CacheControlFormat               *string        `json:"cacheControlFormat,omitempty"`
	SendSessionAffinityHeaders       *bool          `json:"sendSessionAffinityHeaders,omitempty"`
	SessionAffinityFormat            *string        `json:"sessionAffinityFormat,omitempty"`
	SupportsLongCacheRetention       *bool          `json:"supportsLongCacheRetention,omitempty"`
	OpenRouterRouting                map[string]any `json:"openRouterRouting,omitempty"`
	VercelGatewayRouting             map[string]any `json:"vercelGatewayRouting,omitempty"`
	// совместимость Anthropic wire
	SupportsEagerToolInputStreaming *bool `json:"supportsEagerToolInputStreaming,omitempty"`
	ForceAdaptiveThinking           *bool `json:"forceAdaptiveThinking,omitempty"`
	SupportsCacheControlOnTools     *bool `json:"supportsCacheControlOnTools,omitempty"`
}

CompatSettings — флаги совместимости провайдера (блок compat).

func (CompatSettings) AllowEmptySignatureEnabled

func (c CompatSettings) AllowEmptySignatureEnabled() bool

func (CompatSettings) CacheControlFormatAnthropic

func (c CompatSettings) CacheControlFormatAnthropic() bool

func (CompatSettings) DeveloperRoleEnabled

func (c CompatSettings) DeveloperRoleEnabled() bool

func (CompatSettings) ForceAdaptiveThinkingEnabled

func (c CompatSettings) ForceAdaptiveThinkingEnabled() bool

func (CompatSettings) MaxTokensFieldName

func (c CompatSettings) MaxTokensFieldName() string

func (CompatSettings) ReasoningAsContentEnabled

func (c CompatSettings) ReasoningAsContentEnabled() bool

func (CompatSettings) ReasoningEffortEnabled

func (c CompatSettings) ReasoningEffortEnabled() bool

func (CompatSettings) RequiresAssistantAfterToolResultEnabled

func (c CompatSettings) RequiresAssistantAfterToolResultEnabled() bool

func (CompatSettings) RequiresReasoningContentOnAssistantMessagesEnabled

func (c CompatSettings) RequiresReasoningContentOnAssistantMessagesEnabled() bool

func (CompatSettings) RequiresThinkingAsTextEnabled

func (c CompatSettings) RequiresThinkingAsTextEnabled() bool

func (CompatSettings) RequiresToolResultNameEnabled

func (c CompatSettings) RequiresToolResultNameEnabled() bool

func (CompatSettings) ResolvedSessionAffinityFormat

func (c CompatSettings) ResolvedSessionAffinityFormat() string

func (CompatSettings) ResolvedThinkingFormat

func (c CompatSettings) ResolvedThinkingFormat() string

func (CompatSettings) SendSessionAffinityHeadersEnabled

func (c CompatSettings) SendSessionAffinityHeadersEnabled() bool

func (CompatSettings) SupportsCacheControlOnToolsEnabled

func (c CompatSettings) SupportsCacheControlOnToolsEnabled() bool

func (CompatSettings) SupportsEagerToolInputStreamingEnabled

func (c CompatSettings) SupportsEagerToolInputStreamingEnabled() bool

func (CompatSettings) SupportsLongCacheRetentionEnabled

func (c CompatSettings) SupportsLongCacheRetentionEnabled() bool

func (CompatSettings) SupportsStoreEnabled

func (c CompatSettings) SupportsStoreEnabled() bool

func (CompatSettings) SupportsStrictModeEnabled

func (c CompatSettings) SupportsStrictModeEnabled() bool

func (CompatSettings) SupportsUsageInStreamingEnabled

func (c CompatSettings) SupportsUsageInStreamingEnabled() bool

type ContentBlock

type ContentBlock struct {
	Type      BlockType `json:"type"`
	Text      string    `json:"text,omitempty"`
	ToolCall  *ToolCall `json:"toolCall,omitempty"`
	Signature string    `json:"signature,omitempty"`
}

ContentBlock — блок контента ассистента.

type CostTier

type CostTier struct {
	InputTokensAbove int
	InputPerM        float64
	OutputPerM       float64
	CacheReadPerM    float64
	CacheWritePerM   float64
}

CostTier — runtime-тариф из models.json cost.tiers.

type EventType

type EventType string
const (
	EventToken         EventType = "token"
	EventThinking      EventType = "thinking"
	EventToolCall      EventType = "toolCall"
	EventToolCallDelta EventType = "toolCallDelta"
	EventDone          EventType = "done"
	EventError         EventType = "error"
)

type HTTPHooks

type HTTPHooks interface {
	BeforeHeaders(ctx context.Context, provider, model string, h http.Header)
	BeforeRequest(ctx context.Context, provider, model string, body []byte)
	AfterResponse(ctx context.Context, provider, model string, status int, h http.Header)
}

HTTPHooks перехватывает HTTP-трафик провайдера. Обработчики только in-process (шина хуков): запрос не сериализуется в subprocess-расширения. BeforeHeaders может менять заголовки до отправки.

type HTTPHooksSetter

type HTTPHooksSetter interface {
	SetHTTPHooks(HTTPHooks)
}

HTTPHooksSetter реализуется провайдерами с поддержкой HTTP-хуков.

type ImageContent

type ImageContent struct {
	Type     string `json:"type"`
	Data     string `json:"data"`
	MimeType string `json:"mimeType"`
}

type InferenceParams

type InferenceParams struct {
	Temperature *float64 `json:"temperature,omitempty"`
	MaxTokens   int      `json:"maxTokens,omitempty"`
	TopP        *float64 `json:"topP,omitempty"`
}

type Message

type Message struct {
	Role         Role           `json:"role"`
	Content      string         `json:"content"`
	Blocks       []ContentBlock `json:"blocks,omitempty"`
	StopReason   string         `json:"stopReason,omitempty"`
	ErrorMessage string         `json:"errorMessage,omitempty"`
	Images       []ImageContent `json:"images,omitempty"`
	ToolCalls    []ToolCall     `json:"toolCalls,omitempty"`
	ToolCallID   string         `json:"toolCallId,omitempty"`
	ToolName     string         `json:"toolName,omitempty"`
}

func AssistantMessage

func AssistantMessage(blocks []ContentBlock, toolCalls []ToolCall, stopReason, errMsg string) Message

AssistantMessage собирает нормализованное сообщение ассистента из blocks.

func PrepareOpenAIMessages

func PrepareOpenAIMessages(msgs []Message, compat CompatSettings) []Message

PrepareOpenAIMessages применяет compat-трансформы replay перед wire-кодированием.

type ModelConfig

type ModelConfig struct {
	Name             string             `json:"name"`
	Provider         string             `json:"provider"`
	ProviderID       string             `json:"providerId,omitempty"`
	Model            string             `json:"model"`
	APIBase          string             `json:"apiBase,omitempty"`
	APIType          string             `json:"apiType,omitempty"`
	APIKeyRef        string             `json:"apiKeyRef,omitempty"`
	ContextWindow    int                `json:"contextWindow,omitempty"`
	DefaultParams    InferenceParams    `json:"defaultParams,omitempty"`
	InputCostPerM    float64            `json:"inputCostPerM,omitempty"`
	OutputCostPerM   float64            `json:"outputCostPerM,omitempty"`
	Compat           CompatSettings     `json:"compat,omitempty"`
	Reasoning        bool               `json:"reasoning,omitempty"`
	Local            bool               `json:"local,omitempty"`
	ThinkingLevelMap map[string]*string `json:"thinkingLevelMap,omitempty"`
	Input            []string           `json:"input,omitempty"`
	Headers          map[string]string  `json:"headers,omitempty"`
	AuthHeader       bool               `json:"authHeader,omitempty"`
	CostTiers        []CostTier         `json:"-"`
}

func (ModelConfig) SupportsImage

func (m ModelConfig) SupportsImage() bool

SupportsImage сообщает, принимает ли модель изображения на вход.

type Provider

type Provider interface {
	Name() string
	Chat(ctx context.Context, req ChatRequest) (<-chan ChatEvent, error)
}

Provider — единый интерфейс LLM.

type ReplayOptions

type ReplayOptions struct {
	Compat CompatSettings
}

ReplayOptions управляет тем, как assistant-сообщения переигрываются провайдеру.

type Role

type Role string
const (
	RoleSystem    Role = "system"
	RoleUser      Role = "user"
	RoleAssistant Role = "assistant"
	// RoleTool — wire-роль результата инструмента в сессии (toolResult).
	RoleTool Role = "toolResult"
	// RoleToolLegacy — устаревшая OpenAI-роль, принимаемая при загрузке.
	RoleToolLegacy Role = "tool"
	// RoleBashExecution — запись bash пользователя в контексте сессии.
	RoleBashExecution Role = "bashExecution"
	// RoleCustom — сообщение контекста, внедрённое расширением.
	RoleCustom Role = "custom"
)

func NormalizeRole

func NormalizeRole(r Role) Role

NormalizeRole приводит legacy-роли к wire-ролям сессии.

type ToolCall

type ToolCall struct {
	ID   string         `json:"id"`
	Name string         `json:"name"`
	Args map[string]any `json:"args"`
}

func ToolCallsFromBlocks

func ToolCallsFromBlocks(blocks []ContentBlock, legacy []ToolCall) []ToolCall

ToolCallsFromBlocks возвращает tool calls из blocks toolCall с fallback на legacy ToolCalls.

type ToolDef

type ToolDef struct {
	Name        string         `json:"name"`
	Description string         `json:"description"`
	Parameters  map[string]any `json:"parameters"`
	// PromptSnippet — однострочное описание в секции «Available tools» system prompt.
	// Без сниппета инструмент туда не попадает.
	PromptSnippet string `json:"promptSnippet,omitempty"`
	// PromptGuidelines — правила использования, попадающие в секцию «Guidelines»
	// (дедупликация между инструментами).
	PromptGuidelines []string `json:"promptGuidelines,omitempty"`
}

type Usage

type Usage struct {
	InputTokens  int      `json:"inputTokens"`
	OutputTokens int      `json:"outputTokens"`
	CacheRead    int      `json:"cacheRead,omitempty"`
	CacheWrite   int      `json:"cacheWrite,omitempty"`
	Cost         *float64 `json:"cost,omitempty"`
}

Directories

Path Synopsis
Package api — общие HTTP wire-транспорты LLM для github.com/stelmakhdigital/stell-ai.
Package api — общие HTTP wire-транспорты LLM для github.com/stelmakhdigital/stell-ai.
auth
Package images — генерация изображений через OpenRouter chat+modalities (провайдер openrouter-images).
Package images — генерация изображений через OpenRouter chat+modalities (провайдер openrouter-images).
all
Package all регистрирует все first-class фабрики провайдеров github.com/stelmakhdigital/stell-ai.
Package all регистрирует все first-class фабрики провайдеров github.com/stelmakhdigital/stell-ai.
anthropic
Package anthropic — транспорт Anthropic Messages API (SSE).
Package anthropic — транспорт Anthropic Messages API (SSE).
discover
Package discover — зондирование локальных и удалённых endpoint'ов моделей.
Package discover — зондирование локальных и удалённых endpoint'ов моделей.
faux
Package faux — тестовый провайдер со сценариями для e2e и unit-тестов.
Package faux — тестовый провайдер со сценариями для e2e и unit-тестов.
mock
Package mock — тестовый провайдер со скриптованными ответами.
Package mock — тестовый провайдер со скриптованными ответами.
ollama
Package ollama — локальный провайдер Ollama (/api/chat).
Package ollama — локальный провайдер Ollama (/api/chat).
openai
Package openai — провайдер chat/completions, совместимый с OpenAI.
Package openai — провайдер chat/completions, совместимый с OpenAI.
radius
Package radius — провайдер шлюза Radius (messages API).
Package radius — провайдер шлюза Radius (messages API).
scripts
sync-models-dev command
Команда sync-models-dev загружает https://models.dev/api.json, пишет overlay и опционально сливает известных провайдеров в models.seed.json (приоритет models.dev).
Команда sync-models-dev загружает https://models.dev/api.json, пишет overlay и опционально сливает известных провайдеров в models.seed.json (приоритет models.dev).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL