Skip to content

Commit deb5cae

Browse files
authored
Merge pull request #1047 from parea-ai/PAI-1461-add-log-sampling-to-completion-lc-logging-endpoint
feat: add log sampling
2 parents 3a85aaf + 7287067 commit deb5cae

File tree

5 files changed

+15
-3
lines changed

5 files changed

+15
-3
lines changed

cookbook/openai/tracing_with_openai_with_functions.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
openai.api_key = os.getenv("OPENAI_API_KEY")
1818

1919
p = Parea(api_key=os.getenv("PAREA_API_KEY"))
20+
p.wrap_openai_client(openai)
2021

2122
functions = [
2223
{

parea/schemas/models.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class Completion:
2727
log_omit_inputs: bool = False
2828
log_omit_outputs: bool = False
2929
log_omit: bool = False
30+
log_sample_rate: float = 1.0
3031
experiment_uuid: Optional[str] = None
3132
project_uuid: str = "default"
3233

@@ -123,6 +124,7 @@ class TraceLog(EvaluatedLog):
123124
output_for_eval_metrics: Optional[str] = None
124125
evaluation_metric_names: Optional[List[str]] = field(factory=list)
125126
apply_eval_frac: float = 1.0
127+
log_sample_rate: float = 1.0
126128
feedback_score: Optional[float] = None
127129

128130
# info filled from decorator

parea/utils/trace_integrations/langchain.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class PareaAILangchainTracer(BaseTracer):
2424
_metadata: Dict[str, Any] = {}
2525
_end_user_identifier: Optional[str] = None
2626
_deployment_id: Optional[str] = None
27+
_log_sample_rate: Optional[float] = 1.0
2728

2829
def __init__(
2930
self,
@@ -32,12 +33,14 @@ def __init__(
3233
metadata: Optional[Dict[str, Any]] = None,
3334
end_user_identifier: Optional[str] = None,
3435
deployment_id: Optional[str] = None,
36+
log_sample_rate: Optional[float] = 1.0,
3537
**kwargs: Any,
3638
):
3739
super().__init__(**kwargs)
3840
self._session_id = session_id
3941
self._end_user_identifier = end_user_identifier
4042
self._deployment_id = deployment_id
43+
self._log_sample_rate = log_sample_rate
4144
if tags:
4245
self._tags = tags
4346
if metadata:
@@ -56,6 +59,7 @@ def _persist_run(self, run: Union[Run, LLMRun, ChainRun, ToolRun]) -> None:
5659
data["_metadata"] = self._metadata
5760
data["_end_user_identifier"] = self._end_user_identifier
5861
data["_deployment_id"] = self._deployment_id
62+
data["_log_sample_rate"] = self._log_sample_rate
5963
# check if run has an attribute execution order
6064
if (hasattr(run, "execution_order") and run.execution_order == 1) or run.parent_run_id is None:
6165
data["_parea_parent_trace_id"] = self._parea_parent_trace_id or None

parea/utils/trace_utils.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,11 @@ def fill_trace_data(trace_id: str, data: Dict[str, Any], scenario: UpdateTraceSc
130130
trace_data.get()[trace_id].error = data["error"]
131131
trace_data.get()[trace_id].status = "error"
132132
elif scenario == UpdateTraceScenario.CHAIN:
133-
trace_data.get()[trace_id].parent_trace_id = data["parent_trace_id"]
134-
trace_data.get()[data["parent_trace_id"]].children.append(trace_id)
133+
parent_trace_id = data["parent_trace_id"]
134+
trace_data.get()[trace_id].parent_trace_id = parent_trace_id
135+
trace_data.get()[parent_trace_id].children.append(trace_id)
136+
if trace_data.get()[parent_trace_id].log_sample_rate != trace_data.get()[trace_id].log_sample_rate:
137+
trace_data.get()[trace_id].log_sample_rate = trace_data.get()[parent_trace_id].log_sample_rate
135138
elif scenario == UpdateTraceScenario.LANGCHAIN_CHILD:
136139
trace_data.get()[data["parent_trace_id"]].children.append(trace_id)
137140
elif scenario == UpdateTraceScenario.OPENAICONFIG:
@@ -162,6 +165,7 @@ def trace(
162165
log_omit_outputs: Optional[bool] = False,
163166
overwrite_trace_id: Optional[str] = None,
164167
overwrite_inputs: Optional[Dict[str, Any]] = None,
168+
log_sample_rate: Optional[float] = 1.0,
165169
):
166170
def init_trace(func_name, _parea_target_field, args, kwargs, func) -> Tuple[str, datetime, contextvars.Token]:
167171
start_time = timezone_aware_now()
@@ -224,6 +228,7 @@ def init_trace(func_name, _parea_target_field, args, kwargs, func) -> Tuple[str,
224228
deployment_id=deployment_id,
225229
depth=depth,
226230
execution_order=execution_order,
231+
log_sample_rate=log_sample_rate,
227232
)
228233

229234
if parent_trace_id:

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ build-backend = "poetry.core.masonry.api"
66
[tool.poetry]
77
name = "parea-ai"
88
packages = [{ include = "parea" }]
9-
version = "0.2.199"
9+
version = "0.2.200"
1010
description = "Parea python sdk"
1111
readme = "README.md"
1212
authors = ["joel-parea-ai <[email protected]>"]

0 commit comments

Comments
 (0)