Skip to content

Commit d218e2f

Browse files
committed
docs: add cookbook for ab test
1 parent 577bd3c commit d218e2f

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

cookbook/ab_testing.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import os
2+
import random
3+
from typing import Tuple
4+
5+
from openai import OpenAI
6+
7+
from parea import trace, trace_insert, Parea, get_current_trace_id
8+
from parea.schemas import FeedbackRequest
9+
10+
client = OpenAI()
11+
# instantiate Parea client
12+
p = Parea(api_key=os.getenv('PAREA_API_KEY'))
13+
# wrap OpenAI client to trace calls
14+
p.wrap_openai_client(client)
15+
16+
17+
@trace
18+
def generate_email(user: str) -> Tuple[str, str]:
19+
"""Randomly chooses a prompt to perform an A/B test for generating email. Returns the email and the trace ID.
20+
The latter is used to tie-back the collected feedback from the user."""
21+
if random.random() < 0.5:
22+
trace_insert({'metadata': {'variant_name': 'variant_0'}})
23+
prompt = f'Generate a long email for {user}'
24+
else:
25+
trace_insert({'metadata': {'variant_name': 'variant_1'}})
26+
prompt = f'Generate a short email for {user}'
27+
28+
email = client.chat.completions.create(
29+
model="gpt-4o",
30+
messages=[
31+
{
32+
"role": "user",
33+
"content": prompt,
34+
}
35+
],
36+
).choices[0].message.content
37+
38+
return email, get_current_trace_id()
39+
40+
41+
def main():
42+
# generate email and get trace ID
43+
email, trace_id = generate_email('Max Mustermann')
44+
45+
# log user feedback on email using trace ID
46+
p.record_feedback(
47+
FeedbackRequest(
48+
trace_id=trace_id,
49+
score=1.0,
50+
)
51+
)
52+
53+
54+
if __name__ == '__main__':
55+
main()

0 commit comments

Comments
 (0)