Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add Proxy channel type and relay mode #1678

Merged
merged 1 commit into from
Jul 22, 2024
Merged

feat: add Proxy channel type and relay mode #1678

merged 1 commit into from
Jul 22, 2024

Conversation

Laisky
Copy link
Collaborator

@Laisky Laisky commented Jul 21, 2024

背景

前置讨论: #1398

简而言之,给 one-api 提供一个将请求原样转发的 channel,以适配各种格式不同的插件。

用法

创建一个 Proxy Channel,代理地址(BASE_URL)就是转发目标,记下 channel id

请求 <YOUR_ONEAPI_GATEWAY>/v1/oneapi/proxy/<CHANNEL_ID>/<TARGET_URL_PATH>

请求会自动转发给 <BASE_URL>/<TARGET_URL_PATH>,保留 headers 和 method。

closes #1398 #1397

测试截图

密钥有就填,没有就随便乱填吧

image

用 nc 在本地起了一个服务器扮演上游,然后用 postman 给 oneapi 发送请求,请求体被正确转发给了上游。

image

CleanShot 2024-07-21 at 21 39 47@2x

Copy link

render bot commented Jul 21, 2024

Copy link

render bot commented Jul 21, 2024

Copy link

codecov bot commented Jul 21, 2024

Codecov Report

Attention: Patch coverage is 3.22581% with 60 lines in your changes missing coverage. Please review.

Project coverage is 1.30%. Comparing base (2a892c1) to head (d4703df).

Files Patch % Lines
relay/adaptor/proxy/adaptor.go 0.00% 35 Missing ⚠️
relay/controller/proxy.go 0.00% 16 Missing ⚠️
controller/relay.go 0.00% 2 Missing ⚠️
middleware/auth.go 0.00% 2 Missing ⚠️
relay/channeltype/helper.go 0.00% 2 Missing ⚠️
relay/relaymode/helper.go 0.00% 2 Missing ⚠️
router/relay.go 0.00% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff            @@
##            main   #1678      +/-   ##
========================================
+ Coverage   1.29%   1.30%   +0.01%     
========================================
  Files        142     144       +2     
  Lines      10070   10132      +62     
========================================
+ Hits         130     132       +2     
- Misses      9926    9986      +60     
  Partials      14      14              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Add the Proxy channel type and relay mode to support proxying requests to custom upstream services.
@songquanpeng songquanpeng merged commit c936198 into main Jul 22, 2024
4 checks passed
@songquanpeng
Copy link
Owner

Thx~

@chung1912
Copy link

这个方法,oneapi里面没有日志记录

@Laisky
Copy link
Collaborator Author

Laisky commented Aug 4, 2024

这个方法,oneapi里面没有日志记录

确实没加日志,因为日志里也没什么有用信息,既没有模型,也没有金额,tokens 怎么计算也不知道,最多就只能记一个谁在什么时候掉用过。

@SuMiaoALi
Copy link

这样做有个问题啊老哥,目前proxy渠道不支持自定义模型。

名称:One API
版本:v0.6.8-alpha.6

假设我想使用reranker,我通过proxy设置好了one-api转发到xinference服务。
但这个时候proxy渠道不支持设置支持模型和模型名字切换。
我的rerank model选择了bge-reranker-base或者其他reranker模型,令牌通过这个模型名字也找不到我这个proxy渠道啊。请求依然无法通过model过去到xinference的rerank使用。

简而言之,proxy渠道目前无法设置自定义模型,导致无法转发请求

下面图片是我的测试过程:

one-api代理

这里没有提供模型选择

one-api模型支持

这里保存proxy渠道后的

测试xin

测试xinference服务没问题

测试one-api-xin

@Laisky
Copy link
Collaborator Author

Laisky commented Aug 7, 2024

@SuMiaoALi 不是通过模型名来选择 proxy,而是通过 URL 中的 <CHANNEL_ID> 来手动制定渠道。

因为 proxy 无法预知 body 的格式,所以没法读取模型名字。

@chung1912
Copy link

这个方法,oneapi里面没有日志记录

确实没加日志,因为日志里也没什么有用信息,既没有模型,也没有金额,tokens 怎么计算也不知道,最多就只能记一个谁在什么时候掉用过。

这个日志还是有需要的,如果没有日志,那这个转发感觉都没什么必要了,都不知道谁用了,用了多少次,那直接连接也差不多了

@Laisky
Copy link
Collaborator Author

Laisky commented Aug 21, 2024

这个方法,oneapi里面没有日志记录

确实没加日志,因为日志里也没什么有用信息,既没有模型,也没有金额,tokens 怎么计算也不知道,最多就只能记一个谁在什么时候掉用过。

这个日志还是有需要的,如果没有日志,那这个转发感觉都没什么必要了,都不知道谁用了,用了多少次,那直接连接也差不多了

先记下了,回头加一个

@SuMiaoALi
Copy link

@SuMiaoALi 不是通过模型名来选择 proxy,而是通过 URL 中的 <CHANNEL_ID> 来手动制定渠道。

因为 proxy 无法预知 body 的格式,所以没法读取模型名字。

那这样子的话,还是很难使用啊?毕竟现在很多框架对模型的调用都是内部集成的一致的,现在这样以channel直接指定调用的话,也还是无法做到一致性把。

在我看来,one-api是用来代理模型调用的,遵从OpenAI的标准来看,所有的调用,都会有一个model字段来标识需要调用的模型,这里是否可以出这样的基于约定大于配置的原则,取请求体的里的直接子级字段model,然后就与其他的渠道代理方式保持一致性。

现在我主观看来,这样的proxy是很鸡肋的

@Laisky
Copy link
Collaborator Author

Laisky commented Aug 23, 2024

@SuMiaoALi 不是通过模型名来选择 proxy,而是通过 URL 中的 <CHANNEL_ID> 来手动制定渠道。
因为 proxy 无法预知 body 的格式,所以没法读取模型名字。

那这样子的话,还是很难使用啊?毕竟现在很多框架对模型的调用都是内部集成的一致的,现在这样以channel直接指定调用的话,也还是无法做到一致性把。

在我看来,one-api是用来代理模型调用的,遵从OpenAI的标准来看,所有的调用,都会有一个model字段来标识需要调用的模型,这里是否可以出这样的基于约定大于配置的原则,取请求体的里的直接子级字段model,然后就与其他的渠道代理方式保持一致性。

现在我主观看来,这样的proxy是很鸡肋的

可以改一下,如果 body 里有 model 就按 model 解析。

mxdlzg pushed a commit to mxdlzg/one-api that referenced this pull request Oct 15, 2024
Add the Proxy channel type and relay mode to support proxying requests to custom upstream services.
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.

4 participants