* feat: support OpenRouter model parameters * feat: support OpenRouter model parametersHEAD
| @@ -26,18 +26,22 @@ import ( | |||||
| ) | ) | ||||
| type OpenRouterModelProvider struct { | type OpenRouterModelProvider struct { | ||||
| subType string | |||||
| secretKey string | |||||
| siteName string | |||||
| siteUrl string | |||||
| subType string | |||||
| secretKey string | |||||
| siteName string | |||||
| siteUrl string | |||||
| temperature *float32 | |||||
| topP *float32 | |||||
| } | } | ||||
| func NewOpenRouterModelProvider(subType string, secretKey string) (*OpenRouterModelProvider, error) { | |||||
| func NewOpenRouterModelProvider(subType string, secretKey string, temperature float32, topP float32) (*OpenRouterModelProvider, error) { | |||||
| p := &OpenRouterModelProvider{ | p := &OpenRouterModelProvider{ | ||||
| subType: subType, | |||||
| secretKey: secretKey, | |||||
| siteName: "Casibase", | |||||
| siteUrl: "https://casibase.org", | |||||
| subType: subType, | |||||
| secretKey: secretKey, | |||||
| siteName: "Casibase", | |||||
| siteUrl: "https://casibase.org", | |||||
| temperature: &temperature, | |||||
| topP: &topP, | |||||
| } | } | ||||
| return p, nil | return p, nil | ||||
| } | } | ||||
| @@ -74,6 +78,8 @@ func (p *OpenRouterModelProvider) QueryText(question string, writer io.Writer, b | |||||
| } | } | ||||
| maxTokens := 4097 - promptTokens | maxTokens := 4097 - promptTokens | ||||
| temperature := p.temperature | |||||
| topP := p.topP | |||||
| respStream, err := client.CreateChatCompletionStream( | respStream, err := client.CreateChatCompletionStream( | ||||
| ctx, | ctx, | ||||
| @@ -90,8 +96,8 @@ func (p *OpenRouterModelProvider) QueryText(question string, writer io.Writer, b | |||||
| }, | }, | ||||
| }, | }, | ||||
| Stream: false, | Stream: false, | ||||
| Temperature: nil, | |||||
| TopP: nil, | |||||
| Temperature: temperature, | |||||
| TopP: topP, | |||||
| MaxTokens: maxTokens, | MaxTokens: maxTokens, | ||||
| }, | }, | ||||
| ) | ) | ||||
| @@ -33,7 +33,7 @@ func GetModelProvider(typ string, subType string, clientId string, clientSecret | |||||
| } else if typ == "Claude" { | } else if typ == "Claude" { | ||||
| p, err = NewClaudeModelProvider(subType, clientSecret) | p, err = NewClaudeModelProvider(subType, clientSecret) | ||||
| } else if typ == "OpenRouter" { | } else if typ == "OpenRouter" { | ||||
| p, err = NewOpenRouterModelProvider(subType, clientSecret) | |||||
| p, err = NewOpenRouterModelProvider(subType, clientSecret, temperature, topP) | |||||
| } else if typ == "Ernie" { | } else if typ == "Ernie" { | ||||
| p, err = NewErnieModelProvider(subType, clientId, clientSecret, temperature, topP, presencePenalty) | p, err = NewErnieModelProvider(subType, clientId, clientSecret, temperature, topP, presencePenalty) | ||||
| } else if typ == "iFlytek" { | } else if typ == "iFlytek" { | ||||
| @@ -279,6 +279,42 @@ class ProviderEditPage extends React.Component { | |||||
| </> | </> | ||||
| ) : null | ) : null | ||||
| } | } | ||||
| { | |||||
| (this.state.provider.category === "Model" && this.state.provider.type === "OpenRouter") ? ( | |||||
| <> | |||||
| <Row style={{marginTop: "20px"}}> | |||||
| <Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}> | |||||
| {i18next.t("provider:Temperature")}: | |||||
| </Col> | |||||
| <this.InputSlider | |||||
| min={0} | |||||
| max={2} | |||||
| step={0.01} | |||||
| value={this.state.provider.temperature} | |||||
| onChange={(value) => { | |||||
| this.updateProviderField("temperature", value); | |||||
| }} | |||||
| isMobile={Setting.isMobile()} | |||||
| /> | |||||
| </Row> | |||||
| <Row style={{marginTop: "20px"}}> | |||||
| <Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}> | |||||
| {i18next.t("provider:Top P")}: | |||||
| </Col> | |||||
| <this.InputSlider | |||||
| min={0} | |||||
| max={1} | |||||
| step={0.01} | |||||
| value={this.state.provider.topP} | |||||
| onChange={(value) => { | |||||
| this.updateProviderField("topP", value); | |||||
| }} | |||||
| isMobile={Setting.isMobile()} | |||||
| /> | |||||
| </Row> | |||||
| </> | |||||
| ) : null | |||||
| } | |||||
| { | { | ||||
| (this.state.provider.category === "Model" && this.state.provider.type === "iFlytek") ? ( | (this.state.provider.category === "Model" && this.state.provider.type === "iFlytek") ? ( | ||||
| <> | <> | ||||