Skip to content

Conversation

Aias00
Copy link
Contributor

@Aias00 Aias00 commented Sep 14, 2025

add support for Galadriel provider

refer: https://docs.galadriel.com/api-reference/chat-completion-API

Ⅰ. 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


add support for Galadriel provider

refer: https://docs.galadriel.com/api-reference/chat-completion-API

Ⅰ. 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

Copy link

lingma-agents bot commented Sep 14, 2025

新增对 Galadriel AI 服务提供商的支持

变更概述
  • 新功能

    • 新增 Galadriel AI 服务提供商支持,允许通过 OpenAI 协议代理访问 Galadriel 服务
    • 实现了完整的请求/响应处理流程,包括请求头转换、模型映射、认证授权等
    • 支持聊天完成和模型查询两种核心 API 接口
    • 支持流式响应处理
  • 文档

    • 在中英文 README 文档中添加 Galadriel 服务提供商的配置说明和使用示例
    • 提供详细的配置信息、请求示例和响应示例
    • 更新了模型映射配置的文档说明
  • 测试更新

    • 添加完整的 Galadriel 服务提供商单元测试
    • 覆盖配置解析、请求头处理、请求体处理、响应头处理、响应体处理等全流程测试
    • 包含基本配置、多模型配置、流式响应等场景的测试用例
  • 配置调整

    • 在主配置文件中注册 Galadriel 服务提供商初始化器
    • 定义 Galadriel 服务的默认域名常量
变更文件
文件路径 变更说明
plugins/​wasm-go/​extensions/​ai-proxy/​README.​md 添加了 Galadriel 服务提供商的中文文档说明,包括配置信息、请求示例和响应示例。
plugins/​wasm-go/​extensions/​ai-proxy/​README_​EN.​md 添加了 Galadriel 服务提供商的英文文档说明,包括配置信息、请求示例和响应示例。
plugins/​wasm-go/​extensions/​ai-proxy/​main_​test.​go 添加了 Galadriel 服务提供商的测试函数调用。
plugins/​wasm-go/​extensions/​ai-proxy/​provider/​galadriel.​go 新增 Galadriel 服务提供商的实现文件,包含配置验证、能力定义、请求处理等核心逻辑。
plugins/​wasm-go/​extensions/​ai-proxy/​provider/​provider.​go 在提供商类型常量和初始化器映射中添加 Galadriel 服务支持。
plugins/​wasm-go/​extensions/​ai-proxy/​test/​galadriel.​go 新增 Galadriel 服务提供商的完整测试套件,包含配置解析、请求处理、响应处理等测试用例。

💡 小贴士

与 lingma-agents 交流的方式

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

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

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

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

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

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

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

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

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

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 1 严重问题,高优先级修复。例如:核心功能异常或性能瓶颈影响用户体验。
🟡 Major 0 主要问题,建议修复。例如:非核心功能缺陷或代码维护性较差。
🟢 Minor 0 次要问题,酬情优化。例如:代码格式不规范或注释缺失。

总计: 1 个问题

📋 评审意见详情
💡 代码实现建议
以下是文件级别的代码建议,聚焦于代码的可读性、可维护性和潜在问题。
🔹 plugins/wasm-go/extensions/ai-proxy/provider/galadriel.go (1 💬)
🚀 架构设计建议
以下是对代码架构和设计的综合分析,聚焦于跨文件交互、系统一致性和潜在优化空间。
🔍1. Galadriel提供者缺少流式响应处理实现

虽然在测试文件中包含了RunGaladrielOnStreamingResponseBodyTests测试用例,并且在主测试文件中调用了test.RunGaladrielOnStreamingResponseBodyTests(t),但galadriel.go中并未实现OnStreamingResponseBody方法。这可能导致流式响应处理不完整或出现运行时错误。

📌 关键代码

⚠️ 潜在风险

可能导致流式响应处理失败,影响用户体验,或在运行时出现未处理的错误

🔍2. Galadriel提供者模型映射策略可能过于简化

从README和测试用例看,Galadriel提供者将所有模型请求都映射到'llama3.1'。这种'*'通配符映射策略虽然简化了配置,但可能无法充分利用Galadriel平台支持的多种模型,限制了用户的选择和优化空间。建议考虑更灵活的模型映射策略,允许用户根据需要指定不同的目标模型。

📌 关键代码

"*": "llama3.1"
"*": "llama3.1"

⚠️ 潜在风险

限制了用户使用Galadriel平台多种模型的能力,可能影响AI服务的性能和成本优化

🔍3. Galadriel提供者缺少特定错误处理和日志记录

与其他提供者相比,Galadriel提供者的实现相对简单,缺少特定的错误处理逻辑和详细的日志记录。这可能在调试和监控时造成困难,特别是在处理API调用错误或模型推理问题时。建议增加更详细的错误处理和日志记录机制。

📌 关键代码

⚠️ 潜在风险

调试和问题排查困难,影响系统可维护性和稳定性

🔍4. Galadriel提供者测试覆盖可能不完整

虽然添加了基本功能测试,但与更复杂的提供者(如Azure)相比,Galadriel的测试用例相对简单。缺少边界条件测试、错误场景测试和性能测试。建议增加更全面的测试覆盖,确保在各种情况下都能稳定工作。

📌 关键代码

⚠️ 潜在风险

可能存在未发现的bug或性能问题,在生产环境中可能导致服务不稳定

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

✅ 新增文件:

  • plugins/wasm-go/extensions/ai-proxy/provider/galadriel.go
  • plugins/wasm-go/extensions/ai-proxy/test/galadriel.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 +63 to +68
func (g *galadrielProvider) TransformRequestHeaders(ctx wrapper.HttpContext, apiName ApiName, headers http.Header) {
util.OverwriteRequestPathHeaderByCapability(headers, string(apiName), g.config.capabilities)
util.OverwriteRequestHostHeader(headers, galadrielDomain)
util.OverwriteRequestAuthorizationHeader(headers, "Bearer "+g.config.GetApiTokenInUse(ctx))
headers.Del("Content-Length")
}
Copy link

Choose a reason for hiding this comment

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

应实现OnStreamingResponseBody方法以正确处理流式响应。

🟠 Critical | 🐞 Bugs

📋 问题详情

当前galadrielProvider结构体未实现OnStreamingResponseBody方法,这可能导致在处理流式响应时出现未预期的行为或错误。

💡 解决方案

建议为galadrielProvider实现OnStreamingResponseBody方法,以确保流式响应能被正确处理。可以在方法中调用配置的处理函数。

+func (g *galadrielProvider) OnStreamingResponseBody(ctx wrapper.HttpContext, name ApiName, chunk []byte, isLastChunk bool) ([]byte, error) {
+	if !g.config.isSupportedAPI(name) {
+		return chunk, nil
+	}
+	return g.config.handleStreamingResponseBody(g, g.contextCache, ctx, name, chunk, isLastChunk)
+}
+
 func (g *galadrielProvider) TransformRequestHeaders(ctx wrapper.HttpContext, apiName ApiName, headers http.Header) {

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

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

@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.98%. Comparing base (ef31e09) to head (bda2e79).
⚠️ Report is 725 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #2914      +/-   ##
==========================================
+ Coverage   35.91%   44.98%   +9.06%     
==========================================
  Files          69       82      +13     
  Lines       11576    13377    +1801     
==========================================
+ Hits         4157     6017    +1860     
+ Misses       7104     7014      -90     
- Partials      315      346      +31     

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.

@johnlanni
Copy link
Collaborator

@Aias00 Please fix the conflicts

# Conflicts:
#	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
@Aias00
Copy link
Contributor Author

Aias00 commented Sep 22, 2025

@Aias00 Please fix the conflicts

done~

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