llm

package
v0.5.1 Latest Latest
Warning

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

Go to latest
Published: Sep 7, 2026 License: Apache-2.0 Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const AttRefPrefix = "einox-att://"

AttRefPrefix 图片引用 URL 方案(engine 构造引用 part,本包请求时解析)。

View Source
const CodeOverflow = contract.ErrCodeOverflow

CodeOverflow 上下文超窗类(消费方:engine manager 层裁剪重装配恢复—— 不可重试、不进 failover,与 ABORTED 同为致命面但语义独立)。值锚定 contract 封闭词表(引擎侧判别用 llm.CodeOverflow 亦不脱锚)。

Variables

View Source
var ErrIdleTimeout = errors.New("模型连接空闲超时(长时间无数据到达)")

ErrIdleTimeout 流式空闲超时哨兵(分类器识别为可重试传输类)。

View Source
var (

	// MaxRetries 模型调用重试上限(engine 重试层装配用;0 = 不重试)。
	MaxRetries = 3
)

Functions

func Contains

func Contains(list []string, s string) bool

Contains 导出(api 委托复用)。

func FindSpec

func FindSpec(ps []ProviderSpec, key string) (ProviderSpec, ModelSpec, bool)

FindSpec 从 provider 集定位复合键的原始条目(模型构造用;带升格语义)。

func GenerateText

func GenerateText(ctx context.Context, cm model.BaseModel[*schema.Message], prompt string) (string, error)

GenerateText 单次生成(无头调用辅助——消息构造归基座,应用不触 eino 类型; pm local 同步按钮的 commit message 生成路径)。

func NewChatModel

func NewChatModel(ctx context.Context, p ProviderSpec, m ModelSpec, effort string) (model.BaseModel[*schema.Message], error)

NewChatModel 生产构造:kind → claude / openai 组件(effort 先归一两档); 出口统一挂超时包装(网络容错 ①——全装配面唯一模型构造口,主会话/spawn/ 拓扑/摘要/genTitle 全覆盖;机制见 timeout.go)。 responses 协议维持占位(2026-08-28 接真评估定案,证据链见 docs/04:上游 仅 agenticopenai 一条路且走 AgenticMessage 族——eino schema 无 ↔Message 转换器、需引入官方 openai-go 新依赖、手写双向流式转换层踩上游演进雷区、 当前零消费方;OpenAI 官方端点用 openai 协议 chat/completions 可正常接入)。

func NewHistoryShapeModel

func NewHistoryShapeModel(inner model.BaseModel[*schema.Message], kind string) model.BaseModel[*schema.Message]

NewHistoryShapeModel 出站历史整形包装(kind = provider 协议标识;当前 openai/anthropic 两协议同规则——在途例外与官方 thinking 指南一致, anthropic 分叉多剥 Extra 双键)。

func NewTimeoutModel

func NewTimeoutModel(cm model.BaseModel[*schema.Message]) model.BaseModel[*schema.Message]

NewTimeoutModel 超时包装(工厂出口统一挂接——应用不感知)。

func NewVisionModel

func NewVisionModel(inner model.BaseModel[*schema.Message], spec ModelSpec, resolve ImageResolver) model.BaseModel[*schema.Message]

NewVisionModel 图片输入包装(spec = 目标模型能力声明;resolve = 引用解析, nil = 未注入——含图请求即错误面)。

func ShapeMessages

func ShapeMessages(input []*schema.Message) []*schema.Message

ShapeMessages 出站视图整形(规则同上;导出面 = reduction TokenCounter 复用——计数与真实出站同一规则函数,口径漂移结构性不可能。anthropic 计 数口径说明见包注释)。

func ShapeMessagesForKind

func ShapeMessagesForKind(input []*schema.Message, kind string) []*schema.Message

ShapeMessagesForKind 带协议分叉的整形(H9-2:kind=anthropic 时额外删 Extra thinking 双键;kind 空/openai 与 ShapeMessages 同规则)。

func SupportsImage

func SupportsImage(m ModelSpec) bool

SupportsImage 模型是否声明图片输入。

func ValidateProviders

func ValidateProviders(ps []ProviderSpec) error

ValidateProviders PUT 校验(kind 值域/id 唯一/variants 与 default/input 值域)。 纯校验零归一副作用——归一是读侧唯一职责(ResolveFile/ResolveFileMerged 的 NormalizeProviders);PUT 侧归一落盘会把空 kind 固化成 anthropic,挡掉 合并档「空位补全」的 by-ID 参数填充(2026-08-28 引用策略定案配套)。

Types

type Classified

type Classified struct {
	Retryable bool
	Code      string // contract.ErrCode*(Server/Auth/RateLimit/Transport/Overflow/Aborted)
	Message   string // 面向用户的中文文案(调用方自行截断)
}

Classified 分类结果(Code 取 contract.ErrCode* 封闭词表常量——单一 真源在 contract/event.go,审查 P2-10 收口:此前 llm 侧字面量与注释权威 双源漂移无对账)。

func Classify

func Classify(err error) Classified

Classify 错误分类(nil → 零值;成功路径 ShouldRetry 亦会调用)。

type ImageResolver

type ImageResolver func(path string) ([]byte, string, error)

ImageResolver 引用路径 → (字节, MIME);应用注入(文档仓库读取面)。

type Limit

type Limit struct {
	Context int `json:"context"`
	Output  int `json:"output"`
}

Limit 上下文/输出上限(0 = 未知)。

type ModelFactory

type ModelFactory func(ctx context.Context, p ProviderSpec, m ModelSpec, effort string) (model.BaseModel[*schema.Message], error)

ModelFactory 模型构造口(测试注入假模型;生产 = NewChatModel)。

func RewriteSpec added in v0.4.0

func RewriteSpec(rewrite func(p ProviderSpec, m ModelSpec, effort string) ModelSpec) ModelFactory

RewriteSpec 规格改写工厂缝(能力件,2026-09-02 应用层适配定案配套): 应用层供应商特有适配——改写出站模型名/限额/采样等——经 rewrite 在 构造前改写 ModelSpec 完成,基座只按改写后规格走 NewChatModel 构造 协议客户端(含超时包装),零厂家知识。缺省(不设置 Options.NewModel) 不经改写直连。

type ModelOpt

type ModelOpt struct {
	Key           string   `json:"key"`
	Provider      string   `json:"provider"`
	ProviderName  string   `json:"provider_name"`
	Name          string   `json:"name"`
	Input         []string `json:"input"`
	ContextWindow int      `json:"context_window"` // 上下文窗口(Limit.Context 显式值 > 推断表;0=未知只显 token 绝对数)
}

ModelOpt llm-options 平铺模型条目(key = provider/model 复合键;思考是用户级 开关,模型条目不携带 reasoning——2026-08-21 模型配置去思考参数定案)。

func FindOpt

func FindOpt(models []ModelOpt, key string) *ModelOpt

FindOpt 复合键定位;旧裸名(无 /)匹配模型 id 尾段 → 升格。

func FlattenModels

func FlattenModels(ps []ProviderSpec) []ModelOpt

FlattenModels 启用 provider 的模型平铺(priority 降序稳定排序—— 「priority 序」注释此前无排序兑现(安全审查 2026-09-06),ResolveCurrent 的「回退第一模型」实际拿到配置切片序;稳定排序保同优先级的清单序。 空配置返回空切片而非 nil——JSON 出 [] 不出 null)。

type ModelSpec

type ModelSpec struct {
	ID        string     `json:"id"`
	Name      string     `json:"name"`
	Reasoning *Reasoning `json:"reasoning"`
	Limit     *Limit     `json:"limit,omitempty"`
	Input     []string   `json:"input"` // ⊆ text/image(空 = text)
	Priority  int        `json:"priority"`
	// NoToolCalls 明示该模型不支持函数调用(A4:人工维护元数据,可能过时——
	// fail fast 价值大于标记维护成本)。置位时 assemble 期工具面非空(含会话
	// 域件与 spawn)即 CONFIG 错误,不等首轮运行期报端点方言各异的错;能力
	// 是模型属性故放 ModelSpec 而非 ProviderSpec(同 provider 各模型可不同,
	// Input 能力面同先例)。
	NoToolCalls bool `json:"no_tool_calls,omitempty"`
	// Temperature / TopP 采样参数(nil = 不发字段走端点默认——多数推理端点
	// 拒绝显式 temperature,只在用户显式设置时下发;随会话模型快照粘住,
	// 会话内不变即前缀缓存友好)。建议二选一,不同时设。
	Temperature *float64 `json:"temperature,omitempty"`
	TopP        *float64 `json:"top_p,omitempty"`
}

ModelSpec 模型条目(id 即模型名;name 空 = 用 id)。

type ProviderSpec

type ProviderSpec struct {
	ID      string      `json:"id"` // 稳定标识(复合键引用,不可改)
	Name    string      `json:"name"`
	Kind    string      `json:"kind"` // anthropic | openai | responses(responses 形式选项,组装未实现)
	BaseURL string      `json:"base_url"`
	APIKey  string      `json:"api_key"`           // write-only
	Dialect string      `json:"dialect,omitempty"` // 思考方言("" 零发送走端点默认 | "deepseek" 私有块+档位直传 | "glm" 智谱同形私有块 | "effort" 通用 reasoning_effort)——厂家私有格式只走 dialect,绝不写进通用分支
	Enabled bool        `json:"enabled"`
	Catalog []string    `json:"catalog,omitempty"` // 拉取到的端点模型清单(fetch-models 结果缓存,随保存持久化;UI 下拉数据源,不参与校验/路由)
	Models  []ModelSpec `json:"models"`
}

ProviderSpec 端点条目。

func BuiltinProviders

func BuiltinProviders() []ProviderSpec

BuiltinProviders 预置供应商目录(纯数据、版本化随基座、不含密钥;模型页 「厂家」下拉加载模板同源)。

func MergeBuiltin

func MergeBuiltin(ps []ProviderSpec) []ProviderSpec

MergeBuiltin 引用策略「都引用」合并原语:用户条目 by-ID 匹配内置预设, 缺省参数补全(见包注释语义)。返回新切片;无匹配条目原样透传。

func MergeProviders added in v0.4.0

func MergeProviders(catalog, ps []ProviderSpec) []ProviderSpec

MergeProviders 任意预置目录的 by-ID 合并原语(2026-09-02 应用层预置 定案配套能力:内置目录 + 应用仓扩展目录同构参与——provider 级补全 语义同 MergeBuiltin:缺省字段填充、用户显式值优先、无匹配条目原样 透传、不独立注入)。

func MigrateV1

func MigrateV1(old SettingsV1) []ProviderSpec

MigrateV1 旧单端点 → providers:main 承接主端点与模型清单(思考档统一 low/high/max,默认档取旧 thinking——max 原样、其余归 low);vision 独立 provider,模型标图片输入。

func NormalizeProviders

func NormalizeProviders(ps []ProviderSpec) []ProviderSpec

NormalizeProviders 归一(kind/input 空时填默认),不校验(迁移产物兜底用)。

func Resolve

func Resolve(st Store) []ProviderSpec

Resolve 运行时完整 resolve(组装期调用):env > 界面层 > yaml 手动层。 全空 = 空(assemble 层给「未配置模型供应商」错误面)。

func ResolveCatalog added in v0.4.0

func ResolveCatalog(st Store, catalog []ProviderSpec) []ProviderSpec

ResolveCatalog 运行时 resolve 的应用自备目录版(语义同 ResolveMerged, 文件层换 ResolveFileCatalog)。

func ResolveFile

func ResolveFile(st Store) []ProviderSpec

ResolveFile 界面配置层 resolve(api/llm-options、chat 会话快照、prefs 校验 共用):文件存储的 providers 原样(含 v1 识别迁移);空配置 = 空。引用策略 的都引用档走 ResolveFileMerged(2026-08-28 定案,见 presets.go)。

func ResolveFileCatalog added in v0.4.0

func ResolveFileCatalog(st Store, catalog []ProviderSpec) []ProviderSpec

ResolveFileCatalog 文件层 + 应用自备目录合并(2026-09-02 应用挑选权 定案配套能力:目录 = 应用挑选的基座标准供应商子集 + 应用私有全集,由 应用层全权决定、展示与运行时同源;不在目录内的条目即使内置有预设也 不被补全——排除语义在此落地。文件层读盘〔含 v1 识别迁移〕与合并次序 〔归一前,Kind 空位留给目录补全〕同 ResolveFileMerged)。

func ResolveFileMerged

func ResolveFileMerged(st Store) []ProviderSpec

ResolveFileMerged 文件层 + 内置合并(选择器/校验/引擎同世界观的读侧视图; 合并在归一前——Kind 空位须留给内置补全,先归一会误填 anthropic)。

func ResolveFileMergedWith added in v0.4.0

func ResolveFileMergedWith(st Store, extra []ProviderSpec) []ProviderSpec

ResolveFileMergedWith 文件层 + 内置 + 应用层扩展预置合并(应用预置注入 面的便捷档——目录 = 全量内置 + extra;要挑选基座子集用 ResolveFileCatalog 自备完整目录)。extra 条目与内置同构:by-ID 匹配已配置条目做补全, 不独立注入。

func ResolveMerged

func ResolveMerged(st Store) []ProviderSpec

ResolveMerged 运行时 resolve 都引用档(env > 文件层合并 > yaml 手动层; env/yaml 逃生层不合并——显式配置原样,与自定义档同形)。

func ResolveMergedWith added in v0.4.0

func ResolveMergedWith(st Store, extra []ProviderSpec) []ProviderSpec

ResolveMergedWith 运行时 resolve 都引用档的应用预置扩展版(语义同 ResolveMerged,文件层换 ResolveFileMergedWith)。

type Reasoning

type Reasoning struct {
	Variants []string `json:"variants"`
	Default  string   `json:"default"`
}

Reasoning 思考档定义(跟模型走;nil = 模型不支持思考)。

type Settings

type Settings struct {
	Providers []ProviderSpec `json:"providers"`
}

Settings llm-settings.json 存储结构(公共配置;无默认模型字段——默认值属用户 prefs)。

func ReadStored

func ReadStored(st Store) Settings

ReadStored 原样读 llm-settings.json(无回退;GET 回显与 PUT merge 用)。 坏 JSON 容错回空——密钥文件手工损坏时页面可重新保存修复。

type SettingsV1

type SettingsV1 struct {
	API          string    `json:"api" yaml:"api"`
	BaseURL      string    `json:"base_url" yaml:"base_url"`
	APIKey       string    `json:"api_key" yaml:"api_key"`
	DefaultModel string    `json:"default_model" yaml:"default_model"` // 迁移丢弃(默认值改属用户)
	Thinking     string    `json:"thinking" yaml:"thinking"`
	Models       []string  `json:"models" yaml:"models"`
	Vision       *VisionV1 `json:"vision" yaml:"vision"`
}

SettingsV1 旧单端点结构(2026-08-21 前存量;json/yaml 双标签——yaml 层同形态)。

type Store

type Store interface {
	ReadLLMFile(name string) ([]byte, bool)
}

Store 界面配置层存储(应用注入——.agent/llm/llm-settings.json 读写面)。

type UserPrefs

type UserPrefs = contract.UserPrefs

UserPrefs 用户偏好(契约形态——会话模型快照同型)。

func ResolveCurrent

func ResolveCurrent(models []ModelOpt, p UserPrefs) UserPrefs

ResolveCurrent 用户 prefs 归一:模型无效 → 回退第一模型;effort 是用户级 思考档(off | low | high | max,默认 low;2026-08-28 三档化、2026-08-31 关档回归四档——旧值 on/max 归一 max、off 恢复关档本义、未知归一默认), 切模型不动 effort;mode 归一 manual | plan | auto(默认 plan),三项独立 互不联动。

type VisionV1

type VisionV1 struct {
	API     string `json:"api" yaml:"api"`
	BaseURL string `json:"base_url" yaml:"base_url"`
	APIKey  string `json:"api_key" yaml:"api_key"`
	Model   string `json:"model" yaml:"model"`
}

VisionV1 旧独立图片端点。

Jump to

Keyboard shortcuts

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