Skip to content

Commit 8818f32

Browse files
committed
feat: web search plugin support add usage to result
1 parent dd27ecb commit 8818f32

9 files changed

Lines changed: 257 additions & 87 deletions

File tree

core/model/batch.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ func updateGroupSummaryData(group string, tokenName string, modelName string, cr
404404
groupSummary.MaxTPS = groupModelTokenRate.TPS
405405
}
406406

407-
groupSummary.Usage.Add(&usage)
407+
groupSummary.Usage.Add(usage)
408408
if code != http.StatusOK {
409409
groupSummary.ExceptionCount++
410410
}
@@ -444,7 +444,7 @@ func updateSummaryData(channelID int, modelName string, createAt time.Time, code
444444
summary.MaxTPS = channelModelRate.TPS
445445
}
446446

447-
summary.Usage.Add(&usage)
447+
summary.Usage.Add(usage)
448448
if code != http.StatusOK {
449449
summary.ExceptionCount++
450450
}

core/model/log.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,7 @@ type Usage struct {
117117
WebSearchCount ZeroNullInt64 `json:"web_search_count,omitempty"`
118118
}
119119

120-
func (u *Usage) Add(other *Usage) {
121-
if other == nil {
122-
return
123-
}
120+
func (u *Usage) Add(other Usage) {
124121
u.InputTokens += other.InputTokens
125122
u.ImageInputTokens += other.ImageInputTokens
126123
u.OutputTokens += other.OutputTokens

core/relay/adaptor/interface.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package adaptor
33
import (
44
"encoding/json"
55
"errors"
6+
"fmt"
67
"io"
78
"net/http"
89

@@ -50,6 +51,7 @@ type ConvertRequestResult struct {
5051

5152
type Error interface {
5253
json.Marshaler
54+
error
5355
StatusCode() int
5456
}
5557

@@ -66,6 +68,10 @@ func (e ErrorImpl[T]) StatusCode() int {
6668
return e.statusCode
6769
}
6870

71+
func (e ErrorImpl[T]) Error() string {
72+
return fmt.Sprintf("status code: %d, error: %v", e.statusCode, e.error)
73+
}
74+
6975
var ErrGetBalanceNotImplemented = errors.New("get balance not implemented")
7076

7177
type Balancer interface {

core/relay/controller/dohelper.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,7 @@ func (rw *responseWriter) Write(b []byte) (int, error) {
4646
}
4747

4848
func (rw *responseWriter) WriteString(s string) (int, error) {
49-
if rw.firstByteAt.IsZero() {
50-
rw.firstByteAt = time.Now()
51-
}
52-
if rw.body.Len()+len(s) <= maxBufferSize {
53-
rw.body.WriteString(s)
54-
} else {
55-
rw.body.WriteString(s[:maxBufferSize-rw.body.Len()])
56-
}
57-
return rw.ResponseWriter.WriteString(s)
49+
return rw.Write(conv.StringToBytes(s))
5850
}
5951

6052
var bufferPool = sync.Pool{

core/relay/meta/meta.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,15 @@ func (m *Meta) GetInt64(key string) int64 {
181181
return i
182182
}
183183

184+
func (m *Meta) GetInt(key string) int {
185+
v, ok := m.Get(key)
186+
if !ok {
187+
return 0
188+
}
189+
i, _ := v.(int)
190+
return i
191+
}
192+
184193
func GetMappedModelName(modelName string, mapping map[string]string) (string, bool) {
185194
if len(modelName) == 0 {
186195
return modelName, false

core/relay/plugin/web-search/README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ The Web Search Plugin is a plugin that provides real-time web search capabilitie
1717
"enable_plugin": true,
1818
"default_enable": true,
1919
"search_rewrite": {
20-
"enable": true
20+
"enable": true,
21+
"add_rewrite_usage": true,
22+
"rewrite_usage_field": "rewrite_usage"
2123
},
2224
"need_reference": true,
2325
"search_from": [
@@ -67,6 +69,8 @@ The Web Search Plugin is a plugin that provides real-time web search capabilitie
6769
| `model_name` | string | No | - | Model name for query rewriting, uses current request model if empty |
6870
| `timeout_millisecond` | uint32 | No | 10000 | Rewrite request timeout (milliseconds) |
6971
| `max_count` | int | No | 3 | Maximum number of rewritten queries |
72+
| `add_rewrite_usage` | bool | No | false | Whether to add rewrite usage statistics to the response |
73+
| `rewrite_usage_field` | string | No | "rewrite_usage" | Rewrite usage statistics field name |
7074

7175
#### Search Engine Configuration (`search_from`)
7276

core/relay/plugin/web-search/README.zh.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ Web Search Plugin 是一个为 AI 模型提供实时网络搜索能力的插件
1717
"enable_plugin": true,
1818
"default_enable": true,
1919
"search_rewrite": {
20-
"enable": true
20+
"enable": true,
21+
"add_rewrite_usage": true,
22+
"rewrite_usage_field": "rewrite_usage"
2123
},
2224
"need_reference": true,
2325
"search_from": [
@@ -67,6 +69,8 @@ Web Search Plugin 是一个为 AI 模型提供实时网络搜索能力的插件
6769
| `model_name` | string || - | 用于重写查询的模型名称,为空时使用当前请求的模型 |
6870
| `timeout_millisecond` | uint32 || 10000 | 重写请求超时时间(毫秒) |
6971
| `max_count` | int || 3 | 最大重写查询数量 |
72+
| `add_rewrite_usage` | bool || false | 是否在响应中添加重写使用统计信息 |
73+
| `rewrite_usage_field` | string || "rewrite_usage" | 重写使用统计信息字段名称 |
7074

7175
#### 搜索引擎配置 (`search_from`)
7276

core/relay/plugin/web-search/config.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ type SearchRewrite struct {
2525
ModelName string `json:"model_name"`
2626
TimeoutMillisecond uint32 `json:"timeout_millisecond"`
2727
MaxCount int `json:"max_count"`
28+
AddRewriteUsage bool `json:"add_rewrite_usage"`
29+
RewriteUsageField string `json:"rewrite_usage_field"`
2830
}
2931

3032
type EngineConfig struct {

0 commit comments

Comments
 (0)