Skip to content

Commit ed9cbe7

Browse files
committed
Experimenting with braintrust logging
1 parent 7b437d5 commit ed9cbe7

File tree

6 files changed

+276
-3
lines changed

6 files changed

+276
-3
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from temporalio import workflow
2+
from openai import AsyncOpenAI
3+
from temporalio import activity
4+
with workflow.unsafe.imports_passed_through():
5+
from braintrust import wrap_openai, init_logger
6+
7+
8+
@activity.defn
9+
async def basic_model_invocation(prompt: str) -> str:
10+
client = wrap_openai(AsyncOpenAI())
11+
logger=init_logger(project="Temporal-first-project")
12+
response = await client.responses.create(
13+
model="gpt-4o",
14+
instructions="You are a coding assistant that talks like a pirate.",
15+
input=prompt,
16+
)
17+
return response.output_text
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import asyncio
2+
3+
from temporalio.client import Client
4+
5+
from workflows.basic_model_workflow import BasicModelWorkflow
6+
7+
8+
async def main():
9+
# Create client connected to server at the given address
10+
client = await Client.connect(
11+
"localhost:7233",
12+
)
13+
14+
# Execute a workflow
15+
result = await client.execute_workflow(
16+
BasicModelWorkflow.run,
17+
args=["How do I check if a Python object is an instance of a class?"],
18+
id="basic-model-workflow",
19+
task_queue="openai-basic-task-queue",
20+
)
21+
22+
print(f"Result: {result}")
23+
24+
25+
if __name__ == "__main__":
26+
asyncio.run(main())

openai_sample/run_worker.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from __future__ import annotations
2+
3+
import asyncio
4+
5+
from temporalio.client import Client
6+
from temporalio.contrib.opentelemetry import TracingInterceptor
7+
from temporalio.worker import Worker
8+
9+
from activities.basic_model_activity import basic_model_invocation
10+
from workflows.basic_model_workflow import BasicModelWorkflow
11+
12+
13+
async def main():
14+
# Create client connected to server at the given address
15+
client = await Client.connect(
16+
"localhost:7233",
17+
)
18+
19+
worker = Worker(
20+
client,
21+
task_queue="openai-basic-task-queue",
22+
workflows=[
23+
BasicModelWorkflow,
24+
],
25+
activities=[
26+
basic_model_invocation,
27+
],
28+
interceptors=[TracingInterceptor()]
29+
)
30+
await worker.run()
31+
32+
33+
if __name__ == "__main__":
34+
asyncio.run(main())
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from __future__ import annotations
2+
3+
from datetime import timedelta
4+
5+
from temporalio import workflow
6+
7+
from openai_sample.activities.basic_model_activity import basic_model_invocation
8+
9+
with workflow.unsafe.imports_passed_through():
10+
from braintrust import traced, init_logger
11+
12+
logger=init_logger(project="Temporal-first-project")
13+
14+
@workflow.defn(sandboxed=False)
15+
class BasicModelWorkflow:
16+
@traced
17+
@workflow.run
18+
async def run(self, question: str) -> str:
19+
return await self.do_model(question)
20+
21+
@traced
22+
async def do_model(self, question: str) -> str:
23+
return await workflow.execute_activity(
24+
basic_model_invocation,
25+
question,
26+
start_to_close_timeout=timedelta(minutes=1),
27+
)

pyproject.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ authors = [{ name = "Temporal Technologies Inc", email = "sdk@temporal.io" }]
66
requires-python = ">=3.10"
77
readme = "README.md"
88
license = "MIT"
9-
dependencies = ["temporalio>=1.18.0,<2"]
9+
dependencies = [
10+
"braintrust>=0.3.0",
11+
"temporalio>=1.18.0,<2",
12+
]
1013

1114
[project.urls]
1215
Homepage = "https://github.com/temporalio/samples-python"

0 commit comments

Comments
 (0)