Skip to content

Commit 438ccfe

Browse files
feat: add ai-proxy
1 parent 3a8aa43 commit 438ccfe

26 files changed

Lines changed: 987 additions & 47 deletions

File tree

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,13 @@ frontend/components.d.ts
4242
frontend/src/xpack
4343
frontend/src/xpack-ee
4444
agent/xpack
45+
agent/xpack-ee
4546
agent/router/entry_xpack.go
47+
agent/router/entry_xpackee.go
4648
agent/server/init_xpack.go
49+
agent/server/init_xpackee.go
4750
agent/utils/xpack/xpack.go
51+
agent/utils/xpack/xpackee.go
4852
core/xpack
4953
core/xpack-ee
5054
core/router/entry_xpack.go

agent/app/service/file.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,12 @@ func (f *FileService) ReadLogByLine(req request.FileReadByLineReq) (*response.Fi
870870
logFilePath, _ = ini_conf.GetIniValue(configPath, "supervisord", "logfile")
871871
case constant.Supervisor:
872872
logFilePath = path.Join(global.Dir.DataDir, "tools", "supervisord", "log", req.Name)
873+
case "ai-proxy":
874+
safeName := path.Base(req.Name)
875+
if safeName != req.Name || strings.Contains(safeName, "..") {
876+
return nil, buserr.New("ErrInvalidParams")
877+
}
878+
logFilePath = path.Join(global.Dir.LogDir, "ai", safeName)
873879
}
874880

875881
file, err := os.Open(logFilePath)

agent/i18n/lang/en.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,3 +592,13 @@ TerminalAIThinking: 'AI is thinking...'
592592
TerminalAIReadyToExecute: 'Thinking complete, press Enter to execute (duration: {{ .duration }}, tokens: {{ .tokens }})'
593593
TerminalAIRequestFailed: 'AI request failed: {{ .err }}'
594594
FileAISearchEmptyDir: 'No files or directories found under this path (or all entries were filtered).'
595+
596+
# ai proxy
597+
ErrAIProxyServiceNotInstalled: '{{ .name }} service is not installed'
598+
ErrAIProxyModelAccountNotFound: 'Model account {{ .id }} not found'
599+
ErrAIProxyModelMapRequired: 'This field is required.'
600+
ErrAIProxyModelMapInvalid: 'Model mapping must be a valid JSON object: {{ .err }}'
601+
ErrAIProxyModelMapEmpty: 'Model mapping cannot be empty'
602+
ErrAIProxyModelMapEmptyExternalModel: 'Model mapping contains an empty request model'
603+
ErrAIProxyModelMapEmptyUpstreamModel: 'Upstream model for {{ .model }} cannot be empty'
604+
AIProxyUserFallback: 'User {{ .id }}'

agent/i18n/lang/es-ES.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ ErrAgentWebsiteInUse: 'Este sitio web ya está vinculado a otro agente'
6262
ErrAgentWebsiteUnbindUnsupported: 'Los sitios web de despliegue no se pueden desvincular manualmente'
6363
ErrHermesPairingCodeUnavailable: 'El código de emparejamiento no está disponible temporalmente en Hermes, posiblemente por un problema de red. Inténtalo de nuevo más tarde.'
6464
ErrHermesFeishuGroupAllowlistRequiresAllowlist: 'Cuando la política de grupo de Feishu es Lista permitida, la política de MD no puede ser Código de emparejamiento.'
65+
ErrAIProxyServiceNotInstalled: 'El servicio {{ .name }} no está instalado'
66+
ErrAIProxyModelAccountNotFound: 'Cuenta de modelo {{ .id }} no encontrada'
67+
ErrAIProxyModelMapRequired: 'Este campo es obligatorio.'
68+
ErrAIProxyModelMapInvalid: 'El mapeo de modelos debe ser un objeto JSON válido: {{ .err }}'
69+
ErrAIProxyModelMapEmpty: 'El mapeo de modelos no puede estar vacío'
70+
ErrAIProxyModelMapEmptyExternalModel: 'El mapeo de modelos contiene un modelo solicitado vacío'
71+
ErrAIProxyModelMapEmptyUpstreamModel: 'El modelo upstream de {{ .model }} no puede estar vacío'
72+
AIProxyUserFallback: 'Usuario {{ .id }}'
6573
Localhost: 'Máquina local'
6674
ErrBackupInUsed: 'Cuenta de respaldo en uso por tarea programada'
6775
ErrBackupCheck: 'Conexión de respaldo falló: {{ .err }}'

agent/i18n/lang/ja.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ ErrAgentWebsiteInUse: 'このサイトはすでに別のエージェントに関
6262
ErrAgentWebsiteUnbindUnsupported: 'ワンクリックデプロイのサイトは手動で関連解除できません'
6363
ErrHermesPairingCodeUnavailable: 'Hermes でペアリングコードが一時的に見つかりません。ネットワーク要因の可能性があるため、しばらくしてから再試行してください。'
6464
ErrHermesFeishuGroupAllowlistRequiresAllowlist: 'Feishu のグループポリシーが許可リストの場合、DM ポリシーをペアリングコードにはできません。'
65+
ErrAIProxyServiceNotInstalled: '{{ .name }} サービスはインストールされていません'
66+
ErrAIProxyModelAccountNotFound: 'モデルアカウント {{ .id }} が見つかりません'
67+
ErrAIProxyModelMapRequired: 'この項目は必須です。'
68+
ErrAIProxyModelMapInvalid: 'モデルマッピングは有効な JSON オブジェクトである必要があります: {{ .err }}'
69+
ErrAIProxyModelMapEmpty: 'モデルマッピングは空にできません'
70+
ErrAIProxyModelMapEmptyExternalModel: 'モデルマッピングに空のリクエストモデルがあります'
71+
ErrAIProxyModelMapEmptyUpstreamModel: '{{ .model }} の上流モデルは空にできません'
72+
AIProxyUserFallback: 'ユーザー {{ .id }}'
6573
Localhost: 'ローカルマシン'
6674
ErrBackupInUsed: 'バックアップアカウントがスケジュールで使用中'
6775
ErrBackupCheck: '接続テストに失敗しました: {{ .err }}'

agent/i18n/lang/ko.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ ErrAgentWebsiteInUse: '이 웹사이트는 이미 다른 에이전트에 연결
6262
ErrAgentWebsiteUnbindUnsupported: '원클릭 배포 웹사이트는 수동으로 연결 해제할 수 없습니다'
6363
ErrHermesPairingCodeUnavailable: 'Hermes에서 페어링 코드가 일시적으로 존재하지 않습니다. 네트워크 문제일 수 있으니 잠시 후 다시 시도해 주세요.'
6464
ErrHermesFeishuGroupAllowlistRequiresAllowlist: 'Feishu 그룹 정책이 허용 목록이면 DM 정책을 페어링 코드로 설정할 수 없습니다.'
65+
ErrAIProxyServiceNotInstalled: '{{ .name }} 서비스가 설치되어 있지 않습니다'
66+
ErrAIProxyModelAccountNotFound: '모델 계정 {{ .id }}을(를) 찾을 수 없습니다'
67+
ErrAIProxyModelMapRequired: '이 필드는 필수입니다.'
68+
ErrAIProxyModelMapInvalid: '모델 매핑은 유효한 JSON 객체여야 합니다: {{ .err }}'
69+
ErrAIProxyModelMapEmpty: '모델 매핑은 비워 둘 수 없습니다'
70+
ErrAIProxyModelMapEmptyExternalModel: '모델 매핑에 빈 요청 모델이 있습니다'
71+
ErrAIProxyModelMapEmptyUpstreamModel: '{{ .model }}의 업스트림 모델은 비워 둘 수 없습니다'
72+
AIProxyUserFallback: '사용자 {{ .id }}'
6573
Localhost: '로컬 머신'
6674
ErrBackupInUsed: '백업 계정이 예약에 사용 중'
6775
ErrBackupCheck: '연결 테스트 실패: {{ .err }}'

agent/i18n/lang/ms.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ ErrAgentWebsiteInUse: 'Laman web ini sudah dipautkan ke ejen lain'
6262
ErrAgentWebsiteUnbindUnsupported: 'Laman web one-click deployment tidak menyokong nyahikat manual'
6363
ErrHermesPairingCodeUnavailable: 'Kod pasangan buat sementara waktu tidak wujud dalam Hermes, mungkin disebabkan masalah rangkaian. Sila cuba lagi sebentar nanti.'
6464
ErrHermesFeishuGroupAllowlistRequiresAllowlist: 'Apabila dasar kumpulan Feishu ialah senarai benarkan, dasar DM tidak boleh menggunakan kod pasangan.'
65+
ErrAIProxyServiceNotInstalled: 'Perkhidmatan {{ .name }} belum dipasang'
66+
ErrAIProxyModelAccountNotFound: 'Akaun model {{ .id }} tidak ditemui'
67+
ErrAIProxyModelMapRequired: 'Medan ini wajib diisi.'
68+
ErrAIProxyModelMapInvalid: 'Pemetaan model mestilah objek JSON yang sah: {{ .err }}'
69+
ErrAIProxyModelMapEmpty: 'Pemetaan model tidak boleh kosong'
70+
ErrAIProxyModelMapEmptyExternalModel: 'Pemetaan model mengandungi model permintaan kosong'
71+
ErrAIProxyModelMapEmptyUpstreamModel: 'Model upstream untuk {{ .model }} tidak boleh kosong'
72+
AIProxyUserFallback: 'Pengguna {{ .id }}'
6573
Localhost: 'Mesin Tempatan'
6674
ErrBackupInUsed: 'Akaun sandaran sedang digunakan oleh tugas'
6775
ErrBackupCheck: 'Ujian sambungan gagal: {{ .err }}'

agent/i18n/lang/pt-BR.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ ErrAgentWebsiteInUse: 'Este site já está vinculado a outro agente'
6262
ErrAgentWebsiteUnbindUnsupported: 'Sites implantados em um clique não podem ser desvinculados manualmente'
6363
ErrHermesPairingCodeUnavailable: 'O código de pareamento está temporariamente indisponível no Hermes, possivelmente por causa de rede. Tente novamente mais tarde.'
6464
ErrHermesFeishuGroupAllowlistRequiresAllowlist: 'Quando a política de grupo do Feishu é Lista de permissões, a política de DM não pode ser Código de pareamento.'
65+
ErrAIProxyServiceNotInstalled: 'O serviço {{ .name }} não está instalado'
66+
ErrAIProxyModelAccountNotFound: 'Conta de modelo {{ .id }} não encontrada'
67+
ErrAIProxyModelMapRequired: 'Este campo é obrigatório.'
68+
ErrAIProxyModelMapInvalid: 'O mapeamento de modelos deve ser um objeto JSON válido: {{ .err }}'
69+
ErrAIProxyModelMapEmpty: 'O mapeamento de modelos não pode estar vazio'
70+
ErrAIProxyModelMapEmptyExternalModel: 'O mapeamento de modelos contém um modelo solicitado vazio'
71+
ErrAIProxyModelMapEmptyUpstreamModel: 'O modelo upstream de {{ .model }} não pode estar vazio'
72+
AIProxyUserFallback: 'Usuário {{ .id }}'
6573
Localhost: 'Máquina Local'
6674
ErrBackupInUsed: 'Conta de backup em uso por tarefa'
6775
ErrBackupCheck: 'Teste de conexão falhou: {{ .err }}'

agent/i18n/lang/ru.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ ErrAgentWebsiteInUse: 'Этот сайт уже связан с другим а
6262
ErrAgentWebsiteUnbindUnsupported: 'Сайты one-click deployment нельзя отвязать вручную'
6363
ErrHermesPairingCodeUnavailable: 'Код сопряжения временно недоступен в Hermes, возможно из-за проблем с сетью. Повторите попытку позже.'
6464
ErrHermesFeishuGroupAllowlistRequiresAllowlist: 'Когда групповая политика Feishu — белый список, политика личных сообщений не может быть кодом сопряжения.'
65+
ErrAIProxyServiceNotInstalled: 'Сервис {{ .name }} не установлен'
66+
ErrAIProxyModelAccountNotFound: 'Аккаунт модели {{ .id }} не найден'
67+
ErrAIProxyModelMapRequired: 'Это поле обязательно.'
68+
ErrAIProxyModelMapInvalid: 'Сопоставление моделей должно быть допустимым JSON-объектом: {{ .err }}'
69+
ErrAIProxyModelMapEmpty: 'Сопоставление моделей не может быть пустым'
70+
ErrAIProxyModelMapEmptyExternalModel: 'Сопоставление моделей содержит пустую запрошенную модель'
71+
ErrAIProxyModelMapEmptyUpstreamModel: 'Upstream-модель для {{ .model }} не может быть пустой'
72+
AIProxyUserFallback: 'Пользователь {{ .id }}'
6573
Localhost: 'Локальная машина'
6674
ErrBackupInUsed: 'Аккаунт бэкапа занят задачей'
6775
ErrBackupCheck: 'Проверка подключения не удалась: {{ .err }}'

agent/i18n/lang/tr.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ ErrAgentWebsiteInUse: 'Bu web sitesi zaten başka bir ajana bağlı'
6262
ErrAgentWebsiteUnbindUnsupported: 'Tek tıkla dağıtılan web sitelerinin bağlantısı manuel olarak kaldırılamaz'
6363
ErrHermesPairingCodeUnavailable: 'Eşleştirme kodu Hermes içinde geçici olarak bulunamıyor; bu durum ağ kaynaklı olabilir. Lütfen daha sonra tekrar deneyin.'
6464
ErrHermesFeishuGroupAllowlistRequiresAllowlist: 'Feishu grup ilkesi izin listesi olduğunda, DM ilkesi eşleştirme kodu olamaz.'
65+
ErrAIProxyServiceNotInstalled: '{{ .name }} servisi kurulu değil'
66+
ErrAIProxyModelAccountNotFound: 'Model hesabı {{ .id }} bulunamadı'
67+
ErrAIProxyModelMapRequired: 'Bu alan zorunludur.'
68+
ErrAIProxyModelMapInvalid: 'Model eşlemesi geçerli bir JSON nesnesi olmalıdır: {{ .err }}'
69+
ErrAIProxyModelMapEmpty: 'Model eşlemesi boş olamaz'
70+
ErrAIProxyModelMapEmptyExternalModel: 'Model eşlemesi boş bir istek modeli içeriyor'
71+
ErrAIProxyModelMapEmptyUpstreamModel: '{{ .model }} için upstream model boş olamaz'
72+
AIProxyUserFallback: 'Kullanıcı {{ .id }}'
6573
Localhost: 'Yerel Makine'
6674
ErrBackupInUsed: 'Yedek hesabı görevde kullanılıyor'
6775
ErrBackupCheck: 'Bağlantı testi başarısız: {{ .err }}'

0 commit comments

Comments
 (0)