@pi-stef/azure-foundry

Azure Foundry and Azure OpenAI deployments as native Pi providers — config-driven, JSONC support, validation

Packages

Package details

extension

Install @pi-stef/azure-foundry from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@pi-stef/azure-foundry
Package
@pi-stef/azure-foundry
Version
0.1.3
Published
Jun 20, 2026
Downloads
281/mo · 281/wk
Author
sfiorini
License
MIT
Types
extension
Size
37.4 KB
Dependencies
6 dependencies · 2 peers
Pi manifest JSON
{
  "extensions": [
    "./extensions"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

@pi-stef/azure-foundry

Azure Foundry and Azure OpenAI deployments as native Pi providers — config-driven, JSONC support, validation.

Overview

This package registers Azure Foundry and Azure OpenAI deployments as native Pi providers from a JSONC configuration file. Each deployment becomes a provider whose model IDs are selected as <deployment-id>/<model-id>.

Key features:

  • Config-driven setup with JSONC support
  • Two API modes: openai-completions and azure-openai-responses
  • Custom headers support
  • Multiple deployments per configuration
  • Built-in validation and verification

Install

pi install npm:@pi-stef/azure-foundry

Start Pi once after installing. On first load, the extension creates:

~/.pi/azure-foundry/config.json
~/.pi/azure-foundry/config.schema.json

Configuration

Edit config.json, uncomment or add a deployment, and export the bearer-token env var named by apiKeyEnv.

export AZURE_API_KEY=...

Azure Foundry (openai-completions)

For Azure Foundry, use the modern OpenAI-compatible v1 endpoint:

{
  "id": "azure-foundry",
  "name": "Azure Foundry East US",
  "baseUrl": "https://<resource>.services.ai.azure.com/openai/v1/",
  "apiKeyEnv": "AZURE_API_KEY",
  "api": "openai-completions",
  "models": [
    {
      "id": "Kimi-K2.6",
      "name": "Kimi K2.6",
      "reasoning": false,
      "input": ["text"],
      "contextWindow": 128000,
      "maxTokens": 2048,
      "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
    }
  ]
}

Azure OpenAI (azure-openai-responses)

Classic Azure OpenAI via azure-openai-responses:

{
  "id": "aoai-eastus",
  "name": "Azure OpenAI East US",
  "baseUrl": "https://my-aoai.openai.azure.com",
  "apiKeyEnv": "AZURE_OPENAI_API_KEY",
  "api": "azure-openai-responses",
  "models": [
    {
      "id": "o4-mini",
      "name": "o4-mini",
      "reasoning": true,
      "input": ["text"],
      "contextWindow": 200000,
      "maxTokens": 16000,
      "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
    }
  ]
}

For azure-openai-responses, Pi normalizes the URL to <host>/openai/v1 and reads the API version from AZURE_OPENAI_API_VERSION, defaulting to v1. The host must end with .openai.azure.com or .cognitiveservices.azure.com.

Config Reference

Top-level shape:

{
  "$schema": "./config.schema.json",
  "deployments": []
}

Deployment fields:

Field Required Notes
id Yes Provider id. Lowercase letters, numbers, and hyphens.
name Yes Display name.
baseUrl Yes https:// endpoint. Rules depend on api.
apiKeyEnv Yes Env-var name containing the bearer token. The secret is not stored in config.
api Yes openai-completions or azure-openai-responses.
authHeader No Defaults to true. Set false only if custom headers carry auth.
headers No Map of header name to env-var name. Values must look like env-var names.
models Yes One or more model entries.

Multiple Deployments

{
  "deployments": [
    { "id": "foundry-east", "name": "Foundry East", "baseUrl": "https://east.services.ai.azure.com/openai/v1/", "apiKeyEnv": "AZURE_EAST_KEY", "api": "openai-completions", "models": [] },
    { "id": "foundry-west", "name": "Foundry West", "baseUrl": "https://west.services.ai.azure.com/openai/v1/", "apiKeyEnv": "AZURE_WEST_KEY", "api": "openai-completions", "models": [] },
    { "id": "aoai-eastus", "name": "AOAI East US", "baseUrl": "https://my-aoai.openai.azure.com", "apiKeyEnv": "AZURE_OPENAI_API_KEY", "api": "azure-openai-responses", "models": [] }
  ]
}

Custom Headers

"headers": {
  "api-key": "AZURE_HEADER_KEY",
  "x-ms-useragent": "AZURE_USER_AGENT"
}

Header values are env-var names. Pi resolves them at request time. If an env var is missing, Pi sends the literal configured string as a fallback, so keep config values as env-var names rather than secrets.

Verification

Run the package verifier after exporting the configured API key:

pnpm -F @pi-stef/azure-foundry verify

Use PI_AZURE_FOUNDRY_CONFIG=/path/to/config.json to verify a test config without touching the default file.

Common outputs:

Output Fix
200 The deployment is reachable.
401 Check the env var named by apiKeyEnv.
404 Check the model deployment id and base URL.
timeout after 10s Check network access, proxy, and endpoint host.

Environment Variables

Variable Purpose
AZURE_API_KEY Example bearer token env var for Azure Foundry deployments when apiKeyEnv is set to AZURE_API_KEY.
PI_AZURE_FOUNDRY_CONFIG Override config path for tests or alternate profiles.
PI_AZURE_FOUNDRY_DEBUG Set to 1 for debug logging.
AZURE_OPENAI_API_VERSION Optional Pi-side version for azure-openai-responses; defaults to v1.

Troubleshooting

Authentication Fails

Check the env var named by apiKeyEnv is exported and contains the correct bearer token.

Model Not Found

Check the model deployment id and base URL. For azure-openai-responses, ensure the host ends with .openai.azure.com or .cognitiveservices.azure.com.

Timeout

Check network access, proxy, and endpoint host. Use PI_AZURE_FOUNDRY_DEBUG=1 for detailed logging.

Remove

pi remove @pi-stef/azure-foundry

Update

pi update @pi-stef/azure-foundry