Skip to content

Commit 2f37eae

Browse files
committed
completed structured output parsing/conversion, updated tsp spec for correct items prop with arrays
1 parent 770cf58 commit 2f37eae

21 files changed

+363
-419
lines changed

runtime/prompty/prompty/azure/executor.py

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ async def _create_chat_async(
178178
trace("signature", "AzureOpenAIAsync.chat.completions.create")
179179
args = self._resolve_chat_args(data, ignore_thread_content)
180180
trace("inputs", args)
181+
182+
response = None
181183
if "stream" in args and args["stream"]:
182184
response = await client.chat.completions.create(**args)
183185
else:
@@ -374,26 +376,29 @@ def invoke(self, data: typing.Any) -> typing.Union[str, PromptyStream]:
374376

375377
client = self._get_ctor()
376378

379+
r = None
377380
if self.api == "chat":
378-
response = self._create_chat(client, data)
379-
elif self.api == "agent":
380-
response = self._execute_agent(client, data)
381+
r = self._create_chat(client, data)
382+
#elif self.api == "agent":
383+
# r = self._execute_agent(client, data)
381384
elif self.api == "completion":
382-
response = self._create_completion(client, data)
385+
r = self._create_completion(client, data)
383386
elif self.api == "embedding":
384-
response = self._create_embedding(client, data)
387+
r = self._create_embedding(client, data)
385388
elif self.api == "image":
386-
response = self._create_image(client, data)
389+
r = self._create_image(client, data)
387390

388391
# stream response
389-
if isinstance(response, Iterator):
392+
if isinstance(r, Iterator):
390393
if self.api == "chat":
391394
# TODO: handle the case where there might be no usage in the stream
392-
return PromptyStream("AzureOpenAIExecutor", response)
395+
return PromptyStream("AzureOpenAIExecutor", r)
393396
else:
394-
return PromptyStream("AzureOpenAIExecutor", response)
397+
return PromptyStream("AzureOpenAIExecutor", r)
398+
elif isinstance(r, str):
399+
return r
395400
else:
396-
return response
401+
raise ValueError(f"Unexpected response type: {type(r)}")
397402

398403
async def invoke_async(self, data: str) -> typing.Union[str, AsyncPromptyStream]:
399404
"""Invoke the Prompty Chat Parser (Async)
@@ -410,23 +415,26 @@ async def invoke_async(self, data: str) -> typing.Union[str, AsyncPromptyStream]
410415
"""
411416
client = self._get_async_ctor()
412417

418+
r = None
413419
if self.api == "chat":
414-
response = await self._create_chat_async(client, data)
415-
elif self.api == "agent":
416-
response = await self._execute_agent_async(client, data)
420+
r = await self._create_chat_async(client, data)
421+
#elif self.api == "agent":
422+
# r = await self._execute_agent_async(client, data)
417423
elif self.api == "completion":
418-
response = await self._create_completion_async(client, data)
424+
r = await self._create_completion_async(client, data)
419425
elif self.api == "embedding":
420-
response = await self._create_embedding_async(client, data)
426+
r = await self._create_embedding_async(client, data)
421427
elif self.api == "image":
422-
response = await self._create_image_async(client, data)
428+
r = await self._create_image_async(client, data)
423429

424430
# stream response
425-
if isinstance(response, AsyncIterator):
431+
if isinstance(r, AsyncIterator):
426432
if self.api == "chat":
427433
# TODO: handle the case where there might be no usage in the stream
428-
return AsyncPromptyStream("AzureOpenAIExecutorAsync", response)
434+
return AsyncPromptyStream("AzureOpenAIExecutorAsync", r)
429435
else:
430-
return AsyncPromptyStream("AzureOpenAIExecutorAsync", response)
436+
return AsyncPromptyStream("AzureOpenAIExecutorAsync", r)
437+
elif isinstance(r, str):
438+
return r
431439
else:
432-
return response
440+
raise ValueError(f"Unexpected response type: {type(r)}")

runtime/prompty/prompty/azure/processor.py

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,6 @@ def invoke(self, data: typing.Any) -> typing.Union[
4242
any
4343
The response from the OpenAI/Azure API
4444
"""
45-
# agent invocations return the thread
46-
# and the last message is the response
47-
if self.prompty.model.api == "agent" and isinstance(data, list):
48-
if isinstance(data[-1], dict):
49-
return data[-1]["content"]
50-
else:
51-
return data
5245

5346
if isinstance(data, ChatCompletion):
5447
response = data.choices[0].message
@@ -113,7 +106,7 @@ def generator():
113106
else:
114107
return data
115108

116-
async def invoke_async(self, data: str) -> typing.Union[str, AsyncPromptyStream]:
109+
async def invoke_async(self, data: str) -> typing.Any:
117110
"""Invoke the Prompty Chat Parser (Async)
118111
119112
Parameters
@@ -126,13 +119,6 @@ async def invoke_async(self, data: str) -> typing.Union[str, AsyncPromptyStream]
126119
str
127120
The parsed data
128121
"""
129-
# agent invocations return the thread
130-
# and the last message is the response
131-
if self.prompty.model.api == "agent" and isinstance(data, list):
132-
if isinstance(data[-1], dict):
133-
return data[-1]["content"]
134-
else:
135-
return data
136122

137123
if isinstance(data, ChatCompletion):
138124
response = data.choices[0].message
@@ -179,7 +165,7 @@ async def invoke_async(self, data: str) -> typing.Union[str, AsyncPromptyStream]
179165
elif len(data.data) == 1:
180166
return data.data[0].url if item.data[0].url else item.data[0].b64_json
181167
else:
182-
return [item.url if item.url else item.b64_json for item in data.data]
168+
return [str(item.url) if item.url else item.b64_json for item in data.data]
183169

184170
elif isinstance(data, AsyncIterator):
185171

runtime/prompty/prompty/azure_beta/__init__.py

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)