diff --git a/python/langsmith/_internal/_operations.py b/python/langsmith/_internal/_operations.py index 66decff0f..89d5f12fc 100644 --- a/python/langsmith/_internal/_operations.py +++ b/python/langsmith/_internal/_operations.py @@ -141,6 +141,27 @@ def serialize_run_dict( attachments=attachments if attachments is not None else None, ) +def serialize_run_dict_for_compressed_ingest( + operation: Literal["post", "patch"], payload: dict +): + inputs = payload.pop("inputs", None) + outputs = payload.pop("outputs", None) + events = payload.pop("events", None) + attachments = payload.pop("attachments", None) + serialized = ... + extra = ... + return SerializedRunOperation( + operation=operation, + id=payload["id"], + trace_id=payload["trace_id"], + _none=_dumps_json(payload), + inputs=_dumps_json(inputs) if inputs is not None else None, + outputs=_dumps_json(outputs) if outputs is not None else None, + events=_dumps_json(events) if events is not None else None, + attachments=attachments if attachments is not None else None, + ) + + def combine_serialized_queue_operations( ops: list[Union[SerializedRunOperation, SerializedFeedbackOperation]], diff --git a/python/langsmith/client.py b/python/langsmith/client.py index a6377e23e..63c93fc03 100644 --- a/python/langsmith/client.py +++ b/python/langsmith/client.py @@ -494,10 +494,13 @@ def __init__( if info is None or isinstance(info, ls_schemas.LangSmithInfo) else ls_schemas.LangSmithInfo(**info) ) + self.compressed_multipart_buffer = ... weakref.finalize(self, close_session, self.session) atexit.register(close_session, session_) # Initialize auto batching - if auto_batch_tracing: + if auto_batch_tracing and _compression_enabled: + ... + elif auto_batch_tracing: self.tracing_queue: Optional[PriorityQueue] = PriorityQueue() threading.Thread( @@ -1295,6 +1298,10 @@ def create_run( self.tracing_queue.put( TracingQueueItem(run_create["dotted_order"], serialized_op) ) + elif os.environ["COMP"]: + # Do something different + # Use existing serialized_run_dict + else: # Neither Rust nor Python batch ingestion is configured, # fall back to the non-batch approach.