mirror of
https://github.com/langchain-ai/langsmith-java.git
synced 2026-08-24 22:01:31 -04:00
13b36e3f11
Adds multipart run attachment support to the Java SDK.
- Added `RunAttachment` for binary run attachments.
- Added per-run attachments on `Run`.
- Added direct multipart ingest APIs:
- `client.runs().multipartIngest(createRuns, updateRuns)`
- async/raw response variants
- Multipart serialization now sends:
- run payloads as `post.{runId}` / `patch.{runId}`
- large fields separately, e.g. `post.{runId}.inputs`
- attachments as `attachment.{runId}.{attachmentName}`
- `InputStream` attachments are treated as non-repeatable so retry
behavior is safe.
Java:
```java
import com.langchain.smith.client.okhttp.LangsmithOkHttpClient;
import com.langchain.smith.models.runs.Run;
import com.langchain.smith.models.runs.RunAttachment;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.UUID;
public class MultipartRunAttachmentExample {
public static void main(String[] args) {
var client = LangsmithOkHttpClient.builder()
.apiKey(System.getenv("LANGSMITH_API_KEY"))
.build();
var runId = UUID.randomUUID().toString();
var run = Run.builder()
.id(runId)
.traceId(runId)
.dottedOrder("20250101T000000000Z" + runId)
.name("run-with-attachment")
.runType(Run.RunType.CHAIN)
.putAttachment(
"input-file",
RunAttachment.of(
"text/plain",
"hello from an attachment".getBytes(StandardCharsets.UTF_8)
)
)
.build();
client.runs().multipartIngest(List.of(run), List.of());
client.close();
}
}
```
Kotlin:
```kotlin
var runId = UUID.randomUUID().toString();
var run = Run.builder()
.id(runId)
.traceId(runId)
.dottedOrder("20250101T000000000Z" + runId)
.name("run-with-attachment")
.runType(Run.RunType.CHAIN)
.putAttachment(
"input-file",
RunAttachment.of(
"text/plain",
"hello from an attachment".getBytes(StandardCharsets.UTF_8)
)
)
.build();
client.runs().multipartIngest(List.of(run), List.of());
```