Documentation
¶
Index ¶
- Constants
- Variables
- func Contains(list []string, s string) bool
- func FindSpec(ps []ProviderSpec, key string) (ProviderSpec, ModelSpec, bool)
- func GenerateText(ctx context.Context, cm model.BaseModel[*schema.Message], prompt string) (string, error)
- func NewChatModel(ctx context.Context, p ProviderSpec, m ModelSpec, effort string) (model.BaseModel[*schema.Message], error)
- func NewHistoryShapeModel(inner model.BaseModel[*schema.Message], kind string) model.BaseModel[*schema.Message]
- func NewTimeoutModel(cm model.BaseModel[*schema.Message]) model.BaseModel[*schema.Message]
- func NewVisionModel(inner model.BaseModel[*schema.Message], spec ModelSpec, resolve ImageResolver) model.BaseModel[*schema.Message]
- func ShapeMessages(input []*schema.Message) []*schema.Message
- func ShapeMessagesForKind(input []*schema.Message, kind string) []*schema.Message
- func SupportsImage(m ModelSpec) bool
- func ValidateProviders(ps []ProviderSpec) error
- type Classified
- type ImageResolver
- type Limit
- type ModelFactory
- type ModelOpt
- type ModelSpec
- type ProviderSpec
- func BuiltinProviders() []ProviderSpec
- func MergeBuiltin(ps []ProviderSpec) []ProviderSpec
- func MergeProviders(catalog, ps []ProviderSpec) []ProviderSpec
- func MigrateV1(old SettingsV1) []ProviderSpec
- func NormalizeProviders(ps []ProviderSpec) []ProviderSpec
- func Resolve(st Store) []ProviderSpec
- func ResolveCatalog(st Store, catalog []ProviderSpec) []ProviderSpec
- func ResolveFile(st Store) []ProviderSpec
- func ResolveFileCatalog(st Store, catalog []ProviderSpec) []ProviderSpec
- func ResolveFileMerged(st Store) []ProviderSpec
- func ResolveFileMergedWith(st Store, extra []ProviderSpec) []ProviderSpec
- func ResolveMerged(st Store) []ProviderSpec
- func ResolveMergedWith(st Store, extra []ProviderSpec) []ProviderSpec
- type Reasoning
- type Settings
- type SettingsV1
- type Store
- type UserPrefs
- type VisionV1
Constants ¶
const AttRefPrefix = "einox-att://"
AttRefPrefix 图片引用 URL 方案(engine 构造引用 part,本包请求时解析)。
const CodeOverflow = contract.ErrCodeOverflow
CodeOverflow 上下文超窗类(消费方:engine manager 层裁剪重装配恢复—— 不可重试、不进 failover,与 ABORTED 同为致命面但语义独立)。值锚定 contract 封闭词表(引擎侧判别用 llm.CodeOverflow 亦不脱锚)。
Variables ¶
var ErrIdleTimeout = errors.New("模型连接空闲超时(长时间无数据到达)")
ErrIdleTimeout 流式空闲超时哨兵(分类器识别为可重试传输类)。
var (
// MaxRetries 模型调用重试上限(engine 重试层装配用;0 = 不重试)。
MaxRetries = 3
)
Functions ¶
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 ¶
NewTimeoutModel 超时包装(工厂出口统一挂接——应用不感知)。
func NewVisionModel ¶
func NewVisionModel(inner model.BaseModel[*schema.Message], spec ModelSpec, resolve ImageResolver) model.BaseModel[*schema.Message]
NewVisionModel 图片输入包装(spec = 目标模型能力声明;resolve = 引用解析, nil = 未注入——含图请求即错误面)。
func ShapeMessages ¶
ShapeMessages 出站视图整形(规则同上;导出面 = reduction TokenCounter 复用——计数与真实出站同一规则函数,口径漂移结构性不可能。anthropic 计 数口径说明见包注释)。
func ShapeMessagesForKind ¶
ShapeMessagesForKind 带协议分叉的整形(H9-2:kind=anthropic 时额外删 Extra thinking 双键;kind 空/openai 与 ShapeMessages 同规则)。
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 侧字面量与注释权威 双源漂移无对账)。
type ImageResolver ¶
ImageResolver 引用路径 → (字节, MIME);应用注入(文档仓库读取面)。
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 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 Settings ¶
type Settings struct {
Providers []ProviderSpec `json:"providers"`
}
Settings llm-settings.json 存储结构(公共配置;无默认模型字段——默认值属用户 prefs)。
func ReadStored ¶
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 UserPrefs ¶
UserPrefs 用户偏好(契约形态——会话模型快照同型)。
func ResolveCurrent ¶
ResolveCurrent 用户 prefs 归一:模型无效 → 回退第一模型;effort 是用户级 思考档(off | low | high | max,默认 low;2026-08-28 三档化、2026-08-31 关档回归四档——旧值 on/max 归一 max、off 恢复关档本义、未知归一默认), 切模型不动 effort;mode 归一 manual | plan | auto(默认 plan),三项独立 互不联动。