@prompty/foundry 2.0.0-alpha.3 → 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/dist/index.cjs CHANGED
@@ -131,7 +131,12 @@ var FoundryExecutor = class extends import_openai.OpenAIExecutor {
131
131
  if (conn instanceof import_core.ReferenceConnection) {
132
132
  return (0, import_core2.getConnection)(conn.name);
133
133
  }
134
- 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
+ }
135
140
  const { AzureOpenAI: AzureOpenAI2 } = require("openai");
136
141
  const { DefaultAzureCredential, getBearerTokenProvider } = require("@azure/identity");
137
142
  const credential = new DefaultAzureCredential();
@@ -145,8 +150,9 @@ var FoundryExecutor = class extends import_openai.OpenAIExecutor {
145
150
  apiVersion: "2025-04-01-preview"
146
151
  });
147
152
  }
153
+ const kind = conn?.kind ?? "unknown";
148
154
  throw new Error(
149
- "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.`
150
156
  );
151
157
  }
152
158
  };
@@ -271,6 +277,10 @@ var AzureExecutor = class extends import_openai5.OpenAIExecutor {
271
277
  if (conn instanceof import_core4.ApiKeyConnection) {
272
278
  if (conn.apiKey) kwargs.apiKey = conn.apiKey;
273
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
+ );
274
284
  }
275
285
  kwargs.deployment = agent.model?.id;
276
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":["/**\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 && conn.endpoint) {\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 throw new Error(\n \"Foundry executor requires a FoundryConnection (with endpoint) \" +\n \"or a ReferenceConnection (with a pre-registered client). \" +\n \"Set model.connection.kind to 'foundry' with an endpoint, \" +\n \"or register a client with registerConnection().\",\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 }\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"]}
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
@@ -109,7 +109,12 @@ var FoundryExecutor = class extends OpenAIExecutor {
109
109
  if (conn instanceof ReferenceConnection) {
110
110
  return getConnection(conn.name);
111
111
  }
112
- 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
+ }
113
118
  const { AzureOpenAI: AzureOpenAI2 } = __require("openai");
114
119
  const { DefaultAzureCredential, getBearerTokenProvider } = __require("@azure/identity");
115
120
  const credential = new DefaultAzureCredential();
@@ -123,8 +128,9 @@ var FoundryExecutor = class extends OpenAIExecutor {
123
128
  apiVersion: "2025-04-01-preview"
124
129
  });
125
130
  }
131
+ const kind = conn?.kind ?? "unknown";
126
132
  throw new Error(
127
- "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.`
128
134
  );
129
135
  }
130
136
  };
@@ -249,6 +255,10 @@ var AzureExecutor = class extends OpenAIExecutor2 {
249
255
  if (conn instanceof ApiKeyConnection) {
250
256
  if (conn.apiKey) kwargs.apiKey = conn.apiKey;
251
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
+ );
252
262
  }
253
263
  kwargs.deployment = agent.model?.id;
254
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":["/**\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 && conn.endpoint) {\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 throw new Error(\n \"Foundry executor requires a FoundryConnection (with endpoint) \" +\n \"or a ReferenceConnection (with a pre-registered client). \" +\n \"Set model.connection.kind to 'foundry' with an endpoint, \" +\n \"or register a client with registerConnection().\",\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 }\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"]}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@prompty/foundry",
3
- "version": "2.0.0-alpha.3",
3
+ "version": "2.0.0-alpha.4",
4
4
  "description": "Microsoft Foundry provider for Prompty — executor and processor for Azure AI Foundry",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -45,8 +45,8 @@
45
45
  "node": ">=18.0.0"
46
46
  },
47
47
  "peerDependencies": {
48
- "@prompty/core": "^2.0.0-alpha.3",
49
- "@prompty/openai": "^2.0.0-alpha.3"
48
+ "@prompty/core": "^2.0.0-alpha.4",
49
+ "@prompty/openai": "^2.0.0-alpha.4"
50
50
  },
51
51
  "dependencies": {
52
52
  "@azure/ai-projects": "^2.0.1",
@@ -54,9 +54,10 @@
54
54
  "openai": "^4.80.0"
55
55
  },
56
56
  "devDependencies": {
57
- "@prompty/core": "^2.0.0-alpha.3",
58
- "@prompty/openai": "^2.0.0-alpha.3",
57
+ "@prompty/core": "^2.0.0-alpha.4",
58
+ "@prompty/openai": "^2.0.0-alpha.4",
59
59
  "@types/node": "^20.11.0",
60
+ "dotenv": "^16.4.0",
60
61
  "tsup": "^8.4.0",
61
62
  "typescript": "^5.7.0",
62
63
  "vitest": "^3.0.0"