Documentation
¶
Overview ¶
Package llm — вызов языковой модели одним контрактом поверх нескольких плеч: повторы, бюджет времени, классы отказа и наблюдатель — здесь, протокол поставщика — в подпакете (ollama; gigachat и yandex следом).
Index ¶
- Constants
- func Fingerprint(parts ...string) string
- func Latency(err error) time.Duration
- func Ptr[T any](v T) *T
- func Recoverable(err error) bool
- func RetryAfter(h http.Header) time.Duration
- type AttemptReport
- type CallError
- type CallReport
- type Chat
- type Client
- type Image
- type Message
- type Mode
- type Observer
- type Output
- type Phase
- type Provider
- type Request
- type ResponseError
- type Result
- type RetryClass
- type Role
- type StatusError
- type Usage
Constants ¶
const ( DefaultTimeout = 90 * time.Second DefaultAttempts = 3 DefaultPause = 2 * time.Second DefaultMaxPause = time.Minute DefaultMaxRetryAfter = 30 * time.Second )
Умолчания клиента. Attempts × Timeout + паузы — то, что вызывающий обязан себе отвести (Client.Budget), иначе очередь оборвёт последнюю попытку.
const ( OutcomeOK = "ok" OutcomeCancelled = "cancelled" OutcomeTimeout = "timeout" OutcomeHTTP4xx = "http_4xx" OutcomeHTTP5xx = "http_5xx" OutcomeBadResponse = "bad_response" OutcomeNetwork = "network" OutcomeError = "error" )
Исходы попытки — про транспорт и годность конверта, а не про контракт модели.
Variables ¶
This section is empty.
Functions ¶
func Fingerprint ¶
Fingerprint — короткий отпечаток набора строк, из которых складывается идентичность вызова: плечо, модель, ревизия, хеш промпта, схема, опции, подготовка входа. Считается до вызова — по нему дедупятся прогоны; порядок частей значим.
func Recoverable ¶
Recoverable отвечает, имеет ли смысл повторить вызов позже: всё, кроме RetryNever.
Types ¶
type AttemptReport ¶
type AttemptReport struct {
Provider string
Model string
Task string
Outcome string
Phase Phase
Duration time.Duration
Usage Usage
}
AttemptReport — одна попытка: исход, фаза, длительность и расход, если он известен.
type CallError ¶
type CallError struct {
Provider string
Model string
Phase Phase
Status int // код HTTP; 0 — ответа не было (сеть, просрочка, отмена)
Message string
Attempts int
RetryAfter time.Duration
Latency time.Duration
Class RetryClass
Err error
}
CallError — отказ вызова целиком, с решением о повторе и потраченным временем.
type CallReport ¶
type CallReport struct {
Provider string
Model string
Task string
Outcome string
Class RetryClass
Attempts int
Duration time.Duration
Usage Usage
}
CallReport — вызов целиком: исход, число попыток, суммарный расход попыток.
type Client ¶
type Client struct {
Provider Provider
// Timeout — на одну попытку, не на весь вызов: повтор после просрочки получает полный срок.
Timeout time.Duration
Attempts int
// Pause — базовая пауза между попытками, дальше удваивается до MaxPause.
Pause time.Duration
MaxPause time.Duration
// MaxRetryAfter — потолок просьбы подождать: дольше — отказ [RetryAfterDelay]
// без ожидания, срок в нём исходный; повторяет его очередь потребителя.
MaxRetryAfter time.Duration
// Observe — приёмник отчётов; пустое поле не считает ничего.
Observe Observer
}
Client — вызов с повторами поверх одного плеча. Поля открыты: бюджет сверяется с таймаутом джобы снаружи, а не прячется в константах.
func (*Client) Budget ¶
Budget — верхняя оценка времени вызова: все попытки со своими таймаутами плюс худшие паузы.
func (*Client) Chat ¶
Chat вызывает модель, повторяя отказы классов RetryImmediate и RetryAfterDelay в пределах числа попыток и потолка ожидания.
type Observer ¶
type Observer interface {
Attempt(AttemptReport)
Call(CallReport)
}
Observer — приёмник отчётов; реализует его потребитель (Prometheus, журнал).
type Output ¶
type Output struct {
Mode Mode
Schema json.RawMessage
}
Output — требуемая форма ответа; Schema читается только при ModeSchema.
type Phase ¶
type Phase string
Phase — где отказал вызов: у облачных плеч перед генерацией стоят вход и загрузка кадров.
type Provider ¶
type Provider interface {
Name() string
Complete(ctx context.Context, req Request) (Result, error)
}
Provider — одна попытка вызова у конкретного плеча. Отказ HTTP возвращается *StatusError, негодный ответ — *ResponseError, сеть и контекст — как есть.
type Request ¶
type Request struct {
Task string
Model string
Messages []Message
Output Output
Temperature *float64
}
Request — один вызов модели. Task — имя задачи для метрик и журнала, не текст: набор значений ограничен конфигом потребителя.
type ResponseError ¶
type ResponseError struct {
Message string
}
ResponseError — поставщик ответил, но ответа модели в теле нет: отказ маршрута под кодом 200, битый конверт, пустое содержимое.
func (*ResponseError) Error ¶
func (e *ResponseError) Error() string
type Result ¶
type Result struct {
// Model — имя из ответа поставщика; пустое у ответа заменяется запрошенным.
Model string
Text string
FinishReason string
Usage Usage
// ServerLatency — время на стороне поставщика, если он его сообщает; ноль — не сообщил.
ServerLatency time.Duration
// Latency — сколько ждал вызывающий: все попытки и паузы между ними.
Latency time.Duration
Attempts int
}
Result — ответ модели с тем, что ложится в журнал вызова.
type RetryClass ¶
type RetryClass string
RetryClass — что делать с отказом. Немедленный повтор и повтор после паузы делает клиент; NeedsConfiguration и Never клиент не повторяет, но первый остаётся восстановимым — его чинит оператор, а не запрос.
const ( RetryImmediate RetryClass = "immediate" RetryAfterDelay RetryClass = "after_delay" RetryNeedsConfiguration RetryClass = "needs_configuration" RetryNever RetryClass = "never" )
Классы отказа.
type Role ¶
type Role string
Role — роль сообщения. Инструкция и данные едут разными ролями: приехавшее с данными «забудь инструкции» иначе получило бы ту же роль, что правила.
type StatusError ¶
StatusError — не-2xx от поставщика вместе с просьбой подождать.
func (*StatusError) Error ¶
func (e *StatusError) Error() string
Directories
¶
| Path | Synopsis |
|---|---|
|
Package ollama — плечо Ollama поверх нативного `/api/chat`: кадры base64 в сообщении, `format` подсказкой или схемой, серверные длительности в ответе.
|
Package ollama — плечо Ollama поверх нативного `/api/chat`: кадры base64 в сообщении, `format` подсказкой или схемой, серверные длительности в ответе. |