or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

client-configuration.mdcomments-annotations.mdcommon-types.mddatasets.mdexceptions.mdhealth.mdindex.mdingestion.mdmedia.mdmetrics.mdmodels.mdpagination.mdprojects-organizations.mdprompts.mdscim.mdscores.mdsessions.mdtraces-observations.md

comments-annotations.mddocs/

0

# Comments and Annotations

1

2

The Comments and Annotations APIs provide management of comments on traces, observations, sessions, and prompts, as well as annotation queues for human review workflows.

3

4

## Capabilities

5

6

### CommentsClient

7

8

Client for managing comments on various objects.

9

10

```java { .api }

11

/**

12

* Create a comment

13

* Can be attached to traces, observations, sessions, or prompts

14

*

15

* @param request Comment definition

16

* @param requestOptions Optional request configuration

17

*/

18

CreateCommentResponse create(CreateCommentRequest request);

19

CreateCommentResponse create(CreateCommentRequest request, RequestOptions requestOptions);

20

21

/**

22

* Get all comments with optional filters

23

*

24

* @param request Optional filters (objectType, objectId, author, pagination)

25

* @param requestOptions Optional request configuration

26

*/

27

GetCommentsResponse get();

28

GetCommentsResponse get(GetCommentsRequest request);

29

GetCommentsResponse get(GetCommentsRequest request, RequestOptions requestOptions);

30

31

/**

32

* Get a comment by ID

33

*

34

* @param commentId Comment ID

35

* @param requestOptions Optional request configuration

36

*/

37

Comment getById(String commentId);

38

Comment getById(String commentId, RequestOptions requestOptions);

39

```

40

41

**Usage Examples:**

42

43

```java

44

import com.langfuse.client.LangfuseClient;

45

import com.langfuse.client.resources.comments.types.*;

46

import com.langfuse.client.resources.comments.requests.*;

47

import com.langfuse.client.resources.commons.types.*;

48

49

LangfuseClient client = LangfuseClient.builder()

50

.url("https://cloud.langfuse.com")

51

.credentials("pk-lf-...", "sk-lf-...")

52

.build();

53

54

// Create a comment on a trace

55

// Note: Staged builder requires projectId() -> objectType() -> objectId() -> content()

56

CreateCommentRequest traceComment = CreateCommentRequest.builder()

57

.projectId("your-project-id") // Required first: project ID

58

.objectType("trace") // Required second: object type as String

59

.objectId("trace-123") // Required third: object ID

60

.content("This trace shows excellent performance") // Required fourth: content

61

.build();

62

63

CreateCommentResponse response = client.comments().create(traceComment);

64

65

// Create a comment on an observation

66

CreateCommentRequest obsComment = CreateCommentRequest.builder()

67

.projectId("your-project-id") // Required first

68

.objectType("observation") // Required second: String, not enum

69

.objectId("obs-456") // Required third

70

.content("Check model parameters here") // Required fourth

71

.build();

72

73

client.comments().create(obsComment);

74

75

// Get all comments for a trace

76

GetCommentsRequest request = GetCommentsRequest.builder()

77

.objectType("trace") // String, not enum

78

.objectId("trace-123")

79

.build();

80

81

GetCommentsResponse comments = client.comments().get(request);

82

for (Comment comment : comments.getData()) {

83

System.out.println(comment.getContent());

84

}

85

86

// Get a specific comment

87

Comment comment = client.comments().getById("comment-789");

88

```

89

90

### AnnotationQueuesClient

91

92

Client for managing annotation queues and queue items for human review.

93

94

```java { .api }

95

/**

96

* List all annotation queues

97

*

98

* @param request Optional pagination parameters

99

* @param requestOptions Optional request configuration

100

*/

101

PaginatedAnnotationQueues listQueues();

102

PaginatedAnnotationQueues listQueues(GetAnnotationQueuesRequest request);

103

PaginatedAnnotationQueues listQueues(GetAnnotationQueuesRequest request, RequestOptions requestOptions);

104

105

/**

106

* Get an annotation queue by ID

107

*

108

* @param queueId Queue ID

109

* @param requestOptions Optional request configuration

110

*/

111

AnnotationQueue getQueue(String queueId);

112

AnnotationQueue getQueue(String queueId, RequestOptions requestOptions);

113

114

/**

115

* List items in an annotation queue

116

*

117

* @param queueId Queue ID

118

* @param request Optional filters (status, pagination)

119

* @param requestOptions Optional request configuration

120

*/

121

PaginatedAnnotationQueueItems listQueueItems(String queueId);

122

PaginatedAnnotationQueueItems listQueueItems(String queueId, GetAnnotationQueueItemsRequest request);

123

PaginatedAnnotationQueueItems listQueueItems(String queueId, GetAnnotationQueueItemsRequest request, RequestOptions requestOptions);

124

125

/**

126

* Get a specific queue item

127

*

128

* @param queueId Queue ID

129

* @param itemId Item ID

130

* @param requestOptions Optional request configuration

131

*/

132

AnnotationQueueItem getQueueItem(String queueId, String itemId);

133

AnnotationQueueItem getQueueItem(String queueId, String itemId, RequestOptions requestOptions);

134

135

/**

136

* Add an item to an annotation queue

137

*

138

* @param queueId Queue ID

139

* @param request Item definition

140

* @param requestOptions Optional request configuration

141

*/

142

AnnotationQueueItem createQueueItem(String queueId, CreateAnnotationQueueItemRequest request);

143

AnnotationQueueItem createQueueItem(String queueId, CreateAnnotationQueueItemRequest request, RequestOptions requestOptions);

144

145

/**

146

* Update an annotation queue item

147

*

148

* @param queueId Queue ID

149

* @param itemId Item ID

150

* @param request Update data

151

* @param requestOptions Optional request configuration

152

*/

153

AnnotationQueueItem updateQueueItem(String queueId, String itemId);

154

AnnotationQueueItem updateQueueItem(String queueId, String itemId, UpdateAnnotationQueueItemRequest request);

155

AnnotationQueueItem updateQueueItem(String queueId, String itemId, UpdateAnnotationQueueItemRequest request, RequestOptions requestOptions);

156

157

/**

158

* Remove an item from an annotation queue

159

*

160

* @param queueId Queue ID

161

* @param itemId Item ID

162

* @param requestOptions Optional request configuration

163

*/

164

DeleteAnnotationQueueItemResponse deleteQueueItem(String queueId, String itemId);

165

DeleteAnnotationQueueItemResponse deleteQueueItem(String queueId, String itemId, RequestOptions requestOptions);

166

```

167

168

**Usage Examples:**

169

170

```java

171

import com.langfuse.client.resources.annotationqueues.types.*;

172

import com.langfuse.client.resources.annotationqueues.requests.*;

173

174

// List all queues

175

PaginatedAnnotationQueues queues = client.annotationQueues().listQueues();

176

for (AnnotationQueue queue : queues.getData()) {

177

System.out.println("Queue: " + queue.getName());

178

}

179

180

// Get a specific queue

181

AnnotationQueue queue = client.annotationQueues().getQueue("queue-123");

182

183

// Add a trace to the queue for review

184

CreateAnnotationQueueItemRequest itemRequest = CreateAnnotationQueueItemRequest.builder()

185

.objectId("trace-123")

186

.objectType(AnnotationQueueObjectType.TRACE)

187

.data(Map.of("priority", "high", "category", "quality-check"))

188

.build();

189

190

AnnotationQueueItem item = client.annotationQueues()

191

.createQueueItem("queue-123", itemRequest);

192

193

// List pending items in queue

194

GetAnnotationQueueItemsRequest listRequest = GetAnnotationQueueItemsRequest.builder()

195

.status(AnnotationQueueStatus.PENDING)

196

.build();

197

198

PaginatedAnnotationQueueItems items = client.annotationQueues()

199

.listQueueItems("queue-123", listRequest);

200

201

// Get a specific item

202

AnnotationQueueItem retrieved = client.annotationQueues()

203

.getQueueItem("queue-123", item.getId());

204

205

// Update item after review

206

UpdateAnnotationQueueItemRequest updateRequest = UpdateAnnotationQueueItemRequest.builder()

207

.status(AnnotationQueueStatus.COMPLETED)

208

.data(Map.of("reviewed_by", "user-456", "verdict", "approved"))

209

.build();

210

211

AnnotationQueueItem updated = client.annotationQueues()

212

.updateQueueItem("queue-123", item.getId(), updateRequest);

213

214

// Delete item

215

DeleteAnnotationQueueItemResponse deleteResp = client.annotationQueues()

216

.deleteQueueItem("queue-123", item.getId());

217

```

218

219

## Request Types (Comments)

220

221

### CreateCommentRequest

222

223

```java { .api }

224

/**

225

* Request for creating a comment

226

*

227

* Staged Builder Pattern (required order):

228

* 1. projectId(String) - Project ID

229

* 2. objectType(String) - Object type: "trace", "observation", "session", "prompt"

230

* 3. objectId(String) - ID of the object

231

* 4. content(String) - Comment text

232

* 5. authorUserId(String) - Optional author user ID

233

* 6. build() - Build the request

234

*/

235

public final class CreateCommentRequest {

236

String getProjectId(); // Project ID

237

String getObjectType(); // Object type as String

238

String getObjectId(); // ID of the object

239

String getContent(); // Comment text

240

Optional<String> getAuthorUserId(); // Optional author user ID

241

242

static ProjectIdStage builder(); // Returns staged builder starting with projectId()

243

}

244

```

245

246

### GetCommentsRequest

247

248

```java { .api }

249

/**

250

* Request parameters for listing comments

251

*/

252

public final class GetCommentsRequest {

253

Optional<Integer> getPage(); // Page number (default: 1)

254

Optional<Integer> getLimit(); // Items per page (default: 50)

255

Optional<String> getObjectType(); // Filter by object type: "trace", "observation", "session", "prompt"

256

Optional<String> getObjectId(); // Filter by object ID

257

Optional<String> getAuthorUserId(); // Filter by author

258

259

static Builder builder();

260

}

261

```

262

263

## Request Types (Annotation Queues)

264

265

### GetAnnotationQueuesRequest

266

267

```java { .api }

268

/**

269

* Request parameters for listing annotation queues

270

*/

271

public final class GetAnnotationQueuesRequest {

272

Optional<Integer> getPage(); // Page number (default: 1)

273

Optional<Integer> getLimit(); // Items per page (default: 50)

274

275

static Builder builder();

276

}

277

```

278

279

### GetAnnotationQueueItemsRequest

280

281

```java { .api }

282

/**

283

* Request parameters for listing queue items

284

*/

285

public final class GetAnnotationQueueItemsRequest {

286

Optional<AnnotationQueueStatus> getStatus(); // Filter by status

287

Optional<Integer> getPage(); // Page number (default: 1)

288

Optional<Integer> getLimit(); // Items per page (default: 50)

289

290

static Builder builder();

291

}

292

```

293

294

### CreateAnnotationQueueItemRequest

295

296

```java { .api }

297

/**

298

* Request for adding an item to a queue

299

*/

300

public final class CreateAnnotationQueueItemRequest {

301

String getObjectId(); // Object ID (trace, observation)

302

AnnotationQueueObjectType getObjectType(); // TRACE, OBSERVATION

303

Optional<Object> getData(); // Custom metadata

304

305

static Builder builder();

306

}

307

```

308

309

### UpdateAnnotationQueueItemRequest

310

311

```java { .api }

312

/**

313

* Request for updating a queue item

314

*/

315

public final class UpdateAnnotationQueueItemRequest {

316

Optional<AnnotationQueueStatus> getStatus(); // PENDING, COMPLETED

317

Optional<Object> getData(); // Updated metadata

318

319

static Builder builder();

320

}

321

```

322

323

## Response Types

324

325

### Comment

326

327

```java { .api }

328

/**

329

* Comment on an object

330

*

331

* Required imports:

332

* import com.langfuse.client.resources.commons.types.Comment;

333

* import com.langfuse.client.resources.commons.types.CommentObjectType;

334

* import java.time.OffsetDateTime;

335

*/

336

public final class Comment {

337

String getId();

338

String getProjectId();

339

OffsetDateTime getCreatedAt(); // Timestamp

340

OffsetDateTime getUpdatedAt(); // Timestamp

341

CommentObjectType getObjectType(); // Enum: TRACE, OBSERVATION, SESSION, PROMPT

342

String getObjectId();

343

String getContent();

344

Optional<String> getAuthorUserId();

345

346

static Builder builder();

347

}

348

```

349

350

### CreateCommentResponse

351

352

```java { .api }

353

/**

354

* Response after creating a comment

355

*/

356

public final class CreateCommentResponse {

357

String getId(); // The ID of the created comment

358

359

static Builder builder();

360

}

361

```

362

363

### GetCommentsResponse

364

365

```java { .api }

366

/**

367

* Paginated list of comments

368

*/

369

public final class GetCommentsResponse {

370

List<Comment> getData();

371

MetaResponse getMeta(); // Pagination metadata

372

373

static Builder builder();

374

}

375

```

376

377

### AnnotationQueue

378

379

```java { .api }

380

/**

381

* Annotation queue definition

382

*

383

* Required imports:

384

* import com.langfuse.client.resources.annotationqueues.types.AnnotationQueue;

385

* import java.time.OffsetDateTime;

386

*/

387

public final class AnnotationQueue {

388

String getId();

389

String getName();

390

Optional<String> getDescription();

391

List<String> getScoreConfigIds(); // List of score config IDs

392

OffsetDateTime getCreatedAt(); // Timestamp

393

OffsetDateTime getUpdatedAt(); // Timestamp

394

395

static Builder builder();

396

}

397

```

398

399

### PaginatedAnnotationQueues

400

401

```java { .api }

402

/**

403

* Paginated list of annotation queues

404

*/

405

public final class PaginatedAnnotationQueues {

406

List<AnnotationQueue> getData();

407

MetaResponse getMeta(); // Pagination metadata

408

409

static Builder builder();

410

}

411

```

412

413

### AnnotationQueueItem

414

415

```java { .api }

416

/**

417

* Item in an annotation queue

418

*/

419

public final class AnnotationQueueItem {

420

String getId();

421

String getQueueId();

422

String getObjectId();

423

AnnotationQueueObjectType getObjectType();

424

AnnotationQueueStatus getStatus();

425

Optional<Object> getData();

426

Optional<String> getCompletedAt(); // ISO 8601 timestamp

427

Optional<String> getAssignedTo(); // User ID

428

String getCreatedAt(); // ISO 8601 timestamp

429

String getUpdatedAt(); // ISO 8601 timestamp

430

431

static Builder builder();

432

}

433

```

434

435

### PaginatedAnnotationQueueItems

436

437

```java { .api }

438

/**

439

* Paginated list of annotation queue items

440

*/

441

public final class PaginatedAnnotationQueueItems {

442

List<AnnotationQueueItem> getData();

443

MetaResponse getMeta(); // Pagination metadata

444

445

static Builder builder();

446

}

447

```

448

449

### DeleteAnnotationQueueItemResponse

450

451

```java { .api }

452

/**

453

* Response after deleting a queue item

454

*/

455

public final class DeleteAnnotationQueueItemResponse {

456

boolean getSuccess();

457

458

static Builder builder();

459

}

460

```

461

462

## Enums

463

464

### CommentObjectType

465

466

```java { .api }

467

/**

468

* Object types that can have comments

469

*/

470

public enum CommentObjectType {

471

TRACE,

472

OBSERVATION,

473

SESSION,

474

PROMPT

475

}

476

```

477

478

### AnnotationQueueObjectType

479

480

```java { .api }

481

/**

482

* Object types for annotation queues

483

*/

484

public enum AnnotationQueueObjectType {

485

TRACE,

486

OBSERVATION

487

}

488

```

489

490

### AnnotationQueueStatus

491

492

```java { .api }

493

/**

494

* Status of annotation queue items

495

*/

496

public enum AnnotationQueueStatus {

497

PENDING, // Pending review

498

COMPLETED // Review completed

499

}

500

```

501

502

## Complete Annotation Workflow Example

503

504

```java

505

import com.langfuse.client.LangfuseClient;

506

import com.langfuse.client.resources.comments.types.*;

507

import com.langfuse.client.resources.comments.requests.*;

508

import com.langfuse.client.resources.annotationqueues.types.*;

509

import com.langfuse.client.resources.annotationqueues.requests.*;

510

import com.langfuse.client.resources.commons.types.*;

511

import java.util.Map;

512

513

public class AnnotationWorkflowExample {

514

public static void main(String[] args) {

515

LangfuseClient client = LangfuseClient.builder()

516

.url("https://cloud.langfuse.com")

517

.credentials("pk-lf-...", "sk-lf-...")

518

.build();

519

520

String queueId = "queue-123";

521

String traceId = "trace-456";

522

523

// 1. Add trace to annotation queue

524

CreateAnnotationQueueItemRequest itemRequest = CreateAnnotationQueueItemRequest.builder()

525

.objectId(traceId)

526

.objectType(AnnotationQueueObjectType.TRACE)

527

.data(Map.of(

528

"priority", "high",

529

"reason", "user_reported",

530

"issue_type", "quality"

531

))

532

.build();

533

534

AnnotationQueueItem item = client.annotationQueues()

535

.createQueueItem(queueId, itemRequest);

536

537

System.out.println("Added to queue: " + item.getId());

538

539

// 2. Reviewer comments on the trace

540

CreateCommentRequest commentRequest = CreateCommentRequest.builder()

541

.projectId("your-project-id")

542

.objectType("trace") // String, not enum

543

.objectId(traceId)

544

.content("The response contains factual errors. Needs retraining.")

545

.build();

546

547

CreateCommentResponse comment = client.comments().create(commentRequest);

548

549

// 3. Update queue item status

550

UpdateAnnotationQueueItemRequest updateRequest = UpdateAnnotationQueueItemRequest.builder()

551

.status(AnnotationQueueStatus.COMPLETED)

552

.data(Map.of(

553

"reviewed_by", "reviewer-123",

554

"verdict", "needs_improvement",

555

"comment_id", comment.getId()

556

))

557

.build();

558

559

AnnotationQueueItem updated = client.annotationQueues()

560

.updateQueueItem(queueId, item.getId(), updateRequest);

561

562

// 4. List all comments for the trace

563

GetCommentsRequest getCommentsRequest = GetCommentsRequest.builder()

564

.objectType("trace") // String, not enum

565

.objectId(traceId)

566

.build();

567

568

GetCommentsResponse comments = client.comments().get(getCommentsRequest);

569

570

System.out.println("Comments on trace:");

571

for (Comment c : comments.getData()) {

572

System.out.println(" " + c.getAuthorUserId() + ": " + c.getContent());

573

}

574

575

// 5. Process pending items in queue

576

GetAnnotationQueueItemsRequest pendingRequest = GetAnnotationQueueItemsRequest.builder()

577

.status(AnnotationQueueStatus.PENDING)

578

.limit(10)

579

.build();

580

581

PaginatedAnnotationQueueItems pending = client.annotationQueues()

582

.listQueueItems(queueId, pendingRequest);

583

584

System.out.println("\nPending items: " + pending.getData().size());

585

for (AnnotationQueueItem pendingItem : pending.getData()) {

586

System.out.println(" Item: " + pendingItem.getObjectId());

587

}

588

}

589

}

590

```

591

592

## Best Practices

593

594

1. **Structured Data**: Use the data field to store structured review metadata

595

2. **Comment Context**: Include context in comments for future reference

596

3. **Status Tracking**: Keep queue items updated with current status

597

4. **Assign Reviewers**: Use assignedTo field to track reviewer assignment

598

5. **Priority Queuing**: Use data field to implement priority systems

599

6. **Audit Trail**: Comments provide an audit trail for reviews

600

7. **Bulk Processing**: Process queue items in batches for efficiency

601

602

## Related Documentation

603

604

- [Traces and Observations](./traces-observations.md) - Objects that can be commented/reviewed

605

- [Common Types](./common-types.md) - Shared type definitions

606

- [Pagination](./pagination.md) - Pagination utilities

607