@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 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 && conn.endpoint) {
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
- "Foundry executor requires a FoundryConnection (with endpoint) or a ReferenceConnection (with a pre-registered client). Set model.connection.kind to 'foundry' with an endpoint, or register a client with registerConnection()."
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;
@@ -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 && conn.endpoint) {
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
- "Foundry executor requires a FoundryConnection (with endpoint) or a ReferenceConnection (with a pre-registered client). Set model.connection.kind to 'foundry' with an endpoint, or register a client with registerConnection()."
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":";;;;;;;;AAgBA,SAAS,mBAAmB,qBAAqB,qBAAqB;AACtE,SAAS,eAAe,WAAW,qBAAqB;AACxD,SAAS,sBAAsB;AAC/B,SAAS,eAAe,oBAAoB,gBAAgB,0BAA0B;AAMtF,SAAS,oBAAoB,iBAAiC;AAC5D,QAAM,MAAM,IAAI,IAAI,eAAe;AACnC,SAAO,GAAG,IAAI,QAAQ,KAAK,IAAI,IAAI;AACrC;AAEO,IAAM,kBAAN,cAA8B,eAAe;AAAA,EAClD,MAAe,QAAQ,OAAgB,UAAuC;AAC5E,WAAO,UAAU,mBAAmB,OAAO,SAAS;AAClD,WAAK,aAAa,iDAAiD;AACnE,WAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAEjC,YAAM,SAAS,KAAK,cAAc,KAAK;AACvC,YAAM,aAAa,OAAO,aAAa,QAAQ;AAG/C,YAAM,UAAU,YAAY,OAAO,aAAa;AAC9C,iBAAS,aAAa,GAAG,UAAU,OAAO;AAC1C,cAAM,OAAO,MAAM,OAAO;AAC1B,YAAI,gBAAgB,qBAAqB;AACvC,mBAAS,UAAU,EAAE,QAAQ,aAAa,MAAM,KAAK,KAAK,CAAC;AAAA,QAC7D,WAAW,gBAAgB,mBAAmB;AAC5C,mBAAS,UAAU,cAAc,QAAQ;AAAA,YACvC,UAAU,KAAK,WAAW,oBAAoB,KAAK,QAAQ,IAAI;AAAA,YAC/D,YAAY,MAAM,OAAO;AAAA,YACzB,YAAY;AAAA,YACZ,MAAM;AAAA,UACR,CAAC,CAAC;AAAA,QACJ;AACA,iBAAS,UAAU,UAAU;AAAA,MAC/B,CAAC;AAED,YAAM,UAAU,MAAM,OAAO,WAAW;AACxC,YAAM,SAAS,MAAM,KAAK,gBAAgB,QAAQ,YAAY,OAAO,UAAU,OAAO;AACtF,WAAK,UAAU,MAAM;AACrB,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,gBACZ,QACA,YACA,OACA,UACA,SACkB;AAClB,YAAQ,SAAS;AAAA,MACf,KAAK,QAAQ;AACX,cAAM,OAAO,cAAc,OAAO,QAAQ;AAC1C,cAAM,cAAc,CAAC,CAAC,KAAK;AAC3B,eAAO,UAAU,UAAU,OAAO,aAAa;AAC7C,mBAAS,aAAa,GAAG,UAAU,0BAA0B;AAC7D,mBAAS,UAAU,cAAc,UAAU,IAAI,CAAC;AAChD,gBAAM,SAAS,MAAM,OAAO,KAAK,YAAY;AAAA,YAC3C;AAAA,UACF;AACA,cAAI,aAAa;AACf,mBAAO,IAAI,cAAc,GAAG,UAAU,YAAY,MAA2C;AAAA,UAC/F;AACA,mBAAS,UAAU,MAAM;AACzB,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,MACA,KAAK,aAAa;AAChB,cAAM,OAAO,mBAAmB,OAAO,QAAQ;AAC/C,eAAO,UAAU,UAAU,OAAO,aAAa;AAC7C,mBAAS,aAAa,GAAG,UAAU,oBAAoB;AACvD,mBAAS,UAAU,cAAc,UAAU,IAAI,CAAC;AAChD,gBAAM,SAAS,MAAM,OAAO,WAAW;AAAA,YACrC;AAAA,UACF;AACA,mBAAS,UAAU,MAAM;AACzB,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,OAAO,eAAe,OAAO,QAAQ;AAC3C,eAAO,UAAU,YAAY,OAAO,aAAa;AAC/C,mBAAS,aAAa,GAAG,UAAU,kBAAkB;AACrD,mBAAS,UAAU,cAAc,YAAY,IAAI,CAAC;AAClD,gBAAM,SAAS,MAAM,OAAO,OAAO;AAAA,YACjC;AAAA,UACF;AACA,mBAAS,UAAU,MAAM;AACzB,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,MACA,KAAK,aAAa;AAChB,cAAM,OAAO,mBAAmB,OAAO,QAAQ;AAC/C,cAAM,cAAc,CAAC,CAAC,KAAK;AAC3B,eAAO,UAAU,UAAU,OAAO,aAAa;AAC7C,mBAAS,aAAa,GAAG,UAAU,mBAAmB;AACtD,mBAAS,UAAU,cAAc,UAAU,IAAI,CAAC;AAChD,gBAAM,SAAS,MAAM,OAAO,UAAU;AAAA,YACpC;AAAA,UACF;AACA,cAAI,aAAa;AACf,mBAAO,IAAI,cAAc,GAAG,UAAU,YAAY,MAA2C;AAAA,UAC/F;AACA,mBAAS,UAAU,MAAM;AACzB,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,MACA;AACE,cAAM,IAAI,MAAM,wBAAwB,OAAO,EAAE;AAAA,IACrD;AAAA,EACF;AAAA,EAEmB,cAAc,OAAwB;AACvD,UAAM,OAAO,MAAM,OAAO;AAG1B,QAAI,gBAAgB,qBAAqB;AACvC,aAAO,cAAc,KAAK,IAAI;AAAA,IAChC;AAGA,QAAI,gBAAgB,mBAAmB;AACrC,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,QAEF;AAAA,MACF;AACA,YAAM,EAAE,aAAAA,aAAY,IAAI,UAAQ,QAAQ;AACxC,YAAM,EAAE,wBAAwB,uBAAuB,IAAI,UAAQ,iBAAiB;AAEpF,YAAM,aAAa,IAAI,uBAAuB;AAC9C,YAAM,QAAQ;AACd,YAAM,uBAAuB,uBAAuB,YAAY,KAAK;AACrE,YAAM,mBAAmB,oBAAoB,KAAK,QAAQ;AAE1D,aAAO,IAAIA,aAAY;AAAA,QACrB,UAAU;AAAA,QACV;AAAA,QACA,YAAY,MAAM,OAAO;AAAA,QACzB,YAAY;AAAA,MACd,CAAC;AAAA,IACH;AAEA,UAAM,OAAO,MAAM,QAAQ;AAC3B,UAAM,IAAI;AAAA,MACR,oBAAoB,IAAI;AAAA,IAG1B;AAAA,EACF;AACF;;;ACjKA,SAAS,uBAAuB;AAChC,SAAS,aAAAC,kBAAiB;AAEnB,IAAM,mBAAN,MAA4C;AAAA,EACjD,MAAM,QAAQ,OAAgB,UAAqC;AACjE,WAAOA,WAAU,oBAAoB,OAAO,SAAS;AACnD,WAAK,aAAa,mDAAmD;AACrE,WAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AACjC,YAAM,SAAS,gBAAgB,OAAO,QAAQ;AAC9C,WAAK,UAAU,MAAM;AACrB,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;;;ACjBA,SAAiB,mBAAmB;AAEpC,SAAS,kBAAkB,uBAAAC,sBAAqB,iBAAAC,sBAAqB;AACrE,SAAS,iBAAAC,gBAAe,aAAAC,YAAW,iBAAAC,sBAAqB;AACxD,SAAS,kBAAAC,uBAAsB;AAC/B,SAAS,iBAAAC,gBAAe,sBAAAC,qBAAoB,kBAAAC,iBAAgB,sBAAAC,2BAA0B;AAE/E,IAAM,gBAAN,cAA4BJ,gBAAe;AAAA,EAChD,MAAe,QAAQ,OAAgB,UAAuC;AAC5E,WAAOF,WAAU,iBAAiB,OAAO,SAAS;AAChD,WAAK,aAAa,6CAA6C;AAC/D,WAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAEjC,YAAM,SAAS,KAAK,cAAc,KAAK;AACvC,YAAM,aAAa,OAAO,aAAa,QAAQ;AAG/C,YAAMA,WAAU,YAAY,OAAO,aAAa;AAC9C,iBAAS,aAAa,GAAG,UAAU,OAAO;AAC1C,cAAM,OAAO,MAAM,OAAO;AAC1B,YAAI,gBAAgBH,sBAAqB;AACvC,mBAAS,UAAU,EAAE,QAAQ,aAAa,MAAM,KAAK,KAAK,CAAC;AAAA,QAC7D,OAAO;AACL,mBAAS,UAAUI,eAAc,QAAQ,KAAK,aAAa,KAAK,CAAC,CAAC;AAAA,QACpE;AACA,iBAAS,UAAU,UAAU;AAAA,MAC/B,CAAC;AAED,YAAM,UAAU,MAAM,OAAO,WAAW;AACxC,YAAM,SAAS,MAAM,KAAK,gBAAgB,QAAQ,YAAY,OAAO,UAAU,OAAO;AACtF,WAAK,UAAU,MAAM;AACrB,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,gBACZ,QACA,YACA,OACA,UACA,SACkB;AAClB,YAAQ,SAAS;AAAA,MACf,KAAK,QAAQ;AACX,cAAM,OAAOE,eAAc,OAAO,QAAQ;AAC1C,cAAM,cAAc,CAAC,CAAC,KAAK;AAC3B,eAAOH,WAAU,UAAU,OAAO,aAAa;AAC7C,mBAAS,aAAa,GAAG,UAAU,0BAA0B;AAC7D,mBAAS,UAAUC,eAAc,UAAU,IAAI,CAAC;AAChD,gBAAM,SAAS,MAAM,OAAO,KAAK,YAAY;AAAA,YAC3C;AAAA,UACF;AACA,cAAI,aAAa;AACf,mBAAO,IAAIH,eAAc,GAAG,UAAU,YAAY,MAA2C;AAAA,UAC/F;AACA,mBAAS,UAAU,MAAM;AACzB,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,MACA,KAAK,aAAa;AAChB,cAAM,OAAOM,oBAAmB,OAAO,QAAQ;AAC/C,eAAOJ,WAAU,UAAU,OAAO,aAAa;AAC7C,mBAAS,aAAa,GAAG,UAAU,oBAAoB;AACvD,mBAAS,UAAUC,eAAc,UAAU,IAAI,CAAC;AAChD,gBAAM,SAAS,MAAM,OAAO,WAAW;AAAA,YACrC;AAAA,UACF;AACA,mBAAS,UAAU,MAAM;AACzB,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,OAAOI,gBAAe,OAAO,QAAQ;AAC3C,eAAOL,WAAU,YAAY,OAAO,aAAa;AAC/C,mBAAS,aAAa,GAAG,UAAU,kBAAkB;AACrD,mBAAS,UAAUC,eAAc,YAAY,IAAI,CAAC;AAClD,gBAAM,SAAS,MAAM,OAAO,OAAO;AAAA,YACjC;AAAA,UACF;AACA,mBAAS,UAAU,MAAM;AACzB,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,MACA,KAAK,aAAa;AAChB,cAAM,OAAOK,oBAAmB,OAAO,QAAQ;AAC/C,cAAM,cAAc,CAAC,CAAC,KAAK;AAC3B,eAAON,WAAU,UAAU,OAAO,aAAa;AAC7C,mBAAS,aAAa,GAAG,UAAU,mBAAmB;AACtD,mBAAS,UAAUC,eAAc,UAAU,IAAI,CAAC;AAChD,gBAAM,SAAS,MAAM,OAAO,UAAU;AAAA,YACpC;AAAA,UACF;AACA,cAAI,aAAa;AACf,mBAAO,IAAIH,eAAc,GAAG,UAAU,YAAY,MAA2C;AAAA,UAC/F;AACA,mBAAS,UAAU,MAAM;AACzB,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,MACA;AACE,cAAM,IAAI,MAAM,wBAAwB,OAAO,EAAE;AAAA,IACrD;AAAA,EACF;AAAA,EAEmB,cAAc,OAAwB;AACvD,UAAM,OAAO,MAAM,OAAO;AAE1B,QAAI,gBAAgBD,sBAAqB;AACvC,aAAOE,eAAc,KAAK,IAAI;AAAA,IAChC;AAEA,UAAM,SAAS,KAAK,aAAa,KAAK;AACtC,WAAO,IAAI,YAAY,MAAsD;AAAA,EAC/E;AAAA,EAEmB,aAAa,OAAyC;AACvE,UAAM,SAAkC,CAAC;AACzC,UAAM,OAAO,MAAM,OAAO;AAE1B,QAAI,gBAAgB,kBAAkB;AACpC,UAAI,KAAK,OAAQ,QAAO,SAAS,KAAK;AACtC,UAAI,KAAK,SAAU,QAAO,WAAW,KAAK;AAAA,IAC5C,WAAW,MAAM;AACf,YAAM,IAAI;AAAA,QACR,oBAAoB,KAAK,IAAI;AAAA,MAE/B;AAAA,IACF;AAGA,WAAO,aAAa,MAAM,OAAO;AAEjC,WAAO;AAAA,EACT;AACF;;;AClIA,SAAS,mBAAAQ,wBAAuB;AAChC,SAAS,aAAAC,kBAAiB;AAEnB,IAAM,iBAAN,MAA0C;AAAA,EAC/C,MAAM,QAAQ,OAAgB,UAAqC;AACjE,WAAOA,WAAU,kBAAkB,OAAO,SAAS;AACjD,WAAK,aAAa,+CAA+C;AACjE,WAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AACjC,YAAM,SAASD,iBAAgB,OAAO,QAAQ;AAC9C,WAAK,UAAU,MAAM;AACrB,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;;;ACPA,SAAS,kBAAkB,yBAAyB;AAOpD,iBAAiB,WAAW,IAAI,gBAAgB,CAAC;AACjD,kBAAkB,WAAW,IAAI,iBAAiB,CAAC;AAGnD,iBAAiB,SAAS,IAAI,cAAc,CAAC;AAC7C,kBAAkB,SAAS,IAAI,eAAe,CAAC;","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.1",
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.1",
49
- "@prompty/openai": "^2.0.0-alpha.1"
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.1",
58
- "@prompty/openai": "^2.0.0-alpha.1",
59
- "@types/node": "^20.11.0",
60
- "tsup": "^8.4.0",
61
- "typescript": "^5.7.0",
62
- "vitest": "^3.0.0"
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
+ }