fix(proxy): Trae CN 上游换用 trae-api-cn.mchost.guru,修正 404
Some checks are pending
Release / build (push) Waiting to run
Some checks are pending
Release / build (push) Waiting to run
- trae-api-cn.mchost.guru/api/agent/v3/llm_utils_chat 才是模型网关 - api.trae.cn 只是账号/OAuth 主机,不暴露 IDE 模型路由 - 请求头对齐参考实现:真实 x-app-id / x-ide-version / 设备指纹 - llm_utils_chat body 收敛为 SOLO 结构(config_name/model/function/stream)
This commit is contained in:
parent
15408a6640
commit
d0b79cf1bd
@ -16,8 +16,8 @@ android {
|
|||||||
applicationId = "com.rainy.token"
|
applicationId = "com.rainy.token"
|
||||||
minSdk = 31
|
minSdk = 31
|
||||||
targetSdk = 35
|
targetSdk = 35
|
||||||
versionCode = 16
|
versionCode = 17
|
||||||
versionName = "1.6.6"
|
versionName = "1.6.7"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
vectorDrawables {
|
vectorDrawables {
|
||||||
|
|||||||
@ -51,9 +51,9 @@ class TraeChatProxy @Inject constructor(
|
|||||||
ProviderRegion.valueOf(credential.region.uppercase())
|
ProviderRegion.valueOf(credential.region.uppercase())
|
||||||
}.getOrNull()
|
}.getOrNull()
|
||||||
val base = if (effectiveRegion == ProviderRegion.INTL) {
|
val base = if (effectiveRegion == ProviderRegion.INTL) {
|
||||||
"https://grow-normal.trae.ai"
|
"https://a0ai-api-sg.byteintlapi.com"
|
||||||
} else {
|
} else {
|
||||||
"https://api.trae.cn"
|
"https://trae-api-cn.mchost.guru"
|
||||||
}
|
}
|
||||||
val upstreamBody = buildUpstreamBody(requestBody, credential)
|
val upstreamBody = buildUpstreamBody(requestBody, credential)
|
||||||
val requestId = UUID.randomUUID().toString()
|
val requestId = UUID.randomUUID().toString()
|
||||||
@ -63,19 +63,24 @@ class TraeChatProxy @Inject constructor(
|
|||||||
.url(base + "/api/agent/v3/llm_utils_chat")
|
.url(base + "/api/agent/v3/llm_utils_chat")
|
||||||
.addHeader("Content-Type", "application/json")
|
.addHeader("Content-Type", "application/json")
|
||||||
.addHeader("Accept", "text/event-stream")
|
.addHeader("Accept", "text/event-stream")
|
||||||
.addHeader("Authorization", "Cloud-IDE-JWT $jwt")
|
.addHeader("Authorization", "Cloud-IDE-JWT jwt")
|
||||||
.addHeader("X-Cloudide-Token", jwt)
|
.addHeader("X-Cloudide-Token", jwt)
|
||||||
.addHeader("x-uid", credential.userId ?: "")
|
.addHeader("x-uid", credential.userId ?: "")
|
||||||
|
.addHeader("x-app-id", "6eefa01c-1036-4c7e-9ca5-d891f63bfcd8")
|
||||||
.addHeader("x-device-id", credential.deviceId ?: credential.checkinDeviceId ?: "")
|
.addHeader("x-device-id", credential.deviceId ?: credential.checkinDeviceId ?: "")
|
||||||
.addHeader("x-machine-id", credential.deviceId ?: credential.checkinDeviceId ?: "")
|
.addHeader("x-machine-id", credential.deviceId ?: credential.checkinDeviceId ?: "")
|
||||||
.addHeader("x-request-id", requestId)
|
.addHeader("x-request-id", requestId)
|
||||||
.addHeader("x-app-id", "trae")
|
.addHeader("x-ide-version", "3.3.67")
|
||||||
.addHeader("x-ide-version", "1.0.0")
|
.addHeader("x-ide-version-code", "20260401")
|
||||||
.addHeader("x-ide-version-code", "1000000")
|
|
||||||
.addHeader("x-ide-version-type", "stable")
|
.addHeader("x-ide-version-type", "stable")
|
||||||
.addHeader("x-os-version", "Android")
|
.addHeader("x-device-cpu", "AMD")
|
||||||
.addHeader("x-system-type", "Android")
|
.addHeader("x-device-brand", "83DG")
|
||||||
.addHeader("User-Agent", "RainyToken/1.0")
|
.addHeader("x-device-type", "windows")
|
||||||
|
.addHeader("x-ide-token", jwt)
|
||||||
|
.addHeader("x-os-version", "Windows 10")
|
||||||
|
.addHeader("x-system-type", "Windows")
|
||||||
|
.addHeader("Connection", "keep-alive")
|
||||||
|
.addHeader("User-Agent", "")
|
||||||
.post(upstreamBody.toRequestBody("application/json".toMediaType()))
|
.post(upstreamBody.toRequestBody("application/json".toMediaType()))
|
||||||
|
|
||||||
val response = try {
|
val response = try {
|
||||||
@ -117,19 +122,24 @@ class TraeChatProxy @Inject constructor(
|
|||||||
.url(base + "/api/agent/v3/llm_utils_chat")
|
.url(base + "/api/agent/v3/llm_utils_chat")
|
||||||
.addHeader("Content-Type", "application/json")
|
.addHeader("Content-Type", "application/json")
|
||||||
.addHeader("Accept", "text/event-stream")
|
.addHeader("Accept", "text/event-stream")
|
||||||
.addHeader("Authorization", "Cloud-IDE-JWT $jwt")
|
.addHeader("Authorization", "Cloud-IDE-JWT jwt")
|
||||||
.addHeader("X-Cloudide-Token", jwt)
|
.addHeader("X-Cloudide-Token", jwt)
|
||||||
.addHeader("x-uid", credential.userId ?: "")
|
.addHeader("x-uid", credential.userId ?: "")
|
||||||
|
.addHeader("x-app-id", "6eefa01c-1036-4c7e-9ca5-d891f63bfcd8")
|
||||||
.addHeader("x-device-id", credential.deviceId ?: credential.checkinDeviceId ?: "")
|
.addHeader("x-device-id", credential.deviceId ?: credential.checkinDeviceId ?: "")
|
||||||
.addHeader("x-machine-id", credential.deviceId ?: credential.checkinDeviceId ?: "")
|
.addHeader("x-machine-id", credential.deviceId ?: credential.checkinDeviceId ?: "")
|
||||||
.addHeader("x-request-id", requestId)
|
.addHeader("x-request-id", requestId)
|
||||||
.addHeader("x-app-id", "trae")
|
.addHeader("x-ide-version", "3.3.67")
|
||||||
.addHeader("x-ide-version", "1.0.0")
|
.addHeader("x-ide-version-code", "20260401")
|
||||||
.addHeader("x-ide-version-code", "1000000")
|
|
||||||
.addHeader("x-ide-version-type", "stable")
|
.addHeader("x-ide-version-type", "stable")
|
||||||
.addHeader("x-os-version", "Android")
|
.addHeader("x-device-cpu", "AMD")
|
||||||
.addHeader("x-system-type", "Android")
|
.addHeader("x-device-brand", "83DG")
|
||||||
.addHeader("User-Agent", "RainyToken/1.0")
|
.addHeader("x-device-type", "windows")
|
||||||
|
.addHeader("x-ide-token", jwt)
|
||||||
|
.addHeader("x-os-version", "Windows 10")
|
||||||
|
.addHeader("x-system-type", "Windows")
|
||||||
|
.addHeader("Connection", "keep-alive")
|
||||||
|
.addHeader("User-Agent", "")
|
||||||
.post(upstreamBody.toRequestBody("application/json".toMediaType()))
|
.post(upstreamBody.toRequestBody("application/json".toMediaType()))
|
||||||
|
|
||||||
val response = try {
|
val response = try {
|
||||||
@ -162,17 +172,13 @@ class TraeChatProxy @Inject constructor(
|
|||||||
val sessionId = UUID.randomUUID().toString().replace("-", "")
|
val sessionId = UUID.randomUUID().toString().replace("-", "")
|
||||||
|
|
||||||
return buildJsonObject {
|
return buildJsonObject {
|
||||||
put("conversation_id", "")
|
put("messages", messages)
|
||||||
put("session_id", sessionId)
|
|
||||||
put("user_id", credential.userId ?: "")
|
|
||||||
put("device_id", credential.deviceId ?: credential.checkinDeviceId ?: "")
|
|
||||||
put("agent_type", "solo_work_lite")
|
|
||||||
put("model_name", model + "__dev")
|
|
||||||
put("config_name", model)
|
put("config_name", model)
|
||||||
|
put("model", model)
|
||||||
put("function", "solo_work_lite")
|
put("function", "solo_work_lite")
|
||||||
put("stream", true)
|
put("stream", true)
|
||||||
put("request_id", sessionId)
|
put("request_id", sessionId)
|
||||||
put("messages", messages)
|
put("session_id", sessionId)
|
||||||
src["tools"]?.let { put("tools", it) }
|
src["tools"]?.let { put("tools", it) }
|
||||||
src["tool_choice"]?.let { put("tool_choice", it) }
|
src["tool_choice"]?.let { put("tool_choice", it) }
|
||||||
(src["max_tokens"] as? JsonPrimitive)?.contentOrNull?.toIntOrNull()?.let {
|
(src["max_tokens"] as? JsonPrimitive)?.contentOrNull?.toIntOrNull()?.let {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user