From 7073e83d94f12c175dbfca64267b1519e8e9da81 Mon Sep 17 00:00:00 2001 From: CityFun <31820853+zhengkunwang223@users.noreply.github.com> Date: Mon, 9 Feb 2026 15:33:15 +0800 Subject: [PATCH] feat: change agent logic (#11835) --- agent/app/service/agents.go | 50 ++++++++++++++++--- .../src/views/ai/agents/agent/add/index.vue | 2 +- .../src/views/ai/agents/model/add/index.vue | 12 +++-- frontend/src/views/ai/agents/model/index.vue | 4 +- 4 files changed, 57 insertions(+), 11 deletions(-) diff --git a/agent/app/service/agents.go b/agent/app/service/agents.go index 02fe416fc..b6126f3ec 100644 --- a/agent/app/service/agents.go +++ b/agent/app/service/agents.go @@ -1,6 +1,7 @@ package service import ( + "bytes" "context" "crypto/rand" "encoding/hex" @@ -542,6 +543,9 @@ func (a AgentService) syncAgentsByAccount(account *model.AgentAccount) error { } func verifyProvider(provider, baseURL, apiKey string) error { + if provider == "minimax" { + return verifyMinimax(baseURL, apiKey) + } client := &http.Client{Timeout: 10 * time.Second} reqURL, headers := buildVerifyRequest(provider, baseURL, apiKey) request, err := http.NewRequest(http.MethodGet, reqURL, nil) @@ -562,6 +566,40 @@ func verifyProvider(provider, baseURL, apiKey string) error { return nil } +func verifyMinimax(baseURL, apiKey string) error { + client := &http.Client{Timeout: 10 * time.Second} + base := strings.TrimRight(baseURL, "/") + if !strings.Contains(base, "/v1") { + base = base + "/v1" + } + reqURL := base + "/chat/completions" + body := map[string]interface{}{ + "model": "MiniMax-M2.1", + "messages": []map[string]string{ + {"role": "user", "content": "test"}, + }, + } + payload, err := json.Marshal(body) + if err != nil { + return err + } + request, err := http.NewRequest(http.MethodPost, reqURL, bytes.NewBuffer(payload)) + if err != nil { + return err + } + request.Header.Set("Authorization", fmt.Sprintf("Bearer %s", apiKey)) + request.Header.Set("Content-Type", "application/json") + resp, err := client.Do(request) + if err != nil { + return buserr.WithErr("ErrAgentAccountUnavailable", err) + } + defer resp.Body.Close() + if resp.StatusCode >= 400 { + return buserr.WithErr("ErrAgentAccountUnavailable", fmt.Errorf("verify failed: %s", resp.Status)) + } + return nil +} + func buildAgentItem(agent *model.Agent, appInstall *model.AppInstall, envMap map[string]interface{}) dto.AgentItem { item := dto.AgentItem{ ID: agent.ID, @@ -875,11 +913,6 @@ type providerDefinition struct { func providerDefinitions() map[string]providerDefinition { return map[string]providerDefinition{ - "ollama": { - Sort: 1, - BaseURL: "", - Models: []dto.ProviderModelInfo{}, - }, "deepseek": { Sort: 2, BaseURL: "https://api.deepseek.com/v1", @@ -924,9 +957,14 @@ func providerDefinitions() map[string]providerDefinition { {ID: "google/gemini-3-flash-preview", Name: "Gemini 3 Flash Preview"}, }, }, + "ollama": { + Sort: 1, + BaseURL: "", + Models: []dto.ProviderModelInfo{}, + }, "minimax": { Sort: 6, - BaseURL: "https://api.minimax.chat/v1", + BaseURL: "https://api.minimaxi.com/v1", Models: []dto.ProviderModelInfo{ {ID: "minimax/Minimax-M2.1", Name: "Minimax M2.1"}, }, diff --git a/frontend/src/views/ai/agents/agent/add/index.vue b/frontend/src/views/ai/agents/agent/add/index.vue index 0356717d8..62012b77a 100644 --- a/frontend/src/views/ai/agents/agent/add/index.vue +++ b/frontend/src/views/ai/agents/agent/add/index.vue @@ -117,7 +117,7 @@ const form = reactive({ appVersion: '', webUIPort: 18789, bridgePort: 18790, - provider: 'ollama', + provider: 'deepseek', accountId: undefined as unknown as number, model: '', apiKey: '', diff --git a/frontend/src/views/ai/agents/model/add/index.vue b/frontend/src/views/ai/agents/model/add/index.vue index 97a8cd45a..8622cc844 100644 --- a/frontend/src/views/ai/agents/model/add/index.vue +++ b/frontend/src/views/ai/agents/model/add/index.vue @@ -54,11 +54,11 @@ const providerOptions = ref>([]); const providerBaseURL = ref>({}); const loading = ref(false); const providerLabelMap: Record = { + deepseek: 'DeepSeek', openai: 'OpenAI', ollama: 'Ollama', minimax: 'MiniMax', qwen: 'Qwen', - deepseek: 'DeepSeek', anthropic: 'Anthropic', gemini: 'Gemini', }; @@ -85,6 +85,7 @@ const rules = reactive({ provider: [Rules.requiredSelect], name: [Rules.requiredInput], apiKey: [Rules.requiredInput], + baseURL: [Rules.requiredInput], }); const submit = async () => { @@ -135,7 +136,7 @@ interface OpenParams { remark?: string; } -const openDrawer = (params?: OpenParams) => { +const openDrawer = async (params?: OpenParams) => { open.value = true; loading.value = false; if (params?.id) { @@ -154,10 +155,15 @@ const openDrawer = (params?: OpenParams) => { form.apiKey = ''; form.remark = ''; form.syncAgents = false; + if (providerOptions.value.length === 0) { + await loadProviders(); + } if (params?.provider) { form.provider = params.provider; - handleProviderChange(); + } else if (providerOptions.value.length > 0) { + form.provider = providerOptions.value[0].value; } + handleProviderChange(); }; const loadProviders = async () => { diff --git a/frontend/src/views/ai/agents/model/index.vue b/frontend/src/views/ai/agents/model/index.vue index 70c813ab8..eef1645cb 100644 --- a/frontend/src/views/ai/agents/model/index.vue +++ b/frontend/src/views/ai/agents/model/index.vue @@ -102,7 +102,9 @@ const search = async () => { const openCreate = () => { if (addRef.value?.open) { - addRef.value.open(); + addRef.value.open({ + provider: 'deepseek', + }); } };