func parseConfig()

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
}