Skip to content

Commit 0f7ec71

Browse files
committed
Add support for chat completions
1 parent 31d7f91 commit 0f7ec71

3 files changed

Lines changed: 52 additions & 10 deletions

File tree

aikido_zen/sinks/openai.py

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1+
"""
2+
patching module openai
3+
- patches function create(...) on Responses class, to inspect response
4+
- patches function create(...) on Completions class, to inspect response
5+
"""
6+
17
from aikido_zen.helpers.on_ai_call import on_ai_call
28
from aikido_zen.helpers.register_call import register_call
39
from aikido_zen.sinks import on_import, patch_function, after
410

511

612
@after
7-
def _create(func, instance, args, kwargs, return_value):
8-
op = "openai.resources.responses.responses.Responses.create"
13+
def _create_responses(func, instance, args, kwargs, return_value):
14+
op = f"openai.resources.responses.responses.Responses.create"
915
register_call(op, "ai_op")
1016

1117
on_ai_call(
@@ -16,10 +22,24 @@ def _create(func, instance, args, kwargs, return_value):
1622
)
1723

1824

19-
@on_import("openai.resources.responses.responses", "openai", version_requirement="1.0")
20-
def patch(m):
21-
"""
22-
patching module openai
23-
- patches function create(...) on Responses class, to inspect response
24-
"""
25-
patch_function(m, "Responses.create", _create)
25+
@after
26+
def _create_completions(func, instance, args, kwargs, return_value):
27+
op = f"openai.resources.chat.completions.completions.Completions.create"
28+
register_call(op, "ai_op")
29+
30+
on_ai_call(
31+
provider="openai",
32+
model=return_value.model,
33+
input_tokens=return_value.usage.prompt_tokens,
34+
output_tokens=return_value.usage.completion_tokens,
35+
)
36+
37+
38+
@on_import("openai.resources.responses.responses", "openai", "1.0")
39+
def patch_responses(m):
40+
patch_function(m, "Responses.create", _create_responses)
41+
42+
43+
@on_import("openai.resources.chat.completions.completions", "openai", "1.0")
44+
def patch_chat_completions(m):
45+
patch_function(m, "Completions.create", _create_completions)

sample-apps/flask-openai/app.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,25 @@ def ask_openai():
6565
answer = response.output_text
6666

6767
return render_template('ask_openai.html', question=question, answer=answer)
68+
69+
@app.route("/ask_openai_completions", methods=['GET'])
70+
def show_ask_openai_completions_form():
71+
return render_template('ask_openai.html')
72+
73+
@app.route("/ask_openai_completions", methods=['POST'])
74+
def ask_openai_completions():
75+
question = request.form['question']
76+
77+
completion = client.chat.completions.create(
78+
model="gpt-4o",
79+
messages=[
80+
{"role": "developer", "content": "Talk like a pirate."},
81+
{
82+
"role": "user",
83+
"content": question,
84+
},
85+
],
86+
)
87+
answer = completion.choices[0].message.content
88+
89+
return render_template('ask_openai.html', question=question, answer=answer)

sample-apps/flask-openai/templates/ask_openai.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</head>
77
<body>
88
<h1>Ask OpenAI</h1>
9-
<form method="POST" action="/ask_openai">
9+
<form method="POST">
1010
<label for="question">Question:</label><br>
1111
<input type="text" id="question" name="question" required><br>
1212
<input type="submit" value="Submit">

0 commit comments

Comments
 (0)