@prompty/foundry 2.0.0-alpha.1 → 2.0.0-alpha.3

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) => {
@@ -198,8 +197,7 @@ var AzureExecutor = class extends import_openai5.OpenAIExecutor {
198
197
  }
199
198
  async dispatchApiCall(client, clientName, agent, messages, apiType) {
200
199
  switch (apiType) {
201
- case "chat":
202
- case "agent": {
200
+ case "chat": {
203
201
  const args = (0, import_openai6.buildChatArgs)(agent, messages);
204
202
  const isStreaming = !!args.stream;
205
203
  return (0, import_core5.traceSpan)("create", async (callEmit) => {
@@ -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 && 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"]}
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) => {
@@ -176,8 +175,7 @@ var AzureExecutor = class extends OpenAIExecutor2 {
176
175
  }
177
176
  async dispatchApiCall(client, clientName, agent, messages, apiType) {
178
177
  switch (apiType) {
179
- case "chat":
180
- case "agent": {
178
+ case "chat": {
181
179
  const args = buildChatArgs2(agent, messages);
182
180
  const isStreaming = !!args.stream;
183
181
  return traceSpan3("create", async (callEmit) => {
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 && 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"]}
package/package.json CHANGED
@@ -1,64 +1,64 @@
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.3",
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.3",
49
+ "@prompty/openai": "^2.0.0-alpha.3"
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.3",
58
+ "@prompty/openai": "^2.0.0-alpha.3",
59
+ "@types/node": "^20.11.0",
60
+ "tsup": "^8.4.0",
61
+ "typescript": "^5.7.0",
62
+ "vitest": "^3.0.0"
63
+ }
64
+ }