openai

package
v0.0.0 Latest Latest
Warning

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

Go to latest
Published: Apr 26, 2026 License: None detected not legal advice Imports: 0 Imported by: 0

Documentation

Overview

Package openai 实现 OpenAI Chat Completions API 的 ModelProvider.

支持所有 OpenAI 官方模型(GPT-4o,o1,o3 系列等), 通过 Config.ModelOverrides 可注入厂商新发布但我们尚未维护的模型.

内部复用 internal/wire/openai_compat.go 处理 SSE 流式协议, 本包只负责配置工厂和维护静态模型表.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	// APIKey 是 OpenAI API 密钥(sk-... 格式).
	APIKey string

	// BaseURL 覆盖 API 端点(默认 https://api.openai.com).
	// 用于 Azure OpenAI,兼容 OpenAI 的私有化端点等.
	BaseURL string

	// HTTPClient 注入自定义 HTTP 客户端.
	// nil = 使用默认 http.Client (带 Timeout 字段配置的 ResponseHeaderTimeout).
	// 非 nil 时 consumer 完全接管超时责任, 下面的 Timeout 字段被忽略.
	HTTPClient *http.Client

	// Timeout 限制"从请求发出到收到响应首字节"的时间.
	//
	// 通过 http.Transport.ResponseHeaderTimeout 实现, **不影响** SSE 流式响应的后续
	// body 读取 - 长流式回复 (2-5 分钟) 可以正常读完.这是 LLM provider 的正确超时
	// 语义: 捕捉服务端死等, 放行长流式输出.
	//
	// 精妙之处(CLEVER): 不要误用 http.Client.Timeout - 那会把 SSE 流砍死.
	// 详见 internal/wire/openai.go defaultResponseHeaderTimeout 注释.
	//
	// 0 = 使用 defaultTimeout (60s, 适合 OpenAI 云端).
	// 仅当 HTTPClient 为 nil 时生效; 提供自定义 HTTPClient 时此字段被忽略.
	Timeout time.Duration

	// ModelOverrides 覆盖或扩展静态模型表.
	// 厂商发布新模型时,无需等待我们更新代码即可使用.
	ModelOverrides []flyto.ModelInfo
}

Config 是 OpenAI provider 的配置.

func (Config) GoString

func (c Config) GoString() string

GoString 实现 fmt.GoStringer,防止 %#v 打印时泄露 APIKey. 升华改进(ELEVATED): 参见 anthropic.Config.GoString 的说明,同理.

type Provider

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

Provider 是 OpenAI ModelProvider 实现.

func New

func New(cfg Config) *Provider

New 创建 OpenAI ModelProvider.

func (*Provider) Models

func (p *Provider) Models(_ context.Context) ([]flyto.ModelInfo, error)

Models 返回 OpenAI 可用模型列表.

历史包袱(LEGACY): OpenAI 有 /v1/models 端点,但返回的模型列表包含 embedding,audio,image 等非 chat 模型,且不包含定价和上下文窗口信息. 我们维护静态表覆盖主要 chat 模型,通过 ModelOverrides 补充新模型. 未来改进:调用 /v1/models 后与静态表合并,补充定价信息.

func (*Provider) Name

func (p *Provider) Name() string

func (*Provider) Stream

func (p *Provider) Stream(ctx context.Context, req *flyto.Request) (<-chan flyto.Event, error)

Jump to

Keyboard shortcuts

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