in plugins/wasm-go/extensions/ai-intent/main.go [103:195]
func parseConfig(json gjson.Result, c *PluginConfig, log wrapper.Log) error {
log.Infof("config:%s", json.Raw)
// init scene
c.SceneInfo.Category = json.Get("scene.category").String()
log.Infof("SceneInfo.Category:%s", c.SceneInfo.Category)
if c.SceneInfo.Category == "" {
return errors.New("scene.category must not by empty")
}
c.SceneInfo.CategoryArr = strings.Split(c.SceneInfo.Category, "|")
if len(c.SceneInfo.CategoryArr) <= 0 {
return errors.New("scene.category resolve exception, should use '|' split")
}
c.SceneInfo.Prompt = json.Get("scene.prompt").String()
if c.SceneInfo.Prompt == "" {
c.SceneInfo.Prompt = DefaultPrompt
}
log.Infof("SceneInfo.Prompt:%s", c.SceneInfo.Prompt)
// init llmProxy
log.Debug("Start to init proxyService's http client.")
c.LLMInfo.ProxyServiceName = json.Get("llm.proxyServiceName").String()
log.Infof("ProxyServiceName: %s", c.LLMInfo.ProxyServiceName)
if c.LLMInfo.ProxyServiceName == "" {
return errors.New("llm.proxyServiceName must not by empty")
}
c.LLMInfo.ProxyUrl = json.Get("llm.proxyUrl").String()
log.Infof("c.LLMInfo.ProxyUrl:%s", c.LLMInfo.ProxyUrl)
if c.LLMInfo.ProxyUrl == "" {
return errors.New("llm.proxyUrl must not by empty")
}
//解析域名和path
parsedURL, err := url.Parse(c.LLMInfo.ProxyUrl)
if err != nil {
return errors.New("llm.proxyUrl parsing error")
}
c.LLMInfo.ProxyPath = parsedURL.Path
log.Infof("c.LLMInfo.ProxyPath:%s", c.LLMInfo.ProxyPath)
c.LLMInfo.ProxyDomain = json.Get("llm.proxyDomain").String()
//没有配置llm.proxyDomain时,则从proxyUrl中解析获取
if c.LLMInfo.ProxyDomain == "" {
hostName := parsedURL.Hostname()
log.Infof("llm.proxyUrl.hostName:%s", hostName)
if hostName != "" {
c.LLMInfo.ProxyDomain = hostName
}
}
log.Infof("c.LLMInfo.ProxyDomain:%s", c.LLMInfo.ProxyDomain)
c.LLMInfo.ProxyPort = json.Get("llm.proxyPort").Int()
// 没有配置llm.proxyPort时,则从proxyUrl中解析获取,如果解析的port为空,则http协议端口默认80,https端口默认443
if c.LLMInfo.ProxyPort <= 0 {
port := parsedURL.Port()
log.Infof("llm.proxyUrl.port:%s", port)
if port == "" {
c.LLMInfo.ProxyPort = 80
if parsedURL.Scheme == "https" {
c.LLMInfo.ProxyPort = 443
}
} else {
portNum, err := strconv.ParseInt(port, 10, 64)
if err != nil {
return errors.New("llm.proxyUrl.port parsing error")
}
c.LLMInfo.ProxyPort = portNum
}
}
log.Infof("c.LLMInfo.ProxyPort:%s", c.LLMInfo.ProxyPort)
c.LLMInfo.ProxyClient = wrapper.NewClusterClient(wrapper.FQDNCluster{
FQDN: c.LLMInfo.ProxyServiceName,
Port: c.LLMInfo.ProxyPort,
Host: c.LLMInfo.ProxyDomain,
})
c.LLMInfo.ProxyModel = json.Get("llm.proxyModel").String()
log.Infof("c.LLMInfo.ProxyModel:%s", c.LLMInfo.ProxyModel)
if c.LLMInfo.ProxyModel == "" {
c.LLMInfo.ProxyModel = "qwen-long"
}
c.LLMInfo.ProxyTimeout = uint32(json.Get("llm.proxyTimeout").Uint())
log.Infof("c.LLMInfo.ProxyTimeout:%s", c.LLMInfo.ProxyTimeout)
if c.LLMInfo.ProxyTimeout <= 0 {
c.LLMInfo.ProxyTimeout = defaultTimeout
}
c.LLMInfo.ProxyApiKey = json.Get("llm.proxyApiKey").String()
log.Infof("c.LLMInfo.ProxyApiKey:%s", c.LLMInfo.ProxyApiKey)
c.KeyFrom.RequestBody = json.Get("keyFrom.requestBody").String()
if c.KeyFrom.RequestBody == "" {
c.KeyFrom.RequestBody = "messages.@reverse.0.content"
}
c.KeyFrom.ResponseBody = json.Get("keyFrom.responseBody").String()
if c.KeyFrom.ResponseBody == "" {
c.KeyFrom.ResponseBody = "choices.0.message.content"
}
log.Debug("Init ai intent's components successfully.")
return nil
}