{"record":{"id":"d0587c34ea7e1137","repo":"can1357/oh-my-pi","slug":"azure-openai-base-url-is-required-set-azure-opena","errorCode":null,"errorMessage":"Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME, or configure model.baseUrl.","messagePattern":"Azure OpenAI base URL is required\\. Set AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME, or configure model\\.baseUrl\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/agent/src/compaction/compaction-v2-streaming.ts","lineNumber":164,"sourceCode":"\tif (normalizedBase.endsWith(\"/v1\")) return `${normalizedBase}/responses`;\n\treturn `${normalizedBase}/v1/responses`;\n}\n\nfunction resolveOpenAiCodexResponsesEndpoint(baseUrl: string | undefined): string {\n\tconst rawBase = baseUrl && baseUrl.trim().length > 0 ? baseUrl : CODEX_BASE_URL;\n\tconst normalizedBase = rawBase.replace(/\\/+$/, \"\");\n\tif (normalizedBase.endsWith(\"/codex/responses\")) return normalizedBase;\n\tif (normalizedBase.endsWith(\"/codex\")) return `${normalizedBase}/responses`;\n\treturn `${normalizedBase}/codex/responses`;\n}\n\nfunction resolveAzureOpenAiBaseUrl(model: Model): string {\n\tconst baseUrl = $env.AZURE_OPENAI_BASE_URL?.trim() || undefined;\n\tconst resourceName = $env.AZURE_OPENAI_RESOURCE_NAME;\n\tconst resolvedBaseUrl =\n\t\tbaseUrl ?? (resourceName ? `https://${resourceName}.openai.azure.com/openai/v1` : undefined) ?? model.baseUrl;\n\tif (!resolvedBaseUrl) {\n\t\tthrow new Error(\n\t\t\t\"Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME, or configure model.baseUrl.\",\n\t\t);\n\t}\n\treturn resolvedBaseUrl.replace(/\\/+$/, \"\");\n}\n\nfunction appendAzureApiVersion(endpoint: string): string {\n\tif (/[?&]api-version=/.test(endpoint)) return endpoint;\n\tconst separator = endpoint.includes(\"?\") ? \"&\" : \"?\";\n\treturn `${endpoint}${separator}api-version=${encodeURIComponent($env.AZURE_OPENAI_API_VERSION || DEFAULT_AZURE_API_VERSION)}`;\n}\n\nfunction resolveCompactionV2Model(model: Model): string {\n\tconst requestModel = model.remoteCompaction?.model ?? model.requestModelId ?? model.id;\n\tif (compactionV2Api(model) !== \"azure-openai-responses\") return requestModel;\n\tconst mappedDeployment = parseAzureDeploymentNameMap($env.AZURE_OPENAI_DEPLOYMENT_NAME_MAP).get(requestModel);\n\treturn mappedDeployment ?? requestModel;\n}","sourceCodeStart":146,"sourceCodeEnd":182,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/agent/src/compaction/compaction-v2-streaming.ts#L146-L182","documentation":"resolveAzureOpenAiBaseUrl cannot determine the Azure OpenAI endpoint for compaction. The base URL must come from AZURE_OPENAI_BASE_URL, from AZURE_OPENAI_RESOURCE_NAME (used to build https://<name>.openai.azure.com/openai/v1), or from the model's configured baseUrl. If all three are absent, compaction cannot know where to send requests and throws.","triggerScenarios":"Calling V2 compaction (or getCompactionV2Endpoint) for a model hosted on Azure OpenAI when neither AZURE_OPENAI_BASE_URL nor AZURE_OPENAI_RESOURCE_NAME is set in the environment and the Model object has no baseUrl.","commonSituations":"Azure deployment configured only via api-key + deployment name without endpoint env vars; env vars present in local shell but missing in CI/serverless runtime; model created programmatically without baseUrl; typo'd env var names.","solutions":["Set AZURE_OPENAI_BASE_URL to your Azure endpoint (e.g. https://my-res.openai.azure.com/openai/v1)","Alternatively set AZURE_OPENAI_RESOURCE_NAME to your Azure resource name so the URL is constructed","Or pass/patch model.baseUrl on the Model object when constructing the provider/model config","Verify the env vars are actually visible to the process ($env) — check CI secrets, .env loading, and container env"],"exampleFix":"// before\n\"AZURE_OPENAI_API_KEY\": \"...\"  // no base URL configured\n// after\n\"AZURE_OPENAI_BASE_URL\": \"https://my-resource.openai.azure.com/openai/v1\",\n\"AZURE_OPENAI_API_KEY\": \"...\"","handlingStrategy":"validation","validationCode":"if (\n  !process.env.AZURE_OPENAI_BASE_URL &&\n  !process.env.AZURE_OPENAI_RESOURCE_NAME &&\n  !model.baseUrl\n) {\n  throw new Error(\n    \"Azure compaction needs AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME or model.baseUrl\",\n  );\n}","typeGuard":"function hasAzureBaseUrl(model: Model): boolean {\n  return Boolean(\n    process.env.AZURE_OPENAI_BASE_URL?.trim() ||\n      process.env.AZURE_OPENAI_RESOURCE_NAME ||\n      model.baseUrl,\n  );\n}","tryCatchPattern":null,"preventionTips":["Set AZURE_OPENAI_BASE_URL (or RESOURCE_NAME) wherever the agent runs: local, CI, containers","Fail fast at startup with an env check for Azure deployments","Configure baseUrl on the Model itself when embedding in SDKs where env vars are unreliable"],"tags":["azure","configuration","env-var","base-url"],"backgroundTag":"missing-env-var","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}