@@ -64,35 +64,6 @@ async def get_response(
6464 previous_response_id : Optional [str ],
6565 prompt : Optional [ResponsePromptParam ],
6666 ) -> ModelResponse :
67- def get_summary (
68- input : Union [str , list [TResponseInputItem ]],
69- ) -> str :
70- ### Activity summary shown in the UI
71- try :
72- max_size = 100
73- if isinstance (input , str ):
74- return input [:max_size ]
75- elif isinstance (input , list ):
76- content : Any = [
77- item
78- for item in input
79- if (item .get ("type" ) or "message" ) == "message"
80- ][- 1 ]
81- if isinstance (content , dict ):
82- content = content .get ("content" , "" )
83- elif hasattr (content , "content" ):
84- content = getattr (content , "content" )
85-
86- if isinstance (content , list ):
87- content = content [- 1 ]
88-
89- if isinstance (content , dict ) and content .get ("text" ) is not None :
90- content = content .get ("text" )
91- return str (content )[:max_size ]
92- except Exception as e :
93- logger .error (f"Error getting summary: { e } " )
94- return ""
95-
9667 def make_tool_info (tool : Tool ) -> ToolInput :
9768 if isinstance (tool , (FileSearchTool , WebSearchTool )):
9869 return tool
@@ -157,7 +128,7 @@ def make_tool_info(tool: Tool) -> ToolInput:
157128 return await workflow .execute_activity_method (
158129 ModelActivity .invoke_model_activity ,
159130 activity_input ,
160- summary = self .model_params .summary_override or get_summary (input ),
131+ summary = self .model_params .summary_override or _extract_summary (input ),
161132 task_queue = self .model_params .task_queue ,
162133 schedule_to_close_timeout = self .model_params .schedule_to_close_timeout ,
163134 schedule_to_start_timeout = self .model_params .schedule_to_start_timeout ,
@@ -183,3 +154,34 @@ def stream_response(
183154 prompt : ResponsePromptParam | None ,
184155 ) -> AsyncIterator [TResponseStreamEvent ]:
185156 raise NotImplementedError ("Temporal model doesn't support streams yet" )
157+
158+
159+ def _extract_summary (input : Union [str , list [TResponseInputItem ]]) -> str :
160+ ### Activity summary shown in the UI
161+ try :
162+ max_size = 100
163+ if isinstance (input , str ):
164+ return input [:max_size ]
165+ elif isinstance (input , list ):
166+ # Find all message inputs, which are reasonably summarizable
167+ messages : list [TResponseInputItem ] = [
168+ item for item in input if (item .get ("type" ) or "message" ) == "message"
169+ ]
170+ if not messages :
171+ return ""
172+
173+ content : Any = messages [- 1 ].get ("content" , "" )
174+
175+ # In the case of multiple contents, take the last one
176+ if isinstance (content , list ):
177+ if not content :
178+ return ""
179+ content = content [- 1 ]
180+
181+ # Take the text field from the content if present
182+ if isinstance (content , dict ) and content .get ("text" ) is not None :
183+ content = content .get ("text" )
184+ return str (content )[:max_size ]
185+ except Exception as e :
186+ logger .error (f"Error getting summary: { e } " )
187+ return ""
0 commit comments