Skip to content

Commit bff686b

Browse files
committed
Naming and imports cleanup.
1 parent 5b3a2cb commit bff686b

16 files changed

Lines changed: 48 additions & 59 deletions

custom_decorator/activity_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
F = TypeVar("F", bound=Callable[..., Awaitable[Any]])
99

1010

11-
def auto_heartbeater(fn: F) -> F:
11+
def _auto_heartbeater(fn: F) -> F:
1212
# We want to ensure that the type hints from the original callable are
1313
# available via our wrapper, so we use the functools wraps decorator
1414
@wraps(fn)

custom_decorator/worker.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
from temporalio.common import RetryPolicy
77
from temporalio.worker import Worker
88

9-
from custom_decorator.activity_utils import auto_heartbeater
9+
from custom_decorator.activity_utils import _auto_heartbeater
1010

1111

1212
# Here we use our automatic heartbeater decorator. If this wasn't present, our
1313
# activity would timeout since it isn't heartbeating.
1414
@activity.defn
15-
@auto_heartbeater
15+
@_auto_heartbeater
1616
async def wait_for_cancel_activity() -> str:
1717
# Wait forever, catch the cancel, and return some value
1818
try:

openai_agents/adapters/heartbeat_decorator.py renamed to openai_agents/adapters/_heartbeat_decorator.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import asyncio
2-
from datetime import datetime
32
from functools import wraps
43
from typing import Any, Awaitable, Callable, TypeVar, cast
54

openai_agents/adapters/model_activity.py renamed to openai_agents/adapters/invoke_model_activity.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from temporalio import activity
1111

12-
from openai_agents.adapters.heartbeat_decorator import auto_heartbeater
12+
from custom_decorator.activity_utils import _auto_heartbeater
1313

1414

1515
class OpenAIActivityInput(TypedDict, total=False):
@@ -39,7 +39,7 @@ class OpenAIActivityInput(TypedDict, total=False):
3939

4040

4141
@activity.defn
42-
@auto_heartbeater
42+
@_auto_heartbeater
4343
async def invoke_open_ai_model(input: OpenAIActivityInput) -> Response:
4444
client = AsyncOpenAI()
4545
return await client.responses.create(**input)

openai_agents/adapters/open_ai_converter.py

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,12 @@
44
"""
55
from __future__ import annotations
66

7-
import typing_extensions
8-
from openai import BaseModel, NOT_GIVEN
9-
from openai._types import NotGiven
10-
from typing import Any, Optional, Type, Generic, TypeVar, Required
11-
12-
from pydantic import TypeAdapter, RootModel
13-
import pydantic
147
import json
8+
from typing import Any, Optional, Type, TypeVar
159

1610
import temporalio.api.common.v1
11+
from openai import BaseModel, NOT_GIVEN
12+
from pydantic import TypeAdapter, RootModel
1713
from temporalio.converter import (
1814
CompositePayloadConverter,
1915
DataConverter,
@@ -24,26 +20,13 @@
2420

2521
T = TypeVar("T", bound=BaseModel)
2622

27-
class WrapperModel(RootModel[T]):
23+
class _WrapperModel(RootModel[T]):
2824
model_config = {
2925
"arbitrary_types_allowed": True,
3026
}
3127

3228

33-
def strip_not_given(obj: Any) -> Any:
34-
if isinstance(obj, dict):
35-
return {
36-
k: strip_not_given(v)
37-
for k, v in obj.items()
38-
if v != NOT_GIVEN and v is not None
39-
}
40-
elif isinstance(obj, list):
41-
return [strip_not_given(v) for v in obj if v != NOT_GIVEN and v is not None]
42-
else:
43-
return obj
44-
45-
46-
class OpenAIJSONPlainPayloadConverter(EncodingPayloadConverter):
29+
class _OpenAIJSONPlainPayloadConverter(EncodingPayloadConverter):
4730
"""Pydantic JSON payload converter.
4831
4932
Supports conversion of all types supported by Pydantic to and from JSON.
@@ -70,8 +53,19 @@ def to_payload(self, value: Any) -> Optional[temporalio.api.common.v1.Payload]:
7053
https://docs.pydantic.dev/latest/api/pydantic_core/#pydantic_core.to_json.
7154
"""
7255

73-
# json = Wrapper(value=value).model_dump_json().encode()
74-
wrapper = WrapperModel[type(value)](root=value)
56+
def strip_not_given(obj: Any) -> Any:
57+
if isinstance(obj, dict):
58+
return {
59+
k: strip_not_given(v)
60+
for k, v in obj.items()
61+
if v != NOT_GIVEN and v is not None
62+
}
63+
elif isinstance(obj, list):
64+
return [strip_not_given(v) for v in obj if v != NOT_GIVEN and v is not None]
65+
else:
66+
return obj
67+
68+
wrapper = _WrapperModel[type(value)](root=value)
7569
dump = wrapper.model_dump(mode="python", by_alias=True)
7670
# NotGiven values are not JSON serializable, so we need to strip them out
7771
dump = strip_not_given(dump)
@@ -87,7 +81,7 @@ def from_payload(
8781
type_hint: Optional[Type] = None,
8882
) -> Any:
8983
_type_hint = type_hint if type_hint is not None else Any
90-
wrapper = WrapperModel[_type_hint]
84+
wrapper = _WrapperModel[_type_hint]
9185
return TypeAdapter(wrapper).validate_json(payload.data.decode()).root
9286

9387

@@ -100,7 +94,7 @@ class OpenAIPayloadConverter(CompositePayloadConverter):
10094

10195
def __init__(self) -> None:
10296
"""Initialize object"""
103-
json_payload_converter = OpenAIJSONPlainPayloadConverter()
97+
json_payload_converter = _OpenAIJSONPlainPayloadConverter()
10498
super().__init__(
10599
*(
106100
c

openai_agents/adapters/activity_model.py renamed to openai_agents/adapters/temporal_model_provider.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22

33
from temporalio import workflow
44

5+
from openai_agents.adapters.invoke_model_activity import OpenAIActivityInput, invoke_open_ai_model
6+
57
with workflow.unsafe.imports_passed_through():
68
from datetime import timedelta
79
from idlelib.query import Query
810
from typing import Union, Optional, List, Literal, Iterable, Callable, Any
911
from wsgiref.headers import Headers
1012
from agents.function_schema import function_schema
1113
from agents.models.openai_provider import DEFAULT_MODEL
12-
from openai_agents.adapters.model_activity import OpenAIActivityInput, invoke_open_ai_model
1314
from agents import ModelProvider, Model, OpenAIResponsesModel, Tool, RunContextWrapper, FunctionTool
1415
import httpx
1516
from fastapi import Body
@@ -79,7 +80,7 @@ def get_summary(input: Any) -> str:
7980
return client
8081

8182

82-
class ModelStubProvider(ModelProvider):
83+
class TemporalModelProvider(ModelProvider):
8384
def get_model(self, model_name: str | None) -> Model:
8485
if model_name is None:
8586
model_name = DEFAULT_MODEL

openai_agents/run_agents_as_tools_workflow.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import asyncio
2-
import logging
32

43
from temporalio.client import Client
54
from temporalio.common import WorkflowIDReusePolicy
65

7-
from openai_agents.workflows.agents_as_tools_workflow import AgentsAsToolsWorkflow
86
from openai_agents.adapters.open_ai_converter import open_ai_data_converter
9-
# Import the workflow from the previous code
7+
from openai_agents.workflows.agents_as_tools_workflow import AgentsAsToolsWorkflow
108

119

1210
async def main():

openai_agents/run_hello_world_workflow.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import asyncio
2-
import logging
32

43
from temporalio.client import Client
54
from temporalio.common import WorkflowIDReusePolicy
65

76
from openai_agents.adapters.open_ai_converter import open_ai_data_converter
8-
# Import the workflow from the previous code
97
from openai_agents.workflows.hello_world_workflow import HelloWorldAgent
108

119

openai_agents/run_research_workflow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import asyncio
2-
import logging
32

43
from temporalio.client import Client
54
from temporalio.common import WorkflowIDReusePolicy
65

76
from openai_agents.adapters.open_ai_converter import open_ai_data_converter
87
from openai_agents.workflows.research_bot_workflow import ResearchWorkflow
98

9+
1010
async def main():
1111
# Create client connected to server at the given address
1212
client = await Client.connect(

openai_agents/run_tools_workflow.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import asyncio
2-
import logging
32

43
from temporalio.client import Client
54
from temporalio.common import WorkflowIDReusePolicy

0 commit comments

Comments
 (0)