Skip to content

Conversation

@koureasstavros
Copy link

@koureasstavros koureasstavros commented Nov 3, 2025

For Provider "Azure" there are two improvements:

Next Steps:

  • Additional operations like externalEdit need to be implemented as proposed into vscode.proposed.chatParticipantAdditions.d.ts into vscode ChatResponseStream

What fixes this PR provides:

This changes the format of settings needed in settings.json

  • Instructions has been provided, switched from full endpoint using path to attribute style setting, this is because responses api do not has the deploymentName and apiVersion into the url path.

From this azure setting:

"gpt-5": {
	"name": "GPT5",
 	"url": "https://<my-host-name>/openai/deployments/<deployment_name>/chat/completions?api-version=<api-version>",
	 "maxInputTokens": 272000,
	"maxOutputTokens": 128000,
	"toolCalling": true,
	"vision": true
}

To this azure setting:

"gpt-5": {
	"name": "GPT5",
	"url": "<my-host-name>",
	"deploymentName": "<deployment_name>",
	"deploymentType": "<your-api-type>",
	"apiVersion": "<api-version>",
	"maxInputTokens": 272000,
	"maxOutputTokens": 128000,
	"toolCalling": true,
	"temperature": <your-temperature>,
	"thinking: true,
	"vision": true
}

Here are some more information about implementation:

  1. name is the display name in your VS Code GitHub Copilot Chat
  2. deploymentName is the actual deployment name in Azure (if not provided it will fallback to modelId)
  3. deploymentType is the way to switch betweem previous completions api and the newer responses api
  4. temperature is now configurable for your convinient but also mandatory to change for some models

Copilot AI review requested due to automatic review settings November 3, 2025 11:02
@koureasstavros
Copy link
Author

@koureasstavros please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.

@microsoft-github-policy-service agree [company="{your company}"]

Options:

  • (default - no company specified) I have sole ownership of intellectual property rights to my Submissions and I am not making Submissions in the course of work for my employer.
@microsoft-github-policy-service agree
  • (when company given) I am making Submissions in the course of work for my employer (or my employer has intellectual property rights in my Submissions by contract or applicable law). I have permission from my employer to make Submissions and enter into this Agreement on behalf of my employer. By signing below, the defined term “You” includes me and my employer.
@microsoft-github-policy-service agree company="Microsoft"

Contributor License Agreement

@microsoft-github-policy-service agree

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (2)

src/extension/byok/vscode-node/azureProvider.ts:1

  • Temperature assignment on line 301 occurs after delete body.temperature on line 295. If a thinking model has a temperature value already set in the body, it will be deleted and then potentially re-added if this._temperature is defined. The condition on line 300 should prevent this, but the logic is confusing. Consider moving the temperature application before the thinking model check or ensuring the temperature is only set when not a thinking model to avoid the delete-then-potentially-add pattern.
/*---------------------------------------------------------------------------------------------

src/extension/byok/vscode-node/azureProvider.ts:1

  • The no-op function is unnecessarily wrapped in parentheses and uses 'any' type assertion. This should be simplified to return (() => {}) as any; or better yet, use a more specific type assertion based on the return type of ChatResponseStream[K].
/*---------------------------------------------------------------------------------------------

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (1)

package.json:3170

  • The customOAIModels schema is missing the temperature property definition. While the TypeScript types in configurationService.ts (line 815) include temperature?: number, the JSON schema lacks this field, which means VS Code won't provide autocomplete or validation for this property. Add a temperature property with type number, description, and min/max constraints (0-2) similar to the azureModels schema.
							},
							"required": [
								"name",
								"url",
								"toolCalling",
								"vision",
								"maxInputTokens",
								"maxOutputTokens",
								"requiresAPIKey"
							],
							"additionalProperties": false

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

package.json:3159

  • The temperature field is missing from the customOAIModels schema in package.json, but it's present in the azureModels schema and implemented throughout the codebase (lines 814-815 in configurationService.ts). This inconsistency means the temperature feature won't have JSON schema validation or autocomplete for customOAIModels. Add the temperature field to the customOAIModels schema after line 3152 with the same definition as in azureModels (type: number, minimum: 0, maximum: 2, with appropriate description).
								"requestHeaders": {
									"type": "object",
									"description": "Additional HTTP headers to include with requests to this model. These reserved headers are not allowed and ignored if present: forbidden request headers (https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_request_header), forwarding headers ('forwarded', 'x-forwarded-for', 'x-forwarded-host', 'x-forwarded-proto'), and others ('api-key', 'authorization', 'content-type', 'openai-intent', 'x-github-api-version', 'x-initiator', 'x-interaction-id', 'x-interaction-type', 'x-onbehalf-extension-id', 'x-request-id', 'x-vscode-user-agent-library-version'). Pattern-based forbidden headers ('proxy-*', 'sec-*', 'x-http-method*' with forbidden methods) are also blocked.",
									"additionalProperties": {
										"type": "string"
									}
								}

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.

@koureasstavros
Copy link
Author

@bryanchen-d, I have completed with the changes to support these two additions.
Let me know if something else is needed in order to proceed with tests, etc...

@roblourens roblourens assigned lramos15 and unassigned bryanchen-d Nov 4, 2025
@lramos15 lramos15 assigned eleanorjboyd and unassigned lramos15 Nov 4, 2025
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 5 comments.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 9 comments.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

package.json:3087

  • Missing property in schema: The requiresAPIKey property is missing from the azureModels schema, but it's present in the TypeScript AzureModelConfig interface (line 33 in azureProvider.ts) and in the documentation (line 32 of azure-provider-settings.instructions.md). This property should be added to the schema to provide IntelliSense support for users configuring Azure models. Add it after the vision property:
"requiresAPIKey": {
  "type": "boolean",
  "description": "Whether the model requires an API key for authentication",
  "default": true
}
								"requestHeaders": {
									"type": "object",
									"description": "Additional HTTP headers to include with requests to this model. These reserved headers are not allowed and ignored if present: forbidden request headers (https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_request_header), forwarding headers ('forwarded', 'x-forwarded-for', 'x-forwarded-host', 'x-forwarded-proto'), and others ('api-key', 'authorization', 'content-type', 'openai-intent', 'x-github-api-version', 'x-initiator', 'x-interaction-id', 'x-interaction-type', 'x-onbehalf-extension-id', 'x-request-id', 'x-vscode-user-agent-library-version'). Pattern-based forbidden headers ('proxy-*', 'sec-*', 'x-http-method*' with forbidden methods) are also blocked.",
									"additionalProperties": {
										"type": "string"
									}
								}

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.

@koureasstavros
Copy link
Author

@eleanorjboyd I had to correct a few things based on Copilot suggestions, as it seems that AzureProvider, CustomOpenAIProvider and OpenAIProvider are dependent in this implementation.

@koureasstavros
Copy link
Author

@lramos15 just checking in — I’d love feedback on this PR whenever you get a chance. Thanks for all your work on the project!

@XhstormR
Copy link

XhstormR commented Dec 6, 2025

ping

@lramos15
Copy link
Member

lramos15 commented Dec 8, 2025

There's a lot of merge conflicts and the linked issues in the PR body are broken, can you fix those so we can provide a proper review

@koureasstavros
Copy link
Author

There's a lot of merge conflicts and the linked issues in the PR body are broken, can you fix those so we can provide a proper review

I updated the links into the description for issues that this PR closes, meanwhile I see that responses API is now supported but is mandatory that the deployment name be on the model id definition into the json settings. I also see that models that need different temperature is also supported but without the ability to define temperature.

@eleanorjboyd
Copy link
Member

@koureasstavros could you clarify what you mean here?

There's a lot of merge conflicts and the linked issues in the PR body are broken, can you fix those so we can provide a proper review

I updated the links into the description for issues that this PR closes, meanwhile I see that responses API is now supported but is mandatory that the deployment name be on the model id definition into the json settings. I also see that models that need different temperature is also supported but without the ability to define temperature.

@koureasstavros
Copy link
Author

koureasstavros commented Dec 10, 2025

@koureasstavros could you clarify what you mean here?

There's a lot of merge conflicts and the linked issues in the PR body are broken, can you fix those so we can provide a proper review

I updated the links into the description for issues that this PR closes, meanwhile I see that responses API is now supported but is mandatory that the deployment name be on the model id definition into the json settings. I also see that models that need different temperature is also supported but without the ability to define temperature.

@eleanorjboyd I mean the following:

  1. The issues that this PR closes, are listed below, which are related to temperature setting and responses api

  2. At this moment I see that VS Code extension GitHubCopilot supports models from Azure Foundry with responses api, although the settings.json should be like this:

"github.copilot.chat.azureModels": { "<deployment_name>": { "name": "<display_name>", "url": "https://<resource_name>.cognitiveservices.azure.com/openai/responses?api-version=<api_version>", "maxInputTokens": <max_input_tokens>, "maxOutputTokens": <max_output_tokens>, "toolCalling": true, "vision": true } }

So the deployment_name should be now declared as the key of this dictionary when you use responses api because the deployment_name is not part of url as it is in completions api. See here the settings.json example for completions api:

"github.copilot.chat.azureModels": { "<does_not_matter_what_is_here>": { "name": "<display_name>", "url": "https://<resource_name>.cognitiveservices.azure.com/openai/deployments/<deployment_name>/chat/completions?api-version=<api_version>", "maxInputTokens": <max_input_tokens>, "maxOutputTokens": <max_output_tokens>, "toolCalling": true, "vision": true } }

  1. In addition, I see now that also models like GPT5-Mini, GPT-5 are working now only with responses api, they are still failing when using completions api because of an error related to temperature. Models like these does not support temperature other than 1.0. Now even they are working with responses api there is no setting to declare temperature in settings.

So at the end, I am not sure if this PR is needed 100% as responses api works now but with this trick, models with completion / temperature demand does not work and we are unable to configure custom temperature setting in settings.json

LAST UPDATE 2025-12-12

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants