@prompty/foundry 2.0.0-alpha.1 → 2.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -86
- package/dist/index.cjs +14 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -6
- package/dist/index.js.map +1 -1
- package/package.json +65 -64
package/README.md
CHANGED
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
# @prompty/foundry
|
|
2
|
-
|
|
3
|
-
Microsoft Foundry provider for Prompty — executor and processor for Azure AI Foundry (and Azure OpenAI).
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install @prompty/core @prompty/foundry openai @azure/identity
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Usage
|
|
12
|
-
|
|
13
|
-
Import `@prompty/foundry` to auto-register the `foundry` provider (and the legacy `azure` alias):
|
|
14
|
-
|
|
15
|
-
```typescript
|
|
16
|
-
import "@prompty/foundry";
|
|
17
|
-
import { run } from "@prompty/core";
|
|
18
|
-
|
|
19
|
-
const result = await run("./chat.prompty", {
|
|
20
|
-
question: "What is Azure AI Foundry?",
|
|
21
|
-
});
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## `.prompty` Configuration
|
|
25
|
-
|
|
26
|
-
### Azure AI Foundry
|
|
27
|
-
|
|
28
|
-
```prompty
|
|
29
|
-
---
|
|
30
|
-
name: foundry-prompt
|
|
31
|
-
model:
|
|
32
|
-
id: gpt-4o-mini
|
|
33
|
-
provider: foundry
|
|
34
|
-
apiType: chat
|
|
35
|
-
connection:
|
|
36
|
-
kind: key
|
|
37
|
-
endpoint: ${env:AZURE_OPENAI_ENDPOINT}
|
|
38
|
-
apiKey: ${env:AZURE_OPENAI_API_KEY}
|
|
39
|
-
options:
|
|
40
|
-
temperature: 0.7
|
|
41
|
-
---
|
|
42
|
-
system:
|
|
43
|
-
You are a helpful assistant.
|
|
44
|
-
|
|
45
|
-
user:
|
|
46
|
-
{{question}}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Azure OpenAI (Legacy)
|
|
50
|
-
|
|
51
|
-
The `azure` provider name is supported as a backward-compatible alias:
|
|
52
|
-
|
|
53
|
-
```prompty
|
|
54
|
-
model:
|
|
55
|
-
provider: azure
|
|
56
|
-
# ... same connection config
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Authentication
|
|
60
|
-
|
|
61
|
-
The Foundry provider supports:
|
|
62
|
-
|
|
63
|
-
- **API key** — via `connection.kind: key` with `apiKey`
|
|
64
|
-
- **Azure Identity** — falls back to `DefaultAzureCredential` when no API key is provided
|
|
65
|
-
|
|
66
|
-
## Supported API Types
|
|
67
|
-
|
|
68
|
-
| `apiType` | Description |
|
|
69
|
-
|-----------|-------------|
|
|
70
|
-
| `chat` (default) | Chat completions |
|
|
71
|
-
| `embedding` | Embeddings |
|
|
72
|
-
| `image` | Image generation |
|
|
73
|
-
| `responses` | Responses API |
|
|
74
|
-
|
|
75
|
-
## Exports
|
|
76
|
-
|
|
77
|
-
| Export | Description |
|
|
78
|
-
|--------|-------------|
|
|
79
|
-
| `FoundryExecutor` | Executor for Azure AI Foundry |
|
|
80
|
-
| `FoundryProcessor` | Processor for Foundry responses |
|
|
81
|
-
| `AzureExecutor` | Backward-compatible alias |
|
|
82
|
-
| `AzureProcessor` | Backward-compatible alias |
|
|
83
|
-
|
|
84
|
-
## License
|
|
85
|
-
|
|
86
|
-
MIT
|
|
1
|
+
# @prompty/foundry
|
|
2
|
+
|
|
3
|
+
Microsoft Foundry provider for Prompty — executor and processor for Azure AI Foundry (and Azure OpenAI).
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @prompty/core @prompty/foundry openai @azure/identity
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
Import `@prompty/foundry` to auto-register the `foundry` provider (and the legacy `azure` alias):
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import "@prompty/foundry";
|
|
17
|
+
import { run } from "@prompty/core";
|
|
18
|
+
|
|
19
|
+
const result = await run("./chat.prompty", {
|
|
20
|
+
question: "What is Azure AI Foundry?",
|
|
21
|
+
});
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## `.prompty` Configuration
|
|
25
|
+
|
|
26
|
+
### Azure AI Foundry
|
|
27
|
+
|
|
28
|
+
```prompty
|
|
29
|
+
---
|
|
30
|
+
name: foundry-prompt
|
|
31
|
+
model:
|
|
32
|
+
id: gpt-4o-mini
|
|
33
|
+
provider: foundry
|
|
34
|
+
apiType: chat
|
|
35
|
+
connection:
|
|
36
|
+
kind: key
|
|
37
|
+
endpoint: ${env:AZURE_OPENAI_ENDPOINT}
|
|
38
|
+
apiKey: ${env:AZURE_OPENAI_API_KEY}
|
|
39
|
+
options:
|
|
40
|
+
temperature: 0.7
|
|
41
|
+
---
|
|
42
|
+
system:
|
|
43
|
+
You are a helpful assistant.
|
|
44
|
+
|
|
45
|
+
user:
|
|
46
|
+
{{question}}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Azure OpenAI (Legacy)
|
|
50
|
+
|
|
51
|
+
The `azure` provider name is supported as a backward-compatible alias:
|
|
52
|
+
|
|
53
|
+
```prompty
|
|
54
|
+
model:
|
|
55
|
+
provider: azure
|
|
56
|
+
# ... same connection config
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Authentication
|
|
60
|
+
|
|
61
|
+
The Foundry provider supports:
|
|
62
|
+
|
|
63
|
+
- **API key** — via `connection.kind: key` with `apiKey`
|
|
64
|
+
- **Azure Identity** — falls back to `DefaultAzureCredential` when no API key is provided
|
|
65
|
+
|
|
66
|
+
## Supported API Types
|
|
67
|
+
|
|
68
|
+
| `apiType` | Description |
|
|
69
|
+
|-----------|-------------|
|
|
70
|
+
| `chat` (default) | Chat completions |
|
|
71
|
+
| `embedding` | Embeddings |
|
|
72
|
+
| `image` | Image generation |
|
|
73
|
+
| `responses` | Responses API |
|
|
74
|
+
|
|
75
|
+
## Exports
|
|
76
|
+
|
|
77
|
+
| Export | Description |
|
|
78
|
+
|--------|-------------|
|
|
79
|
+
| `FoundryExecutor` | Executor for Azure AI Foundry |
|
|
80
|
+
| `FoundryProcessor` | Processor for Foundry responses |
|
|
81
|
+
| `AzureExecutor` | Backward-compatible alias |
|
|
82
|
+
| `AzureProcessor` | Backward-compatible alias |
|
|
83
|
+
|
|
84
|
+
## License
|
|
85
|
+
|
|
86
|
+
MIT
|
package/dist/index.cjs
CHANGED
|
@@ -66,8 +66,7 @@ var FoundryExecutor = class extends import_openai.OpenAIExecutor {
|
|
|
66
66
|
}
|
|
67
67
|
async dispatchApiCall(client, clientName, agent, messages, apiType) {
|
|
68
68
|
switch (apiType) {
|
|
69
|
-
case "chat":
|
|
70
|
-
case "agent": {
|
|
69
|
+
case "chat": {
|
|
71
70
|
const args = (0, import_openai2.buildChatArgs)(agent, messages);
|
|
72
71
|
const isStreaming = !!args.stream;
|
|
73
72
|
return (0, import_core2.traceSpan)("create", async (callEmit) => {
|
|
@@ -132,7 +131,12 @@ var FoundryExecutor = class extends import_openai.OpenAIExecutor {
|
|
|
132
131
|
if (conn instanceof import_core.ReferenceConnection) {
|
|
133
132
|
return (0, import_core2.getConnection)(conn.name);
|
|
134
133
|
}
|
|
135
|
-
if (conn instanceof import_core.FoundryConnection
|
|
134
|
+
if (conn instanceof import_core.FoundryConnection) {
|
|
135
|
+
if (!conn.endpoint) {
|
|
136
|
+
throw new Error(
|
|
137
|
+
"FoundryConnection requires a non-empty 'endpoint'. Set model.connection.endpoint to your Azure OpenAI resource URL."
|
|
138
|
+
);
|
|
139
|
+
}
|
|
136
140
|
const { AzureOpenAI: AzureOpenAI2 } = require("openai");
|
|
137
141
|
const { DefaultAzureCredential, getBearerTokenProvider } = require("@azure/identity");
|
|
138
142
|
const credential = new DefaultAzureCredential();
|
|
@@ -146,8 +150,9 @@ var FoundryExecutor = class extends import_openai.OpenAIExecutor {
|
|
|
146
150
|
apiVersion: "2025-04-01-preview"
|
|
147
151
|
});
|
|
148
152
|
}
|
|
153
|
+
const kind = conn?.kind ?? "unknown";
|
|
149
154
|
throw new Error(
|
|
150
|
-
|
|
155
|
+
`Connection kind '${kind}' is not supported by the Foundry executor. Use 'foundry' (with endpoint + DefaultAzureCredential) or 'reference' (with registerConnection()) for pre-configured clients.`
|
|
151
156
|
);
|
|
152
157
|
}
|
|
153
158
|
};
|
|
@@ -198,8 +203,7 @@ var AzureExecutor = class extends import_openai5.OpenAIExecutor {
|
|
|
198
203
|
}
|
|
199
204
|
async dispatchApiCall(client, clientName, agent, messages, apiType) {
|
|
200
205
|
switch (apiType) {
|
|
201
|
-
case "chat":
|
|
202
|
-
case "agent": {
|
|
206
|
+
case "chat": {
|
|
203
207
|
const args = (0, import_openai6.buildChatArgs)(agent, messages);
|
|
204
208
|
const isStreaming = !!args.stream;
|
|
205
209
|
return (0, import_core5.traceSpan)("create", async (callEmit) => {
|
|
@@ -273,6 +277,10 @@ var AzureExecutor = class extends import_openai5.OpenAIExecutor {
|
|
|
273
277
|
if (conn instanceof import_core4.ApiKeyConnection) {
|
|
274
278
|
if (conn.apiKey) kwargs.apiKey = conn.apiKey;
|
|
275
279
|
if (conn.endpoint) kwargs.endpoint = conn.endpoint;
|
|
280
|
+
} else if (conn) {
|
|
281
|
+
throw new Error(
|
|
282
|
+
`Connection kind '${conn.kind}' is not supported by the Azure executor. Use 'key' for API key auth or 'reference' with registerConnection() for pre-configured clients.`
|
|
283
|
+
);
|
|
276
284
|
}
|
|
277
285
|
kwargs.deployment = agent.model?.id;
|
|
278
286
|
return kwargs;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/executor.ts","../src/processor.ts","../src/azure-executor.ts","../src/azure-processor.ts"],"sourcesContent":["/**\r\n * @prompty/foundry — Microsoft Foundry and Azure OpenAI provider for Prompty.\r\n *\r\n * Importing this package auto-registers:\r\n * - \"foundry\" executor and processor (primary)\r\n * - \"azure\" executor and processor (deprecated alias for backward compatibility)\r\n *\r\n * @module @prompty/foundry\r\n */\r\n\r\nexport { FoundryExecutor } from \"./executor.js\";\r\nexport { FoundryProcessor } from \"./processor.js\";\r\nexport { AzureExecutor } from \"./azure-executor.js\";\r\nexport { AzureProcessor } from \"./azure-processor.js\";\r\n\r\n// Auto-register on import\r\nimport { registerExecutor, registerProcessor } from \"@prompty/core\";\r\nimport { FoundryExecutor } from \"./executor.js\";\r\nimport { FoundryProcessor } from \"./processor.js\";\r\nimport { AzureExecutor } from \"./azure-executor.js\";\r\nimport { AzureProcessor } from \"./azure-processor.js\";\r\n\r\n// Primary registration\r\nregisterExecutor(\"foundry\", new FoundryExecutor());\r\nregisterProcessor(\"foundry\", new FoundryProcessor());\r\n\r\n// Deprecated backward-compat alias\r\nregisterExecutor(\"azure\", new AzureExecutor());\r\nregisterProcessor(\"azure\", new AzureProcessor());\r\n","/**\r\n * Foundry executor — extends OpenAI executor with Azure AI Foundry client resolution.\r\n *\r\n * For Chat Completions: builds an AzureOpenAI client from the Foundry resource\r\n * endpoint (derived from the project endpoint) with DefaultAzureCredential.\r\n *\r\n * The Foundry project endpoint is:\r\n * https://<resource>.services.ai.azure.com/api/projects/<project>\r\n * The AzureOpenAI endpoint (for Chat Completions) is:\r\n * https://<resource>.services.ai.azure.com\r\n *\r\n * @module\r\n */\r\n\r\nimport type OpenAI from \"openai\";\r\nimport type { Prompty, Message } from \"@prompty/core\";\r\nimport { FoundryConnection, ReferenceConnection, PromptyStream } from \"@prompty/core\";\r\nimport { getConnection, traceSpan, sanitizeValue } from \"@prompty/core\";\r\nimport { OpenAIExecutor } from \"@prompty/openai\";\r\nimport { buildChatArgs, buildEmbeddingArgs, buildImageArgs, buildResponsesArgs } from \"@prompty/openai\";\r\n\r\n/**\r\n * Extract the resource base endpoint from a Foundry project endpoint.\r\n * e.g. \"https://foo.services.ai.azure.com/api/projects/bar\" → \"https://foo.services.ai.azure.com\"\r\n */\r\nfunction getResourceEndpoint(projectEndpoint: string): string {\r\n const url = new URL(projectEndpoint);\r\n return `${url.protocol}//${url.host}`;\r\n}\r\n\r\nexport class FoundryExecutor extends OpenAIExecutor {\r\n override async execute(agent: Prompty, messages: Message[]): Promise<unknown> {\r\n return traceSpan(\"FoundryExecutor\", async (emit) => {\r\n emit(\"signature\", \"prompty.foundry.executor.FoundryExecutor.invoke\");\r\n emit(\"inputs\", { data: messages });\r\n\r\n const client = this.resolveClient(agent);\r\n const clientName = client.constructor?.name ?? \"OpenAI\";\r\n\r\n // Trace what client we resolved and how\r\n await traceSpan(clientName, async (ctorEmit) => {\r\n ctorEmit(\"signature\", `${clientName}.ctor`);\r\n const conn = agent.model?.connection;\r\n if (conn instanceof ReferenceConnection) {\r\n ctorEmit(\"inputs\", { source: \"reference\", name: conn.name });\r\n } else if (conn instanceof FoundryConnection) {\r\n ctorEmit(\"inputs\", sanitizeValue(\"ctor\", {\r\n endpoint: conn.endpoint ? getResourceEndpoint(conn.endpoint) : undefined,\r\n deployment: agent.model?.id,\r\n apiVersion: \"2025-04-01-preview\",\r\n auth: \"DefaultAzureCredential\",\r\n }));\r\n }\r\n ctorEmit(\"result\", clientName);\r\n });\r\n\r\n const apiType = agent.model?.apiType ?? \"chat\";\r\n const result = await this.dispatchApiCall(client, clientName, agent, messages, apiType);\r\n emit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n\r\n private async dispatchApiCall(\r\n client: OpenAI,\r\n clientName: string,\r\n agent: Prompty,\r\n messages: Message[],\r\n apiType: string,\r\n ): Promise<unknown> {\r\n switch (apiType) {\r\n case \"chat\":\r\n case \"agent\": {\r\n const args = buildChatArgs(agent, messages);\r\n const isStreaming = !!args.stream;\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.chat.completions.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.chat.completions.create(\r\n args as unknown as Parameters<typeof client.chat.completions.create>[0],\r\n );\r\n if (isStreaming) {\r\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\r\n }\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"embedding\": {\r\n const args = buildEmbeddingArgs(agent, messages);\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.embeddings.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.embeddings.create(\r\n args as unknown as Parameters<typeof client.embeddings.create>[0],\r\n );\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"image\": {\r\n const args = buildImageArgs(agent, messages);\r\n return traceSpan(\"generate\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.images.generate`);\r\n callEmit(\"inputs\", sanitizeValue(\"generate\", args));\r\n const result = await client.images.generate(\r\n args as unknown as Parameters<typeof client.images.generate>[0],\r\n );\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"responses\": {\r\n const args = buildResponsesArgs(agent, messages);\r\n const isStreaming = !!args.stream;\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.responses.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.responses.create(\r\n args as unknown as Parameters<typeof client.responses.create>[0],\r\n );\r\n if (isStreaming) {\r\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\r\n }\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n default:\r\n throw new Error(`Unsupported apiType: ${apiType}`);\r\n }\r\n }\r\n\r\n protected override resolveClient(agent: Prompty): OpenAI {\r\n const conn = agent.model?.connection;\r\n\r\n // Pre-registered client by name\r\n if (conn instanceof ReferenceConnection) {\r\n return getConnection(conn.name) as OpenAI;\r\n }\r\n\r\n // Build an AzureOpenAI client from the FoundryConnection endpoint\r\n if (conn instanceof FoundryConnection && conn.endpoint) {\r\n const { AzureOpenAI } = require(\"openai\");\r\n const { DefaultAzureCredential, getBearerTokenProvider } = require(\"@azure/identity\");\r\n\r\n const credential = new DefaultAzureCredential();\r\n const scope = \"https://cognitiveservices.azure.com/.default\";\r\n const azureADTokenProvider = getBearerTokenProvider(credential, scope);\r\n const resourceEndpoint = getResourceEndpoint(conn.endpoint);\r\n\r\n return new AzureOpenAI({\r\n endpoint: resourceEndpoint,\r\n azureADTokenProvider,\r\n deployment: agent.model?.id,\r\n apiVersion: \"2025-04-01-preview\",\r\n }) as OpenAI;\r\n }\r\n\r\n throw new Error(\r\n \"Foundry executor requires a FoundryConnection (with endpoint) \" +\r\n \"or a ReferenceConnection (with a pre-registered client). \" +\r\n \"Set model.connection.kind to 'foundry' with an endpoint, \" +\r\n \"or register a client with registerConnection().\",\r\n );\r\n }\r\n}\r\n","/**\r\n * Foundry processor — identical to OpenAI processor.\r\n *\r\n * Foundry returns OpenAI-compatible responses via getOpenAIClient().\r\n *\r\n * @module\r\n */\r\n\r\nimport type { Prompty } from \"@prompty/core\";\r\nimport type { Processor } from \"@prompty/core\";\r\nimport { processResponse } from \"@prompty/openai\";\r\nimport { traceSpan } from \"@prompty/core\";\r\n\r\nexport class FoundryProcessor implements Processor {\r\n async process(agent: Prompty, response: unknown): Promise<unknown> {\r\n return traceSpan(\"FoundryProcessor\", async (emit) => {\r\n emit(\"signature\", \"prompty.foundry.processor.FoundryProcessor.invoke\");\r\n emit(\"inputs\", { data: response });\r\n const result = processResponse(agent, response);\r\n emit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n}\r\n","/**\r\n * Azure OpenAI executor — extends OpenAI executor with Azure-specific client.\r\n *\r\n * @module\r\n */\r\n\r\nimport OpenAI, { AzureOpenAI } from \"openai\";\r\nimport type { Prompty, Message } from \"@prompty/core\";\r\nimport { ApiKeyConnection, ReferenceConnection, PromptyStream } from \"@prompty/core\";\r\nimport { getConnection, traceSpan, sanitizeValue } from \"@prompty/core\";\r\nimport { OpenAIExecutor } from \"@prompty/openai\";\r\nimport { buildChatArgs, buildEmbeddingArgs, buildImageArgs, buildResponsesArgs } from \"@prompty/openai\";\r\n\r\nexport class AzureExecutor extends OpenAIExecutor {\r\n override async execute(agent: Prompty, messages: Message[]): Promise<unknown> {\r\n return traceSpan(\"AzureExecutor\", async (emit) => {\r\n emit(\"signature\", \"prompty.azure.executor.AzureExecutor.invoke\");\r\n emit(\"inputs\", { data: messages });\r\n\r\n const client = this.resolveClient(agent);\r\n const clientName = client.constructor?.name ?? \"AzureOpenAI\";\r\n\r\n // Trace what client we resolved and how\r\n await traceSpan(clientName, async (ctorEmit) => {\r\n ctorEmit(\"signature\", `${clientName}.ctor`);\r\n const conn = agent.model?.connection;\r\n if (conn instanceof ReferenceConnection) {\r\n ctorEmit(\"inputs\", { source: \"reference\", name: conn.name });\r\n } else {\r\n ctorEmit(\"inputs\", sanitizeValue(\"ctor\", this.clientKwargs(agent)));\r\n }\r\n ctorEmit(\"result\", clientName);\r\n });\r\n\r\n const apiType = agent.model?.apiType ?? \"chat\";\r\n const result = await this.dispatchApiCall(client, clientName, agent, messages, apiType);\r\n emit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n\r\n private async dispatchApiCall(\r\n client: OpenAI,\r\n clientName: string,\r\n agent: Prompty,\r\n messages: Message[],\r\n apiType: string,\r\n ): Promise<unknown> {\r\n switch (apiType) {\r\n case \"chat\":\r\n case \"agent\": {\r\n const args = buildChatArgs(agent, messages);\r\n const isStreaming = !!args.stream;\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.chat.completions.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.chat.completions.create(\r\n args as unknown as Parameters<typeof client.chat.completions.create>[0],\r\n );\r\n if (isStreaming) {\r\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\r\n }\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"embedding\": {\r\n const args = buildEmbeddingArgs(agent, messages);\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.embeddings.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.embeddings.create(\r\n args as unknown as Parameters<typeof client.embeddings.create>[0],\r\n );\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"image\": {\r\n const args = buildImageArgs(agent, messages);\r\n return traceSpan(\"generate\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.images.generate`);\r\n callEmit(\"inputs\", sanitizeValue(\"generate\", args));\r\n const result = await client.images.generate(\r\n args as unknown as Parameters<typeof client.images.generate>[0],\r\n );\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"responses\": {\r\n const args = buildResponsesArgs(agent, messages);\r\n const isStreaming = !!args.stream;\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.responses.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.responses.create(\r\n args as unknown as Parameters<typeof client.responses.create>[0],\r\n );\r\n if (isStreaming) {\r\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\r\n }\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n default:\r\n throw new Error(`Unsupported apiType: ${apiType}`);\r\n }\r\n }\r\n\r\n protected override resolveClient(agent: Prompty): OpenAI {\r\n const conn = agent.model?.connection;\r\n\r\n if (conn instanceof ReferenceConnection) {\r\n return getConnection(conn.name) as OpenAI;\r\n }\r\n\r\n const kwargs = this.clientKwargs(agent);\r\n return new AzureOpenAI(kwargs as ConstructorParameters<typeof AzureOpenAI>[0]);\r\n }\r\n\r\n protected override clientKwargs(agent: Prompty): Record<string, unknown> {\r\n const kwargs: Record<string, unknown> = {};\r\n const conn = agent.model?.connection;\r\n\r\n if (conn instanceof ApiKeyConnection) {\r\n if (conn.apiKey) kwargs.apiKey = conn.apiKey;\r\n if (conn.endpoint) kwargs.endpoint = conn.endpoint;\r\n }\r\n\r\n // Azure requires deployment = model id\r\n kwargs.deployment = agent.model?.id;\r\n\r\n return kwargs;\r\n }\r\n}\r\n","/**\r\n * Azure OpenAI processor — identical to OpenAI processor.\r\n *\r\n * Azure uses the same response format as OpenAI.\r\n *\r\n * @module\r\n */\r\n\r\nimport type { Prompty } from \"@prompty/core\";\r\nimport type { Processor } from \"@prompty/core\";\r\nimport { processResponse } from \"@prompty/openai\";\r\nimport { traceSpan } from \"@prompty/core\";\r\n\r\nexport class AzureProcessor implements Processor {\r\n async process(agent: Prompty, response: unknown): Promise<unknown> {\r\n return traceSpan(\"AzureProcessor\", async (emit) => {\r\n emit(\"signature\", \"prompty.azure.processor.AzureProcessor.invoke\");\r\n emit(\"inputs\", { data: response });\r\n const result = processResponse(agent, response);\r\n emit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n}\r\n"],"mappings":"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","names":["import_core","import_openai","AzureOpenAI","import_openai","import_core","import_openai","import_core","import_openai","import_core","import_core"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/executor.ts","../src/processor.ts","../src/azure-executor.ts","../src/azure-processor.ts"],"sourcesContent":["/**\n * @prompty/foundry — Microsoft Foundry and Azure OpenAI provider for Prompty.\n *\n * Importing this package auto-registers:\n * - \"foundry\" executor and processor (primary)\n * - \"azure\" executor and processor (deprecated alias for backward compatibility)\n *\n * @module @prompty/foundry\n */\n\nexport { FoundryExecutor } from \"./executor.js\";\nexport { FoundryProcessor } from \"./processor.js\";\nexport { AzureExecutor } from \"./azure-executor.js\";\nexport { AzureProcessor } from \"./azure-processor.js\";\n\n// Auto-register on import\nimport { registerExecutor, registerProcessor } from \"@prompty/core\";\nimport { FoundryExecutor } from \"./executor.js\";\nimport { FoundryProcessor } from \"./processor.js\";\nimport { AzureExecutor } from \"./azure-executor.js\";\nimport { AzureProcessor } from \"./azure-processor.js\";\n\n// Primary registration\nregisterExecutor(\"foundry\", new FoundryExecutor());\nregisterProcessor(\"foundry\", new FoundryProcessor());\n\n// Deprecated backward-compat alias\nregisterExecutor(\"azure\", new AzureExecutor());\nregisterProcessor(\"azure\", new AzureProcessor());\n","/**\n * Foundry executor — extends OpenAI executor with Azure AI Foundry client resolution.\n *\n * For Chat Completions: builds an AzureOpenAI client from the Foundry resource\n * endpoint (derived from the project endpoint) with DefaultAzureCredential.\n *\n * The Foundry project endpoint is:\n * https://<resource>.services.ai.azure.com/api/projects/<project>\n * The AzureOpenAI endpoint (for Chat Completions) is:\n * https://<resource>.services.ai.azure.com\n *\n * @module\n */\n\nimport type OpenAI from \"openai\";\nimport type { Prompty, Message } from \"@prompty/core\";\nimport { FoundryConnection, ReferenceConnection, PromptyStream } from \"@prompty/core\";\nimport { getConnection, traceSpan, sanitizeValue } from \"@prompty/core\";\nimport { OpenAIExecutor } from \"@prompty/openai\";\nimport { buildChatArgs, buildEmbeddingArgs, buildImageArgs, buildResponsesArgs } from \"@prompty/openai\";\n\n/**\n * Extract the resource base endpoint from a Foundry project endpoint.\n * e.g. \"https://foo.services.ai.azure.com/api/projects/bar\" → \"https://foo.services.ai.azure.com\"\n */\nfunction getResourceEndpoint(projectEndpoint: string): string {\n const url = new URL(projectEndpoint);\n return `${url.protocol}//${url.host}`;\n}\n\nexport class FoundryExecutor extends OpenAIExecutor {\n override async execute(agent: Prompty, messages: Message[]): Promise<unknown> {\n return traceSpan(\"FoundryExecutor\", async (emit) => {\n emit(\"signature\", \"prompty.foundry.executor.FoundryExecutor.invoke\");\n emit(\"inputs\", { data: messages });\n\n const client = this.resolveClient(agent);\n const clientName = client.constructor?.name ?? \"OpenAI\";\n\n // Trace what client we resolved and how\n await traceSpan(clientName, async (ctorEmit) => {\n ctorEmit(\"signature\", `${clientName}.ctor`);\n const conn = agent.model?.connection;\n if (conn instanceof ReferenceConnection) {\n ctorEmit(\"inputs\", { source: \"reference\", name: conn.name });\n } else if (conn instanceof FoundryConnection) {\n ctorEmit(\"inputs\", sanitizeValue(\"ctor\", {\n endpoint: conn.endpoint ? getResourceEndpoint(conn.endpoint) : undefined,\n deployment: agent.model?.id,\n apiVersion: \"2025-04-01-preview\",\n auth: \"DefaultAzureCredential\",\n }));\n }\n ctorEmit(\"result\", clientName);\n });\n\n const apiType = agent.model?.apiType ?? \"chat\";\n const result = await this.dispatchApiCall(client, clientName, agent, messages, apiType);\n emit(\"result\", result);\n return result;\n });\n }\n\n private async dispatchApiCall(\n client: OpenAI,\n clientName: string,\n agent: Prompty,\n messages: Message[],\n apiType: string,\n ): Promise<unknown> {\n switch (apiType) {\n case \"chat\": {\n const args = buildChatArgs(agent, messages);\n const isStreaming = !!args.stream;\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.chat.completions.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.chat.completions.create(\n args as unknown as Parameters<typeof client.chat.completions.create>[0],\n );\n if (isStreaming) {\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\n }\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"embedding\": {\n const args = buildEmbeddingArgs(agent, messages);\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.embeddings.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.embeddings.create(\n args as unknown as Parameters<typeof client.embeddings.create>[0],\n );\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"image\": {\n const args = buildImageArgs(agent, messages);\n return traceSpan(\"generate\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.images.generate`);\n callEmit(\"inputs\", sanitizeValue(\"generate\", args));\n const result = await client.images.generate(\n args as unknown as Parameters<typeof client.images.generate>[0],\n );\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"responses\": {\n const args = buildResponsesArgs(agent, messages);\n const isStreaming = !!args.stream;\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.responses.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.responses.create(\n args as unknown as Parameters<typeof client.responses.create>[0],\n );\n if (isStreaming) {\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\n }\n callEmit(\"result\", result);\n return result;\n });\n }\n default:\n throw new Error(`Unsupported apiType: ${apiType}`);\n }\n }\n\n protected override resolveClient(agent: Prompty): OpenAI {\n const conn = agent.model?.connection;\n\n // Pre-registered client by name\n if (conn instanceof ReferenceConnection) {\n return getConnection(conn.name) as OpenAI;\n }\n\n // Build an AzureOpenAI client from the FoundryConnection endpoint\n if (conn instanceof FoundryConnection) {\n if (!conn.endpoint) {\n throw new Error(\n \"FoundryConnection requires a non-empty 'endpoint'. \" +\n \"Set model.connection.endpoint to your Azure OpenAI resource URL.\",\n );\n }\n const { AzureOpenAI } = require(\"openai\");\n const { DefaultAzureCredential, getBearerTokenProvider } = require(\"@azure/identity\");\n\n const credential = new DefaultAzureCredential();\n const scope = \"https://cognitiveservices.azure.com/.default\";\n const azureADTokenProvider = getBearerTokenProvider(credential, scope);\n const resourceEndpoint = getResourceEndpoint(conn.endpoint);\n\n return new AzureOpenAI({\n endpoint: resourceEndpoint,\n azureADTokenProvider,\n deployment: agent.model?.id,\n apiVersion: \"2025-04-01-preview\",\n }) as OpenAI;\n }\n\n const kind = conn?.kind ?? \"unknown\";\n throw new Error(\n `Connection kind '${kind}' is not supported by the Foundry executor. ` +\n \"Use 'foundry' (with endpoint + DefaultAzureCredential) or \" +\n \"'reference' (with registerConnection()) for pre-configured clients.\",\n );\n }\n}\n","/**\n * Foundry processor — identical to OpenAI processor.\n *\n * Foundry returns OpenAI-compatible responses via getOpenAIClient().\n *\n * @module\n */\n\nimport type { Prompty } from \"@prompty/core\";\nimport type { Processor } from \"@prompty/core\";\nimport { processResponse } from \"@prompty/openai\";\nimport { traceSpan } from \"@prompty/core\";\n\nexport class FoundryProcessor implements Processor {\n async process(agent: Prompty, response: unknown): Promise<unknown> {\n return traceSpan(\"FoundryProcessor\", async (emit) => {\n emit(\"signature\", \"prompty.foundry.processor.FoundryProcessor.invoke\");\n emit(\"inputs\", { data: response });\n const result = processResponse(agent, response);\n emit(\"result\", result);\n return result;\n });\n }\n}\n","/**\n * Azure OpenAI executor — extends OpenAI executor with Azure-specific client.\n *\n * @module\n */\n\nimport OpenAI, { AzureOpenAI } from \"openai\";\nimport type { Prompty, Message } from \"@prompty/core\";\nimport { ApiKeyConnection, ReferenceConnection, PromptyStream } from \"@prompty/core\";\nimport { getConnection, traceSpan, sanitizeValue } from \"@prompty/core\";\nimport { OpenAIExecutor } from \"@prompty/openai\";\nimport { buildChatArgs, buildEmbeddingArgs, buildImageArgs, buildResponsesArgs } from \"@prompty/openai\";\n\nexport class AzureExecutor extends OpenAIExecutor {\n override async execute(agent: Prompty, messages: Message[]): Promise<unknown> {\n return traceSpan(\"AzureExecutor\", async (emit) => {\n emit(\"signature\", \"prompty.azure.executor.AzureExecutor.invoke\");\n emit(\"inputs\", { data: messages });\n\n const client = this.resolveClient(agent);\n const clientName = client.constructor?.name ?? \"AzureOpenAI\";\n\n // Trace what client we resolved and how\n await traceSpan(clientName, async (ctorEmit) => {\n ctorEmit(\"signature\", `${clientName}.ctor`);\n const conn = agent.model?.connection;\n if (conn instanceof ReferenceConnection) {\n ctorEmit(\"inputs\", { source: \"reference\", name: conn.name });\n } else {\n ctorEmit(\"inputs\", sanitizeValue(\"ctor\", this.clientKwargs(agent)));\n }\n ctorEmit(\"result\", clientName);\n });\n\n const apiType = agent.model?.apiType ?? \"chat\";\n const result = await this.dispatchApiCall(client, clientName, agent, messages, apiType);\n emit(\"result\", result);\n return result;\n });\n }\n\n private async dispatchApiCall(\n client: OpenAI,\n clientName: string,\n agent: Prompty,\n messages: Message[],\n apiType: string,\n ): Promise<unknown> {\n switch (apiType) {\n case \"chat\": {\n const args = buildChatArgs(agent, messages);\n const isStreaming = !!args.stream;\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.chat.completions.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.chat.completions.create(\n args as unknown as Parameters<typeof client.chat.completions.create>[0],\n );\n if (isStreaming) {\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\n }\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"embedding\": {\n const args = buildEmbeddingArgs(agent, messages);\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.embeddings.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.embeddings.create(\n args as unknown as Parameters<typeof client.embeddings.create>[0],\n );\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"image\": {\n const args = buildImageArgs(agent, messages);\n return traceSpan(\"generate\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.images.generate`);\n callEmit(\"inputs\", sanitizeValue(\"generate\", args));\n const result = await client.images.generate(\n args as unknown as Parameters<typeof client.images.generate>[0],\n );\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"responses\": {\n const args = buildResponsesArgs(agent, messages);\n const isStreaming = !!args.stream;\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.responses.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.responses.create(\n args as unknown as Parameters<typeof client.responses.create>[0],\n );\n if (isStreaming) {\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\n }\n callEmit(\"result\", result);\n return result;\n });\n }\n default:\n throw new Error(`Unsupported apiType: ${apiType}`);\n }\n }\n\n protected override resolveClient(agent: Prompty): OpenAI {\n const conn = agent.model?.connection;\n\n if (conn instanceof ReferenceConnection) {\n return getConnection(conn.name) as OpenAI;\n }\n\n const kwargs = this.clientKwargs(agent);\n return new AzureOpenAI(kwargs as ConstructorParameters<typeof AzureOpenAI>[0]);\n }\n\n protected override clientKwargs(agent: Prompty): Record<string, unknown> {\n const kwargs: Record<string, unknown> = {};\n const conn = agent.model?.connection;\n\n if (conn instanceof ApiKeyConnection) {\n if (conn.apiKey) kwargs.apiKey = conn.apiKey;\n if (conn.endpoint) kwargs.endpoint = conn.endpoint;\n } else if (conn) {\n throw new Error(\n `Connection kind '${conn.kind}' is not supported by the Azure executor. ` +\n `Use 'key' for API key auth or 'reference' with registerConnection() for pre-configured clients.`,\n );\n }\n\n // Azure requires deployment = model id\n kwargs.deployment = agent.model?.id;\n\n return kwargs;\n }\n}\n","/**\n * Azure OpenAI processor — identical to OpenAI processor.\n *\n * Azure uses the same response format as OpenAI.\n *\n * @module\n */\n\nimport type { Prompty } from \"@prompty/core\";\nimport type { Processor } from \"@prompty/core\";\nimport { processResponse } from \"@prompty/openai\";\nimport { traceSpan } from \"@prompty/core\";\n\nexport class AzureProcessor implements Processor {\n async process(agent: Prompty, response: unknown): Promise<unknown> {\n return traceSpan(\"AzureProcessor\", async (emit) => {\n emit(\"signature\", \"prompty.azure.processor.AzureProcessor.invoke\");\n emit(\"inputs\", { data: response });\n const result = processResponse(agent, response);\n emit(\"result\", result);\n return result;\n });\n }\n}\n"],"mappings":"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","names":["import_core","import_openai","AzureOpenAI","import_openai","import_core","import_openai","import_core","import_openai","import_core","import_core"]}
|
package/dist/index.js
CHANGED
|
@@ -44,8 +44,7 @@ var FoundryExecutor = class extends OpenAIExecutor {
|
|
|
44
44
|
}
|
|
45
45
|
async dispatchApiCall(client, clientName, agent, messages, apiType) {
|
|
46
46
|
switch (apiType) {
|
|
47
|
-
case "chat":
|
|
48
|
-
case "agent": {
|
|
47
|
+
case "chat": {
|
|
49
48
|
const args = buildChatArgs(agent, messages);
|
|
50
49
|
const isStreaming = !!args.stream;
|
|
51
50
|
return traceSpan("create", async (callEmit) => {
|
|
@@ -110,7 +109,12 @@ var FoundryExecutor = class extends OpenAIExecutor {
|
|
|
110
109
|
if (conn instanceof ReferenceConnection) {
|
|
111
110
|
return getConnection(conn.name);
|
|
112
111
|
}
|
|
113
|
-
if (conn instanceof FoundryConnection
|
|
112
|
+
if (conn instanceof FoundryConnection) {
|
|
113
|
+
if (!conn.endpoint) {
|
|
114
|
+
throw new Error(
|
|
115
|
+
"FoundryConnection requires a non-empty 'endpoint'. Set model.connection.endpoint to your Azure OpenAI resource URL."
|
|
116
|
+
);
|
|
117
|
+
}
|
|
114
118
|
const { AzureOpenAI: AzureOpenAI2 } = __require("openai");
|
|
115
119
|
const { DefaultAzureCredential, getBearerTokenProvider } = __require("@azure/identity");
|
|
116
120
|
const credential = new DefaultAzureCredential();
|
|
@@ -124,8 +128,9 @@ var FoundryExecutor = class extends OpenAIExecutor {
|
|
|
124
128
|
apiVersion: "2025-04-01-preview"
|
|
125
129
|
});
|
|
126
130
|
}
|
|
131
|
+
const kind = conn?.kind ?? "unknown";
|
|
127
132
|
throw new Error(
|
|
128
|
-
|
|
133
|
+
`Connection kind '${kind}' is not supported by the Foundry executor. Use 'foundry' (with endpoint + DefaultAzureCredential) or 'reference' (with registerConnection()) for pre-configured clients.`
|
|
129
134
|
);
|
|
130
135
|
}
|
|
131
136
|
};
|
|
@@ -176,8 +181,7 @@ var AzureExecutor = class extends OpenAIExecutor2 {
|
|
|
176
181
|
}
|
|
177
182
|
async dispatchApiCall(client, clientName, agent, messages, apiType) {
|
|
178
183
|
switch (apiType) {
|
|
179
|
-
case "chat":
|
|
180
|
-
case "agent": {
|
|
184
|
+
case "chat": {
|
|
181
185
|
const args = buildChatArgs2(agent, messages);
|
|
182
186
|
const isStreaming = !!args.stream;
|
|
183
187
|
return traceSpan3("create", async (callEmit) => {
|
|
@@ -251,6 +255,10 @@ var AzureExecutor = class extends OpenAIExecutor2 {
|
|
|
251
255
|
if (conn instanceof ApiKeyConnection) {
|
|
252
256
|
if (conn.apiKey) kwargs.apiKey = conn.apiKey;
|
|
253
257
|
if (conn.endpoint) kwargs.endpoint = conn.endpoint;
|
|
258
|
+
} else if (conn) {
|
|
259
|
+
throw new Error(
|
|
260
|
+
`Connection kind '${conn.kind}' is not supported by the Azure executor. Use 'key' for API key auth or 'reference' with registerConnection() for pre-configured clients.`
|
|
261
|
+
);
|
|
254
262
|
}
|
|
255
263
|
kwargs.deployment = agent.model?.id;
|
|
256
264
|
return kwargs;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/executor.ts","../src/processor.ts","../src/azure-executor.ts","../src/azure-processor.ts","../src/index.ts"],"sourcesContent":["/**\r\n * Foundry executor — extends OpenAI executor with Azure AI Foundry client resolution.\r\n *\r\n * For Chat Completions: builds an AzureOpenAI client from the Foundry resource\r\n * endpoint (derived from the project endpoint) with DefaultAzureCredential.\r\n *\r\n * The Foundry project endpoint is:\r\n * https://<resource>.services.ai.azure.com/api/projects/<project>\r\n * The AzureOpenAI endpoint (for Chat Completions) is:\r\n * https://<resource>.services.ai.azure.com\r\n *\r\n * @module\r\n */\r\n\r\nimport type OpenAI from \"openai\";\r\nimport type { Prompty, Message } from \"@prompty/core\";\r\nimport { FoundryConnection, ReferenceConnection, PromptyStream } from \"@prompty/core\";\r\nimport { getConnection, traceSpan, sanitizeValue } from \"@prompty/core\";\r\nimport { OpenAIExecutor } from \"@prompty/openai\";\r\nimport { buildChatArgs, buildEmbeddingArgs, buildImageArgs, buildResponsesArgs } from \"@prompty/openai\";\r\n\r\n/**\r\n * Extract the resource base endpoint from a Foundry project endpoint.\r\n * e.g. \"https://foo.services.ai.azure.com/api/projects/bar\" → \"https://foo.services.ai.azure.com\"\r\n */\r\nfunction getResourceEndpoint(projectEndpoint: string): string {\r\n const url = new URL(projectEndpoint);\r\n return `${url.protocol}//${url.host}`;\r\n}\r\n\r\nexport class FoundryExecutor extends OpenAIExecutor {\r\n override async execute(agent: Prompty, messages: Message[]): Promise<unknown> {\r\n return traceSpan(\"FoundryExecutor\", async (emit) => {\r\n emit(\"signature\", \"prompty.foundry.executor.FoundryExecutor.invoke\");\r\n emit(\"inputs\", { data: messages });\r\n\r\n const client = this.resolveClient(agent);\r\n const clientName = client.constructor?.name ?? \"OpenAI\";\r\n\r\n // Trace what client we resolved and how\r\n await traceSpan(clientName, async (ctorEmit) => {\r\n ctorEmit(\"signature\", `${clientName}.ctor`);\r\n const conn = agent.model?.connection;\r\n if (conn instanceof ReferenceConnection) {\r\n ctorEmit(\"inputs\", { source: \"reference\", name: conn.name });\r\n } else if (conn instanceof FoundryConnection) {\r\n ctorEmit(\"inputs\", sanitizeValue(\"ctor\", {\r\n endpoint: conn.endpoint ? getResourceEndpoint(conn.endpoint) : undefined,\r\n deployment: agent.model?.id,\r\n apiVersion: \"2025-04-01-preview\",\r\n auth: \"DefaultAzureCredential\",\r\n }));\r\n }\r\n ctorEmit(\"result\", clientName);\r\n });\r\n\r\n const apiType = agent.model?.apiType ?? \"chat\";\r\n const result = await this.dispatchApiCall(client, clientName, agent, messages, apiType);\r\n emit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n\r\n private async dispatchApiCall(\r\n client: OpenAI,\r\n clientName: string,\r\n agent: Prompty,\r\n messages: Message[],\r\n apiType: string,\r\n ): Promise<unknown> {\r\n switch (apiType) {\r\n case \"chat\":\r\n case \"agent\": {\r\n const args = buildChatArgs(agent, messages);\r\n const isStreaming = !!args.stream;\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.chat.completions.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.chat.completions.create(\r\n args as unknown as Parameters<typeof client.chat.completions.create>[0],\r\n );\r\n if (isStreaming) {\r\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\r\n }\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"embedding\": {\r\n const args = buildEmbeddingArgs(agent, messages);\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.embeddings.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.embeddings.create(\r\n args as unknown as Parameters<typeof client.embeddings.create>[0],\r\n );\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"image\": {\r\n const args = buildImageArgs(agent, messages);\r\n return traceSpan(\"generate\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.images.generate`);\r\n callEmit(\"inputs\", sanitizeValue(\"generate\", args));\r\n const result = await client.images.generate(\r\n args as unknown as Parameters<typeof client.images.generate>[0],\r\n );\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"responses\": {\r\n const args = buildResponsesArgs(agent, messages);\r\n const isStreaming = !!args.stream;\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.responses.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.responses.create(\r\n args as unknown as Parameters<typeof client.responses.create>[0],\r\n );\r\n if (isStreaming) {\r\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\r\n }\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n default:\r\n throw new Error(`Unsupported apiType: ${apiType}`);\r\n }\r\n }\r\n\r\n protected override resolveClient(agent: Prompty): OpenAI {\r\n const conn = agent.model?.connection;\r\n\r\n // Pre-registered client by name\r\n if (conn instanceof ReferenceConnection) {\r\n return getConnection(conn.name) as OpenAI;\r\n }\r\n\r\n // Build an AzureOpenAI client from the FoundryConnection endpoint\r\n if (conn instanceof FoundryConnection && conn.endpoint) {\r\n const { AzureOpenAI } = require(\"openai\");\r\n const { DefaultAzureCredential, getBearerTokenProvider } = require(\"@azure/identity\");\r\n\r\n const credential = new DefaultAzureCredential();\r\n const scope = \"https://cognitiveservices.azure.com/.default\";\r\n const azureADTokenProvider = getBearerTokenProvider(credential, scope);\r\n const resourceEndpoint = getResourceEndpoint(conn.endpoint);\r\n\r\n return new AzureOpenAI({\r\n endpoint: resourceEndpoint,\r\n azureADTokenProvider,\r\n deployment: agent.model?.id,\r\n apiVersion: \"2025-04-01-preview\",\r\n }) as OpenAI;\r\n }\r\n\r\n throw new Error(\r\n \"Foundry executor requires a FoundryConnection (with endpoint) \" +\r\n \"or a ReferenceConnection (with a pre-registered client). \" +\r\n \"Set model.connection.kind to 'foundry' with an endpoint, \" +\r\n \"or register a client with registerConnection().\",\r\n );\r\n }\r\n}\r\n","/**\r\n * Foundry processor — identical to OpenAI processor.\r\n *\r\n * Foundry returns OpenAI-compatible responses via getOpenAIClient().\r\n *\r\n * @module\r\n */\r\n\r\nimport type { Prompty } from \"@prompty/core\";\r\nimport type { Processor } from \"@prompty/core\";\r\nimport { processResponse } from \"@prompty/openai\";\r\nimport { traceSpan } from \"@prompty/core\";\r\n\r\nexport class FoundryProcessor implements Processor {\r\n async process(agent: Prompty, response: unknown): Promise<unknown> {\r\n return traceSpan(\"FoundryProcessor\", async (emit) => {\r\n emit(\"signature\", \"prompty.foundry.processor.FoundryProcessor.invoke\");\r\n emit(\"inputs\", { data: response });\r\n const result = processResponse(agent, response);\r\n emit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n}\r\n","/**\r\n * Azure OpenAI executor — extends OpenAI executor with Azure-specific client.\r\n *\r\n * @module\r\n */\r\n\r\nimport OpenAI, { AzureOpenAI } from \"openai\";\r\nimport type { Prompty, Message } from \"@prompty/core\";\r\nimport { ApiKeyConnection, ReferenceConnection, PromptyStream } from \"@prompty/core\";\r\nimport { getConnection, traceSpan, sanitizeValue } from \"@prompty/core\";\r\nimport { OpenAIExecutor } from \"@prompty/openai\";\r\nimport { buildChatArgs, buildEmbeddingArgs, buildImageArgs, buildResponsesArgs } from \"@prompty/openai\";\r\n\r\nexport class AzureExecutor extends OpenAIExecutor {\r\n override async execute(agent: Prompty, messages: Message[]): Promise<unknown> {\r\n return traceSpan(\"AzureExecutor\", async (emit) => {\r\n emit(\"signature\", \"prompty.azure.executor.AzureExecutor.invoke\");\r\n emit(\"inputs\", { data: messages });\r\n\r\n const client = this.resolveClient(agent);\r\n const clientName = client.constructor?.name ?? \"AzureOpenAI\";\r\n\r\n // Trace what client we resolved and how\r\n await traceSpan(clientName, async (ctorEmit) => {\r\n ctorEmit(\"signature\", `${clientName}.ctor`);\r\n const conn = agent.model?.connection;\r\n if (conn instanceof ReferenceConnection) {\r\n ctorEmit(\"inputs\", { source: \"reference\", name: conn.name });\r\n } else {\r\n ctorEmit(\"inputs\", sanitizeValue(\"ctor\", this.clientKwargs(agent)));\r\n }\r\n ctorEmit(\"result\", clientName);\r\n });\r\n\r\n const apiType = agent.model?.apiType ?? \"chat\";\r\n const result = await this.dispatchApiCall(client, clientName, agent, messages, apiType);\r\n emit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n\r\n private async dispatchApiCall(\r\n client: OpenAI,\r\n clientName: string,\r\n agent: Prompty,\r\n messages: Message[],\r\n apiType: string,\r\n ): Promise<unknown> {\r\n switch (apiType) {\r\n case \"chat\":\r\n case \"agent\": {\r\n const args = buildChatArgs(agent, messages);\r\n const isStreaming = !!args.stream;\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.chat.completions.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.chat.completions.create(\r\n args as unknown as Parameters<typeof client.chat.completions.create>[0],\r\n );\r\n if (isStreaming) {\r\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\r\n }\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"embedding\": {\r\n const args = buildEmbeddingArgs(agent, messages);\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.embeddings.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.embeddings.create(\r\n args as unknown as Parameters<typeof client.embeddings.create>[0],\r\n );\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"image\": {\r\n const args = buildImageArgs(agent, messages);\r\n return traceSpan(\"generate\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.images.generate`);\r\n callEmit(\"inputs\", sanitizeValue(\"generate\", args));\r\n const result = await client.images.generate(\r\n args as unknown as Parameters<typeof client.images.generate>[0],\r\n );\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n case \"responses\": {\r\n const args = buildResponsesArgs(agent, messages);\r\n const isStreaming = !!args.stream;\r\n return traceSpan(\"create\", async (callEmit) => {\r\n callEmit(\"signature\", `${clientName}.responses.create`);\r\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\r\n const result = await client.responses.create(\r\n args as unknown as Parameters<typeof client.responses.create>[0],\r\n );\r\n if (isStreaming) {\r\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\r\n }\r\n callEmit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n default:\r\n throw new Error(`Unsupported apiType: ${apiType}`);\r\n }\r\n }\r\n\r\n protected override resolveClient(agent: Prompty): OpenAI {\r\n const conn = agent.model?.connection;\r\n\r\n if (conn instanceof ReferenceConnection) {\r\n return getConnection(conn.name) as OpenAI;\r\n }\r\n\r\n const kwargs = this.clientKwargs(agent);\r\n return new AzureOpenAI(kwargs as ConstructorParameters<typeof AzureOpenAI>[0]);\r\n }\r\n\r\n protected override clientKwargs(agent: Prompty): Record<string, unknown> {\r\n const kwargs: Record<string, unknown> = {};\r\n const conn = agent.model?.connection;\r\n\r\n if (conn instanceof ApiKeyConnection) {\r\n if (conn.apiKey) kwargs.apiKey = conn.apiKey;\r\n if (conn.endpoint) kwargs.endpoint = conn.endpoint;\r\n }\r\n\r\n // Azure requires deployment = model id\r\n kwargs.deployment = agent.model?.id;\r\n\r\n return kwargs;\r\n }\r\n}\r\n","/**\r\n * Azure OpenAI processor — identical to OpenAI processor.\r\n *\r\n * Azure uses the same response format as OpenAI.\r\n *\r\n * @module\r\n */\r\n\r\nimport type { Prompty } from \"@prompty/core\";\r\nimport type { Processor } from \"@prompty/core\";\r\nimport { processResponse } from \"@prompty/openai\";\r\nimport { traceSpan } from \"@prompty/core\";\r\n\r\nexport class AzureProcessor implements Processor {\r\n async process(agent: Prompty, response: unknown): Promise<unknown> {\r\n return traceSpan(\"AzureProcessor\", async (emit) => {\r\n emit(\"signature\", \"prompty.azure.processor.AzureProcessor.invoke\");\r\n emit(\"inputs\", { data: response });\r\n const result = processResponse(agent, response);\r\n emit(\"result\", result);\r\n return result;\r\n });\r\n }\r\n}\r\n","/**\r\n * @prompty/foundry — Microsoft Foundry and Azure OpenAI provider for Prompty.\r\n *\r\n * Importing this package auto-registers:\r\n * - \"foundry\" executor and processor (primary)\r\n * - \"azure\" executor and processor (deprecated alias for backward compatibility)\r\n *\r\n * @module @prompty/foundry\r\n */\r\n\r\nexport { FoundryExecutor } from \"./executor.js\";\r\nexport { FoundryProcessor } from \"./processor.js\";\r\nexport { AzureExecutor } from \"./azure-executor.js\";\r\nexport { AzureProcessor } from \"./azure-processor.js\";\r\n\r\n// Auto-register on import\r\nimport { registerExecutor, registerProcessor } from \"@prompty/core\";\r\nimport { FoundryExecutor } from \"./executor.js\";\r\nimport { FoundryProcessor } from \"./processor.js\";\r\nimport { AzureExecutor } from \"./azure-executor.js\";\r\nimport { AzureProcessor } from \"./azure-processor.js\";\r\n\r\n// Primary registration\r\nregisterExecutor(\"foundry\", new FoundryExecutor());\r\nregisterProcessor(\"foundry\", new FoundryProcessor());\r\n\r\n// Deprecated backward-compat alias\r\nregisterExecutor(\"azure\", new AzureExecutor());\r\nregisterProcessor(\"azure\", new AzureProcessor());\r\n"],"mappings":"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","names":["AzureOpenAI","traceSpan","ReferenceConnection","PromptyStream","getConnection","traceSpan","sanitizeValue","OpenAIExecutor","buildChatArgs","buildEmbeddingArgs","buildImageArgs","buildResponsesArgs","processResponse","traceSpan"]}
|
|
1
|
+
{"version":3,"sources":["../src/executor.ts","../src/processor.ts","../src/azure-executor.ts","../src/azure-processor.ts","../src/index.ts"],"sourcesContent":["/**\n * Foundry executor — extends OpenAI executor with Azure AI Foundry client resolution.\n *\n * For Chat Completions: builds an AzureOpenAI client from the Foundry resource\n * endpoint (derived from the project endpoint) with DefaultAzureCredential.\n *\n * The Foundry project endpoint is:\n * https://<resource>.services.ai.azure.com/api/projects/<project>\n * The AzureOpenAI endpoint (for Chat Completions) is:\n * https://<resource>.services.ai.azure.com\n *\n * @module\n */\n\nimport type OpenAI from \"openai\";\nimport type { Prompty, Message } from \"@prompty/core\";\nimport { FoundryConnection, ReferenceConnection, PromptyStream } from \"@prompty/core\";\nimport { getConnection, traceSpan, sanitizeValue } from \"@prompty/core\";\nimport { OpenAIExecutor } from \"@prompty/openai\";\nimport { buildChatArgs, buildEmbeddingArgs, buildImageArgs, buildResponsesArgs } from \"@prompty/openai\";\n\n/**\n * Extract the resource base endpoint from a Foundry project endpoint.\n * e.g. \"https://foo.services.ai.azure.com/api/projects/bar\" → \"https://foo.services.ai.azure.com\"\n */\nfunction getResourceEndpoint(projectEndpoint: string): string {\n const url = new URL(projectEndpoint);\n return `${url.protocol}//${url.host}`;\n}\n\nexport class FoundryExecutor extends OpenAIExecutor {\n override async execute(agent: Prompty, messages: Message[]): Promise<unknown> {\n return traceSpan(\"FoundryExecutor\", async (emit) => {\n emit(\"signature\", \"prompty.foundry.executor.FoundryExecutor.invoke\");\n emit(\"inputs\", { data: messages });\n\n const client = this.resolveClient(agent);\n const clientName = client.constructor?.name ?? \"OpenAI\";\n\n // Trace what client we resolved and how\n await traceSpan(clientName, async (ctorEmit) => {\n ctorEmit(\"signature\", `${clientName}.ctor`);\n const conn = agent.model?.connection;\n if (conn instanceof ReferenceConnection) {\n ctorEmit(\"inputs\", { source: \"reference\", name: conn.name });\n } else if (conn instanceof FoundryConnection) {\n ctorEmit(\"inputs\", sanitizeValue(\"ctor\", {\n endpoint: conn.endpoint ? getResourceEndpoint(conn.endpoint) : undefined,\n deployment: agent.model?.id,\n apiVersion: \"2025-04-01-preview\",\n auth: \"DefaultAzureCredential\",\n }));\n }\n ctorEmit(\"result\", clientName);\n });\n\n const apiType = agent.model?.apiType ?? \"chat\";\n const result = await this.dispatchApiCall(client, clientName, agent, messages, apiType);\n emit(\"result\", result);\n return result;\n });\n }\n\n private async dispatchApiCall(\n client: OpenAI,\n clientName: string,\n agent: Prompty,\n messages: Message[],\n apiType: string,\n ): Promise<unknown> {\n switch (apiType) {\n case \"chat\": {\n const args = buildChatArgs(agent, messages);\n const isStreaming = !!args.stream;\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.chat.completions.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.chat.completions.create(\n args as unknown as Parameters<typeof client.chat.completions.create>[0],\n );\n if (isStreaming) {\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\n }\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"embedding\": {\n const args = buildEmbeddingArgs(agent, messages);\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.embeddings.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.embeddings.create(\n args as unknown as Parameters<typeof client.embeddings.create>[0],\n );\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"image\": {\n const args = buildImageArgs(agent, messages);\n return traceSpan(\"generate\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.images.generate`);\n callEmit(\"inputs\", sanitizeValue(\"generate\", args));\n const result = await client.images.generate(\n args as unknown as Parameters<typeof client.images.generate>[0],\n );\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"responses\": {\n const args = buildResponsesArgs(agent, messages);\n const isStreaming = !!args.stream;\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.responses.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.responses.create(\n args as unknown as Parameters<typeof client.responses.create>[0],\n );\n if (isStreaming) {\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\n }\n callEmit(\"result\", result);\n return result;\n });\n }\n default:\n throw new Error(`Unsupported apiType: ${apiType}`);\n }\n }\n\n protected override resolveClient(agent: Prompty): OpenAI {\n const conn = agent.model?.connection;\n\n // Pre-registered client by name\n if (conn instanceof ReferenceConnection) {\n return getConnection(conn.name) as OpenAI;\n }\n\n // Build an AzureOpenAI client from the FoundryConnection endpoint\n if (conn instanceof FoundryConnection) {\n if (!conn.endpoint) {\n throw new Error(\n \"FoundryConnection requires a non-empty 'endpoint'. \" +\n \"Set model.connection.endpoint to your Azure OpenAI resource URL.\",\n );\n }\n const { AzureOpenAI } = require(\"openai\");\n const { DefaultAzureCredential, getBearerTokenProvider } = require(\"@azure/identity\");\n\n const credential = new DefaultAzureCredential();\n const scope = \"https://cognitiveservices.azure.com/.default\";\n const azureADTokenProvider = getBearerTokenProvider(credential, scope);\n const resourceEndpoint = getResourceEndpoint(conn.endpoint);\n\n return new AzureOpenAI({\n endpoint: resourceEndpoint,\n azureADTokenProvider,\n deployment: agent.model?.id,\n apiVersion: \"2025-04-01-preview\",\n }) as OpenAI;\n }\n\n const kind = conn?.kind ?? \"unknown\";\n throw new Error(\n `Connection kind '${kind}' is not supported by the Foundry executor. ` +\n \"Use 'foundry' (with endpoint + DefaultAzureCredential) or \" +\n \"'reference' (with registerConnection()) for pre-configured clients.\",\n );\n }\n}\n","/**\n * Foundry processor — identical to OpenAI processor.\n *\n * Foundry returns OpenAI-compatible responses via getOpenAIClient().\n *\n * @module\n */\n\nimport type { Prompty } from \"@prompty/core\";\nimport type { Processor } from \"@prompty/core\";\nimport { processResponse } from \"@prompty/openai\";\nimport { traceSpan } from \"@prompty/core\";\n\nexport class FoundryProcessor implements Processor {\n async process(agent: Prompty, response: unknown): Promise<unknown> {\n return traceSpan(\"FoundryProcessor\", async (emit) => {\n emit(\"signature\", \"prompty.foundry.processor.FoundryProcessor.invoke\");\n emit(\"inputs\", { data: response });\n const result = processResponse(agent, response);\n emit(\"result\", result);\n return result;\n });\n }\n}\n","/**\n * Azure OpenAI executor — extends OpenAI executor with Azure-specific client.\n *\n * @module\n */\n\nimport OpenAI, { AzureOpenAI } from \"openai\";\nimport type { Prompty, Message } from \"@prompty/core\";\nimport { ApiKeyConnection, ReferenceConnection, PromptyStream } from \"@prompty/core\";\nimport { getConnection, traceSpan, sanitizeValue } from \"@prompty/core\";\nimport { OpenAIExecutor } from \"@prompty/openai\";\nimport { buildChatArgs, buildEmbeddingArgs, buildImageArgs, buildResponsesArgs } from \"@prompty/openai\";\n\nexport class AzureExecutor extends OpenAIExecutor {\n override async execute(agent: Prompty, messages: Message[]): Promise<unknown> {\n return traceSpan(\"AzureExecutor\", async (emit) => {\n emit(\"signature\", \"prompty.azure.executor.AzureExecutor.invoke\");\n emit(\"inputs\", { data: messages });\n\n const client = this.resolveClient(agent);\n const clientName = client.constructor?.name ?? \"AzureOpenAI\";\n\n // Trace what client we resolved and how\n await traceSpan(clientName, async (ctorEmit) => {\n ctorEmit(\"signature\", `${clientName}.ctor`);\n const conn = agent.model?.connection;\n if (conn instanceof ReferenceConnection) {\n ctorEmit(\"inputs\", { source: \"reference\", name: conn.name });\n } else {\n ctorEmit(\"inputs\", sanitizeValue(\"ctor\", this.clientKwargs(agent)));\n }\n ctorEmit(\"result\", clientName);\n });\n\n const apiType = agent.model?.apiType ?? \"chat\";\n const result = await this.dispatchApiCall(client, clientName, agent, messages, apiType);\n emit(\"result\", result);\n return result;\n });\n }\n\n private async dispatchApiCall(\n client: OpenAI,\n clientName: string,\n agent: Prompty,\n messages: Message[],\n apiType: string,\n ): Promise<unknown> {\n switch (apiType) {\n case \"chat\": {\n const args = buildChatArgs(agent, messages);\n const isStreaming = !!args.stream;\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.chat.completions.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.chat.completions.create(\n args as unknown as Parameters<typeof client.chat.completions.create>[0],\n );\n if (isStreaming) {\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\n }\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"embedding\": {\n const args = buildEmbeddingArgs(agent, messages);\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.embeddings.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.embeddings.create(\n args as unknown as Parameters<typeof client.embeddings.create>[0],\n );\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"image\": {\n const args = buildImageArgs(agent, messages);\n return traceSpan(\"generate\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.images.generate`);\n callEmit(\"inputs\", sanitizeValue(\"generate\", args));\n const result = await client.images.generate(\n args as unknown as Parameters<typeof client.images.generate>[0],\n );\n callEmit(\"result\", result);\n return result;\n });\n }\n case \"responses\": {\n const args = buildResponsesArgs(agent, messages);\n const isStreaming = !!args.stream;\n return traceSpan(\"create\", async (callEmit) => {\n callEmit(\"signature\", `${clientName}.responses.create`);\n callEmit(\"inputs\", sanitizeValue(\"create\", args));\n const result = await client.responses.create(\n args as unknown as Parameters<typeof client.responses.create>[0],\n );\n if (isStreaming) {\n return new PromptyStream(`${clientName}Executor`, result as unknown as AsyncIterable<unknown>);\n }\n callEmit(\"result\", result);\n return result;\n });\n }\n default:\n throw new Error(`Unsupported apiType: ${apiType}`);\n }\n }\n\n protected override resolveClient(agent: Prompty): OpenAI {\n const conn = agent.model?.connection;\n\n if (conn instanceof ReferenceConnection) {\n return getConnection(conn.name) as OpenAI;\n }\n\n const kwargs = this.clientKwargs(agent);\n return new AzureOpenAI(kwargs as ConstructorParameters<typeof AzureOpenAI>[0]);\n }\n\n protected override clientKwargs(agent: Prompty): Record<string, unknown> {\n const kwargs: Record<string, unknown> = {};\n const conn = agent.model?.connection;\n\n if (conn instanceof ApiKeyConnection) {\n if (conn.apiKey) kwargs.apiKey = conn.apiKey;\n if (conn.endpoint) kwargs.endpoint = conn.endpoint;\n } else if (conn) {\n throw new Error(\n `Connection kind '${conn.kind}' is not supported by the Azure executor. ` +\n `Use 'key' for API key auth or 'reference' with registerConnection() for pre-configured clients.`,\n );\n }\n\n // Azure requires deployment = model id\n kwargs.deployment = agent.model?.id;\n\n return kwargs;\n }\n}\n","/**\n * Azure OpenAI processor — identical to OpenAI processor.\n *\n * Azure uses the same response format as OpenAI.\n *\n * @module\n */\n\nimport type { Prompty } from \"@prompty/core\";\nimport type { Processor } from \"@prompty/core\";\nimport { processResponse } from \"@prompty/openai\";\nimport { traceSpan } from \"@prompty/core\";\n\nexport class AzureProcessor implements Processor {\n async process(agent: Prompty, response: unknown): Promise<unknown> {\n return traceSpan(\"AzureProcessor\", async (emit) => {\n emit(\"signature\", \"prompty.azure.processor.AzureProcessor.invoke\");\n emit(\"inputs\", { data: response });\n const result = processResponse(agent, response);\n emit(\"result\", result);\n return result;\n });\n }\n}\n","/**\n * @prompty/foundry — Microsoft Foundry and Azure OpenAI provider for Prompty.\n *\n * Importing this package auto-registers:\n * - \"foundry\" executor and processor (primary)\n * - \"azure\" executor and processor (deprecated alias for backward compatibility)\n *\n * @module @prompty/foundry\n */\n\nexport { FoundryExecutor } from \"./executor.js\";\nexport { FoundryProcessor } from \"./processor.js\";\nexport { AzureExecutor } from \"./azure-executor.js\";\nexport { AzureProcessor } from \"./azure-processor.js\";\n\n// Auto-register on import\nimport { registerExecutor, registerProcessor } from \"@prompty/core\";\nimport { FoundryExecutor } from \"./executor.js\";\nimport { FoundryProcessor } from \"./processor.js\";\nimport { AzureExecutor } from \"./azure-executor.js\";\nimport { AzureProcessor } from \"./azure-processor.js\";\n\n// Primary registration\nregisterExecutor(\"foundry\", new FoundryExecutor());\nregisterProcessor(\"foundry\", new FoundryProcessor());\n\n// Deprecated backward-compat alias\nregisterExecutor(\"azure\", new AzureExecutor());\nregisterProcessor(\"azure\", new AzureProcessor());\n"],"mappings":"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","names":["AzureOpenAI","traceSpan","ReferenceConnection","PromptyStream","getConnection","traceSpan","sanitizeValue","OpenAIExecutor","buildChatArgs","buildEmbeddingArgs","buildImageArgs","buildResponsesArgs","processResponse","traceSpan"]}
|
package/package.json
CHANGED
|
@@ -1,64 +1,65 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@prompty/foundry",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
4
|
-
"description": "Microsoft Foundry provider for Prompty — executor and processor for Azure AI Foundry",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.cjs",
|
|
7
|
-
"module": "./dist/index.js",
|
|
8
|
-
"types": "./dist/index.d.ts",
|
|
9
|
-
"exports": {
|
|
10
|
-
".": {
|
|
11
|
-
"types": "./dist/index.d.ts",
|
|
12
|
-
"import": "./dist/index.js",
|
|
13
|
-
"require": "./dist/index.cjs"
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
"files": [
|
|
17
|
-
"dist"
|
|
18
|
-
],
|
|
19
|
-
"scripts": {
|
|
20
|
-
"build": "tsup",
|
|
21
|
-
"dev": "tsup --watch",
|
|
22
|
-
"test": "vitest run --passWithNoTests",
|
|
23
|
-
"test:watch": "vitest",
|
|
24
|
-
"lint": "tsc --noEmit",
|
|
25
|
-
"clean": "rimraf dist"
|
|
26
|
-
},
|
|
27
|
-
"keywords": [
|
|
28
|
-
"prompty",
|
|
29
|
-
"azure",
|
|
30
|
-
"foundry",
|
|
31
|
-
"llm",
|
|
32
|
-
"ai"
|
|
33
|
-
],
|
|
34
|
-
"author": "Microsoft",
|
|
35
|
-
"license": "MIT",
|
|
36
|
-
"publishConfig": {
|
|
37
|
-
"access": "public"
|
|
38
|
-
},
|
|
39
|
-
"repository": {
|
|
40
|
-
"type": "git",
|
|
41
|
-
"url": "git+https://github.com/microsoft/prompty.git",
|
|
42
|
-
"directory": "runtime/typescript/packages/foundry"
|
|
43
|
-
},
|
|
44
|
-
"engines": {
|
|
45
|
-
"node": ">=18.0.0"
|
|
46
|
-
},
|
|
47
|
-
"peerDependencies": {
|
|
48
|
-
"@prompty/core": "^2.0.0-alpha.
|
|
49
|
-
"@prompty/openai": "^2.0.0-alpha.
|
|
50
|
-
},
|
|
51
|
-
"dependencies": {
|
|
52
|
-
"@azure/ai-projects": "^2.0.1",
|
|
53
|
-
"@azure/identity": "^4.13.1",
|
|
54
|
-
"openai": "^4.80.0"
|
|
55
|
-
},
|
|
56
|
-
"devDependencies": {
|
|
57
|
-
"@prompty/core": "^2.0.0-alpha.
|
|
58
|
-
"@prompty/openai": "^2.0.0-alpha.
|
|
59
|
-
"@types/node": "^20.11.0",
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
|
|
64
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@prompty/foundry",
|
|
3
|
+
"version": "2.0.0-alpha.4",
|
|
4
|
+
"description": "Microsoft Foundry provider for Prompty — executor and processor for Azure AI Foundry",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsup",
|
|
21
|
+
"dev": "tsup --watch",
|
|
22
|
+
"test": "vitest run --passWithNoTests",
|
|
23
|
+
"test:watch": "vitest",
|
|
24
|
+
"lint": "tsc --noEmit",
|
|
25
|
+
"clean": "rimraf dist"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"prompty",
|
|
29
|
+
"azure",
|
|
30
|
+
"foundry",
|
|
31
|
+
"llm",
|
|
32
|
+
"ai"
|
|
33
|
+
],
|
|
34
|
+
"author": "Microsoft",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "git+https://github.com/microsoft/prompty.git",
|
|
42
|
+
"directory": "runtime/typescript/packages/foundry"
|
|
43
|
+
},
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=18.0.0"
|
|
46
|
+
},
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"@prompty/core": "^2.0.0-alpha.4",
|
|
49
|
+
"@prompty/openai": "^2.0.0-alpha.4"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"@azure/ai-projects": "^2.0.1",
|
|
53
|
+
"@azure/identity": "^4.13.1",
|
|
54
|
+
"openai": "^4.80.0"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@prompty/core": "^2.0.0-alpha.4",
|
|
58
|
+
"@prompty/openai": "^2.0.0-alpha.4",
|
|
59
|
+
"@types/node": "^20.11.0",
|
|
60
|
+
"dotenv": "^16.4.0",
|
|
61
|
+
"tsup": "^8.4.0",
|
|
62
|
+
"typescript": "^5.7.0",
|
|
63
|
+
"vitest": "^3.0.0"
|
|
64
|
+
}
|
|
65
|
+
}
|