Skip to content

Conversation

@Aias00
Copy link
Contributor

@Aias00 Aias00 commented Sep 14, 2025

add Fireworks AI support
refer: https://docs.fireworks.ai/tools-sdks/openai-compatibility

Ⅰ. Describe what this PR did

Ⅱ. Does this pull request fix one issue?

Ⅲ. Why don't you add test cases (unit test/integration test)?

Ⅳ. Describe how to verify it

Ⅴ. Special notes for reviews

@lingma-agents
Copy link

lingma-agents bot commented Sep 14, 2025

新增对 Fireworks AI 的支持

变更概述
  • 新功能
    • 新增对 Fireworks AI 服务的支持,允许通过 OpenAI 协议代理访问 Fireworks AI 的模型服务。
    • provider 包中添加了 fireworks.go 文件,实现了 Fireworks AI 提供者的初始化、配置验证、请求头和请求体处理逻辑。
    • 支持 Fireworks AI 的 chatCompletioncompletionmodels API 接口。
    • 实现了请求头转换逻辑,包括设置正确的 Host、Authorization 和路径。
  • 文档
    • 在中文和英文的 README 文件中增加了关于 Fireworks AI 的配置说明和使用示例。
    • 提供了详细的配置信息、请求示例和响应示例,方便用户理解和使用。
  • 测试更新
    • 添加了针对 Fireworks AI 配置解析的单元测试,确保配置的正确性和健壮性。
    • 测试覆盖了基本配置、多模型配置以及无效配置的情况。
  • 配置调整
    • provider.go 文件中注册了 Fireworks AI 提供者,使其能够被插件识别和使用。
变更文件
文件路径 变更说明
plugins/​wasm-go/​extensions/​ai-proxy/​README.​md 新增了关于 Fireworks AI 的配置说明和使用示例,包括配置信息、请求示例和响应示例。
plugins/​wasm-go/​extensions/​ai-proxy/​README_​EN.​md 新增了关于 Fireworks AI 的配置说明和使用示例,包括配置信息、请求示例和响应示例。
plugins/​wasm-go/​extensions/​ai-proxy/​main_​test.​go 新增了针对 Fireworks AI 配置解析的测试函数 `TestFireworks`。
plugins/​wasm-go/​extensions/​ai-proxy/​provider/​fireworks.​go 新增了 Fireworks AI 提供者的实现,包括配置验证、请求处理和请求头转换逻辑。
plugins/​wasm-go/​extensions/​ai-proxy/​provider/​provider.​go 在 `providerType` 中新增了 `providerTypeFireworks` 类型,并在初始化器映射中注册了 Fireworks AI 提供者。
plugins/​wasm-go/​extensions/​ai-proxy/​test/​fireworks.​go 新增了 Fireworks AI 配置解析的测试用例,包括基本配置、多模型配置和无效配置的测试。

💡 小贴士

与 lingma-agents 交流的方式

📜 直接回复评论
直接回复本条评论,lingma-agents 将自动处理您的请求。例如:

  • 在当前代码中添加详细的注释说明。

  • 请详细介绍一下你说的 LRU 改造方案,并使用伪代码加以说明。

📜 在代码行处标记
在文件的特定位置创建评论并 @lingma-agents。例如:

  • @lingma-agents 分析这个方法的性能瓶颈并提供优化建议。

  • @lingma-agents 对这个方法生成优化代码。

📜 在讨论中提问
在任何讨论中 @lingma-agents 来获取帮助。例如:

  • @lingma-agents 请总结上述讨论并提出解决方案。

  • @lingma-agents 请根据讨论内容生成优化代码。

--- ### Added support for Fireworks AI
Change Overview
  • New Features
    • Added support for Fireworks AI services, allowing access to Fireworks AI model services through the OpenAI protocol proxy.
    • Added the fireworks.go file to the provider package, implementing the initialization, configuration verification, request header and request body processing logic of Fireworks AI providers.
    • Supports Fireworks AI's chatCompletion, completion and models API interfaces.
    • Implements the request header conversion logic, including setting the correct Host, Authorization and path.
  • document
    • Added configuration instructions and usage examples for Fireworks AI to the README files in Chinese and English.
    • Provide detailed configuration information, request examples and response examples for users to understand and use.
      Test Update
    • Added unit tests for Fireworks AI configuration parsing to ensure configuration correctness and robustness.
    • Tests cover basic configuration, multi-model configuration, and invalid configuration.
      Configuration adjustment
    • The Fireworks AI provider is registered in the provider.go file to enable it to be recognized and used by the plug-in.
Change file
File path Change instructions
plugins/​wasm-go/​extensions/​ai-proxy/​README.​md A new configuration instructions and usage examples for Fireworks AI, including configuration information, request examples, and response examples.
plugins/​wasm-go/​extensions/​ai-proxy/​README_​EN.​md A new configuration instructions and usage examples for Fireworks AI, including configuration information, request examples, and response examples.
plugins/​wasm-go/​extensions/​ai-proxy/​main_​test.​go A new test function `TestFireworks` for Fireworks AI configuration parsing has been added.
plugins/​wasm-go/​extensions/​ai-proxy/​provider/​fireworks.​go A new implementation of Fireworks AI providers includes configuration verification, request processing, and request header conversion logic.
plugins/​wasm-go/​extensions/​ai-proxy/​provider/​provider.​go A new `providerTypeFireworks` type was added to `providerType` and a Fireworks AI provider was registered in the initializer map.
plugins/​wasm-go/​extensions/​ai-proxy/​test/​fireworks.​go A new test cases for Fireworks AI configuration resolution include basic configuration, multi-model configuration, and invalid configuration testing.

💡 Tips

How to communicate with lingma-agents

📜 Reply to comments directly
Reply to this comment directly and lingma-agents will automatically process your request. For example:

  • _Add detailed comment description in the current code. _

  • _Please introduce the LRU transformation plan you mentioned in detail and explain it using pseudo-code. _

**📜 Mark ** at line of code
Create comments at a specific location in the file and @lingma-agents. For example:

  • _@lingma-agents Analyze the performance bottlenecks of this method and provide optimization suggestions. _

  • _@lingma-agents Generate optimization code for this method. _

📜 Ask a question during discussion
In any discussion @lingma-agents to get help. For example:

  • _@lingma-agents Please summarize the above discussion and propose solutions. _

  • _@lingma-agents Please generate optimization code based on the discussion content. _

Copy link

@lingma-agents lingma-agents bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔎 代码评审报告

🎯 评审意见概览
严重度 数量 说明
🔴 Blocker 0 阻断性问题,需立即修复。例如:系统崩溃、关键功能不可用或严重安全漏洞。
🟠 Critical 0 严重问题,高优先级修复。例如:核心功能异常或性能瓶颈影响用户体验。
🟡 Major 1 主要问题,建议修复。例如:非核心功能缺陷或代码维护性较差。
🟢 Minor 0 次要问题,酬情优化。例如:代码格式不规范或注释缺失。

总计: 1 个问题

📋 评审意见详情
💡 代码实现建议
以下是文件级别的代码建议,聚焦于代码的可读性、可维护性和潜在问题。
🔹 plugins/wasm-go/extensions/ai-proxy/test/fireworks.go (1 💬)
🚀 架构设计建议
以下是对代码架构和设计的综合分析,聚焦于跨文件交互、系统一致性和潜在优化空间。
🔍1. 架构一致性问题:Fireworks provider 实现与标准 OpenAI 兼容 provider 模式的偏离

虽然 Fireworks provider 基于标准 provider 模式实现,但其具体实现中缺少对某些关键能力(如流式处理、上下文缓存)的明确支持声明。这可能导致在特定场景下行为不一致或功能缺失。建议明确声明所有支持的能力,并确保其实现符合标准 provider 模式的要求。

📌 关键代码

func (f *fireworksProviderInitializer) DefaultCapabilities() map[string]string {
	return map[string]string{
		string(ApiNameChatCompletion): PathOpenAIChatCompletions,
		string(ApiNameCompletion):     PathOpenAICompletions,
		string(ApiNameModels):         PathOpenAIModels,
	}
}

⚠️ 潜在风险

可能导致在特定场景下功能缺失或行为不一致,影响用户体验和系统稳定性。

🔍2. 跨文件问题:Fireworks provider 测试覆盖不完整

当前 Fireworks provider 的测试主要集中在配置解析功能上,缺少对核心请求处理逻辑(如请求头转换、请求体处理等)的测试。这可能导致在实际运行中出现未预期的行为或错误。建议增加对核心功能的测试覆盖,确保其与其他 OpenAI 兼容提供者的行为一致。

📌 关键代码

func TestFireworks(t *testing.T) {
	// 只测试核心配置解析功能,避免测试框架的并发 mutex 死锁问题
	// Fireworks provider 基于标准 provider 模式实现,功能与其他 OpenAI 兼容提供者一致
	test.RunFireworksParseConfigTests(t)

}

⚠️ 潜在风险

可能导致在实际运行中出现未预期的行为或错误,影响系统的稳定性和可靠性。

🔍3. 技术债务:Fireworks provider 缺少详细的文档说明

虽然在 README 和 README_EN 中添加了 Fireworks AI 的基本配置示例,但缺少对其特有行为、限制和最佳实践的详细说明。这可能增加未来维护和扩展的难度。建议补充详细的文档,包括配置选项、API 映射规则、已知限制等内容。

📌 关键代码

#### Fireworks AI

Fireworks AI 所对应的 `type``fireworks`。它并无特有的配置字段。

⚠️ 潜在风险

可能导致未来维护和扩展困难,增加技术债务。

🔍4. 安全性问题:Fireworks provider 的 API Token 管理策略不明确

当前 Fireworks provider 的 API Token 管理策略依赖于全局配置,缺乏对 Token 轮换、过期处理等安全机制的支持。这可能在生产环境中带来安全风险。建议引入更完善的 Token 管理策略,支持动态更新和轮换。

📌 关键代码

func (f *fireworksProviderInitializer) ValidateConfig(config *ProviderConfig) error {
	if config.apiTokens == nil || len(config.apiTokens) == 0 {
		return errors.New("no apiToken found in provider config")
	}
	return nil
}

⚠️ 潜在风险

可能导致 API Token 泄露或滥用,带来安全风险。

🔍5. 可维护性问题:Fireworks provider 的代码复用度不高

Fireworks provider 的实现中存在与其他 OpenAI 兼容 provider 重复的代码逻辑(如请求头处理、API 名称解析等)。这可能增加代码维护成本和出错概率。建议抽象出通用的处理逻辑,提高代码复用度。

📌 关键代码

func (f *fireworksProvider) TransformRequestHeaders(ctx wrapper.HttpContext, apiName ApiName, headers http.Header) {
	util.OverwriteRequestPathHeaderByCapability(headers, string(apiName), f.config.capabilities)
	util.OverwriteRequestHostHeader(headers, fireworksDomain)
	util.OverwriteRequestAuthorizationHeader(headers, "Bearer "+f.config.GetApiTokenInUse(ctx))
	headers.Del("Content-Length")
}

func (f *fireworksProvider) GetApiName(path string) ApiName {
	if strings.Contains(path, PathOpenAIChatCompletions) {
		return ApiNameChatCompletion
	}
	if strings.Contains(path, PathOpenAICompletions) {
		return ApiNameCompletion
	}
	if strings.Contains(path, PathOpenAIModels) {
		return ApiNameModels
	}
	return ""
}

⚠️ 潜在风险

可能导致代码维护成本增加,增加出错概率,影响系统的可维护性。

审查详情
📒 文件清单 (6 个文件)
新增: 2 个文件
📝 变更: 4 个文件

✅ 新增文件:

  • plugins/wasm-go/extensions/ai-proxy/provider/fireworks.go
  • plugins/wasm-go/extensions/ai-proxy/test/fireworks.go

📝 变更文件:

  • plugins/wasm-go/extensions/ai-proxy/README.md
  • plugins/wasm-go/extensions/ai-proxy/README_EN.md
  • plugins/wasm-go/extensions/ai-proxy/main_test.go
  • plugins/wasm-go/extensions/ai-proxy/provider/provider.go

💡 小贴士

与 lingma-agents 交流的方式

📜 直接回复评论
直接回复本条评论,lingma-agents 将自动处理您的请求。例如:

  • 在当前代码中添加详细的注释说明。

  • 请详细介绍一下你说的 LRU 改造方案,并使用伪代码加以说明。

📜 在代码行处标记
在文件的特定位置创建评论并 @lingma-agents。例如:

  • @lingma-agents 分析这个方法的性能瓶颈并提供优化建议。

  • @lingma-agents 对这个方法生成优化代码。

📜 在讨论中提问
在任何讨论中 @lingma-agents 来获取帮助。例如:

  • @lingma-agents 请总结上述讨论并提出解决方案。

  • @lingma-agents 请根据讨论内容生成优化代码。

Comment on lines +15 to +24
data, _ := json.Marshal(map[string]interface{}{
"provider": map[string]interface{}{
"type": "fireworks",
"apiTokens": []string{"fw-test123456789"},
"modelMapping": map[string]string{
"*": "accounts/fireworks/models/llama-v3p1-8b-instruct",
},
},
})
return data
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

测试配置初始化时应处理 JSON 序列化错误,以避免潜在的空配置问题。

🟡 Major | 🐞 Bugs

📋 问题详情

在测试配置初始化函数中,使用 json.Marshal 将配置数据序列化为 json.RawMessage,但忽略了可能发生的错误。如果序列化失败,将导致测试配置为空,从而影响测试结果。建议显式处理这些错误,确保测试配置正确生成。

💡 解决方案

显式处理 json.Marshal 返回的错误,确保测试配置正确生成。

- data, _ := json.Marshal(map[string]interface{}{
- 	"provider": map[string]interface{}{
- 		"type":      "fireworks",
- 		"apiTokens": []string{"fw-test123456789"},
- 		"modelMapping": map[string]string{
- 			"*": "accounts/fireworks/models/llama-v3p1-8b-instruct",
- 		},
- 	},
- })
+ data, err := json.Marshal(map[string]interface{}{
+ 	"provider": map[string]interface{}{
+ 		"type":      "fireworks",
+ 		"apiTokens": []string{"fw-test123456789"},
+ 		"modelMapping": map[string]string{
+ 			"*": "accounts/fireworks/models/llama-v3p1-8b-instruct",
+ 		},
+ 	},
+ })
+ if err != nil {
+ 	panic(err)
+ }

您的反馈对我们很重要!(建议右键在新标签页中打开以下链接)

有用意见👍无用意见👎错误意见❌

@codecov-commenter
Copy link

codecov-commenter commented Sep 14, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 44.96%. Comparing base (ef31e09) to head (a6f0c79).
⚠️ Report is 711 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #2917      +/-   ##
==========================================
+ Coverage   35.91%   44.96%   +9.05%     
==========================================
  Files          69       82      +13     
  Lines       11576    13383    +1807     
==========================================
+ Hits         4157     6018    +1861     
+ Misses       7104     7017      -87     
- Partials      315      348      +33     

see 80 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Collaborator

@johnlanni johnlanni left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@johnlanni johnlanni merged commit 88a679e into alibaba:main Sep 21, 2025
15 checks passed
Tsukilc pushed a commit to Tsukilc/higress that referenced this pull request Sep 30, 2025
ink-hz pushed a commit to ink-hz/higress-ai-capability-auth that referenced this pull request Nov 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants