Skip to content

Commit 5d3d55e

Browse files
committed
feat(sdks): support x-request-id
1 parent 5fdf970 commit 5d3d55e

47 files changed

Lines changed: 560 additions & 77 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

sdks/code-interpreter/kotlin/code-interpreter/src/main/kotlin/com/alibaba/opensandbox/codeinterpreter/infrastructure/adapters/service/CodesAdapter.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ class CodesAdapter(
126126
message = message,
127127
statusCode = response.code,
128128
error = sandboxError ?: SandboxError(UNEXPECTED_RESPONSE),
129+
requestId = response.header("X-Request-ID"),
129130
)
130131
}
131132

sdks/code-interpreter/kotlin/code-interpreter/src/test/kotlin/com/alibaba/opensandbox/codeinterpreter/infrastructure/adapters/service/CodesAdapterTest.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ package com.alibaba.opensandbox.codeinterpreter.infrastructure.adapters.service
1919
import com.alibaba.opensandbox.codeinterpreter.domain.models.execd.executions.RunCodeRequest
2020
import com.alibaba.opensandbox.sandbox.HttpClientProvider
2121
import com.alibaba.opensandbox.sandbox.config.ConnectionConfig
22+
import com.alibaba.opensandbox.sandbox.domain.exceptions.SandboxApiException
2223
import com.alibaba.opensandbox.sandbox.domain.models.execd.executions.ExecutionHandlers
2324
import com.alibaba.opensandbox.sandbox.domain.models.sandboxes.SandboxEndpoint
2425
import okhttp3.mockwebserver.MockResponse
2526
import okhttp3.mockwebserver.MockWebServer
2627
import org.junit.jupiter.api.AfterEach
2728
import org.junit.jupiter.api.Assertions.assertEquals
29+
import org.junit.jupiter.api.Assertions.assertThrows
2830
import org.junit.jupiter.api.Assertions.assertTrue
2931
import org.junit.jupiter.api.BeforeEach
3032
import org.junit.jupiter.api.Test
@@ -133,4 +135,20 @@ class CodesAdapterTest {
133135
assertEquals("/code", request.requestUrl?.encodedPath)
134136
assertEquals("exec-123", request.requestUrl?.queryParameter("id"))
135137
}
138+
139+
@Test
140+
fun `run should expose request id on api exception`() {
141+
mockWebServer.enqueue(
142+
MockResponse()
143+
.setResponseCode(500)
144+
.addHeader("X-Request-ID", "req-kotlin-code-123")
145+
.setBody("""{"code":"INTERNAL_ERROR","message":"boom"}"""),
146+
)
147+
148+
val request = RunCodeRequest.builder().code("print('boom')").build()
149+
val ex = assertThrows(SandboxApiException::class.java) { codesAdapter.run(request) }
150+
151+
assertEquals(500, ex.statusCode)
152+
assertEquals("req-kotlin-code-123", ex.requestId)
153+
}
136154
}

sdks/code-interpreter/kotlin/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ org.gradle.parallel=true
55

66
# Project metadata
77
project.group=com.alibaba.opensandbox
8-
project.version=1.0.4
8+
project.version=1.0.5
99
project.description=A Kotlin SDK for Code Interpreter

sdks/code-interpreter/kotlin/gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ spotless = "6.23.3"
2323
maven-publish = "0.35.0"
2424
dokka = "1.9.10"
2525
jackson = "2.18.2"
26-
sandbox = "1.0.4"
26+
sandbox = "1.0.5"
2727
junit-platform = "1.13.4"
2828

2929
[libraries]

sdks/code-interpreter/python/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ classifiers = [
4343
]
4444
dependencies = [
4545
"pydantic>=2.4.2,<3.0",
46-
"opensandbox>=0.1.1,<0.2.0",
46+
"opensandbox>=0.1.5,<0.2.0",
4747
]
4848

4949
[project.urls]

sdks/code-interpreter/python/src/code_interpreter/adapters/code_adapter.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
ExecutionEventDispatcher,
3333
)
3434
from opensandbox.adapters.converter.response_handler import (
35+
extract_request_id,
3536
handle_api_error,
3637
require_parsed,
3738
)
@@ -287,6 +288,7 @@ async def run(
287288
raise SandboxApiException(
288289
message=f"Failed to run code. Status code: {response.status_code}",
289290
status_code=response.status_code,
291+
request_id=extract_request_id(response.headers),
290292
)
291293

292294
dispatcher = ExecutionEventDispatcher(execution, handlers)

sdks/code-interpreter/python/src/code_interpreter/sync/adapters/code_adapter.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
ExceptionConverter,
2727
)
2828
from opensandbox.adapters.converter.response_handler import (
29+
extract_request_id,
2930
handle_api_error,
3031
require_parsed,
3132
)
@@ -252,6 +253,7 @@ def run(
252253
raise SandboxApiException(
253254
message=f"Failed to run code. Status code: {response.status_code}",
254255
status_code=response.status_code,
256+
request_id=extract_request_id(response.headers),
255257
)
256258

257259
for line in response.iter_lines():

sdks/code-interpreter/python/tests/test_code_service_adapter_streaming.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,12 @@ async def handle_async_request(self, request: httpx.Request) -> httpx.Response:
5252
)
5353
return httpx.Response(200, headers={"Content-Type": "text/event-stream"}, content=sse, request=request)
5454

55-
return httpx.Response(400, content=b"bad", request=request)
55+
return httpx.Response(
56+
400,
57+
headers={"x-request-id": "req-code-123"},
58+
content=b"bad",
59+
request=request,
60+
)
5661

5762

5863
def test_code_execution_converter_includes_context() -> None:
@@ -115,5 +120,6 @@ async def test_run_code_non_200_raises_api_exception() -> None:
115120
endpoint = SandboxEndpoint(endpoint="localhost:44772", port=44772)
116121
adapter = CodesAdapter(endpoint, cfg)
117122

118-
with pytest.raises(SandboxApiException):
123+
with pytest.raises(SandboxApiException) as ei:
119124
await adapter.run("other")
125+
assert ei.value.request_id == "req-code-123"

sdks/sandbox/csharp/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ try
5555
catch (SandboxException ex)
5656
{
5757
Console.Error.WriteLine($"Sandbox Error: [{ex.Error.Code}] {ex.Error.Message}");
58+
Console.Error.WriteLine($"Request ID: {ex.RequestId}");
5859
}
5960
```
6061

sdks/sandbox/csharp/README_zh.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ try
5555
catch (SandboxException ex)
5656
{
5757
Console.Error.WriteLine($"沙箱错误: [{ex.Error.Code}] {ex.Error.Message}");
58+
Console.Error.WriteLine($"Request ID: {ex.RequestId}");
5859
}
5960
```
6061

0 commit comments

Comments
 (0)